diff --git a/.EDIT_WEBSITE.md b/.EDIT_WEBSITE.md index 6575a7c8..a44b3755 100644 --- a/.EDIT_WEBSITE.md +++ b/.EDIT_WEBSITE.md @@ -6,7 +6,7 @@ This document explains how [the greta website](https://greta-stats.org) is built *greta* uses a customised [pkgdown](http://pkgdown.r-lib.org/) setup to build the greta website at [https://greta-stats.org](). This setup does not create the [greta forum](https://forum.greta-stats.org), which uses [discourse](https://www.discourse.org/) running on [a cloud server](https://www.digitalocean.com/docs/one-clicks/discourse/). -Due to [a small bug in pkgdown](https://github.com/r-lib/pkgdown/pull/834), the build currently only works with fork of the main pkgdown repo. You can install that version with: +The build currently only works with fork of the main pkgdown repo. You can install that version with: ``` devtools::install_github("goldingn/pkgdown@rmd_home_template") @@ -80,7 +80,7 @@ If relevant, a level-4 header 'BUGS/JAGS code' and a (non-R) markdown code chunk ### Stan code If relevant, a level-4 header 'Stan code' and an R code chunk (with chunk argument `echo=FALSE`) with an R command to read in the equivalent model from the [Stan example models repository](https://github.com/stan-dev/example-models). The chunk name must that differ from the other example models and end in `_stan`. The code block should be surrounded by an html `div` command defining the Stan code formatting. -### +### Here's a template: ```` @@ -118,4 +118,3 @@ This should be saved as an .Rmd file with a meaningful name in the directory `in ```{r child='../inst/examples/my_example.Rmd'} ``` ```` - diff --git a/.Rbuildignore b/.Rbuildignore index 850d2e27..dcd86a33 100644 --- a/.Rbuildignore +++ b/.Rbuildignore @@ -5,14 +5,15 @@ ^.github$ ^.netlify$ ^.lintr$ -^.travis.yml$ ^README\.md$ ^CRAN-RELEASE$ ^CODE_OF_CONDUCT\.md$ ^\.EDIT_WEBSITE\.md$ -^LICENSE$ +^LICENSE\.md$ +LICENSE ^cran-comments\.md$ +^revdep$ ^logos$ ^paper$ @@ -36,3 +37,16 @@ ^man/figures/main_icon\.png$ ^man/figures/greta-header\.png$ ^man/figures/logo\.png$ +^\.github/workflows/R-CMD-check\.yaml$ +^\.github$ +^codecov\.yml$ + +^depends\.rds$ +^CRAN-SUBMISSION$ +^touchstone$ +^.lazytest$ +^\.lazytext$ +^revdep$ +^__autograph* +^testlog +^data-raw$ diff --git a/.github/.gitignore b/.github/.gitignore new file mode 100644 index 00000000..2d19fc76 --- /dev/null +++ b/.github/.gitignore @@ -0,0 +1 @@ +*.html diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index 421d1569..8c0053bd 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -22,7 +22,7 @@ bug, create an associated issue and illustrate the bug with a minimal ### Pull request process * We recommend that you create a Git branch for each pull request (PR). -* Look at the Travis and AppVeyor build status before and after making changes. +* Look at the Github actions build status before and after making changes. The `README` should contain badges for any continuous integration services used by the package. * New code should follow the tidyverse [style guide](http://style.tidyverse.org). diff --git a/.github/workflows/R-CMD-check.yaml b/.github/workflows/R-CMD-check.yaml new file mode 100644 index 00000000..c222df86 --- /dev/null +++ b/.github/workflows/R-CMD-check.yaml @@ -0,0 +1,117 @@ +on: + push: + branches: + - main + - master + pull_request: + branches: + - main + - master + schedule: + - cron: '1 23 * * Sun' + +name: R-CMD-check + +defaults: + run: + shell: Rscript {0} + +jobs: + R-CMD-check: + name: ${{ matrix.os }}, tf-${{ matrix.tf }}, R-${{ matrix.r}} + timeout-minutes: 30 + strategy: + fail-fast: false + matrix: + include: + - {os: 'ubuntu-latest' , tf: 'default', r: 'release'} + - {os: 'windows-latest', tf: 'default', r: 'release'} + - {os: 'macOS-latest' , tf: 'default', r: 'release'} + + runs-on: ${{ matrix.os }} + continue-on-error: ${{ matrix.tf == 'nightly' || contains(matrix.tf, 'rc') || matrix.r == 'devel' }} + env: + R_REMOTES_NO_ERRORS_FROM_WARNINGS: 'true' + R_COMPILE_AND_INSTALL_PACKAGES: 'never' + GITHUB_PAT: ${{ secrets.GITHUB_TOKEN }} + + steps: + + - uses: actions/checkout@v2 + + - uses: r-lib/actions/setup-r@v2 + id: setup-r + with: + r-version: ${{ matrix.r }} + Ncpus: '2L' + use-public-rspm: true + + - uses: r-lib/actions/setup-pandoc@v2 + + - name: Get Date + id: get-date + shell: bash + run: | + echo "::set-output name=year-week::$(date -u "+%Y-%U")" + echo "::set-output name=date::$(date -u "+%F")" + + - name: Restore R package cache + uses: actions/cache@v2 + id: r-package-cache + with: + path: ${{ env.R_LIBS_USER }} + key: ${{ matrix.os }}-${{ steps.setup-r.outputs.installed-r-version }}-${{ steps.get-date.outputs.year-week }}-1 + + - name: Install remotes + if: steps.r-package-cache.outputs.cache-hit != 'true' + run: install.packages("remotes") + + - name: Install system dependencies + if: runner.os == 'Linux' + shell: bash + run: | + . /etc/os-release + while read -r cmd + do + echo "$cmd" + sudo $cmd + done < <(Rscript -e "writeLines(remotes::system_requirements('$ID-$VERSION_ID'))") + + - name: Install package + deps + run: remotes::install_local(dependencies = TRUE, force = TRUE) + + - name: Install greta deps + run: | + library(greta) + greta::install_greta_deps(timeout = 50) + + - name: Situation Report on greta install + run: greta::greta_sitrep() + + - name: Install rcmdcheck + run: remotes::install_cran("rcmdcheck") + + - name: Check + run: rcmdcheck::rcmdcheck(args = '--no-manual', error_on = 'warning', check_dir = 'check') + + - name: Show testthat output + if: always() + shell: bash + run: find check -name 'testthat.Rout*' -exec cat '{}' \; || true + + - name: Don't use tar from old Rtools to store the cache + if: ${{ runner.os == 'Windows' && startsWith(steps.install-r.outputs.installed-r-version, '3') }} + shell: bash + run: echo "C:/Program Files/Git/usr/bin" >> $GITHUB_PATH + + - name: Check on single core machine + if: runner.os != 'Windows' + env: + R_PARALLELLY_AVAILABLE_CORES: 1 + run: rcmdcheck::rcmdcheck(args = c("--no-manual", "--as-cran", "--no-multiarch")) + + - name: Session info + run: | + options(width = 100) + pkgs <- installed.packages()[, "Package"] + sessioninfo::session_info(pkgs, include_base = TRUE) diff --git a/.github/workflows/pkgdown.yaml b/.github/workflows/pkgdown.yaml new file mode 100644 index 00000000..2468d333 --- /dev/null +++ b/.github/workflows/pkgdown.yaml @@ -0,0 +1,59 @@ +on: + push: + branches: + - main + - master + +name: pkgdown + +jobs: + pkgdown: + runs-on: ubuntu-18.04 + env: + RSPM: https://packagemanager.rstudio.com/cran/__linux__/bionic/latest + GITHUB_PAT: ${{ secrets.GITHUB_TOKEN }} + + steps: + - uses: actions/checkout@v2 + + - uses: r-lib/actions/setup-r@v2 + id: install-r + + - uses: r-lib/actions/setup-pandoc@v2 + + - name: Install pak and query dependencies + run: | + install.packages("pak", repos = "https://r-lib.github.io/p/pak/dev/") + saveRDS(pak::pkg_deps("local::.", dependencies = TRUE), ".github/r-depends.rds") + shell: Rscript {0} + + - name: Restore R package cache + uses: actions/cache@v2 + with: + path: | + ${{ env.R_LIBS_USER }}/* + !${{ env.R_LIBS_USER }}/pak + key: ubuntu-18.04-${{ steps.install-r.outputs.installed-r-version }}-1-${{ hashFiles('.github/r-depends.rds') }} + restore-keys: ubuntu-18.04-${{ steps.install-r.outputs.installed-r-version }}-1- + + - name: Install system dependencies + if: runner.os == 'Linux' + run: | + pak::local_system_requirements(execute = TRUE) + pak::pkg_system_requirements("pkgdown", execute = TRUE) + shell: Rscript {0} + + - name: Install dependencies + run: | + pak::local_install_dev_deps(upgrade = TRUE, dependencies = c("all", "Config/Needs/website")) + pak::pkg_install("goldingn/pkgdown@rmd_home_template") + shell: Rscript {0} + + - name: Install package + run: R CMD INSTALL . + + - name: Build and deploy pkgdown site + run: | + git config --local user.name "$GITHUB_ACTOR" + git config --local user.email "$GITHUB_ACTOR@users.noreply.github.com" + Rscript -e 'pkgdown::deploy_to_branch(new_process = FALSE)' diff --git a/.github/workflows/pr-commands.yaml b/.github/workflows/pr-commands.yaml new file mode 100644 index 00000000..71f335b3 --- /dev/null +++ b/.github/workflows/pr-commands.yaml @@ -0,0 +1,79 @@ +# Workflow derived from https://github.com/r-lib/actions/tree/v2/examples +# Need help debugging build failures? Start at https://github.com/r-lib/actions#where-to-find-help +on: + issue_comment: + types: [created] + +name: Commands + +jobs: + document: + if: ${{ github.event.issue.pull_request && (github.event.comment.author_association == 'MEMBER' || github.event.comment.author_association == 'OWNER') && startsWith(github.event.comment.body, '/document') }} + name: document + runs-on: ubuntu-latest + env: + GITHUB_PAT: ${{ secrets.GITHUB_TOKEN }} + steps: + - uses: actions/checkout@v3 + + - uses: r-lib/actions/pr-fetch@v2 + with: + repo-token: ${{ secrets.GITHUB_TOKEN }} + + - uses: r-lib/actions/setup-r@v2 + with: + use-public-rspm: true + + - uses: r-lib/actions/setup-r-dependencies@v2 + with: + extra-packages: any::roxygen2 + needs: pr-document + + - name: Document + run: roxygen2::roxygenise() + shell: Rscript {0} + + - name: commit + run: | + git config --local user.name "$GITHUB_ACTOR" + git config --local user.email "$GITHUB_ACTOR@users.noreply.github.com" + git add man/\* NAMESPACE + git commit -m 'Document' + + - uses: r-lib/actions/pr-push@v2 + with: + repo-token: ${{ secrets.GITHUB_TOKEN }} + + style: + if: ${{ github.event.issue.pull_request && (github.event.comment.author_association == 'MEMBER' || github.event.comment.author_association == 'OWNER') && startsWith(github.event.comment.body, '/style') }} + name: style + runs-on: ubuntu-latest + env: + GITHUB_PAT: ${{ secrets.GITHUB_TOKEN }} + steps: + - uses: actions/checkout@v3 + + - uses: r-lib/actions/pr-fetch@v2 + with: + repo-token: ${{ secrets.GITHUB_TOKEN }} + + - uses: r-lib/actions/setup-r@v2 + + - name: Install dependencies + run: install.packages("styler") + shell: Rscript {0} + + - name: Style + run: styler::style_pkg() + shell: Rscript {0} + + - name: commit + run: | + git config --local user.name "$GITHUB_ACTOR" + git config --local user.email "$GITHUB_ACTOR@users.noreply.github.com" + git add \*.R + git commit -m 'Style' + + - uses: r-lib/actions/pr-push@v2 + with: + repo-token: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/rhub.yaml b/.github/workflows/rhub.yaml new file mode 100644 index 00000000..74ec7b05 --- /dev/null +++ b/.github/workflows/rhub.yaml @@ -0,0 +1,95 @@ +# R-hub's generic GitHub Actions workflow file. It's canonical location is at +# https://github.com/r-hub/actions/blob/v1/workflows/rhub.yaml +# You can update this file to a newer version using the rhub2 package: +# +# rhub::rhub_setup() +# +# It is unlikely that you need to modify this file manually. + +name: R-hub +run-name: "${{ github.event.inputs.id }}: ${{ github.event.inputs.name || format('Manually run by {0}', github.triggering_actor) }}" + +on: + workflow_dispatch: + inputs: + config: + description: 'A comma separated list of R-hub platforms to use.' + type: string + default: 'linux,windows,macos' + name: + description: 'Run name. You can leave this empty now.' + type: string + id: + description: 'Unique ID. You can leave this empty now.' + type: string + +jobs: + + setup: + runs-on: ubuntu-latest + outputs: + containers: ${{ steps.rhub-setup.outputs.containers }} + platforms: ${{ steps.rhub-setup.outputs.platforms }} + + steps: + # NO NEED TO CHECKOUT HERE + - uses: r-hub/actions/setup@v1 + with: + config: ${{ github.event.inputs.config }} + id: rhub-setup + + linux-containers: + needs: setup + if: ${{ needs.setup.outputs.containers != '[]' }} + runs-on: ubuntu-latest + name: ${{ matrix.config.label }} + strategy: + fail-fast: false + matrix: + config: ${{ fromJson(needs.setup.outputs.containers) }} + container: + image: ${{ matrix.config.container }} + + steps: + - uses: r-hub/actions/checkout@v1 + - uses: r-hub/actions/platform-info@v1 + with: + token: ${{ secrets.RHUB_TOKEN }} + job-config: ${{ matrix.config.job-config }} + - uses: r-hub/actions/setup-deps@v1 + with: + token: ${{ secrets.RHUB_TOKEN }} + job-config: ${{ matrix.config.job-config }} + - uses: r-hub/actions/run-check@v1 + with: + token: ${{ secrets.RHUB_TOKEN }} + job-config: ${{ matrix.config.job-config }} + + other-platforms: + needs: setup + if: ${{ needs.setup.outputs.platforms != '[]' }} + runs-on: ${{ matrix.config.os }} + name: ${{ matrix.config.label }} + strategy: + fail-fast: false + matrix: + config: ${{ fromJson(needs.setup.outputs.platforms) }} + + steps: + - uses: r-hub/actions/checkout@v1 + - uses: r-hub/actions/setup-r@v1 + with: + job-config: ${{ matrix.config.job-config }} + token: ${{ secrets.RHUB_TOKEN }} + - uses: r-hub/actions/platform-info@v1 + with: + token: ${{ secrets.RHUB_TOKEN }} + job-config: ${{ matrix.config.job-config }} + - uses: r-hub/actions/setup-deps@v1 + with: + job-config: ${{ matrix.config.job-config }} + token: ${{ secrets.RHUB_TOKEN }} + - uses: r-hub/actions/run-check@v1 + with: + job-config: ${{ matrix.config.job-config }} + token: ${{ secrets.RHUB_TOKEN }} diff --git a/.github/workflows/test-coverage.yaml b/.github/workflows/test-coverage.yaml new file mode 100644 index 00000000..558fef72 --- /dev/null +++ b/.github/workflows/test-coverage.yaml @@ -0,0 +1,89 @@ +# Workflow derived from https://github.com/r-lib/actions/tree/v2/examples +# Need help debugging build failures? Start at https://github.com/r-lib/actions#where-to-find-help +on: + push: + branches: [main, master] + pull_request: + branches: [main, master] + +name: test-coverage.yaml + +permissions: read-all + +jobs: + test-coverage: + runs-on: ubuntu-latest + env: + GITHUB_PAT: ${{ secrets.GITHUB_TOKEN }} + + steps: + - uses: actions/checkout@v4 + + - uses: r-lib/actions/setup-r@v2 + with: + use-public-rspm: true + + - uses: r-lib/actions/setup-r-dependencies@v2 + with: + extra-packages: | + any::covr + any::xml2 + any::remotes + needs: coverage + + - name: Install system dependencies + if: runner.os == 'Linux' + shell: bash + run: | + . /etc/os-release + while read -r cmd + do + echo "$cmd" + sudo $cmd + done < <(Rscript -e "writeLines(remotes::system_requirements('$ID-$VERSION_ID'))") + + - name: Install package + deps + run: remotes::install_local(dependencies = TRUE, force = TRUE) + shell: Rscript {0} + + - name: Install greta deps + run: | + library(greta) + greta::install_greta_deps(timeout = 50) + shell: Rscript {0} + + - name: Situation Report on greta install + run: greta::greta_sitrep() + shell: Rscript {0} + + - name: Test coverage + run: | + cov <- covr::package_coverage( + quiet = FALSE, + clean = FALSE, + install_path = file.path(normalizePath(Sys.getenv("RUNNER_TEMP"), winslash = "/"), "package") + ) + covr::to_cobertura(cov) + shell: Rscript {0} + + - uses: codecov/codecov-action@v4 + with: + fail_ci_if_error: ${{ github.event_name != 'pull_request' && true || false }} + file: ./cobertura.xml + plugin: noop + disable_search: true + token: ${{ secrets.CODECOV_TOKEN }} + + - name: Show testthat output + if: always() + run: | + ## -------------------------------------------------------------------- + find '${{ runner.temp }}/package' -name 'testthat.Rout*' -exec cat '{}' \; || true + shell: bash + + - name: Upload test results + if: failure() + uses: actions/upload-artifact@v4 + with: + name: coverage-test-failures + path: ${{ runner.temp }}/package diff --git a/.github/workflows/touchstone-comment.yaml b/.github/workflows/touchstone-comment.yaml new file mode 100644 index 00000000..aa3d40de --- /dev/null +++ b/.github/workflows/touchstone-comment.yaml @@ -0,0 +1,21 @@ +name: Continuous Benchmarks (Comment) + +concurrency: + group: ${{ github.workflow }}-${{ github.head_ref }} + cancel-in-progress: true + +on: + workflow_run: + workflows: ["Continuous Benchmarks (Receive)"] + types: + - completed + +jobs: + upload: + runs-on: ubuntu-latest + if: > + ${{ github.event.workflow_run.event == 'pull_request' }} + steps: + - uses: lorenzwalthert/touchstone/actions/comment@v1 + with: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/touchstone-receive.yaml b/.github/workflows/touchstone-receive.yaml new file mode 100644 index 00000000..9e0f6f70 --- /dev/null +++ b/.github/workflows/touchstone-receive.yaml @@ -0,0 +1,54 @@ +name: Continuous Benchmarks (Receive) + +concurrency: + group: ${{ github.workflow }}-${{ github.head_ref }} + cancel-in-progress: true + +on: + #pull_request + issue_comment: + types: ["created", "edited"] + +jobs: + prepare: + runs-on: ubuntu-latest + if: github.event_name == 'pull_request' || ( + github.event.issue.pull_request && + startsWith(github.event.comment.body, '/benchmark') + ) + outputs: + config: ${{ steps.read_touchstone_config.outputs.config }} + steps: + - name: Checkout repo + uses: actions/checkout@v2 + with: + fetch-depth: 0 + + - id: read_touchstone_config + run: | + content=`cat ./touchstone/config.json` + # the following lines are only required for multi line json + content="${content//'%'/'%25'}" + content="${content//$'\n'/'%0A'}" + content="${content//$'\r'/'%0D'}" + # end of optional handling for multi line json + echo "::set-output name=config::$content" + build: + needs: prepare + runs-on: ${{ matrix.config.os }} + strategy: + fail-fast: false + matrix: + config: + - ${{ fromJson(needs.prepare.outputs.config) }} + env: + R_REMOTES_NO_ERRORS_FROM_WARNINGS: true + RSPM: ${{ matrix.config.rspm }} + GITHUB_PAT: ${{ secrets.GITHUB_TOKEN }} + steps: + - uses: lorenzwalthert/touchstone/actions/receive@manual-trigger + with: + cache-version: 1 + benchmarking_repo: ${{ matrix.config.benchmarking_repo }} + benchmarking_ref: ${{ matrix.config.benchmarking_ref }} + benchmarking_path: ${{ matrix.config.benchmarking_path }} diff --git a/.gitignore b/.gitignore index 04ebb1ce..e092f463 100644 --- a/.gitignore +++ b/.gitignore @@ -11,5 +11,13 @@ vignettes/**/*_files/ *.pdf docs/*.Rmd docs/examples -cran-comments.md paper/paper.html +inst/doc + +.lazytest + +revdep +revdep/checks.noindex +revdep/library.noindex + +testlog*.md diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index 791cb348..00000000 --- a/.travis.yml +++ /dev/null @@ -1,75 +0,0 @@ -sudo: required -language: r -warnings_are_errors: false -dist: trusty -env: - global: - - RELEASE_CANDIDATE=false - - LINTR_COMMENT_BOT=true - - secure: Q34zwlFiE+zShcPgTM99NILILBG2ViTaVo1ufRB/GFniGbEBIOwliqnozzWhhbuHEHG64qCNGbM4pMhyekC5YC9Rwp0QEt7sUk/tpV/17tkDiwjfEICAWsXK9rLrP3d3Pe8R/PYd4vyh8DiwgRl8woHCmmMJlIU9D/4XSOF6a325LX7U1ubJP5p5FrAdHt1ki4vEdUti4b7CdHZJHPjger+C+TNvvb75cIXR4RBbAKBHmpg/rTBASMRthJcKOGfym7QDsSrynQqMKR/BJsqzWvGzGYlUtGq04tHBbE9AVmcgRMqA5UuBcwmrKwQarx/yEX5YG8pVG2IgWKxowuxf+DGSwQ84m3D58fmiDcvdfNV5Spr9/lzXXMu3ae0WBbLOSIAc3FPJaEW4NK/HkeXrqbFnDy1dm0trLvG5AE0XisTcwFpoyx8+PnbAAa9fkJSOP+1n8472ym6OGRfngs1GoMrFaCpUaLug9eux2Ckc1sq2cLOo9wWzTsIoFDKCS5uBEvj1Vw1I845iO0fymj0IGTpLtjoNHGNMVyb+YQ+yTIIjW/8sgYhj+NaDqvjCwSgaHEJbWouCgoxsFhKaXsivosWZDebMM1PLsUaDyShv3DwOuFv5xD+0pX4AiuSDhhrVO7yThgiqD9KCa/30d1/CXU/GSTV5OlShJLz2XsLr7+E= - -r_binary_packages: -- abind -- coda -- codetools -- DBI -- foreign -- ggplot2 -- inline -- lattice -- MASS -- MCMCpack -- mgcv -- mvtnorm -- nlme -- Rcpp -- rpart -- stringr -- survival -r_packages: -- reticulate -- tensorflow -- R6 -- testthat -- covr -- DiagrammeR -- knitr -- rmarkdown -- rsvg -- bayesplot -- cramer -- extraDistr -- devtools -- tidyverse -- lintr -- colorspace -- digest -- XML -- plyr -- DiagrammeRsvg -cache: - packages: true - directories: - - "$HOME/.cache/pip" -addons: - apt: - sources: ubuntu-toolchain-r-test - packages: - - libmagick++-dev - - wget - - libatlas3gf-base - - libatlas-dev - - python-joblib - - python-dev - - libv8-dev -before_install: -- pip install --user numpy -- pip install --user scipy -- pip install --user 'tensorflow==1.14' -- pip install --user 'tensorflow-probability==0.7.0' -after_success: -- Rscript -e "covr::codecov()" -- Rscript -e "lintr::lint_package()" -email: - on_success: change - on_failure: change diff --git a/DESCRIPTION b/DESCRIPTION index 17a6a25d..f80001db 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,38 +1,92 @@ -Package: greta Type: Package +Package: greta Title: Simple and Scalable Statistical Modelling in R -Version: 0.3.1.9011 -Date: 2020-02-14 +Version: 0.5.0.9000 Authors@R: c( - person("Nick", "Golding", role = c("aut", "cre"), - email = "nick.golding.research@gmail.com", - comment = c(ORCID = "0000-0001-8916-5570")), - person("Simon", "Dirmeier", role = "ctb"), - person("Adam", "Fleischhacker", role = "ctb"), - person("Shirin", "Glander", role = "ctb"), - person("Martin", "Ingram", role = "ctb"), - person("Lee", "Hazel", role = "ctb"), - person("Lionel", "Hertzog", role = "ctb"), - person("Tiphaine", "Martin", role = "ctb"), - person("Matt", "Mulvahill", role = "ctb"), - person("Michael", "Quinn", role = "ctb"), - person("David", "Smith", role = "ctb"), - person("Paul", "Teetor", role = "ctb"), - person("Jian", "Yen", role = "ctb") + person("Nick", "Golding", , "nick.golding.research@gmail.com", role = "aut", + comment = c(ORCID = "0000-0001-8916-5570")), + person("Nicholas", "Tierney", , "nicholas.tierney@gmail.com", role = c("aut", "cre"), + comment = c(ORCID = "https://orcid.org/0000-0003-1460-8722")), + person("Simon", "Dirmeier", role = "ctb"), + person("Adam", "Fleischhacker", role = "ctb"), + person("Shirin", "Glander", role = "ctb"), + person("Martin", "Ingram", role = "ctb"), + person("Lee", "Hazel", role = "ctb"), + person("Lionel", "Hertzog", role = "ctb"), + person("Tiphaine", "Martin", role = "ctb"), + person("Matt", "Mulvahill", role = "ctb"), + person("Michael", "Quinn", role = "ctb"), + person("David", "Smith", role = "ctb"), + person("Paul", "Teetor", role = "ctb"), + person("Jian", "Yen", role = "ctb") ) -Description: Write statistical models in R and fit them by MCMC and optimisation on CPUs and GPUs, using Google 'TensorFlow'. - greta lets you write your own model like in BUGS, JAGS and Stan, except that you write models right in R, it scales well to massive datasets, and it’s easy to extend and build on. - See the website for more information, including tutorials, examples, package documentation, and the greta forum. +Description: Write statistical models in R and fit them by MCMC and + optimisation on CPUs and GPUs, using Google 'TensorFlow'. greta lets + you write your own model like in BUGS, JAGS and Stan, except that you + write models right in R, it scales well to massive datasets, and it’s + easy to extend and build on. See the website for more information, + including tutorials, examples, package documentation, and the greta + forum. License: Apache License 2.0 -URL: https://greta-stats.org +URL: https://greta-stats.org, https://github.com/greta-dev/greta BugReports: https://github.com/greta-dev/greta/issues -SystemRequirements: Python (>= 2.7.0) with header files and shared library; - TensorFlow (v1.14; https://www.tensorflow.org/); - TensorFlow Probability (v0.7.0; https://www.tensorflow.org/probability/) -Encoding: UTF-8 -LazyData: true Depends: - R (>= 3.0) + R (>= 4.1.0) +Imports: + abind, + callr, + cli (>= 3.4.1), + coda, + future (>= 1.22.1), + glue (>= 1.5.1), + methods, + parallelly (>= 1.29.0), + progress (>= 1.2.0), + R6, + reticulate (>= 1.19.0), + rlang, + tensorflow (== 2.16.0), + tools, + utils, + whisker, + yesno +Suggests: + bayesplot, + covr, + cramer, + DiagrammeR, + dplyr, + DiagrammeRsvg, + extraDistr, + fields, + ggplot2, + knitr, + lattice, + MASS, + MCMCpack, + mockery, + mvtnorm, + purrr, + rmarkdown, + rmutil, + rsvg, + spelling, + testthat (>= 3.1.0), + tibble, + tidyr, + truncdist, + withr, + rstudioapi +VignetteBuilder: + knitr +Config/testthat/edition: 3 +Encoding: UTF-8 +Language: en-US +Roxygen: list(markdown = TRUE) +RoxygenNote: 7.3.2 +SystemRequirements: Python (>= 3.7.0) with header files and shared + library; TensorFlow (>= v2.0.0; https://www.tensorflow.org/); TensorFlow + Probability (v0.8.0; https://www.tensorflow.org/probability/) Collate: 'package.R' 'utils.R' @@ -55,46 +109,33 @@ Collate: 'structures.R' 'extract_replace_combine.R' 'dag_class.R' + 'data-deps-tf-tfp.R' 'greta_model_class.R' 'progress_bar.R' 'inference_class.R' 'samplers.R' 'optimisers.R' + 'optimiser_class.R' 'inference.R' 'install_tensorflow.R' - 'internals.R' 'calculate.R' 'callbacks.R' 'marginalise.R' 'marginalisers.R' 'simulate.R' 'chol2symm.R' -Imports: - R6, - tensorflow (>= 1.13.0), - reticulate, - progress (>= 1.2.0), - future, - coda, - methods -Suggests: - knitr, - rmarkdown, - DiagrammeR, - bayesplot, - lattice, - testthat, - mvtnorm, - MCMCpack, - rmutil, - extraDistr, - truncdist, - cramer, - tidyverse, - fields, - MASS, - abind, - spelling -VignetteBuilder: knitr -RoxygenNote: 7.0.2 -Language: en-GB + 'install_greta_deps.R' + 'conda_greta_env.R' + 'greta_stash.R' + 'greta_create_conda_env.R' + 'greta_install_miniconda.R' + 'greta_install_python_deps.R' + 'new_install_process.R' + 'reinstallers.R' + 'checkers.R' + 'test_if_forked_cluster.R' + 'testthat-helpers.R' + 'write-logfiles.R' + 'zzz.R' + 'internals.R' +LazyData: true diff --git a/LICENSE b/LICENSE index 12357b72..b4061238 100644 --- a/LICENSE +++ b/LICENSE @@ -1,4 +1,4 @@ -Copyright 2018 Nick Golding +Copyright 2016-2021 Nick Golding Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/LICENSE.md b/LICENSE.md new file mode 100644 index 00000000..b62a9b5f --- /dev/null +++ b/LICENSE.md @@ -0,0 +1,194 @@ +Apache License +============== + +_Version 2.0, January 2004_ +_<>_ + +### Terms and Conditions for use, reproduction, and distribution + +#### 1. Definitions + +“License” shall mean the terms and conditions for use, reproduction, and +distribution as defined by Sections 1 through 9 of this document. + +“Licensor” shall mean the copyright owner or entity authorized by the copyright +owner that is granting the License. + +“Legal Entity” shall mean the union of the acting entity and all other entities +that control, are controlled by, or are under common control with that entity. +For the purposes of this definition, “control” means **(i)** the power, direct or +indirect, to cause the direction or management of such entity, whether by +contract or otherwise, or **(ii)** ownership of fifty percent (50%) or more of the +outstanding shares, or **(iii)** beneficial ownership of such entity. + +“You” (or “Your”) shall mean an individual or Legal Entity exercising +permissions granted by this License. + +“Source” form shall mean the preferred form for making modifications, including +but not limited to software source code, documentation source, and configuration +files. + +“Object” form shall mean any form resulting from mechanical transformation or +translation of a Source form, including but not limited to compiled object code, +generated documentation, and conversions to other media types. + +“Work” shall mean the work of authorship, whether in Source or Object form, made +available under the License, as indicated by a copyright notice that is included +in or attached to the work (an example is provided in the Appendix below). + +“Derivative Works” shall mean any work, whether in Source or Object form, that +is based on (or derived from) the Work and for which the editorial revisions, +annotations, elaborations, or other modifications represent, as a whole, an +original work of authorship. For the purposes of this License, Derivative Works +shall not include works that remain separable from, or merely link (or bind by +name) to the interfaces of, the Work and Derivative Works thereof. + +“Contribution” shall mean any work of authorship, including the original version +of the Work and any modifications or additions to that Work or Derivative Works +thereof, that is intentionally submitted to Licensor for inclusion in the Work +by the copyright owner or by an individual or Legal Entity authorized to submit +on behalf of the copyright owner. For the purposes of this definition, +“submitted” means any form of electronic, verbal, or written communication sent +to the Licensor or its representatives, including but not limited to +communication on electronic mailing lists, source code control systems, and +issue tracking systems that are managed by, or on behalf of, the Licensor for +the purpose of discussing and improving the Work, but excluding communication +that is conspicuously marked or otherwise designated in writing by the copyright +owner as “Not a Contribution.” + +“Contributor” shall mean Licensor and any individual or Legal Entity on behalf +of whom a Contribution has been received by Licensor and subsequently +incorporated within the Work. + +#### 2. Grant of Copyright License + +Subject to the terms and conditions of this License, each Contributor hereby +grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, +irrevocable copyright license to reproduce, prepare Derivative Works of, +publicly display, publicly perform, sublicense, and distribute the Work and such +Derivative Works in Source or Object form. + +#### 3. Grant of Patent License + +Subject to the terms and conditions of this License, each Contributor hereby +grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, +irrevocable (except as stated in this section) patent license to make, have +made, use, offer to sell, sell, import, and otherwise transfer the Work, where +such license applies only to those patent claims licensable by such Contributor +that are necessarily infringed by their Contribution(s) alone or by combination +of their Contribution(s) with the Work to which such Contribution(s) was +submitted. If You institute patent litigation against any entity (including a +cross-claim or counterclaim in a lawsuit) alleging that the Work or a +Contribution incorporated within the Work constitutes direct or contributory +patent infringement, then any patent licenses granted to You under this License +for that Work shall terminate as of the date such litigation is filed. + +#### 4. Redistribution + +You may reproduce and distribute copies of the Work or Derivative Works thereof +in any medium, with or without modifications, and in Source or Object form, +provided that You meet the following conditions: + +* **(a)** You must give any other recipients of the Work or Derivative Works a copy of +this License; and +* **(b)** You must cause any modified files to carry prominent notices stating that You +changed the files; and +* **(c)** You must retain, in the Source form of any Derivative Works that You distribute, +all copyright, patent, trademark, and attribution notices from the Source form +of the Work, excluding those notices that do not pertain to any part of the +Derivative Works; and +* **(d)** If the Work includes a “NOTICE” text file as part of its distribution, then any +Derivative Works that You distribute must include a readable copy of the +attribution notices contained within such NOTICE file, excluding those notices +that do not pertain to any part of the Derivative Works, in at least one of the +following places: within a NOTICE text file distributed as part of the +Derivative Works; within the Source form or documentation, if provided along +with the Derivative Works; or, within a display generated by the Derivative +Works, if and wherever such third-party notices normally appear. The contents of +the NOTICE file are for informational purposes only and do not modify the +License. You may add Your own attribution notices within Derivative Works that +You distribute, alongside or as an addendum to the NOTICE text from the Work, +provided that such additional attribution notices cannot be construed as +modifying the License. + +You may add Your own copyright statement to Your modifications and may provide +additional or different license terms and conditions for use, reproduction, or +distribution of Your modifications, or for any such Derivative Works as a whole, +provided Your use, reproduction, and distribution of the Work otherwise complies +with the conditions stated in this License. + +#### 5. Submission of Contributions + +Unless You explicitly state otherwise, any Contribution intentionally submitted +for inclusion in the Work by You to the Licensor shall be under the terms and +conditions of this License, without any additional terms or conditions. +Notwithstanding the above, nothing herein shall supersede or modify the terms of +any separate license agreement you may have executed with Licensor regarding +such Contributions. + +#### 6. Trademarks + +This License does not grant permission to use the trade names, trademarks, +service marks, or product names of the Licensor, except as required for +reasonable and customary use in describing the origin of the Work and +reproducing the content of the NOTICE file. + +#### 7. Disclaimer of Warranty + +Unless required by applicable law or agreed to in writing, Licensor provides the +Work (and each Contributor provides its Contributions) on an “AS IS” BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, +including, without limitation, any warranties or conditions of TITLE, +NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are +solely responsible for determining the appropriateness of using or +redistributing the Work and assume any risks associated with Your exercise of +permissions under this License. + +#### 8. Limitation of Liability + +In no event and under no legal theory, whether in tort (including negligence), +contract, or otherwise, unless required by applicable law (such as deliberate +and grossly negligent acts) or agreed to in writing, shall any Contributor be +liable to You for damages, including any direct, indirect, special, incidental, +or consequential damages of any character arising as a result of this License or +out of the use or inability to use the Work (including but not limited to +damages for loss of goodwill, work stoppage, computer failure or malfunction, or +any and all other commercial damages or losses), even if such Contributor has +been advised of the possibility of such damages. + +#### 9. Accepting Warranty or Additional Liability + +While redistributing the Work or Derivative Works thereof, You may choose to +offer, and charge a fee for, acceptance of support, warranty, indemnity, or +other liability obligations and/or rights consistent with this License. However, +in accepting such obligations, You may act only on Your own behalf and on Your +sole responsibility, not on behalf of any other Contributor, and only if You +agree to indemnify, defend, and hold each Contributor harmless for any liability +incurred by, or claims asserted against, such Contributor by reason of your +accepting any such warranty or additional liability. + +_END OF TERMS AND CONDITIONS_ + +### APPENDIX: How to apply the Apache License to your work + +To apply the Apache License to your work, attach the following boilerplate +notice, with the fields enclosed by brackets `[]` replaced with your own +identifying information. (Don't include the brackets!) The text should be +enclosed in the appropriate comment syntax for the file format. We also +recommend that a file or class name and description of purpose be included on +the same “printed page” as the copyright notice for easier identification within +third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/NAMESPACE b/NAMESPACE index 18b30ec7..4b678533 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -20,6 +20,7 @@ S3method("[",greta_array) S3method("[<-",greta_array) S3method("^",greta_array) S3method("dim<-",greta_array) +S3method("dim<-",unknowns) S3method("|",greta_array) S3method(Arg,greta_array) S3method(Conj,greta_array) @@ -42,8 +43,12 @@ S3method(as.greta_array,logical) S3method(as.greta_array,matrix) S3method(as.greta_array,node) S3method(as.greta_array,numeric) +S3method(as.greta_model,dag_class) S3method(as.matrix,greta_array) S3method(as.mcmc.list,greta_mcmc_list) +S3method(as.unknowns,array) +S3method(as.unknowns,matrix) +S3method(as.unknowns,unknowns) S3method(as_data,default) S3method(as_data,greta_array) S3method(asin,greta_array) @@ -66,6 +71,7 @@ S3method(colSums,default) S3method(colSums,greta_array) S3method(cos,greta_array) S3method(cosh,greta_array) +S3method(cospi,greta_array) S3method(cov2cor,default) S3method(cov2cor,greta_array) S3method(cummax,greta_array) @@ -76,6 +82,7 @@ S3method(diag,default) S3method(diag,greta_array) S3method(digamma,greta_array) S3method(dim,greta_array) +S3method(dim,node) S3method(eigen,default) S3method(eigen,greta_array) S3method(exp,greta_array) @@ -91,12 +98,16 @@ S3method(identity,greta_array) S3method(length,greta_array) S3method(lgamma,greta_array) S3method(log,greta_array) +S3method(log10,greta_array) S3method(log1p,greta_array) +S3method(log2,greta_array) S3method(max,greta_array) S3method(mean,greta_array) S3method(min,greta_array) S3method(plot,greta_model) S3method(print,greta_array) +S3method(print,greta_deps_spec) +S3method(print,greta_mcmc_list) S3method(print,greta_model) S3method(print,initials) S3method(print,marginaliser) @@ -114,10 +125,14 @@ S3method(rowMeans,default) S3method(rowMeans,greta_array) S3method(rowSums,default) S3method(rowSums,greta_array) +S3method(run_optimiser,tf_compat_optimiser) +S3method(run_optimiser,tf_optimiser) +S3method(run_optimiser,tfp_optimiser) S3method(sign,greta_array) S3method(simulate,greta_model) S3method(sin,greta_array) S3method(sinh,greta_array) +S3method(sinpi,greta_array) S3method(solve,greta_array) S3method(sqrt,greta_array) S3method(str,greta_array) @@ -129,6 +144,7 @@ S3method(t,greta_array) S3method(tail,greta_array) S3method(tan,greta_array) S3method(tanh,greta_array) +S3method(tanpi,greta_array) S3method(tapply,default) S3method(tapply,greta_array) S3method(trigamma,greta_array) @@ -141,7 +157,11 @@ export(adadelta) export(adagrad) export(adagrad_da) export(adam) +export(adamax) export(apply) +export(are_null) +export(as.greta_model) +export(as.unknowns) export(as_data) export(backsolve) export(bernoulli) @@ -160,8 +180,9 @@ export(cholesky_variable) export(cobyla) export(colMeans) export(colSums) -export(cospi.greta_array) export(cov2cor) +export(cpu_only) +export(destroy_greta_deps) export(diag) export(dirichlet) export(dirichlet_multinomial) @@ -174,8 +195,16 @@ export(f) export(forwardsolve) export(ftrl) export(gamma) +export(gpu_only) export(gradient_descent) export(greta_array) +export(greta_create_conda_env) +export(greta_deps_receipt) +export(greta_deps_spec) +export(greta_install_miniconda) +export(greta_notes_tf_num_error) +export(greta_set_install_logfile) +export(greta_sitrep) export(hmc) export(hypergeometric) export(icauchit) @@ -184,17 +213,18 @@ export(identity) export(ilogit) export(imultilogit) export(initials) +export(install_greta_deps) export(install_tensorflow) export(inverse_gamma) export(iprobit) +export(is.greta_array) +export(is.greta_mcmc_list) export(joint) export(l_bfgs_b) export(laplace) export(laplace_approximation) export(lkj_correlation) -export(log10.greta_array) export(log1pe) -export(log2.greta_array) export(logistic) export(lognormal) export(marginalise) @@ -204,11 +234,13 @@ export(model) export(momentum) export(multinomial) export(multivariate_normal) +export(nadam) export(negative_binomial) export(nelder_mead) export(newton_cg) export(normal) export(ones) +export(open_greta_install_log) export(opt) export(ordered_variable) export(pareto) @@ -217,27 +249,40 @@ export(powell) export(proximal_adagrad) export(proximal_gradient_descent) export(rdist) +export(reinstall_greta_deps) +export(reinstall_greta_env) +export(reinstall_miniconda) +export(remove_greta_env) +export(remove_miniconda) export(rms_prop) export(rowMeans) export(rowSums) +export(run_optimiser) export(rwmh) export(simplex_variable) -export(sinpi.greta_array) export(slice) export(slsqp) export(stashed_samples) export(student) export(sweep) -export(tanpi.greta_array) export(tapply) export(tnc) export(uniform) export(variable) export(weibull) export(wishart) +export(write_greta_install_log) export(zeros) import(methods) importFrom(R6,R6Class) +importFrom(callr,r_process) +importFrom(callr,r_process_options) +importFrom(cli,cli_alert_info) +importFrom(cli,cli_alert_success) +importFrom(cli,cli_process_done) +importFrom(cli,cli_process_failed) +importFrom(cli,cli_process_start) +importFrom(cli,cli_ul) importFrom(coda,as.mcmc.list) importFrom(coda,mcmc) importFrom(coda,mcmc.list) @@ -252,6 +297,8 @@ importFrom(grDevices,col2rgb) importFrom(grDevices,colorRampPalette) importFrom(progress,progress_bar) importFrom(reticulate,conda_binary) +importFrom(reticulate,conda_create) +importFrom(reticulate,conda_install) importFrom(reticulate,import) importFrom(reticulate,py_available) importFrom(reticulate,py_module_available) @@ -264,6 +311,7 @@ importFrom(stats,runif) importFrom(stats,simulate) importFrom(stats,start) importFrom(stats,window) +importFrom(tensorflow,"%as%") importFrom(tensorflow,dict) importFrom(tensorflow,install_tensorflow) importFrom(tensorflow,shape) @@ -273,8 +321,10 @@ importFrom(utils,compareVersion) importFrom(utils,flush.console) importFrom(utils,globalVariables) importFrom(utils,head) +importFrom(utils,head.matrix) importFrom(utils,read.table) importFrom(utils,setTxtProgressBar) importFrom(utils,str) importFrom(utils,tail) +importFrom(utils,tail.matrix) importFrom(utils,txtProgressBar) diff --git a/NEWS.md b/NEWS.md index cb42f0f3..35b877a9 100644 --- a/NEWS.md +++ b/NEWS.md @@ -1,25 +1,167 @@ # greta (development version) +# greta 0.5.0 + +This version of greta uses Tensorflow 2.0.0, which comes with it a host of new very exciting features! + +## Optimizers + +The latest interface to optimizers in tensorflow are now used, these changes are described. + +* `gradient_descent` gains `momentum` and `nesterov` arguments, as described here in [TF docs](https://www.tensorflow.org/api_docs/python/tf/keras/optimizers/SGD) +* `adagrad` gains [`epsilon` argument](https://www.tensorflow.org/api_docs/python/tf/keras/optimizers/Adagrad) +* removes `momentum` optimizer, as this has been folded into `gradient_descent` arguments +* Adds `amsgrad` argument to `adam` optimizer, as described in [TF docs](https://www.tensorflow.org/api_docs/python/tf/keras/optimizers/Adam) +* Adds `adamax` optimiser, see [TF docs](https://www.tensorflow.org/api_docs/python/tf/keras/optimizers/Adamax) +* Adds `l2_shrinkage_regularization_strength` and `beta` arguments to `ftrl` + optimiser. +* adds `nadam` optimiser - see [docs](https://www.tensorflow.org/api_docs/python/tf/keras/optimizers/Nadam). +* In `rms_prop` optimiser, changes `decay` parameter to `rho`, and adds `centered` parameter - see [docs](https://www.tensorflow.org/api_docs/python/tf/keras/optimizers/RMSprop) + +The following optimisers are removed, as they are no longer supported by Tensorflow: + + * `powell()` + * `cg()` + * `newton_cg()` + * `l_bfgs_b()` + * `tnc()` + * `cobyla()` + * `slsqp()` + +## Installation revamp + +This release provides a few improvements to installation in greta. It should now provide more information about installation progress, and be more robust. The intention is, it should _just work_, and if it doesn't, it should fail gracefully with some useful advice on problem solving. + +* Added option to restart R + run `library(greta)` after installation (#523). +* Added installation deps object, `greta_deps_sepc()` to help simplify specifying package versions (#664). +* Removed `method` and `conda` arguments from `install_greta_deps()` as they + were not used. +* Removed `manual` argument in `install_greta_deps()`. +* Added default 5 minute timer to installation processes. +* Added `greta_deps_receipt()` to list the current main python packages installed (#668). +* Added checking suite to ensure you are using valid versions of TF, TFP, and Python(#666). +* Added data `greta_deps_tf_tfp` (#666), which contains valid versions combinations of TF, TFP, and Python. +* Remove `greta_nodes_install/conda_*()` options as #493 makes them defunct. +* Added option to write to a single logfile with `greta_set_install_logfile()`, and `write_greta_install_log()`, and `open_greta_install_log()` (#493). +* Added `destroy_greta_deps()` function to remove miniconda and python conda environment. +* Improved `write_greta_install_log()` and `open_greta_install_log()` to use `tools::R_user_dir()` to always write to a file location. `open_greta_install_log()` will open one found from an environment variable or go to the default location (#703). + +## New Print methods + +* New print method for `greta_mcmc_list`. This means MCMC output will be shorter and more informative (#644). +* greta arrays now have a print method that stops them from printing too many rows into the console. Similar to MCMC print method, you can control the print output with the `n` argument: `print(object, n = )` (#644). + +## Minor + +* `greta_sitrep()` now checks for installations of Python, TF, and TFP. +* Slice sampler no longer needs precision = "single" to work. +* greta now depends on R 4.1.0, which was released May 2021, over 3 years ago. +* export `is.greta_array()` and `is.greta_mcmc_list()`. +* `restart` argument for `install_greta_deps()` and `reinstall_greta_deps()` to automatically restart R (#523). + +## Internals + +* Internally we are replacing most of the error handling code as separate + `check_*` functions. +* Implemented `cli::cli_abort/warn/inform()` in place of `cli::format_error/warning/message()` + `stop/warning/message(msg, call. = FALSE)` pattern. +* Uses legacy optimizer internally (Use `tf$keras$optimizers$legacy$METHOD` over `tf$keras$optimizers$METHOD`). No user impact expected. +* Update photo of Grete Hermann (#598). +* Use `%||%` internally to replace the pattern: `if (is.null(x)) x <- thing` with `x <- x %||% thing` (#630). +* Add more explaining variables - replace `if (thing & thing & what == this)` with `if (explanation_of_thing)`. +* Refactored repeated uses of `vapply` into functions (#377, #658). +* Add internal data files `.deps_tf` and `.deps_tfp` to track dependencies of TF and TFP. Related to #666. + +- Posterior density checks (#720): + - Don't run Geweke on CI as it takes 30 minutes to run. + - Add thinning to Geweke tests. + - Fix broken geweke tests from TF1-->TF2 change. + - Increase the number of effective samples for check_samples for lkj distribution + - Add more checks to posterior to run on CI/on each test of greta + +## Bug fixes + +* Fix bug where matrix multiply had dimension error before coercing to greta array. (#464) +- Fixes for Wishart and LKJ Correlation distributions (#729 #733 #734): + - Add bijection density to choleskied distributions. + - Note about some issues with LKJ and our normalisation constant for the density. + - Removed our custom `forward_log_det_jacobian()` function from `tf_correlation_cholesky_bijector()` (used in `lkj_correlation()`). Previously, it did not work with unknown dimensions, but it now works with them. + - Ensure wishart uses sigma_chol in scale_tril + - Wishart uses `tf$matmul(chol_draws, chol_draws, adjoint_b = TRUE)` instead of `tf_chol2symm(chol_draws)`. + - Test log prob function returns valid numeric numbers. + - Addresses issue with log prob returning NaNs--replace `FillTriangular` with `FillScaleTriL` and apply Chaining to first transpose input. + +# greta 0.4.5 + +## Bug Fixes + +- Remove trailing comma bug in glue #618 + +# greta 0.4.4 + +## Bug fixes + +- Some small documentation bugs were fixed, namely the sentinel "_PACKAGE" documentation, and various small changes to correctly export S3 methods. + +# greta 0.4.3 + +## Features + +- Adds `reinstall_greta_deps()`, which helps with starting from a clean slate when installing greta dependencies (#524) + +## Fixes + +* Issue where `future` and `parallely` packages error when a CPU with only one core is provided (#513, #516). +* Removes any use of `multiprocess` as it is deprecated in the `future` package (#394) + +# greta 0.4.2 + +## Fixes + +* workaround for M1 issues (#507) + +# greta 0.4.1 (2022-03-14) + ## Fixes: -* greta_mcmc_list objects (returned by mcmc()) are now no longer modified by operations (like code::gelman.diag()). +* Python is now initialised when a `greta_array` is created (#468). + +* head and tail S3 methods for `greta_array` are now consistent with head and tail methods for R versions 3 and 4 ([#384](https://github.com/greta-dev/greta/issues/384)). + +* `greta_mcmc_list` objects (returned by `mcmc()`) are now no longer modified by operations (like `coda::gelman.diag()`). * joint distributions of uniform variables now have the correct constraints when sampling (#377). * array-scalar dispatch with 3D arrays is now less buggy (#298). -* greta now provides R versions of all of R's primitive functions (I think), to prevent them from silently not executing (#317). +* `greta` now provides R versions of all of R's primitive functions (I think), to prevent them from silently not executing (#317). + +* Uses `Sys.unsetenv("RETICULATE_PYTHON")` in `.onload` on package startup, + to prevent an issue introduced with the "ghost orchid" version of RStudio where they do not find the current version of RStudio. See [#444](https://github.com/greta-dev/greta/issues/444) for more details. + +* Internal change to code to ensure `future` continues to support parallelisation of chains. See [#447](https://github.com/greta-dev/greta/issues/447) for more details. + +* `greta` now depends on `future` version 1.22.1, `tensorflow` (the R package) 2.7.0, and `parallelly` 1.29.0. This should see no changes on the user side. ## API changes: +* Now depends on R >= 3.1.0 ([#386](https://github.com/greta-dev/greta/issues/386)) + +* `chol2inv.greta_array()` now warns user about LINPACK argument being ignored, and also reminds user it has been deprecated since R 3.1 + * `calculate()` now accepts multiple greta arrays for which to calculate values, via the `...` argument. As a consequence any other arguments must now be named. -* a number of optimiser methods are now deprecated, since they will be unavailable when greta moves to using TensorFlow v2.0: `powell()`, `cg()`, `newton_cg()`, `l_bfgs_b()`, `tnc()`, `cobyla()`, and `slsqp()`. +* A number of optimiser methods are now deprecated, since they will be unavailable when greta moves to using TensorFlow v2.0: `powell()`, `cg()`, `newton_cg()`, `l_bfgs_b()`, `tnc()`, `cobyla()`, and `slsqp()`. * `dirichlet()` now returns a variable (rather than an operation) greta array, and the graphs created by `lkj_correlation()` and `wishart()` are now simpler as cholesky-shaped variables are now available internally. +* Adds the `reinstall_greta_env()`, `reinstall_miniconda()`, `remove_greta_env()`, and `remove_miniconda()` helper functions for helping installation get to "clean slate" (#443). + +* `greta` currently doesn't work on Apple Silicon (M1 Macs) as they need to use TF 2.0, which is currently being implemented. `greta` now throws an error if M1 macs are detected and directs users to https://github.com/greta-dev/greta/issues/458 (#487) + ## Features: +* New `install_greta_deps()` - provides installation of python dependencies (#417). This saves exact versions of Python (3.7), and the python modules NumPy (1.16.4), Tensorflow (1.14.0), and Tensorflow Probability (0.7.0) into a conda environment, "greta-env". When initialising Python, greta now searches for this conda environment first, which presents a great advantage as it isolates these exact versions of these modules from other Python installations. It is not required to use the conda environment, "greta-env". Overall this means that users can run the function `install_greta_deps()`, follow the prompts, and have all the python modules they need installed, without contaminating other software that use different python modules. + * `calculate()` now enables simulation of greta array values from their priors, optionally conditioned on fixed values or posterior samples. This enables prior and posterior predictive checking of models, and simulation of data. * A `simulate()` method for greta models is now also provided, to simulate the values of all greta arrays in a model from their priors. @@ -28,12 +170,22 @@ * There are three new variable constructor functions: `cholesky_variable()`, `simplex_variable()`, and `ordered_variable()`, for variables with these constraints but no probability distribution. -* a new function `chol2symm()` - the inverse of `chol()`. +* New `chol2symm()` is the inverse of `chol()`. * `mcmc()`, `stashed_samples()`, and `calculate()` now return objects of class `greta_mcmc_list` which inherit from `coda`'s `mcmc.list` class, but enable custom greta methods for manipulating mcmc outputs, including a `window()` function. * `mcmc()` and `calculate()` now have a `trace_batch_size` argument enabling users to trade-off computation speed versus memory requirements when calculating posterior samples for target greta arrays (#236). +* Many message, warning, and error prompts have been replaced internally with the {cli} R package for nicer printing. This is a minor change that should result in a more pleasant user experience (#423 #425). + +* Internally, where sensible, `greta` now uses the `glue` package to create messages/ouputs (#378). + +* New FAQ page and updated installation instructions for installing Python dependencies (#424) + +* New `greta_sitrep()` function to generate a situation report of the software + that is available for use, and also initialising python so `greta` is ready to + use. (#441) + # greta 0.3.1 This release is predominantly a patch to make greta work with recent versions of TensorFlow and TensorFlow Probability, which were not backward compatible with the versions on which greta previously depended. From this release forward, greta will depend on specific (rather than minimum) versions of these two pieces of software to avoid it breaking if more changes are made to the APIS of these packages. diff --git a/R/as_data.R b/R/as_data.R index ac373af7..54177a32 100644 --- a/R/as_data.R +++ b/R/as_data.R @@ -3,12 +3,12 @@ #' @description define an object in an R session as a data greta array for use #' as data in a greta model. #' @param x an R object that can be coerced to a greta_array (see details). -#' @details \code{as_data()} can currently convert R objects to greta_arrays if +#' @details `as_data()` can currently convert R objects to greta_arrays if #' they are numeric or logical vectors, matrices or arrays; or if they are #' dataframes with only numeric (including integer) or logical elements. #' Logical elements are always converted to numerics. R objects cannot be -#' converted if they contain missing (\code{NA}) or infinite (\code{-Inf} or -#' \code{Inf}) values. +#' converted if they contain missing (`NA`) or infinite (`-Inf` or +#' `Inf`) values. #' @export #' @examples #' \dontrun{ @@ -19,16 +19,19 @@ #' vec <- rnorm(10) #' mat <- matrix(seq_len(3 * 4), nrow = 3) #' arr <- array(sample(c(TRUE, FALSE), 2 * 2 * 2, replace = TRUE), -#' dim = c(2, 2, 2)) +#' dim = c(2, 2, 2) +#' ) #' (a <- as_data(vec)) #' (b <- as_data(mat)) #' (c <- as_data(arr)) #' #' # dataframes can also be coerced, provided all the columns are numeric, #' # integer or logical -#' df <- data.frame(x1 = rnorm(10), -#' x2 = sample(1L:10L), -#' x3 = sample(c(TRUE, FALSE), 10, replace = TRUE)) +#' df <- data.frame( +#' x1 = rnorm(10), +#' x2 = sample(1L:10L), +#' x3 = sample(c(TRUE, FALSE), 10, replace = TRUE) +#' ) #' (d <- as_data(df)) #' } as_data <- function(x) { @@ -42,9 +45,11 @@ as_data <- function(x) { #' @export as_data.greta_array <- function(x) { # nolint end - if (!inherits(get_node(x), "data_node")) { - stop("cannot coerce a non-data greta_array to data", - call. = FALSE) + non_data_greta_array <- !is.data_node(get_node(x)) + if (non_data_greta_array) { + cli::cli_abort( + "cannot coerce a non-data {.cls greta_array} to data" + ) } x } diff --git a/R/calculate.R b/R/calculate.R index 5e876b95..5f3252f9 100644 --- a/R/calculate.R +++ b/R/calculate.R @@ -10,8 +10,8 @@ #' #' @param ... one or more greta_arrays for which to calculate the value #' @param values a named list giving temporary values of the greta arrays with -#' which \code{target} is connected, or a \code{greta_mcmc_list} object -#' returned by \code{\link{mcmc}}. +#' which `target` is connected, or a `greta_mcmc_list` object +#' returned by [mcmc()]. #' @param nsim an optional positive integer scalar for the number of responses #' to simulate if stochastic greta arrays are present in the model - see #' Details. @@ -19,36 +19,44 @@ #' simulation so as to generate a reproducible sample #' @param precision the floating point precision to use when calculating values. #' @param trace_batch_size the number of posterior samples to process at a time -#' when \code{target} is a \code{greta_mcmc_list} object; reduce this to +#' when `target` is a `greta_mcmc_list` object; reduce this to #' reduce memory demands +#' @param compute_options Default is to use CPU only with `cpu_only()`. Use +#' `gpu_only()` to use only GPU. In the future we will add more options for +#' specifying CPU and GPU use. If setting GPU with `gpu_only()` then we +#' cannot always guarantee that the random number seed will be respected. This +#' is due to the way tensorflow interfaces with the GPU. If you must have +#' reproducibility of all simulations we recommend using `cpu_only()`, which +#' is the default. You can turn off the message about setting seed with GPU +#' usage using `options(greta_gpu_message = FALSE)` #' #' @return Values of the target greta array(s), given values of the greta arrays -#' on which they depend (either specified in \code{values} or sampled from -#' their priors). If \code{values} is a -#' \code{\link[greta:mcmc]{greta_mcmc_list}} and \code{nsim = NULL}, this will -#' be a \code{greta_mcmc_list} object of posterior samples for the target +#' on which they depend (either specified in `values` or sampled from +#' their priors). If `values` is a +#' [`greta_mcmc_list()`][greta::mcmc] and `nsim = NULL`, this will +#' be a `greta_mcmc_list` object of posterior samples for the target #' greta arrays. Otherwise, the result will be a named list of numeric R -#' arrays. If \code{nsim = NULL} the dimensions of returned numeric R arrays +#' arrays. If `nsim = NULL` the dimensions of returned numeric R arrays #' will be the same as the corresponding greta arrays, otherwise an additional -#' dimension with \code{nsim} elements will be prepended, to represent +#' dimension with `nsim` elements will be prepended, to represent #' multiple simulations. #' -#' @details The greta arrays named in \code{values} need not be variables, they +#' @details The greta arrays named in `values` need not be variables, they #' can also be other operations or even data. #' -#' At present, if \code{values} is a named list it must contain values for -#' \emph{all} of the variable greta arrays with which \code{target} is +#' At present, if `values` is a named list it must contain values for +#' *all* of the variable greta arrays with which `target` is #' connected, even values are given for intermediate operations, or the target #' doesn't depend on the variable. That may be relaxed in a future release. #' #' If the model contains stochastic greta arrays; those with a distribution, #' calculate can be used to sample from these distributions (and all greta -#' arrays that depend on them) by setting the \code{nsim} argument to a -#' positive integer for the required number of samples. If \code{values} is +#' arrays that depend on them) by setting the `nsim` argument to a +#' positive integer for the required number of samples. If `values` is #' specified (either as a list of fixed values or as draws), those values will #' be used, and remaining variables will be sampled conditional on them. #' Observed data with distributions (i.e. response variables defined with -#' \code{distribution()} can also be sampled, provided they are defined as +#' `distribution()` can also be sampled, provided they are defined as #' greta arrays. This behaviour can be used for a number of tasks, like #' simulating datasets for known parameter sets, simulating parameters and #' data from a set of priors, or simulating datasets from a model posterior. @@ -63,7 +71,7 @@ #' # then calculate what value y would take for different values of x #' x <- normal(0, 1, dim = 3) #' a <- lognormal(0, 1) -#' y <- sum(x ^ 2) + a +#' y <- sum(x^2) + a #' calculate(y, values = list(x = c(0.1, 0.2, 0.3), a = 2)) #' #' # by setting nsim, you can also sample values from their priors @@ -110,128 +118,162 @@ #' # you can use calculate on greta arrays created even after the inference on #' # the model - e.g. to plot response curves #' petal_length_plot <- seq(min(iris$Petal.Length), -#' max(iris$Petal.Length), -#' length.out = 100) +#' max(iris$Petal.Length), +#' length.out = 100 +#' ) #' mu_plot <- alpha + petal_length_plot * beta #' mu_plot_draws <- calculate(mu_plot, values = draws) #' mu_est <- colMeans(mu_plot_draws[[1]]) -#' plot(mu_est ~ petal_length_plot, type = "n", -#' ylim = range(mu_plot_draws[[1]])) +#' plot(mu_est ~ petal_length_plot, +#' type = "n", +#' ylim = range(mu_plot_draws[[1]]) +#' ) #' apply(mu_plot_draws[[1]], 1, lines, -#' x = petal_length_plot, col = grey(0.8)) +#' x = petal_length_plot, col = grey(0.8) +#' ) #' lines(mu_est ~ petal_length_plot, lwd = 2) #' #' # trace_batch_size can be changed to trade off speed against memory usage #' # when calculating. These all produce the same result, but have increasing #' # memory requirements: #' mu_plot_draws_1 <- calculate(mu_plot, -#' values = draws, -#' trace_batch_size = 1) +#' values = draws, +#' trace_batch_size = 1 +#' ) #' mu_plot_draws_10 <- calculate(mu_plot, -#' values = draws, -#' trace_batch_size = 10) +#' values = draws, +#' trace_batch_size = 10 +#' ) #' mu_plot_draws_inf <- calculate(mu_plot, -#' values = draws, -#' trace_batch_size = Inf) -#' +#' values = draws, +#' trace_batch_size = Inf +#' ) #' } -calculate <- function(..., - values = list(), - nsim = NULL, - seed = NULL, - precision = c("double", "single"), - trace_batch_size = 100) { - - # turn the provided greta arrays into a list and try to find the names - target <- list(...) - names <- names(target) - - # see if any names are missing and try to fill them in - if (is.null(names)) { - names_missing <- rep(TRUE, length(target)) - } else { - names_missing <- names == "" - } - - if (any(names_missing)) { - scraped_names <- substitute(list(...))[-1] - missing_names <- vapply(scraped_names[names_missing], deparse, "") - names[names_missing] <- missing_names - names(target) <- names - } - - # catch empty lists here, since check_greta_arrays assumes data greta arrays - # have been stripped out - if (identical(target, list())) { - stop("no greta arrays to calculate were provided", - call. = FALSE) - } - - # check the inputs - check_greta_arrays(target, - "calculate", - "\nPerhaps you forgot to explicitly name other arguments?") +calculate <- function( + ..., + values = list(), + nsim = NULL, + seed = NULL, + precision = c("double", "single"), + trace_batch_size = 100, + compute_options = cpu_only() +) { + + # set device to be CPU/GPU for the entire run + with(tf$device(compute_options), { + + # message users about random seeds and GPU usage if they are using GPU + message_if_using_gpu(compute_options) + + # turn the provided greta arrays into a list + target <- list(...) + + # try to find the names + # REFACTOR as: target <- find_and_name_arrays(target) + names <- names(target) + + # see if any names are missing and try to fill them in + if (is.null(names)) { + names_missing <- rep(TRUE, length(target)) + } else { + names_missing <- names == "" + } - # checks and RNG seed setting if we're sampling - if (!is.null(nsim)) { + if (any(names_missing)) { + scraped_names <- substitute(list(...))[-1] + missing_names <- vapply(scraped_names[names_missing], deparse, "") + names[names_missing] <- missing_names + names(target) <- names + } - # check nsim is valid - nsim <- check_positive_integer(nsim) + # catch empty lists here, since check_greta_arrays assumes data greta arrays + # have been stripped out + check_if_array_is_empty_list(target) - # if an RNG seed was provided use it and reset the RNG on exiting - if (!is.null(seed)) { + # check the inputs + check_greta_arrays( + target, + "calculate", + "Perhaps you forgot to explicitly name other arguments?" + ) - if (!exists(".Random.seed", envir = .GlobalEnv, inherits = FALSE)) { - runif(1) + # checks and RNG seed setting if we're sampling + # REFACTOR: check_rng_seed(nim, seed, compute_option) + if (!is.null(nsim)) { + + # check nsim is valid + nsim <- check_positive_integer(nsim, "nsim") + + # if an RNG seed was provided use it and reset the RNG on exiting + if (!is.null(seed)) { + no_global_random_seed <- !exists( + x = ".Random.seed", + envir = .GlobalEnv, + inherits = FALSE + ) + if (no_global_random_seed) { + runif(1) + } + + + r_seed <- get(".Random.seed", envir = .GlobalEnv) + on.exit(assign(".Random.seed", r_seed, envir = .GlobalEnv)) + tensorflow::set_random_seed( + seed = seed, + disable_gpu = is_using_cpu(compute_options) + ) } - r_seed <- get(".Random.seed", envir = .GlobalEnv) - on.exit(assign(".Random.seed", r_seed, envir = .GlobalEnv)) - set.seed(seed) + if (is.null(seed)){ + tensorflow::set_random_seed( + seed = get_seed(), + disable_gpu = is_using_cpu(compute_options) + ) + } } - } - - # set precision - tf_float <- switch(match.arg(precision), - double = "float64", - single = "float32") - - if (inherits(values, "greta_mcmc_list")) { - result <- calculate_greta_mcmc_list( - target = target, - values = values, - nsim = nsim, - tf_float = tf_float, - trace_batch_size = trace_batch_size + # set precision + tf_float <- switch( + match.arg(precision), + double = "float64", + single = "float32" ) - } else { - - result <- calculate_list(target = target, - values = values, - nsim = nsim, - tf_float = tf_float, - env = parent.frame()) - - } + if (is.greta_mcmc_list(values)) { + result <- calculate_greta_mcmc_list( + target = target, + values = values, + nsim = nsim, + tf_float = tf_float, + trace_batch_size = trace_batch_size + ) + } else { + result <- calculate_list( + target = target, + values = values, + nsim = nsim, + tf_float = tf_float, + env = parent.frame() + ) + } - if (!inherits(result, "greta_mcmc_list")) { + if (!is.greta_mcmc_list(result)) { - # if it's not mcmc samples, make sure the results are in the right order - # (tensorflow order seems to be platform specific?!?) - order <- match(names(result), names(target)) - result <- result[order] + # if it's not mcmc samples, make sure the results are in the right order + # (tensorflow order seems to be platform specific?!?) + order <- match(names(result), names(target)) + result <- result[order] - # if the result wasn't mcmc samples or simulations, drop the batch dimension - if (is.null(nsim)) { - result <- lapply(result, drop_first_dim) + # if the result wasn't mcmc samples or simulations, drop the batch dimension + if (is.null(nsim)) { + result <- lapply(result, drop_first_dim) + } } + result - } - result - + # close tf$device call to use CPU or GPU + }) } #' @importFrom coda thin @@ -242,6 +284,7 @@ calculate_greta_mcmc_list <- function(target, tf_float, trace_batch_size) { + # assign the free state stochastic <- !is.null(nsim) # check trace_batch_size is valid @@ -250,6 +293,8 @@ calculate_greta_mcmc_list <- function(target, # get the free state draws and old dag from the samples model_info <- get_model_info(values) mcmc_dag <- model_info$model$dag + + # this is the free state MCMC object draws <- model_info$raw_draws # build a new dag from the targets @@ -258,9 +303,11 @@ calculate_greta_mcmc_list <- function(target, # rearrange the nodes in the dag so that any mcmc dag variables are first and # in the right order (otherwise the free state will be incorrectly defined) - in_draws <- names(dag$node_list) %in% names(mcmc_dag$node_list) - order <- order(match(names(dag$node_list[in_draws]), - names(mcmc_dag$node_list))) + in_draws <- names(dag$node_list) %in% names(mcmc_dag$node_list) + order <- order(match( + names(dag$node_list[in_draws]), + names(mcmc_dag$node_list) + )) dag$node_list <- c(dag$node_list[in_draws][order], dag$node_list[!in_draws]) # find variable nodes in the new dag without a free state in the old one. @@ -270,62 +317,27 @@ calculate_greta_mcmc_list <- function(target, dag$variables_without_free_state <- dag_variables[stateless_names] # check there's some commonality between the two dags - connected_to_draws <- names(dag$node_list) %in% names(mcmc_dag$node_list) - if (!any(connected_to_draws)) { - stop("the target greta arrays do not appear to be connected ", - "to those in the greta_mcmc_list object", - call. = FALSE) - } + check_commanality_btn_dags(dag, mcmc_dag) # if they didn't specify nsim, check we can deterministically compute the # targets from the draws if (!stochastic) { # see if the new dag introduces any new variables - new_types <- dag$node_types[!connected_to_draws] - if (any(new_types == "variable")) { - stop("the target greta arrays are related to new variables ", - "that are not in the MCMC samples so cannot be calculated ", - "from the samples alone. Set 'nsim' if you want to sample them ", - "conditionally on the MCMC samples", - call. = FALSE) - } + check_dag_introduces_new_variables(dag, mcmc_dag) # see if any of the targets are stochastic and not sampled in the mcmc - target_nodes <- lapply(target, get_node) - target_node_names <- vapply(target_nodes, - member, - "unique_name", - FUN.VALUE = character(1)) - existing_variables <- target_node_names %in% names(mcmc_dag_variables) - have_distributions <- vapply(target_nodes, - has_distribution, - FUN.VALUE = logical(1)) - new_stochastics <- have_distributions & !existing_variables - if (any(new_stochastics)) { - n_stoch <- sum(new_stochastics) - stop("the greta array", - ngettext(n_stoch, " ", "s "), - paste(names(target)[new_stochastics], collapse = ", "), - ngettext(n_stoch, - " has a distribution and is ", - " have distributions and are"), - "not in the MCMC samples, so cannot be calculated ", - "from the samples alone. Set 'nsim' if you want to sample them ", - "conditionally on the MCMC samples", - call. = FALSE) - } + check_targets_stochastic_and_not_sampled(target, mcmc_dag_variables) } - dag$define_tf() - dag$target_nodes <- lapply(target, get_node) names(dag$target_nodes) <- names(target) # if we're doing stochastic sampling, subsample the draws if (stochastic) { - + # TF1/2 check todo + # might rename draws to indicate that it is a matrix, for readability draws <- as.matrix(draws) n_samples <- nrow(draws) @@ -333,32 +345,34 @@ calculate_greta_mcmc_list <- function(target, replace <- FALSE if (nsim > n_samples) { replace <- TRUE - warning("nsim was greater than the number of posterior samples in ", - "values, so posterior samples had to be drawn with replacement", - call. = FALSE) + cli::cli_warn( + "{.arg nsim} was greater than the number of posterior samples in \\ + values, so posterior samples had to be drawn with replacement" + ) } rows <- sample.int(n_samples, nsim, replace = replace) draws <- draws[rows, , drop = FALSE] # add the batch size to the data list - dag$set_tf_data_list("batch_size", as.integer(nsim)) - + # assign # pass these values in as the free state trace <- dag$trace_values(draws, - trace_batch_size = trace_batch_size, - flatten = FALSE) + trace_batch_size = trace_batch_size, + flatten = FALSE + ) # hopefully values is already a list of the correct dimensions... - - } else { # for deterministic posterior prediction, just trace the target for each # chain + values <- lapply(draws, - dag$trace_values, - trace_batch_size = trace_batch_size) + #double check the trace value part - can pronbanly just do that here + dag$trace_values, + trace_batch_size = trace_batch_size + ) # convert to a greta_mcmc_list object, retaining windowing info trace <- lapply( @@ -373,108 +387,121 @@ calculate_greta_mcmc_list <- function(target, } trace - } calculate_list <- function(target, values, nsim, tf_float, env) { - - stochastic <- !is.null(nsim) - fixed_greta_arrays <- list() - if (!identical(values, list())) { + values_exist <- !identical(values, list()) + + if (values_exist) { # check the list of values makes sense, and return these and the # corresponding greta arrays (looked up by name in environment env) values_list <- check_values_list(values, env) fixed_greta_arrays <- values_list$fixed_greta_arrays values <- values_list$values - } all_greta_arrays <- c(fixed_greta_arrays, target) - # define the dag and TF graph - dag <- dag_class$new(all_greta_arrays, tf_float = tf_float) - # convert to nodes, and add tensor names to values - fixed_nodes <- lapply(fixed_greta_arrays, get_node) - names(values) <- vapply(fixed_nodes, dag$tf_name, FUN.VALUE = character(1)) - - # change dag mode to sampling - dag$mode <- "all_sampling" - - dag$define_tf() - tfe <- dag$tf_environment - - # build and send a dict for the fixed values - fixed_nodes <- lapply(fixed_greta_arrays, - get_node) - - names(values) <- vapply(fixed_nodes, - dag$tf_name, - FUN.VALUE = "") + dag <- dag_class$new(all_greta_arrays, tf_float = tf_float) - # check we can do the calculation + stochastic <- !is.null(nsim) if (stochastic) { - # check there are no variables without distributions (or whose children have - # distributions - for lkj & wishart) that aren't given fixed values - variables <- dag$node_list[dag$node_types == "variable"] - have_distributions <- vapply(variables, - has_distribution, - FUN.VALUE = logical(1)) - any_child_has_distribution <- function(variable) { - have_distributions <- vapply(variable$children, - has_distribution, - FUN.VALUE = logical(1)) - any(have_distributions) - } - children_have_distributions <- vapply(variables, - any_child_has_distribution, - FUN.VALUE = logical(1)) - - unsampleable <- !have_distributions & !children_have_distributions - fixed_node_names <- vapply(fixed_nodes, - member, - "unique_name", - FUN.VALUE = character(1)) - unfixed <- !names(variables) %in% fixed_node_names - - if (any(unsampleable & unfixed)) { - stop("the target greta arrays are related to variables ", - "that do not have distributions so cannot be sampled", - call. = FALSE) - } + check_if_unsampleable_and_unfixed(fixed_greta_arrays, dag) } else { # check there are no unspecified variables on which the target depends lapply(target, check_dependencies_satisfied, fixed_greta_arrays, dag, env) + } + # TF1/2 check todo + # need to wrap this in tf_function I think? + if (Sys.getenv("GRETA_DEBUG") == "true") { + browser() } + values <- calculate_target_tensor_list( + dag = dag, + fixed_greta_arrays = fixed_greta_arrays, + values = values, + stochastic = stochastic, + target = target, + nsim = nsim + ) + + return(values) + # TF1/2 check + # could potentially not run this list in the correct way, in that + # it might result in running it twice with different seeds, rather than + # simultaneously + # assign("calculate_target_tensor_list", target_tensor_list, envir = tfe) + +# # add values or data not specified by the user +# data_list <- dag$get_tf_data_list() +# missing <- !names(data_list) %in% names(values) +# +# # send list to tf environment and roll into a dict +# +} - # look up the tf names of the target greta arrays (under sampling) - # create an object in the environment that's a list of these, and sample that - target_nodes <- lapply(target, get_node) - target_names_list <- lapply(target_nodes, dag$tf_name) - target_tensor_list <- lapply(target_names_list, get, envir = tfe) - assign("calculate_target_tensor_list", target_tensor_list, envir = tfe) - # add the batch size to the data list - batch_size <- ifelse(stochastic, as.integer(nsim), 1L) - dag$set_tf_data_list("batch_size", batch_size) +calculate_target_tensor_list <- function( + dag, + fixed_greta_arrays, + values, + stochastic, + target, + nsim +) { + # define the dag and TF graph + # change dag mode to sampling + dag$mode <- "all_sampling" + + # convert to nodes, and add tensor names to values + fixed_nodes <- lapply(fixed_greta_arrays, get_node) - # add values or data not specified by the user - data_list <- dag$get_tf_data_list() - missing <- !names(data_list) %in% names(values) + value_names <- vapply(fixed_nodes, dag$tf_name, FUN.VALUE = character(1)) + + tfe <- dag$tf_environment + + # add the batch size to the data list and the greta stash (for sub-dags) + batch_size <- ifelse(stochastic, as.integer(nsim), 1L) + assign("batch_size", batch_size, envir = tfe) + assign("batch_size", batch_size, envir = greta_stash) - # send list to tf environment and roll into a dict values <- lapply(values, add_first_dim) values <- lapply(values, tile_first_dim, batch_size) - dag$build_feed_dict(values, data_list = data_list[missing]) + mapply( + FUN = assign, + value_names, + values, + MoreArgs = list( + envir = tfe + ) + ) + + # look up the tf names of the target greta arrays (under sampling) + # create an object in the environment that's a list of these, and sample that + target_nodes <- lapply(target, get_node) + target_names_list <- lapply(target_nodes, dag$tf_name) + + # this is taking advantage of non-eager mode + # TF1/2 check + # might need to use some of the tensorflow creation function + # approaches (in as_tf_function + generate_log_prob_function) + dag$define_tf(target_nodes = target_nodes) - # run the sampling - dag$tf_sess_run("calculate_target_tensor_list", as_text = TRUE) + # look up the tf names of the target greta arrays (under sampling) + # create an object in the environment that's a list of these, and sample that + target_nodes <- lapply(target, get_node) + target_names_list <- lapply(target_nodes, dag$tf_name) + + target_tensor_list <- lapply(target_names_list, get, envir = tfe) + target_tensor_list_array <- lapply(target_tensor_list, as.array) + return(target_tensor_list_array) } diff --git a/R/callbacks.R b/R/callbacks.R index 8da83cab..87515902 100644 --- a/R/callbacks.R +++ b/R/callbacks.R @@ -22,36 +22,38 @@ read_progress_log_file <- function(filename, skip = 0) { # generic rendering of progress text straight from a set of files #' @importFrom utils flush.console render_progress <- function(reads) { - reads <- unlist(reads) reads[is.na(reads)] <- "" some_results <- any(nchar(reads) > 0) if (some_results) { # optionally add blanks to put lines at the edges - if (length(reads) > 1) + if (length(reads) > 1) { reads <- c("", reads, "") + } msg <- paste(reads, collapse = " | ") message("\r", appendLF = FALSE) message(msg, appendLF = FALSE) flush.console() - } } # callback functions percentages <- function() { - reads <- lapply(greta_stash$percentage_log_files, - read_progress_log_file) + reads <- lapply( + greta_stash$percentage_log_files, + read_progress_log_file + ) render_progress(reads) } progress_bars <- function() { reads <- lapply(greta_stash$progress_bar_log_files, - read_progress_log_file, - skip = 1) + read_progress_log_file, + skip = 1 + ) render_progress(reads) } diff --git a/R/checkers.R b/R/checkers.R new file mode 100644 index 00000000..0962bfd0 --- /dev/null +++ b/R/checkers.R @@ -0,0 +1,2059 @@ +# check tensorflow and tensorflow-probability are installed and have valid +# versions. error, warn, or message if not and (if not an error) return an +# invisible logical saying whether it is valid + +#' @importFrom utils compareVersion +#' @importFrom reticulate py_available +#' @importFrom cli cli_process_start +#' @importFrom cli cli_process_done +#' @importFrom cli cli_process_failed +check_tf_version <- function(alert = c("none", + "error", + "warn", + "message", + "startup")) { + + # temporarily turn off the reticulate autoconfigure functionality + ac_flag <- Sys.getenv("RETICULATE_AUTOCONFIGURE") + on.exit( + Sys.setenv( + RETICULATE_AUTOCONFIGURE = ac_flag + ) + ) + Sys.setenv(RETICULATE_AUTOCONFIGURE = FALSE) + + alert <- match.arg(alert) + + if (!greta_stash$python_has_been_initialised) { + + cli_process_start( + msg = "Initialising python and checking dependencies, this may take a \\ + moment." + ) + } + + requirements_valid <- c( + python_exists = have_python(), + correct_tf = have_tf(), + correct_tfp = have_tfp() + ) + + if ((all(requirements_valid))) { + + if (!greta_stash$python_has_been_initialised) { + + cli_process_done( + msg_done = "Initialising python and checking dependencies ... done!") + cat("\n") + greta_stash$python_has_been_initialised <- TRUE + + } + + } + + if (!all(requirements_valid)) { + + cli_process_failed() + + cli_msg <- c( + "x" = "The expected python packages are not available", + "i" = "We recommend installing them (in a fresh R session) with:", + "{.code install_greta_deps()}", + "or", + "{.code reinstall_greta_deps()}", + "({.strong Note}: Your R session should not have initialised \\ + Tensorflow yet.)", + "i" = "For more information, see {.code ?install_greta_deps}" + ) + + # if there was a problem, append the solution + message_text <- cli::format_message(cli_msg) + warning_text <- cli::format_warning(cli_msg) + error_text <- cli::format_error(cli_msg) + + switch( + alert, + error = rlang::abort(error_text), + warn = rlang::warn(warning_text), + message = rlang::inform(message_text), + startup = packageStartupMessage(message_text), + none = NULL + ) + } + + invisible(all(requirements_valid)) + +} + + +# check dimensions of arguments to ops, and return the maximum dimension +check_dims <- function(..., + target_dim = NULL, + call = rlang::caller_env()) { + + # coerce args to greta arrays + elem_list <- list(...) + elem_list <- lapply(elem_list, as.greta_array) + + # dimensions of each + dim_list <- lapply(elem_list, dim) + + # as text, for printing + dims_paste <- vapply(dim_list, paste, "", collapse = "x") + dims_text <- paste(dims_paste, collapse = ", ") + + # which are scalars + scalars <- vapply(elem_list, is_scalar, FALSE) + + # if more than one is non-scalar, need to check them + more_than_one_is_non_scalar <- sum(!scalars) > 1 + if (more_than_one_is_non_scalar) { + match_first <- are_identical(dim_list[!scalars], dim_list[!scalars][[1]]) + + # if they're non-scalar, but have the same dimensions, that's fine too + if (!all(match_first)) { + + # otherwise it's not fine + cli::cli_abort( + message = "incompatible dimensions: {dims_text}", + call = call + ) + + } + } + + # if there's a target dimension, make sure they all match it + if (!is.null(target_dim)) { + + # make sure it's 2D + is_1d <- length(target_dim) == 1 + if (is_1d) { + target_dim <- c(target_dim, 1) + } + + target_dim <- as.integer(target_dim) + + # if they are all scalars, that's fine too + if (!all(scalars)) { + + # check all arguments against this + matches_target <- are_identical(dim_list[!scalars], target_dim) + + # error if not + if (!all(matches_target)) { + + cli::cli_abort( + c( + "incorrect array dimensions", + "x" = "array dimensions should be \\ + {paste(target_dim, collapse = 'x')},", + "but input dimensions were {dims_text}." + ) + ) + + } + + } + + output_dim <- target_dim + } else { + + # otherwise, find the correct output dimension + dim_lengths <- lengths(dim_list) + dim_list <- lapply(dim_list, pad_vector, to_length = max(dim_lengths)) + output_dim <- do.call(pmax, dim_list) + } + + output_dim +} + +# make sure a greta array is 2D +check_2d_multivariate <- function(x, + call = rlang::caller_env()) { + if (!is_2d(x)) { + cli::cli_abort( + message = c( + "Dimensions of parameters not compatible with multivariate \\ + distribution parameters of multivariate distributions cannot have \\ + more than two dimensions", + "object {.var x} has dimensions: {paste(dim(x), collapse = 'x')}" + ), + call = call + ) + } +} + +check_square <- function(x = NULL, + dim = NULL, + call = rlang::caller_env()) { + + # allows for specifying x or named dim = dim + dim <- dim %||% dim(x) + ndim <- length(dim) + not_square <- dim[1] != dim[2] + if (ndim == 2 && not_square) { + cli::cli_abort( + message = c( + "Object must be 2D square array", + "x" = "But it had dimension: \\ + {.val {paste(dim, collapse = 'x')}}" + ), + call = call + ) + } +} + +check_sigma_square_2d_greta_array <- function(sigma, + call = rlang::caller_env()){ + # check dimensions of Sigma + not_square <- nrow(sigma) != ncol(sigma) + not_2d <- n_dim(sigma) != 2 + not_square_or_2d <- not_square | not_2d + if (not_square_or_2d) { + cli::cli_abort( + message = c( + "{.arg Sigma} must be a square 2D greta array", + "However, {.arg Sigma} has dimensions \\ + {.val {paste(dim(sigma), collapse = 'x')}}" + ), + call = call + ) + } +} + +check_mean_sigma_have_same_dimensions <- function(mean, + sigma, + call = rlang::caller_env()) { + dim_mean <- ncol(mean) + dim_sigma <- nrow(sigma) + + if (dim_mean != dim_sigma) { + cli::cli_abort( + message = c( + "{.arg mean} and {.arg Sigma} must have the same dimensions", + "However they are different: {dim_mean} vs {dim_sigma}" + ), + call = call + ) + } +} + +check_chol2symm_square_symmetric_upper_tri_matrix <- function( + x, + call = rlang::caller_env() +) { + dim <- dim(x) + is_square <- dim[1] == dim[2] + if (!is_2d(x) || !is_square) { + cli::cli_abort( + message = c( + "{.fun chol2symm} must have square symmetric matrix, assumed to be \\ + upper triangular", + "{.code dim(x)} returns: {dim(x)}" + ), + call = call + ) + } +} + +check_chol2symm_2d_square_upper_tri_greta_array <- function( + x, + call = rlang::caller_env() +) { + dim <- dim(x) + is_square <- dim[1] == dim[2] + if (!is_2d(x) || !is_square) { + cli::cli_abort( + message = c( + "{.fun chol2symm} must have two-dimensional, square, upper-triangular \\ + {.cls greta_array}s", + "{.code dim(x)} returns: {dim(x)}" + ), + call = call + ) + } +} + +# given lists of greta arrays for the vector and scalar parameters (can be +# matrices and column vectors, respectively, where number of rows implies the +# number of realisations) and an optional target number of realisations, error +# if there's a mismatch, and otherwise return the output number of realisations +check_n_realisations <- function(vectors = list(), + scalars = list(), + target = NULL, + call = rlang::caller_env()) { + + # get the number of rows in the vector and scalar objects + nrows <- lapply(c(vectors, scalars), nrow) + + # which are single rows + single_rows <- unlist(nrows) == 1 + + # if more than one has multiple rows, need to check them + if (sum(!single_rows) > 1) { + match_first <- are_identical(nrows[!single_rows], nrows[!single_rows][[1]]) + + # if they're non-scalar, but have the same dimensions, that's fine too + if (!all(match_first)) { + + # otherwise it's not fine + cli::cli_abort( + message = c( + "incompatible number of rows", + x = "{paste(nrows, collapse = ' vs ')}" + ), + call = call + ) + } + } + + # if there's a target number of realisations, check it's valid and make sure + # they all match it + if (!is.null(target)) { + + # make sure it's a scalar + not_scalar <- length(target) != 1 || target < 1 + if (not_scalar) { + cli::cli_abort( + c( + "{.code n_realisations is not a positive scalar interger}", + "{.code n_realisations} must be a positive scalar integer giving \\ + the number of rows of the output", + "x" = "We see {.code n_realisations} = {.code {target}} \\ + having class: \\ + {.cls {class(target)}} and length \\ + {.var {length(target)}}" + ) + ) + } + + target <- as.integer(target) + + # if they are all scalars, that's fine too + if (!all(single_rows)) { + + # check all arguments against this + matches_target <- are_identical(nrows[!single_rows], target) + + # error if not + if (!all(matches_target)) { + cli::cli_abort( + c( + "Realisations do not match rows", + "number of realisations should be {target},", + "but arguments had {paste(nrows, collapse = ', ')} rows" + ) + ) + } + } + + n_realisations <- target + } else { + + # otherwise, find the correct output dimension + n_realisations <- max(unlist(nrows)) + } + + n_realisations +} + + +# check the dimension of maultivariate parameters matches, and matches the +# optional target dimension +check_dimension <- function(vectors = list(), + squares = list(), + target = NULL, + min_dimension = 2L, + call = rlang::caller_env()) { + + # get the number of columns in the vector and scalar objects + ncols <- lapply(c(vectors, squares), ncol) + + # if there's a target dimension, check then use that: + if (!is.null(target)) { + + # make sure it's a scalar + positive_scalar <- length(target) != 1 || target < 1 || !is.finite(target) + if (positive_scalar) { + cli::cli_abort( + message = c( + "{.var dimension} must be a positive scalar integer giving the \\ + dimension of the distribution", + "{.code dim(target)} returns: {dim(target)}" + ), + call = call + ) + } + + dimension <- as.integer(target) + } else { + + # otherwise, get it from the first parameter + dimension <- ncols[[1]] + } + + # check it's big enough + if (dimension < min_dimension) { + cli::cli_abort( + c( + "the dimension of this distribution must be at least \\ + {min_dimension}, but was {dimension}", + "multivariate distributions treat each {.emph row} as a separate \\ + realisation - perhaps you need to transpose something?" + ) + ) + } + + # make sure all the parameters match this dimension + match_dimension <- are_identical(ncols, dimension) + + # otherwise it's not fine + if (!all(match_dimension)) { + cli::cli_abort( + c( + "distribution dimensions do not match implied dimensions", + "The distribution dimension should be {dimension}, but parameters \\ + implied dimensions: {paste(ncols, collapse = ' vs ')}", + "Multivariate distributions treat each {.emph row} as a separate \\ + realisation - perhaps you need to transpose something?" + ) + ) + } + + dimension +} + +# check dimensions of arguments to multivariate distributions +# if n_realisations isn't given, get it from the objects passed in +# if dimension isn't given, get it from the objects passed in +# if n_realisations *is* given, and the objects have one row, replicate them +# if n_realisations is given, and the objects have multiple rows, they must +# match. + +# the objects passed in can either be vector-like (like 'mean'), +# scalar-like (like 'size'), or square (like 'Sigma'). +check_multivariate_dims <- function(vectors = list(), + scalars = list(), + squares = list(), + n_realisations = NULL, + dimension = NULL, + min_dimension = 2L) { + + # coerce args to greta arrays + vectors <- lapply(vectors, as.greta_array) + scalars <- lapply(scalars, as.greta_array) + squares <- lapply(squares, as.greta_array) + + # make sure they are all 2D and the squares are square + lapply(c(vectors, scalars, squares), check_2d_multivariate) + lapply(squares, check_square) + + # check and return the output number of distribution realisations + n_realisations <- check_n_realisations( + vectors, + scalars, + n_realisations + ) + + # check and return the distribution dimension + dimension <- check_dimension( + vectors, + squares, + dimension, + min_dimension + ) + + # return the output greta array dimension + c(n_realisations, dimension) +} + + +# check truncation for different distributions +check_positive <- function(truncation, + call = rlang::caller_env()) { + bound_is_negative <- truncation[1] < 0 + if (bound_is_negative) { + cli::cli_abort( + message = c( + "lower bound must be 0 or higher", + "lower bound is: {.val {truncation[1]}}" + ), + call = call + ) + } +} + +check_unit <- function(truncation, + call = rlang::caller_env()) { + bounds_not_btn_0_1 <- truncation[1] < 0 | truncation[2] > 1 + if (bounds_not_btn_0_1) { + cli::cli_abort( + message = c( + "lower and upper bounds must be between 0 and 1", + "lower bound is: {.val {truncation[1]}}", + "upper bound is: {.val {truncation[2]}}" + ), + call = call + ) + } +} + +# check whether the function calling this is being used as the 'family' argument +# of another modelling function +check_in_family <- function(function_name, + arg, + call = rlang::caller_env()) { + if (missing(arg)) { + # if the first argument is missing, the user might be doing + # `family = binomial()` or similar + arg_is_link <- TRUE + } else { + # if the first argument is one of these text strings, the user might be + # doing `family = binomial("logit")` or similar + links <- c( + "logit", "probit", "cloglog", "cauchit", + "log", "identity", "sqrt" + ) + arg_is_link <- inherits(arg, "character") && + length(arg) == 1 && arg %in% links + } + + # if it's being executed in an environment where it's named 'family', the user + # might be doing `family = binomial` or similar + greta_function <- get(function_name, envir = asNamespace("greta")) + family <- parent.frame(2)$family + function_is_family <- !is.null(family) && identical(family, greta_function) + + # nice user-friendly error message + if (arg_is_link | function_is_family) { + cli::cli_abort( + message = c( + "Wrong function name provided in another model", + "It looks like you're using {.pkg greta}'s {.fun {function_name}} \\ + function in the family argument of another model.", + "Maybe you want to use {.code family = stats::{function_name}},instead?" + ), + call = call + ) + } +} + + +# get & return information about the future plan, and error nicely if invalid + +#' @importFrom future plan future +check_future_plan <- function(call = rlang::caller_env()) { + + plan_info <- future::plan() + + plan_is <- list( + parallel = !inherits(plan_info, "sequential"), + cluster = inherits(plan_info, "cluster"), + multisession = inherits(plan_info, "multisession"), + local = TRUE + ) + + # if running in parallel + if (plan_is$parallel) { + + # if it's a cluster, check there's no forking + if (plan_is$cluster) { + + test_if_forked_cluster() + + f <- future::future(NULL, lazy = FALSE) + + workers <- f$workers + + if (inherits(workers, "cluster")) { + worker <- workers[[1]] + if (!is.null(worker$host)) { + localhosts <- c("localhost", "127.0.0.1", Sys.info()[["nodename"]]) + plan_is$local <- worker$host %in% localhosts + } + } + } else { + + # if multi*, check it's multisession + if (!plan_is$multisession) { + cli::cli_abort( + message = "parallel mcmc samplers cannot be run with \\ + {.code plan(multicore)}", + call = call + ) + } + } + } + + plan_is +} + +# check a list of greta arrays and return a list with names scraped from call +check_greta_arrays <- function(greta_array_list, + fun_name, + hint = NULL, + call = rlang::caller_env()) { + + # check they are greta arrays + are_greta_arrays <- are_greta_array(greta_array_list) + + msg <- NULL + + if (length(greta_array_list) == 0) { + msg <- cli::format_error( + message = c( + "could not find any non-data {.cls greta_array}s" + ) + ) + } + + if (!all(are_greta_arrays)) { + unexpected_items <- names(greta_array_list)[!are_greta_arrays] + + msg <- cli::format_error( + message = c( + "{.fun {fun_name}} arguments must be {.cls greta_array}s", + "The following {cli::qty(length(unexpected_items))} object{?s} passed \\ + to {.fun {fun_name}} {cli::qty(length(unexpected_items))} \\ + {?is not a/are not} {.cls greta array}{?s}:", + "{.val {unexpected_items}}", + "{hint}" + ) + ) + } + + if (!is.null(msg)) { + rlang::abort( + msg, + call = call + ) + } + + greta_array_list +} + +# check the provided list of greta array fixed values (as used in calculate and +# simulate) is valid +check_values_list <- function(values, + env, + call = rlang::caller_env()) { + + # get the values and their names + names <- names(values) + stopifnot(length(names) == length(values)) + + # get the corresponding greta arrays + fixed_greta_arrays <- lapply(names, get, envir = env) + + # make sure that's what they are + are_greta_arrays <- are_greta_array(fixed_greta_arrays) + + if (!all(are_greta_arrays)) { + cli::cli_abort( + message = "the names of arguments to values must all correspond to \\ + named {.cls greta_array}s", + call = call + ) + } + + # coerce value to have the correct dimensions + assign_dim <- function(value, greta_array) { + array <- unclass(get_node(greta_array)$value()) + if (length(array) != length(value)) { + cli::cli_abort( + "a provided value has different number of elements than the \\ + {.cls greta_array}" + ) + } + array[] <- value + array + } + + # make sure the values have the correct dimensions + values <- mapply(assign_dim, + values, + fixed_greta_arrays, + SIMPLIFY = FALSE + ) + + list( + fixed_greta_arrays = fixed_greta_arrays, + values = values + ) +} + +# check that all the variable greta arrays on which the target greta array +# depends are in the list fixed_greta_arrays (for use in calculate_list) +check_dependencies_satisfied <- function(target, + fixed_greta_arrays, + dag, + env, + call = rlang::caller_env()) { + dependency_names <- function(x) { + get_node(x)$parent_names(recursive = TRUE) + } + + # find all the nodes depended on by this one + dependencies <- dependency_names(target) + + # find all the nodes depended on by the new values, and remove them from the + # list + complete_dependencies <- unlist( + lapply( + fixed_greta_arrays, + dependency_names + ) + ) + + unmet <- !dependencies %in% complete_dependencies + unmet_dependencies <- dependencies[unmet] + + # find all of the remaining nodes that are variables + unmet_nodes <- dag$node_list[unmet_dependencies] + unmet_node_types <- vapply(unmet_nodes, node_type, FUN.VALUE = "") + is_variable <- unmet_node_types == "variable" + + # if there are any undefined variables + if (any(is_variable)) { + + # try to find the associated greta arrays to provide a more informative + # error message + greta_arrays <- all_greta_arrays(env, include_data = FALSE) + + greta_array_node_names <- vapply(greta_arrays, + function(x) get_node(x)$unique_name, + FUN.VALUE = "" + ) + + unmet_variables <- unmet_nodes[is_variable] + + matches <- names(unmet_variables) %in% greta_array_node_names + + unmet_names_idx <- greta_array_node_names %in% names(unmet_variables) + unmet_names <- names(greta_array_node_names)[unmet_names_idx] + + # build the message + if (any(matches)) { + names_text <- paste(unmet_names, collapse = ", ") + msg <- cli::format_error( + message = c( + "Please provide values for the following {length(names_text)} \\ + {.cls greta_array}{?s}:", + "{.var {names_text}}" + ) + ) + } else { + msg <- cli::format_error( + message = "The names of the missing {.cls greta_array}s could not \\ + be detected" + ) + } + + final_msg <- cli::format_error( + message = c( + "greta array(s) do not have values", + "values have not been provided for all {.cls greta_array}s on which \\ + the target depends, and {.var nsim} has not been set.", + "{msg}" + ) + ) + + rlang::abort( + message = msg, + call = call + ) + + } +} + +check_cum_op <- function(x, + call = rlang::caller_env()) { + dims <- dim(x) + x_not_column_vector <- length(dims) > 2 | dims[2] != 1 + if (x_not_column_vector) { + cli::cli_abort( + message = c( + "{.var x} must be a column vector", + "but {.var x} has dimensions {paste(dims, collapse = 'x')}" + ), + call = call + ) + } +} + + +#' @importFrom future availableCores +check_n_cores <- function(n_cores, + samplers, + plan_is) { + + # if the plan is remote, and the user hasn't specificed the number of cores, + # leave it as all of them + if (is.null(n_cores) & !plan_is$local) { + return(NULL) + } + + n_cores_detected <- future::availableCores() + allowed_n_cores <- seq_len(n_cores_detected) + + cores_exceed_available <- !is.null(n_cores) && !n_cores %in% allowed_n_cores + if (cores_exceed_available) { + check_positive_integer(n_cores, "n_cores") + + cli::cli_warn( + message = "{n_cores} cores were requested, but only {n_cores_detected} \\ + are available." + ) + + n_cores <- NULL + } + + # if n_cores isn't user-specified, set it so there's no clash between samplers + n_cores <- n_cores %||% floor(n_cores_detected / samplers) + + # make sure there's at least 1 + n_cores <- max(n_cores, 1) + + as.integer(n_cores) +} + +check_positive_integer <- function(x, + name = "", + call = rlang::caller_env()) { + suppressWarnings(x <- as.integer(x)) + + not_positive_integer <- length(x) != 1 | is.na(x) | x < 1 + if (not_positive_integer) { + cli::cli_abort( + message = c( + "{name} must be a positive integer", + "However the value provided was: {.val {x}}" + ), + call = call + ) + } + + x +} + +# batch sizes must be positive numerics, rounded off to integers +check_trace_batch_size <- function(x, + call = rlang::caller_env()) { + valid <- is.numeric(x) && length(x) == 1 && x >= 1 + if (!valid) { + cli::cli_abort( + message = "{.var trace_batch_size} must be a single numeric value \\ + greater than or equal to 1", + call = call + ) + } + x +} + +check_if_greta_array_in_mcmc <- function(x, + call = rlang::caller_env()){ + if (!is.greta_model(x) && is.greta_array(x)) { + cli::cli_abort( + message = c( + "MCMC requires input to be a {.cls greta_model} not a {.cls greta_array}", + "x" = "{.var x} is a {.cls greta_array} not a {.cls greta_model}", + "i" = "You can convert {.var x} into a {.cls greta_model} by running:", + "{.code model(x)}" + ), + call = call + ) + } +} + +check_if_greta_model <- function(x, + call = rlang::caller_env()) { + if (!is.greta_model(x)) { + cli::cli_abort( + message = c( + "{.var x} must be a {.cls greta_model}", + "But {.var x} is {.cls {class(x)}}" + ), + call = call + ) + } +} + + + + +complex_error <- function(z) { + cli::cli_abort( + "{.pkg greta} does not yet support complex numbers" + ) +} + +#' @export +Im.greta_array <- complex_error + +#' @export +Re.greta_array <- complex_error + +#' @export +Arg.greta_array <- complex_error + +#' @export +Conj.greta_array <- complex_error + +#' @export +Mod.greta_array <- complex_error + +check_if_unsampleable_and_unfixed <- function(fixed_greta_arrays, + dag, + call = rlang::caller_env()) { + # check there are no variables without distributions (or whose children have + # distributions - for lkj & wishart) that aren't given fixed values + variables <- dag$node_list[dag$node_types == "variable"] + have_distributions <- have_distribution(variables) + any_child_has_distribution <- function(variable) { + have_distributions <- have_distribution(variable$children) + any(have_distributions) + } + children_have_distributions <- vapply( + variables, + any_child_has_distribution, + FUN.VALUE = logical(1) + ) + + unsampleable <- !have_distributions & !children_have_distributions + + fixed_nodes <- lapply(fixed_greta_arrays, get_node) + fixed_node_names <- extract_unique_names(fixed_nodes) + + unfixed <- !(names(variables) %in% fixed_node_names) + + if (any(unsampleable & unfixed)) { + cli::cli_abort( + # NOTE: + # is it possible to identify the names of these arrays or variables? + message = "the target {.cls greta_array}s are related to variables \\ + that do not have distributions so cannot be sampled", + call = call + ) + } +} + +check_if_array_is_empty_list <- function(target, call = rlang::caller_env()){ + no_greta_arrays_provided <- identical(target, list()) + if (no_greta_arrays_provided) { + cli::cli_abort( + message = c( + "{.fun calculate} requires {.cls greta array}s", + "no {.cls greta array}s were provided to {.fun calculate}" + ), + call = call + ) + } +} + +check_if_lower_upper_numeric <- function(lower, + upper, + call = rlang::caller_env()) { + if (!is.numeric(lower) | !is.numeric(upper)) { + cli::cli_abort( + message = c( + "lower and upper must be numeric", + "lower has class: {class(lower)}", + "lower has length: {length(lower)}", + "upper has class: {class(upper)}", + "upper has length: {length(upper)}" + ), + call = call + ) + } +} + +check_if_lower_upper_has_bad_limits <- function(bad_limits, + call = rlang::caller_env()) { + if (bad_limits) { + cli::cli_abort( + message = "lower and upper must either be -Inf (lower only), \\ + Inf (upper only) or finite", + call = call + ) + } +} + +check_if_upper_gt_lower <- function(lower, + upper, + call = rlang::caller_env()) { + if (any(lower >= upper)) { + cli::cli_abort( + message = c( + "upper bounds must be greater than lower bounds", + "lower is: {.val {lower}}", + "upper is: {.val {upper}}" + ), + call = call + ) + } +} + + +check_targets_stochastic_and_not_sampled <- function( + target, + mcmc_dag_variables, + call = rlang::caller_env() +) { + target_nodes <- lapply(target, get_node) + target_node_names <- extract_unique_names(target_nodes) + existing_variables <- target_node_names %in% names(mcmc_dag_variables) + have_distributions <- have_distribution(target_nodes) + new_stochastics <- have_distributions & !existing_variables + if (any(new_stochastics)) { + n_stoch <- sum(new_stochastics) + cli::cli_abort( + message = c( + "{.arg nsim} must be set to sample {.cls greta array}s not in MCMC \\ + samples", + "the greta {cli::qty(n_stoch)} arra{?ys/y} \\ + {.var {names(target)[new_stochastics]}} {cli::qty(n_stoch)} \\ + {?have distributions and are/has a distribution and is} not in the \\ + MCMC samples, so cannot be calculated from the samples alone.", + "Set {.arg nsim} if you want to sample them conditionally on the \\ + MCMC samples" + ), + call = call + ) + } +} + +# see if the new dag introduces any new variables +check_dag_introduces_new_variables <- function(dag, + mcmc_dag, + call = rlang::caller_env()) { + new_types <- dag$node_types[!connected_to_draws(dag, mcmc_dag)] + any_new_variables <- any(new_types == "variable") + if (any_new_variables) { + cli::cli_abort( + message = c( + "{.arg nsim} must be set to sample {.cls greta array}s not in MCMC \\ + samples", + "the target {.cls greta array}s are related to new variables that \\ + are not in the MCMC samples, so cannot be calculated from the \\ + samples alone.", + "Set {.arg nsim} if you want to sample them conditionally on the \\ + MCMC samples" + ), + call = call + ) + } +} + +check_commanality_btn_dags <- function(dag, + mcmc_dag, + call = rlang::caller_env()) { + target_not_connected_to_mcmc <- !any(connected_to_draws(dag, mcmc_dag)) + if (target_not_connected_to_mcmc) { + cli::cli_abort( + message = "the target {.cls greta array}s do not appear to be \\ + connected to those in the {.cls greta_mcmc_list} object", + call = call + ) + } +} + +check_finite_positive_scalar_integer <- function(x, + arg = rlang::caller_arg(x), + call = rlang::caller_env()){ + is_not_finite_positive_scalar_integer <- !is.numeric(x) || + length(x) != 1 || + !is.finite(x) || + x <= 0 + + if (is_not_finite_positive_scalar_integer) { + + cli::cli_abort( + message = c( + "{.arg {arg}} must be a finite, positive, scalar integer", + "x" = "We see {.arg {arg}} = {.arg {x}}", + "x" = "having class: {.cls {class(x)}}", + "x" = "and length {.var {length(x)}}" + ), + call = call + ) + } + +} + +check_if_greta_mcmc_list <- function(x, + arg = rlang::caller_arg(x), + call = rlang::caller_env()){ + if (!is.greta_mcmc_list(x)) { + cli::cli_abort( + message = c( + "{.arg {arg}} must be a {.cls greta_mcmc_list} object", + "created by {.fun greta::mcmc}, {.fun greta::stashed_samples}, or \\ + {.fun greta::extra_samples}" + ), + call = call + ) + } +} + +check_if_model_info <- function(x, + arg = rlang::caller_arg(x), + call = rlang::caller_env()){ + valid <- !is.null(x) + + if (!valid) { + cli::cli_abort( + message = c( + "{.arg {arg}} is an {.cls mcmc.list} object, but is not associated \\ + with any model information", + "Perhaps it wasn't created by {.fun greta::mcmc}, \\ + {.fun greta::stashed_samples}, or {.fun greta::extra_samples}?" + ), + call = call + ) + } + +} + +check_2d <- function(x, + arg = rlang::caller_arg(x), + call = rlang::caller_env()){ + if (!is_2d(x)){ + cli::cli_abort( + message = c( + "{.arg {arg} must be two dimensional}", + "However, {.arg {arg}} has dimensions: {paste(dim(x), collapse = 'x')}" + ), + call = call + ) + } +} + +check_positive_scalar <- function(x, + arg = rlang::caller_arg(x), + call = rlang::caller_env()){ + + not_positive_scalar <- !is.numeric(x) || !length(x) == 1 || x <= 0 + if (not_positive_scalar){ + cli::cli_abort( + message = c( + "{.arg {arg}} must be a positive scalar value, or a scalar \\ + {.cls greta_array}" + ), + call = call + ) + } +} + +check_scalar <- function(x, + arg = rlang::caller_arg(x), + call = rlang::caller_env()){ + scalar <- is_scalar(x) + if (!scalar){ + cli::cli_abort( + message = c( + "{.arg {arg}} must be a scalar", + "However {.arg {arg}} had dimensions: \\ + {paste0(dim({x}), collapse = 'x')}" + ), + call = call + ) + } +} + +check_finite <- function(x, + arg = rlang::caller_arg(x), + call = rlang::caller_env()){ + not_finite <- !is.finite(x) + if (not_finite){ + cli::cli_abort( + message = c( + "{.arg {x}} must be a finite scalar", + "But their values are:", + "{.arg {x}}: {x}" + ), + call = call + ) + } +} + +check_x_gte_y <- function(x, + y, + x_arg = rlang::caller_arg(x), + y_arg = rlang::caller_arg(y), + call = rlang::caller_env()){ + + x_gte_y <- x >= y + + if (x_gte_y) { + cli::cli_abort( + message = c( + "{.arg {y_arg}} must be greater than {.arg {x_arg}}", + "Their values are:", + "{.arg {x_arg}}: {x}", + "{.arg {y_arg}}: {y}" + ), + call = call + ) + } + +} + + +check_numeric_length_1 <- function(x, + arg = rlang::caller_arg(x), + call = rlang::caller_env()){ + good_type <- is.numeric(x) && length(x) == 1 + + if (!good_type) { + cli::cli_abort( + c( + "{.arg {arg}} must be a numeric vector of length 1", + "However its class, and length are:", + "{.arg {arg}}:", + "*" = "(class: {.cls {class({x})}})", + "*" = "(length: {.val {length({x})}})" + ), + call = call + ) + } + +} + +check_both_2d <- function(x, + y, + x_arg = rlang::caller_arg(x), + y_arg = rlang::caller_arg(y), + call = rlang::caller_env()){ + if (!is_2d(x) | !is_2d(y)) { + cli::cli_abort( + message = c( + "Only two-dimensional {.cls greta_array}s can be matrix-multiplied", + "Dimensions for each are:", + "{.arg {x_arg}}: {.val {pretty_dim(x)}}", + "{.arg {y_arg}}: {.val {pretty_dim(y)}}" + ), + call = call + ) + } +} + +check_compatible_dimensions <- function(x, + y, + call = rlang::caller_env()){ + + incompatible_dimensions <- dim(x)[2] != dim(y)[1] + if (incompatible_dimensions) { + cli::cli_abort( + message = c( + "Incompatible dimensions: \\ + {.val {paste0(dim(x), collapse = 'x')}} vs \\ + {.val {paste0(dim(y), collapse = 'x')}}" + ), + call = call + ) + } +} + +check_distribution_support <- function(x, + arg = rlang::caller_arg(x), + call = rlang::caller_env()){ + n_supports <- length(unique(x)) + if (n_supports != 1) { + supports_text <- vapply( + X = unique(x), + FUN = paste, + collapse = " to ", + FUN.VALUE = character(1) + ) + + cli::cli_abort( + message = c( + "Component distributions must have the same support", + "However the component distributions have different support:", + "{.val {paste(supports_text, collapse = ' vs. ')}}" + ), + call = call + ) + } + +} + +check_not_multivariate_univariate <- function(x, + arg = rlang::caller_arg(x), + call = rlang::caller_env()){ + is_multivariate_and_univariate <- !all(x) & !all(!x) + if (is_multivariate_and_univariate) { + cli::cli_abort( + message = c( + "Cannot construct a mixture from a combination of multivariate and \\ + univariate distributions" + ), + call = call + ) + } +} + +check_not_discrete_continuous <- function(x, + name, + arg = rlang::caller_arg(x), + call = rlang::caller_env()){ + + is_discrete_and_continuous <- !all(x) & !all(!x) + if (is_discrete_and_continuous) { + cli::cli_abort( + message = c( + "Cannot construct a {name} distribution from a combination of discrete and \\ + continuous distributions" + ), + call = call + ) + } +} + +check_num_distributions <- function(n_distributions, + at_least, + name, + call = rlang::caller_env()){ + if (n_distributions < at_least) { + cli::cli_abort( + message = c( + "{.fun {name}} must be passed at least {.val {at_least}} \\ + distributions", + "The number of distributions passed was: {.val {n_distributions}}" + ), + call = call + ) + } + +} + +check_weights_dim <- function(weights_dim, + dim, + n_distributions, + arg = rlang::caller_arg(weights_dim), + call = rlang::caller_env()){ + + # weights should have n_distributions as the first dimension + if (weights_dim[1] != n_distributions) { + cli::cli_abort( + message = c( + "The first dimension of weights must be the number of \\ + distributions in the mixture ({.val {n_distributions}})", + "However it was {.val {weights_dim[1]}}" + ), + call = call + ) + } + + weights_extra_dim <- dim + n_extra_dim <- length(weights_extra_dim) + weights_last_dim_is_1 <- weights_extra_dim[n_extra_dim] == 1 + if (weights_last_dim_is_1) { + weights_extra_dim <- weights_extra_dim[-n_extra_dim] + } + + # remainder should be 1 or match weights_extra_dim + w_dim <- weights_dim[-1] + dim_1 <- length(w_dim) == 1 && w_dim == 1 + dim_same <- all(w_dim == weights_extra_dim) + incompatible_dims <- !(dim_1 | dim_same) + if (incompatible_dims) { + cli::cli_abort( + message = c( + "The dimension of weights must be either \\ + {.val {n_distributions}x1} or \\ + {.val {n_distributions}x{pretty_dim(dim)}}", + " but was {.val {pretty_dim(weights_dim)}}" + ), + call = call + ) + } + +} + +check_initials_are_named <- function(values, + call = rlang::caller_env()){ + names <- names(values) + initials_not_all_named <- length(names) != length(values) + if (initials_not_all_named) { + cli::cli_abort( + message = "All initial values must be named", + call = call + ) + } +} + +check_initials_are_numeric <- function(values, + call = rlang::caller_env()){ + are_numeric <- vapply(values, is.numeric, FUN.VALUE = FALSE) + if (!all(are_numeric)) { + cli::cli_abort( + message = "initial values must be numeric", + call = call + ) + } +} + +check_initial_values_match_chains <- function(initial_values, + n_chains, + call = rlang::caller_env()){ + + initials <- initial_values + not_initials_but_list <- !is.initials(initials) && is.list(initials) + if (not_initials_but_list) { + # if the user provided a list of initial values, check elements and length + all_initials <- all(are_initials(initials)) + + n_sets <- length(initials) + + initial_values_do_not_match_chains <- n_sets != n_chains + if (initial_values_do_not_match_chains && all_initials) { + cli::cli_abort( + message = c( + "The number of provided initial values does not match chains", + "{n_sets} set{?s} of initial values were provided, but there \\ + {cli::qty(n_chains)} {?is only/are} {n_chains} \\ + {cli::qty(n_chains)} chain{?s}" + ), + call = call + ) + } + } + +} + +check_initial_values_correct_dim <- function(target_dims, + replacement_dims, + call = rlang::caller_env()){ + + same_dims <- mapply(identical, target_dims, replacement_dims) + + if (!all(same_dims)) { + cli::cli_abort( + message = "The initial values provided have different dimensions than \\ + the named {.cls greta_array}s", + call = call + ) + } + +} + +check_initial_values_correct_class <- function(initial_values, + call = rlang::caller_env()){ + + initials <- initial_values + not_initials_but_list <- !is.initials(initials) && is.list(initials) + not_initials_not_list <- !is.initials(initials) && !is.list(initials) + # if the user provided a list of initial values, check elements and the + # length + all_initials <- all(are_initials(initials)) + not_all_initials <- !all_initials + + if (not_initials_but_list && not_all_initials || not_initials_not_list) { + cli::cli_abort( + message = c( + "{.arg initial_values} must be an initials object created with \\ + {.fun initials}, or a simple list of initials objects" + ), + call = call + ) + } + +} + +check_nodes_all_variable <- function(nodes, + call = rlang::caller_env()){ + types <- lapply(nodes, node_type) + are_variables <- are_identical(types, "variable") + + if (!all(are_variables)) { + cli::cli_abort( + "Initial values can only be set for variable {.cls greta_array}s" + ) + } + +} + +check_greta_arrays_associated_with_model <- function(tf_names, + call = rlang::caller_env()){ + missing_names <- is.na(tf_names) + if (any(missing_names)) { + bad <- names(tf_names)[missing_names] + cli::cli_abort( + c( + "Some {.cls greta_array}s passed to {.fun initials} are not \\ + associated with the model:", + "{.var {bad}}" + ) + ) + } +} + +check_not_data_greta_arrays <- function(model, + call = rlang::caller_env()){ + + # find variable names to label samples + target_greta_arrays <- model$target_greta_arrays + names <- names(target_greta_arrays) + + # check they're not data nodes, provide a useful error message if they are + are_data <- vapply( + target_greta_arrays, + function(x) is.data_node(get_node(x)), + FUN.VALUE = FALSE + ) + + if (any(are_data)) { + cli::cli_abort( + message = c( + "Data {.cls greta_array}s cannot be sampled", + "{.var {names[are_data]}} \\ + {?is a data/are data} {.cls greta_array}(s)" + ), + call = call + ) + } +} + +check_diagrammer_installed <- function(call = rlang::caller_env()){ + if (!is_DiagrammeR_installed()) { + cli::cli_abort( + message = c( + "The {.pkg DiagrammeR} package must be installed to plot \\ + {.pkg greta} models", + "Install {.pkg DiagrammeR} with:", + "{.code install.packages('DiagrammeR')}" + ), + call = call + ) + } +} + +check_unfixed_discrete_distributions <- function(dag, + call = rlang::caller_env()){ + + # check for unfixed discrete distributions + distributions <- dag$node_list[dag$node_types == "distribution"] + bad_nodes <- vapply( + X = distributions, + FUN = function(x) { + valid_target <- is.null(x$target) || is.data_node(x$target) + x$discrete && !valid_target + }, + FUN.VALUE = FALSE + ) + + if (any(bad_nodes)) { + cli::cli_abort( + "Model contains a discrete random variable that doesn't have a fixed \\ + value, so inference cannot be carried out." + ) + } +} + +check_greta_array_type <- function(x, + optional, + call = rlang::caller_env()){ + + if (!is.numeric(x) && !is.logical(x) && !optional){ + cli::cli_abort( + message = c( + "{.cls greta_array} must contain the same type", + "Cannot coerce {.cls matrix} to a {.cls greta_array} unless it is \\ + {.cls numeric}, {.cls integer} or {.cls logical}.", + "This {.cls matrix} had type: {.cls {class(as.vector(x))}}" + ), + call = call + ) + } +} + +check_greta_data_frame <- function(x, + optional, + arg = rlang::caller_arg(x), + call = rlang::caller_env()){ + classes <- vapply(x, class, "") + valid <- classes %in% c("numeric", "integer", "logical") + + array_has_different_types <- !optional & !all(valid) + if (array_has_different_types) { + invalid_types <- unique(classes[!valid]) + cli::cli_abort( + message = c( + "{.cls greta_array} must contain the same type", + "Cannot coerce a {.cls data.frame} to a {.cls greta_array} unless \\ + all columns are {.cls numeric, integer} or {.cls logical}.", + "This dataframe had columns of type: {.cls {invalid_types}}" + ), + call = call + ) + } +} + +check_ncols_match <- function(x1, + x2, + call = rlang::caller_env()){ + if (ncol(x1) != ncol(x2)) { + cli::cli_abort( + message = c( + "{.var x1} and {.var x2} must have the same number of columns", + "However {.code ncol(x1)} = {ncol(x1)} and \\ + {.code ncol(x2)} = {ncol(x2)}" + ), + call = call + ) + } +} + +check_fields_installed <- function(){ + fields_installed <- requireNamespace("fields", quietly = TRUE) + if (!fields_installed) { + cli::cli_abort( + c( + "{.pkg fields} package must be installed to use {.fun rdist} on greta \\ + arrays", + "Install {.pkg fields} with:", + "{.code install.packages('fields')}" + ) + ) + } +} + +check_2_by_1 <- function(x, + call = rlang::caller_env()){ + dim_x <- dim(x) + is_2_by_1 <- is_2d(x) && dim_x[2] == 1L + if (!is_2_by_1) { + cli::cli_abort( + message = c( + "{.var x} must be 2D {.cls greta_array} with one column", + "However {.var x} has dimensions {paste(dim_x, collapse = 'x')}" + ), + call = call + ) + } +} + + +check_transpose <- function(x, + call = rlang::caller_env()){ + if (x) { + cli::cli_abort( + message = "{.arg transpose} must be FALSE for {.cls greta_array}s", + call = call + ) + } +} + +check_x_matches_ncol <- function(x, + ncol_of, + x_arg = rlang::caller_arg(x), + ncol_of_arg = rlang::caller_arg(ncol_of), + call = rlang::caller_env()){ + + if (x != ncol(ncol_of)) { + cli::cli_abort( + message = "{.arg {x}} must equal {.code ncol({ncol_of_arg})} for \\ + {.cls greta_array}s", + call = call + ) + } +} + +check_stats_dim_matches_x_dim <- function(x, + margin, + stats, + call = rlang::caller_env()){ + stats_dim_matches_x_dim <- dim(x)[margin] == dim(stats)[1] + if (!stats_dim_matches_x_dim) { + cli::cli_abort( + message = c( + "The number of elements of {.var stats} does not match \\ + {.code dim(x)[MARGIN]}" + ), + call = call + ) + } +} + +# STATS must be a column array +check_is_column_array <- function(x, + arg = rlang::caller_arg(x), + call = rlang::caller_env()){ + + is_column_array <- is_2d(x) && dim(x)[2] == 1 + if (!is_column_array) { + cli::cli_abort( + message = c( + "{.arg {arg}} not a column vector array", + "{.arg {arg}} must be a column vector array", + "x" = "{.arg {arg}} has dimensions:", + "{.val {pretty_dim(x)}}" + ), + call = call + ) + } +} + +check_rows_equal <- function(a, + b, + a_arg = rlang::caller_arg(a), + b_arg = rlang::caller_arg(b), + call = rlang::caller_env()){ + + # b must have the right number of rows + rows_not_equal <- dim(b)[1] != dim(a)[1] + if (rows_not_equal) { + cli::cli_abort( + message = c( + "Number of rows not equal", + "x" = "{.arg {b_arg}} must have the same number of rows as \\ + {.arg {a_arg}} ({.val {dim(a)[1]}}), but has \\ + {.val {dim(b)[1]}} rows instead" + ), + call = call + ) + } +} + +check_final_dim <- function(dim, + thing, + call = rlang::caller_env()){ + # dimension of the free state version + n_dim <- length(dim) + last_dim <- dim[n_dim] + n_last_dim <- length(last_dim) + last_dim_gt_1 <- !last_dim > 1 + if (last_dim_gt_1) { + cli::cli_abort( + message = c( + "The final dimension of a {thing} must have more than \\ + one element", + "The final dimension has: {.val {n_last_dim} element{?s}}" + ), + call = call + ) + } + +} + +check_param_greta_array <- function(x, + arg = rlang::caller_arg(x), + call = rlang::caller_env()){ + if (is.greta_array(x)) { + cli::cli_abort( + message = "{.arg {arg}} must be fixed, they cannot be another \\ + {.cls greta_array}", + call = call + ) + } +} + +check_not_greta_array <- function(x, + arg = rlang::caller_arg(x), + call = rlang::caller_env()){ + if (is.greta_array(x)) { + cli::cli_abort( + "{.arg {arg}} cannot be a {.cls greta_array}" + ) + } +} + +# if it errored +check_for_errors <- function(res, + call = rlang::caller_env()){ + + if (inherits(res, "error")) { + + # check for known numerical errors + numerical_errors <- vapply(greta_stash$numerical_messages, + grepl, + res$message, + FUN.VALUE = 0 + ) == 1 + + # if it was just a numerical error, quietly return a bad value + if (!any(numerical_errors)) { + cli::cli_abort( + message = c( + "{.pkg greta} hit a tensorflow error:", + "{res}" + ), + call = call + ) + } + } + +} + +check_dim_length <- function(dim, + call = rlang::caller_env()){ + + ndim <- length(dim) + ndim_gt2 <- ndim > 2 + if (ndim_gt2) { + cli::cli_abort( + message = c( + "{.arg dim} can either be a scalar or a vector of length 2", + "However {.arg dim} has length {.val {ndim}}, and contains:", + "{.val {dim}}" + ), + call = call + ) + } +} + +check_is_distribution_node <- function(distribution, + call = rlang::caller_env()){ + if (!is.distribution_node(distribution)) { + cli::cli_abort( + message = c("Invalid distribution"), + call = call + ) + } + +} + +check_values_dim <- function(value, + dim, + call = rlang::caller_env()){ + values_have_wrong_dim <- !is.null(value) && !all.equal(dim(value), dim) + if (values_have_wrong_dim) { + cli::cli_abort( + message = "Values have the wrong dimension so cannot be used", + call = call + ) + } + +} + +# check they are all scalar +check_dot_nodes_scalar <- function(dot_nodes, + call = rlang::caller_env()){ + are_scalar <- vapply(dot_nodes, is_scalar, logical(1)) + if (!all(are_scalar)) { + cli::cli_abort( + message = "{.fun joint} only accepts probability distributions over \\ + scalars", + call = call + ) + } + +} + +inform_if_one_set_of_initials <- function(initial_values, + n_chains, + call = rlang::caller_env()){ + + is_blank <- identical(initial_values, initials()) + + one_set_of_initials <- !is_blank & n_chains > 1 + if (one_set_of_initials) { + cli::cli_inform( + message = "Only one set of initial values was provided, and was used \\ + for all chains" + ) + } +} + +# the user might pass greta arrays with groups of nodes that are unconnected +# to one another. Need to check there are densities in each graph +check_subgraphs <- function(dag, + call = rlang::caller_env()){ + # get and check the types + types <- dag$node_types + + # the user might pass greta arrays with groups of nodes that are unconnected + # to one another. Need to check there are densities in each graph + + # so find the subgraph to which each node belongs + graph_id <- dag$subgraph_membership() + + graphs <- unique(graph_id) + n_graphs <- length(graphs) + + # separate messages to avoid the subgraphs issue for beginners + + if (n_graphs == 1) { + density_message <- cli::format_error( + c( + "none of the {.cls greta_array}s in the model are associated with a \\ + probability density, so a model cannot be defined" + ) + ) + variable_message <- cli::format_error( + c( + "none of the {.cls greta_array}s in the model are unknown, so a model \\ + cannot be defined" + ) + ) + } else { + density_message <- cli::format_error( + c( + "the model contains {n_graphs} disjoint graphs", + "one or more of these sub-graphs does not contain any \\ + {.cls greta_array}s that are associated with a probability density, \\ + so a model cannot be defined" + ) + ) + variable_message <- cli::format_error( + c( + "the model contains {n_graphs} disjoint graphs", + "one or more of these sub-graphs does not contain any \\ + {.cls greta_array}s that are unknown, so a model cannot be defined" + ) + ) + } + + for (graph in graphs) { + types_sub <- types[graph_id == graph] + + # check they have a density among them + no_distribution <- !("distribution" %in% types_sub) + if (no_distribution) { + cli::cli_abort( + message = density_message, + call = call + ) + } + + # check they have a variable node among them + no_variable_node <- !("variable" %in% types_sub) + if (no_variable_node) { + cli::cli_abort( + message = variable_message, + call = call + ) + } + } + +} + +check_has_representation <- function(repr, + name, + error, + call = rlang::caller_env()){ + not_represented <- error && is.null(repr) + if (not_represented) { + cli::cli_abort( + message = "{.cls greta_array} has no representation {.var {name}}", + call = call + ) + } +} + +check_has_anti_representation <- function(repr, + name, + error, + call = rlang::caller_env()){ + not_anti_represented <- error && is.null(repr) + if (not_anti_represented) { + cli::cli_abort( + message = "{.cls greta_array} has no anti representation {.var {name}}", + call = call + ) + } +} + +check_is_greta_array <- function(x, + arg = rlang::caller_arg(x), + call = rlang::caller_env()){ + if (!is.greta_array(x)) { + cli::cli_abort( + message = c( + "{.arg {arg}} must be {.cls greta_array}", + "{.arg {arg}} is: {.cls {class(x)}}" + ), + call = call + ) + } +} + +check_missing_infinite_values <- function(x, + optional, + call = rlang::caller_env()){ + contains_missing_or_inf <- !optional & any(!is.finite(x)) + if (contains_missing_or_inf) { + cli::cli_abort( + message = c( + "{.cls greta_array} must not contain missing or infinite values" + ), + call = call + ) + } +} + +check_truncation_implemented <- function(tfp_distribution, + distribution_node, + call = rlang::caller_env()){ + + cdf <- tfp_distribution$cdf + quantile <- tfp_distribution$quantile + + is_truncated <- is.null(cdf) | is.null(quantile) + if (is_truncated) { + cli::cli_abort( + message = c( + "Sampling is not yet implemented for truncated \\ + {.val {distribution_node$distribution_name}} distributions" + ), + call = call + ) + } + +} + +check_sampling_implemented <- function(sample, + distribution_node, + call = rlang::caller_env()){ + if (is.null(sample)) { + cli::cli_abort( + "Sampling is not yet implemented for \\ + {.val {distribution_node$distribution_name}} distributions" + ) + } +} + +check_timeout <- function(it, + maxit, + call = rlang::caller_env()){ + # check we didn't time out + if (it == maxit) { + cli::cli_abort( + message = c( + "Could not determine the number of independent models in a reasonable \\ + amount of time", + "Iterations = {.val {it}}", + "Maximum iterations = {.cal {maxit}}" + ), + call = call + ) + } + +} + + +checks_module <- module( + check_tf_version, + check_dims, + check_unit, + check_positive, + check_in_family, + check_future_plan, + check_greta_arrays, + check_values_list, + check_dependencies_satisfied, + check_cum_op, + check_future_plan, + check_n_cores, + check_positive_integer, + check_if_array_is_empty_list, + complex_error, + check_targets_stochastic_and_not_sampled, + check_dag_introduces_new_variables, + check_commanality_btn_dags, + check_finite_positive_scalar_integer, + check_if_greta_mcmc_list, + check_2d_multivariate +) + diff --git a/R/chol2symm.R b/R/chol2symm.R index 15761c75..3285cdfa 100644 --- a/R/chol2symm.R +++ b/R/chol2symm.R @@ -1,8 +1,8 @@ #' @title Cholesky Factor to Symmetric Matrix #' -#' @description Evaluate \code{t(x) \%*\% x} efficiently, where \code{x} is the +#' @description Evaluate `t(x) \%*\% x` efficiently, where `x` is the #' (upper-triangular) Cholesky factor of a symmetric, positive definite square -#' matrix. I.e. it is the inverse of \code{chol}. +#' matrix. I.e. it is the inverse of `chol`. #' #' @param x a square, upper triangular matrix representing the Cholesky #' factor of a symmetric, positive definite square matrix @@ -12,10 +12,12 @@ #' @examples #' # a symmetric, positive definite square matrix #' y <- rWishart(1, 4, diag(3))[, , 1] +#' y #' u <- chol(y) +#' u +#' chol2symm(u) #' identical(y, chol2symm(u)) #' identical(chol2symm(u), t(u) %*% u) -#' #' \dontrun{ #' u_greta <- cholesky_variable(3) #' y_greta <- chol2symm(u) @@ -27,30 +29,23 @@ chol2symm <- function(x) { #' @export chol2symm.default <- function(x) { - dim <- dim(x) - if (length(dim) != 2 || dim[1] != dim[2]) { - stop("x must be a square symmetric matrix, assumed to be upper triangular", - call. = FALSE) - } + check_chol2symm_square_symmetric_upper_tri_matrix(x) t(x) %*% x - } #' @export chol2symm.greta_array <- function(x) { - + ## TF1/2 + ## Does this extra coercion need to be here? + ## in order for this to dispatch with S3 it must be a greta array already? x <- as.greta_array(x) - dim <- dim(x) - if (length(dim) != 2 || dim[1] != dim[2]) { - stop("only two-dimensional, square, upper-triangular greta arrays ", - "can be used by chol2symm", - call. = FALSE) - } + + check_chol2symm_2d_square_upper_tri_greta_array(x) # sum the elements op("chol2symm", x, - tf_operation = "tf_chol2symm", - representations = list(cholesky = x)) - + tf_operation = "tf_chol2symm", + representations = list(cholesky = x) + ) } diff --git a/R/conda_greta_env.R b/R/conda_greta_env.R new file mode 100644 index 00000000..adfbeb21 --- /dev/null +++ b/R/conda_greta_env.R @@ -0,0 +1,18 @@ +use_greta_conda_env <- function() { + tryCatch( + expr = reticulate::use_condaenv("greta-env-tf2", required = TRUE), + error = function(e) NULL + ) +} + +using_greta_conda_env <- function() { + config <- reticulate::py_discover_config() + grepl("greta-env-tf2", config$python) +} + +have_greta_conda_env <- function(){ + tryCatch( + expr = "greta-env-tf2" %in% reticulate::conda_list()$name, + error = function(e) FALSE + ) +} diff --git a/R/dag_class.R b/R/dag_class.R index 4b3f4dff..2d44b2a0 100644 --- a/R/dag_class.R +++ b/R/dag_class.R @@ -5,16 +5,13 @@ # create dag class dag_class <- R6Class( "dag_class", - public = list( - mode = "all_forward", node_list = list(), target_nodes = list(), variables_without_free_state = list(), tf_environment = NA, tf_graph = NA, - tf_float = NA, n_cores = 0L, compile = NA, @@ -24,7 +21,6 @@ dag_class <- R6Class( initialize = function(target_greta_arrays, tf_float = "float32", compile = FALSE) { - # build the dag self$build_dag(target_greta_arrays) @@ -32,81 +28,61 @@ dag_class <- R6Class( self$target_nodes <- lapply(target_greta_arrays, get_node) # set up the tf environment, with a graph + # TF1/2 check + # not sure if we need to build the new environment in eager mode? self$new_tf_environment() # store the performance control info self$tf_float <- tf_float self$compile <- compile - + self$define_tf_trace_values_batch() + self$define_tf_log_prob_function() }, - new_tf_environment = function() { - - self$tf_environment <- new.env() - self$tf_graph <- tf$Graph() - self$tf_environment$all_forward_data_list <- list() - self$tf_environment$all_sampling_data_list <- list() - self$tf_environment$hybrid_data_list <- list() - + define_tf_trace_values_batch = function(){ + self$tf_trace_values_batch <- tensorflow::tf_function( + f = self$define_trace_values_batch + ) }, - - # execute an expression on this dag's tensorflow graph, with the correct - # float type - on_graph = function(expr) { - - # temporarily pass float type and batch size info to options, so it can be - # accessed by nodes on definition, without clunky explicit passing - old_float_type <- options()$greta_tf_float - old_batch_size <- options()$greta_batch_size - - on.exit(options(greta_tf_float = old_float_type, - greta_batch_size = old_batch_size)) - - options(greta_tf_float = self$tf_float, - greta_batch_size = self$tf_environment$batch_size) - - with(self$tf_graph$as_default(), expr) + define_tf_log_prob_function = function(){ + self$tf_log_prob_function <- tensorflow::tf_function( + # TF1/2 check + # need to check in on all cases of `tensorflow::tf_function()` + # as we are getting lots of warnings about retracting + f = self$generate_log_prob_function() + ) }, - # execute an expression in the tensorflow environment - tf_run = function(expr, as_text = FALSE) { - - tfe <- self$tf_environment - - if (as_text) - tfe$expr <- parse(text = expr) - else - tfe$expr <- substitute(expr) - - on.exit(rm("expr", envir = tfe)) - - self$on_graph(with(tfe, eval(expr))) + tf_log_prob_function = NULL, + tf_log_prob_function_adjusted = function(free_state){ + self$tf_log_prob_function(free_state)$adjusted }, - # sess$run() an expression in the tensorflow environment, with the feed dict - tf_sess_run = function(expr, as_text = FALSE) { - - if (!as_text) { - expr <- deparse(substitute(expr)) - } - - expr <- paste0("sess$run(", expr, ", feed_dict = feed_dict)") - - self$tf_run(expr, as_text = TRUE) + tf_log_prob_function_unadjusted = function(free_state){ + self$tf_log_prob_function(free_state)$unadjusted + }, + # TF1/2 check + # built with TF + # Not sure if we need tensorflow environments in TF2, given that + # everything will be passed as functions? + new_tf_environment = function() { + self$tf_environment <- new.env() + self$tf_graph <- tf$Graph() + self$tf_environment$all_forward_data_list <- list() + self$tf_environment$all_sampling_data_list <- list() + self$tf_environment$hybrid_data_list <- list() }, # return a list of nodes connected to those in the target node list build_dag = function(greta_array_list) { - target_node_list <- lapply(greta_array_list, get_node) # loop through the target nodes, recursively registering them to this dag for (node in target_node_list) { node$register_family(self) } - }, # get the TF names for different node types @@ -114,14 +90,14 @@ dag_class <- R6Class( # get tf basenames names <- self$node_tf_names - if (!is.null(types)) + if (!is.null(types)) { names <- names[which(self$node_types %in% types)] + } # prepend mode if (length(names) > 0) { names <- paste(self$mode, names, sep = "_") } - }, # look up the TF name for a single node @@ -139,13 +115,11 @@ dag_class <- R6Class( } name - }, # how to define a node if the sampling mode is hybrid (this is quite knotty, # so gets its own function) how_to_define_hybrid = function(node) { - node_type <- node_type(node) # names of variable nodes not connected to the free state in this dag @@ -167,17 +141,14 @@ dag_class <- R6Class( # if it's an operation, see if it has a distribution (for lkj and # wishart) and get mode based on whether the parent has a free state if (node_type == "operation") { - parent_name <- node$parents[[1]]$unique_name parent_stateless <- parent_name %in% stateless_names to_sample <- has_distribution(node) & parent_stateless node_mode <- ifelse(to_sample, "sampling", "forward") - } # if the node is a distribution, decide based on its target if (node_type == "distribution") { - target <- node$target target_type <- node_type(target) @@ -197,29 +168,22 @@ dag_class <- R6Class( if (target_type == "variable") { to_sample <- target$unique_name %in% stateless_names node_mode <- ifelse(to_sample, "sampling", "forward") - } # if the target is an operation, see if that operation has a single # parent that is a variable, and see if that has a free state if (target_type == "operation") { - target_parent_name <- target$parents[[1]]$unique_name target_parent_stateless <- target_parent_name %in% stateless_names node_mode <- ifelse(target_parent_stateless, "sampling", "forward") - } - } node_mode - }, # how to define the node if we're sampling everything (no free state) how_to_define_all_sampling = function(node) { - - switch(node_type(node), data = ifelse(has_distribution(node), "sampling", "forward"), operation = ifelse(has_distribution(node), "sampling", "forward"), @@ -231,34 +195,42 @@ dag_class <- R6Class( # from an existing free state), or in sampling mode (generate a random # version of itself) how_to_define = function(node) { + switch(self$mode, - switch( - self$mode, + # if doing inference, everything is push-forward + all_forward = "forward", - # if doing inference, everything is push-forward - all_forward = "forward", - - # sampling from prior most nodes are in sampling mode - all_sampling = self$how_to_define_all_sampling(node), - - # sampling from posterior some nodes defined forward, others sampled - hybrid = self$how_to_define_hybrid(node) + # sampling from prior most nodes are in sampling mode + all_sampling = self$how_to_define_all_sampling(node), + # sampling from posterior some nodes defined forward, others sampled + hybrid = self$how_to_define_hybrid(node) ) - }, - define_batch_size = function() { + # TF1/2 check? + # pretty sure `batch_size` just now needs to be the input of a function + # I'm not even sure that batch_size needs to be a function, it might + # just need to be the input to wherever it is used next? + + ## NOTE: when calling `model` there is no `free_state` in `tf_environment` + ## Trying out something where the free state is set if there isn't one? + + if (!exists("batch_size", envir = self$tf_environment)) { + with( + data = self$tf_environment, + batch_size <- tf$shape(self$tf_environment$free_state)[0] + ) + } - self$tf_run( - batch_size <- tf$compat$v1$placeholder(dtype = tf$int32) - ) + # put this in the greta stash, so it can be accessed by other (sub-)dags + # if needed, e.g. when using as_tf_function() + assign("batch_size", self$tf_environment$batch_size, envir = greta_stash) }, define_free_state = function(type = c("variable", "placeholder"), name = "free_state") { - type <- match.arg(type) tfe <- self$tf_environment @@ -267,51 +239,53 @@ dag_class <- R6Class( if (type == "variable") { + # TF1/2 check # tf$Variable seems to have trouble assigning values, if created with # numeric (rather than logical) NAs vals <- as.logical(vals) vals <- t(as.matrix(vals)) - self$on_graph(free_state <- tf$Variable(initial_value = vals, - dtype = tf_float())) + free_state <- tf$Variable( + initial_value = vals, + dtype = tf_float() + ) } else { - shape <- shape(NULL, length(vals)) - self$on_graph(free_state <- tf$compat$v1$placeholder(dtype = tf_float(), - shape = shape)) - + # TF1/2 check + # instead? + # free_state <- tensorflow::as_tensor( + # dtype = tf_float(), + # shape = shape + # ) } assign(name, free_state, - envir = tfe) - + envir = tfe + ) }, # split the overall free state vector into free versions of variables split_free_state = function() { - tfe <- self$tf_environment free_state <- get("free_state", envir = tfe) params <- self$example_parameters(free = TRUE) - lengths <- vapply(params, - function(x) length(x), - FUN.VALUE = 1L) + + lengths <- lengths(params) if (length(lengths) > 1) { - args <- self$on_graph(tf$split(free_state, lengths, axis = 1L)) + args <- tf$split(free_state, lengths, axis = 1L) } else { args <- list(free_state) } - names <- paste0(names(params), "_free") + names <- glue::glue("{names(params)}_free") for (i in seq_along(names)) { assign(names[i], args[[i]], envir = tfe) } - }, # define the body of the tensorflow graph in the environment env; without @@ -324,70 +298,42 @@ dag_class <- R6Class( } # define all nodes in the environment and on the graph - self$on_graph( - lapply(target_nodes, function(x) x$define_tf(self)) - ) + lapply(target_nodes, function(x){ + x$define_tf(self) + }) invisible(NULL) - - }, - - # use core and compilation options to set up a session in this environment - define_tf_session = function() { - - tfe <- self$tf_environment - tfe$n_cores <- self$n_cores - - # nolint start - self$tf_run( - config <- tf$compat$v1$ConfigProto( - inter_op_parallelism_threads = n_cores, - intra_op_parallelism_threads = n_cores - ) - ) - - if (self$compile) { - self$tf_run( - py_set_attr( - config$graph_options$optimizer_options, - "global_jit_level", - tf$compat$v1$OptimizerOptions$ON_1 - ) - ) - } - # nolint end - - # start a session and initialise all variables - self$tf_run(sess <- tf$compat$v1$Session(config = config)) - self$tf_run(sess$run(tf$compat$v1$global_variables_initializer())) - }, + # TF1/2 check? + # I think we can probably remove this part of things? However I'm not sure + # if the "mode" part is going to be imporatnt here? # define tf graph in environment; either for forward-mode computation from a # free state variable, or for sampling define_tf = function(target_nodes = self$node_list) { - # define the free state variable - if (self$mode %in% c("all_forward", "hybrid")) { - self$define_free_state("placeholder") + # TF1/2 check? + # pretty sure define_batch_size needs to be passed as an argument to + # whatever is above here...if define_tf even needs to exist? + # and I think we can remove define_batch_size since + # this should just be passed as an argument later? + + if (self$mode != "all_sampling") { + self$define_batch_size() } - # define the body of the graph (depending on the mode) and the session - self$define_batch_size() self$define_tf_body(target_nodes = target_nodes) - self$define_tf_session() }, # define tensor for overall log density and gradients define_joint_density = function(adjusted = TRUE) { - tfe <- self$tf_environment # get all distribution nodes that have a target distribution_nodes <- self$node_list[self$node_types == "distribution"] target_nodes <- lapply(distribution_nodes, member, "get_tf_target_node()") - has_target <- !vapply(target_nodes, is.null, FUN.VALUE = TRUE) + has_target <- !are_null(target_nodes) distribution_nodes <- distribution_nodes[has_target] target_nodes <- target_nodes[has_target] @@ -395,7 +341,8 @@ dag_class <- R6Class( densities <- mapply(self$evaluate_density, distribution_nodes, target_nodes, - SIMPLIFY = FALSE) + SIMPLIFY = FALSE + ) # assign the un-reduced densities, for use in marginalisation names(densities) <- NULL @@ -404,56 +351,62 @@ dag_class <- R6Class( envir = self$tf_environment) # reduce_sum each of them (skipping the batch dimension) - self$on_graph(summed_densities <- lapply(densities, tf_sum, drop = TRUE)) + summed_densities <- lapply(densities, tf_sum, drop = TRUE) # sum them together names(summed_densities) <- NULL - self$on_graph(joint_density <- tf$add_n(summed_densities)) + joint_density <- tf$add_n(summed_densities) # assign overall density to environment assign("joint_density", joint_density, - envir = self$tf_environment) + envir = self$tf_environment + ) - if (adjusted) { + # if (adjusted) { - # get names of adjustment tensors for all variable nodes - adj_names <- paste0(self$get_tf_names(types = "variable"), "_adj") + # get names of Jacobian adjustment tensors for all variable nodes + adj_names <- glue::glue("{self$get_tf_names(types = 'variable')}_adj") # get TF density tensors for all distribution adj <- lapply(adj_names, get, envir = self$tf_environment) - # remove their names and sum them together (accounting for tfp bijectors - # sometimes returning a scalar tensor) - adj <- match_batches(adj) - - # remove their names and sum them together - names(adj) <- NULL - self$on_graph(total_adj <- tf$add_n(adj)) - - # assign overall density to environment - assign("joint_density_adj", - joint_density + total_adj, - envir = self$tf_environment) - - } + # remove their names and sum them together (accounting for tfp bijectors + # sometimes returning a scalar tensor) + names(adj) <- NULL + adj <- match_batches(adj) + total_adj <- tf$add_n(adj) + # assign overall density to environment + assign("joint_density_adj", + joint_density + total_adj, + envir = self$tf_environment + ) }, # evaluate the (truncation-corrected) density of a tfp distribution on its # target tensor evaluate_density = function(distribution_node, target_node) { - tfp_distribution <- self$get_tf_object(distribution_node) - tf_target <- self$get_tf_object(target_node) + tfe <- self$tf_environment - self$tf_evaluate_density(tfp_distribution, - tf_target, - truncation = distribution_node$truncation, - bounds = distribution_node$bounds) + parameter_nodes <- distribution_node$parameters + # get the tensorflow objects for these + distrib_constructor <- self$get_tf_object(distribution_node) + tf_target <- self$get_tf_object(target_node) + tf_parameter_list <- lapply(parameter_nodes, self$get_tf_object) + + # execute the distribution constructor functions to return a tfp + # distribution object + tfp_distribution <- distrib_constructor(tf_parameter_list, dag = self) + self$tf_evaluate_density( + tfp_distribution, + tf_target, + truncation = distribution_node$truncation, + bounds = distribution_node$bounds + ) }, - tf_evaluate_density = function(tfp_distribution, tf_target, truncation = NULL, @@ -468,36 +421,30 @@ dag_class <- R6Class( # of the density function between the truncation bounds. This can be # calculated from the distribution's CDF if (!is.null(truncation)) { - lower <- truncation[[1]] upper <- truncation[[2]] + ## TODO add explaining variables if (all(lower == bounds[1])) { # if only upper is constrained, just need the cdf at the upper offset <- tfp_distribution$log_cdf(fl(upper)) - } else if (all(upper == bounds[2])) { # if only lower is constrained, get the log of the integral above it offset <- tf$math$log(fl(1) - tfp_distribution$cdf(fl(lower))) - } else { # if both are constrained, get the log of the integral between them offset <- tf$math$log(tfp_distribution$cdf(fl(upper)) - tfp_distribution$cdf(fl(lower))) - } ld <- ld - offset - } ld - - }, # get the tf object in envir correpsonding to 'node' @@ -505,16 +452,98 @@ dag_class <- R6Class( get(self$tf_name(node), envir = self$tf_environment) }, + ###<<< + hessians = function( + free_state, + nodes = self$target_nodes, + which_objective = c( + "adjusted", + "unadjusted" + ) + ){ + which_objective <- match.arg(which_objective) + + ga_names <- names(nodes) + + ## TF1/2 retracing + ## This is a location where retracting happens in `opt` + hessian_list <- lapply(X = nodes, + self$calculate_one_hessian, + free_state = free_state, + which_objective = which_objective) + # assign names and return + names(hessian_list) <- ga_names + hessian_list + }, + + calculate_one_hessian = function( + node, + free_state, + which_objective = c( + "adjusted", + "unadjusted" + ) + ) { + which_objective <- match.arg(which_objective) + + # temporarily define a new environment + tfe_old <- self$tf_environment + on.exit(self$tf_environment <- tfe_old) + tfe <- self$tf_environment <- new.env() + + # put the free state in the environment, and build out the tf graph + tfe$free_state <- free_state + + # get names and dimensions of target greta arrays + ga_dim <- node$dim + tf_name <- self$tf_name(node) + + # we now make all of the operations define themselves now + with(tf$GradientTape() %as% tape_1, { + with(tf$GradientTape() %as% tape_2, { + self$define_tf() + # define the densities + self$define_joint_density() + + xs <- get(tf_name, tfe) + + objectives <- list( + adjusted = tfe$joint_density_adj, + unadjusted = tfe$joint_density + ) + + # return either of the densities, or a list of both + y <- switch(which_objective, + adjusted = objectives$adjusted, + unadjusted = objectives$unadjusted + ) + }) + g <- tape_2$gradient(y, xs) + }) + h <- tape_1$jacobian(g, xs) + + # reshape from tensor to R dimensions + hessian <- array(h$numpy(), dim = hessian_dims(ga_dim)) + + hessian + + }, + + ###<<< + # return a function to obtain the model log probability from a tensor for # the free state - generate_log_prob_function = function(which = c("adjusted", - "unadjusted", - "both")) { - + generate_log_prob_function = function(which = c( + "both", + "adjusted", + "unadjusted" + )) { which <- match.arg(which) + # we can only pass the free_state parameter through + # we need some way to lexically scope the + # batch size and the data function(free_state) { - # temporarily define a new environment tfe_old <- self$tf_environment on.exit(self$tf_environment <- tfe_old) @@ -530,24 +559,26 @@ dag_class <- R6Class( # put the free state in the environment, and build out the tf graph tfe$free_state <- free_state - self$define_tf_body() + # we now make all of the operations define themselves now + self$define_tf() # define the densities self$define_joint_density() - objectives <- list(adjusted = tfe$joint_density_adj, - unadjusted = tfe$joint_density) + objectives <- list( + adjusted = tfe$joint_density_adj, + unadjusted = tfe$joint_density + ) # return either of the densities, or a list of both result <- switch(which, adjusted = objectives$adjusted, unadjusted = objectives$unadjusted, - both = objectives) + both = objectives + ) result - } - }, # return the expected parameter format either in free state vector form, or @@ -568,131 +599,73 @@ dag_class <- R6Class( # remove any of these that don't need a free state here (for calculate()) stateless_names <- vapply(self$variables_without_free_state, self$tf_name, - FUN.VALUE = character(1)) + FUN.VALUE = character(1) + ) keep <- !names(parameters) %in% stateless_names parameters <- parameters[keep] parameters - }, - get_tf_data_list = function() { - - data_list_name <- paste0(self$mode, "_data_list") + data_list_name <- glue::glue("{self$mode}_data_list") self$tf_environment[[data_list_name]] - }, - set_tf_data_list = function(element_name, value) { - - data_list_name <- paste0(self$mode, "_data_list") + data_list_name <- glue::glue("{self$mode}_data_list") self$tf_environment[[data_list_name]][[element_name]] <- value - - }, - - build_feed_dict = function(dict_list = list(), - data_list = self$get_tf_data_list()) { - - tfe <- self$tf_environment - - # put the list in the environment temporarily - tfe$dict_list <- c(dict_list, data_list) - on.exit(rm("dict_list", envir = tfe)) - - # roll into a dict in the tf environment - self$tf_run(feed_dict <- do.call(dict, dict_list)) - - }, - - send_parameters = function(parameters) { - - # reshape to a row vector if needed - if (is.null(dim(parameters))) { - parameters <- array(parameters, dim = c(1, length(parameters))) - } - - # create a feed dict in the TF environment - parameter_list <- list(free_state = parameters) - - # set the batch size to match parameters - self$set_tf_data_list("batch_size", nrow(parameters)) - - self$build_feed_dict(parameter_list) - }, # get adjusted joint log density across the whole dag log_density = function() { + res <- cleanly(self$tf_environment$joint_density_adj) - res <- cleanly(self$tf_sess_run(joint_density_adj)) - - if (inherits(res, "error")) + if (inherits(res, "error")) { res <- NA + } res - }, - hessians = function() { - - tfe <- self$tf_environment - nodes <- self$target_nodes - - # get names and dimensions of target greta arrays - ga_names <- names(nodes) - ga_dims <- lapply(nodes, member, "dim") - - # build the hessian tensors if needed - if (!exists("hessian_list", envir = tfe)) { - - tf_names <- vapply(nodes, self$tf_name, FUN.VALUE = "") - y <- tfe$joint_density - xs <- lapply(tf_names, get, tfe) - names(xs) <- NULL - tfe$hessian_list <- self$on_graph(tf$hessians(y, xs)) - - } - - # evaluate at the current free state and assign - hessian_list <- self$tf_sess_run(hessian_list) - - # reshape from tensor to R dimensions - dims <- lapply(ga_dims, hessian_dims) - hessian_list <- mapply(array, hessian_list, dims, SIMPLIFY = FALSE) - - # assign names and return - names(hessian_list) <- ga_names - hessian_list - + tf_trace_values_batch = NULL, + trace_values_batch = function(free_state_batch){ + lapply( + X = self$tf_trace_values_batch(free_state_batch), + FUN = as.array + ) }, - trace_values_batch = function(free_state_batch) { + define_trace_values_batch = function(free_state_batch) { # update the parameters & build the feed dict - self$send_parameters(free_state_batch) + target_tf_names <- lapply( + self$target_nodes, + self$tf_name + ) - tfe <- self$tf_environment + # TF1/2 check + # maybe remove onexit stuff? + tfe_old <- self$tf_environment + on.exit(self$tf_environment <- tfe_old) + tfe <- self$tf_environment <- new.env() + + # put the free state in the environment, and build out the tf graph + tfe$free_state <- free_state_batch - target_tf_names <- lapply(self$target_nodes, - self$tf_name) + # we now make all of the operations define themselves now + self$define_tf() target_tensors <- lapply(target_tf_names, get, - envir = tfe) - - # evaluate them in the tensorflow environment - trace_list <- tfe$sess$run(target_tensors, - feed_dict = tfe$feed_dict) - - trace_list + envir = tfe + ) + return(target_tensors) }, # return the current values of the traced nodes, as a named vector trace_values = function(free_state, flatten = TRUE, trace_batch_size = Inf) { - # get the number of samples to trace n_samples <- nrow(free_state) indices <- seq_len(n_samples) @@ -719,22 +692,20 @@ dag_class <- R6Class( if (flatten) { # loop through elements flattening these arrays to vectors and giving # the elements better names - trace_list_flat <- lapply(seq_along(trace_list), - flatten_trace, - trace_list) + trace_list_flat <- lapply( + seq_along(trace_list), + flatten_trace, + trace_list + ) out <- do.call(cbind, trace_list_flat) self$trace_names <- colnames(out) - } else { - out <- trace_list - } out - }, # for all the nodes in this dag, return a vector of membership to sub-graphs @@ -760,42 +731,48 @@ dag_class <- R6Class( r <- t it <- it + 1 } else { - break () + break() } } - # check we didn't time out - if (it == maxit) { - stop("could not determine the number of independent models ", - "in a reasonable amount of time", - call. = FALSE) - } + check_timeout(it, maxit) # find the cluster IDs n <- nrow(r) neighbours <- lapply(seq_len(n), function(i) which(r[i, ])) - cluster_names <- vapply(neighbours, paste, collapse = "_", FUN.VALUE = "") + cluster_names <- vapply(X = neighbours, + FUN = paste, + FUN.VALUE = character(1), + collapse = "_") cluster_id <- match(cluster_names, unique(cluster_names)) # name them names(cluster_id) <- rownames(adj) cluster_id + }, + # get the tfp distribution object for a distribution node + get_tfp_distribution = function(distrib_node) { + + # build the tfp distribution object for the distribution, and use it + # to get the tensor for the sample + distrib_constructor <- self$get_tf_object(distrib_node) + parameter_nodes <- distrib_node$parameters + tf_parameter_list <- lapply(parameter_nodes, self$get_tf_object) + + # execute the distribution constructor functions to return a tfp + # distribution object + tfp_distribution <- distrib_constructor(tf_parameter_list, dag = self) }, # try to draw a random sample from a distribution node draw_sample = function(distribution_node) { - - tfp_distribution <- self$get_tf_object(distribution_node) + # self$check_sampling_implemented(distribution_node) + tfp_distribution <- self$get_tfp_distribution(distribution_node) sample <- tfp_distribution$sample - if (is.null(sample)) { - stop("sampling is not yet implemented for ", - distribution_node$distribution_name, - " distributions", - call. = FALSE) - } + check_sampling_implemented(sample, distribution_node) truncation <- distribution_node$truncation @@ -803,7 +780,6 @@ dag_class <- R6Class( # if we're not dealing with truncation, sample directly tensor <- sample(seed = get_seed()) - } else { # if we're dealing with truncation (therefore univariate and continuous) @@ -812,13 +788,7 @@ dag_class <- R6Class( cdf <- tfp_distribution$cdf quantile <- tfp_distribution$quantile - - if (is.null(cdf) | is.null(quantile)) { - stop("sampling is not yet implemented for truncated ", - distribution_node$distribution_name, - " distributions", - call. = FALSE) - } + check_truncation_implemented(tfp_distribution, distribution_node) # generate a random uniform sample of the correct shape and transform # through truncated inverse CDF to get draws on truncated scale @@ -829,17 +799,12 @@ dag_class <- R6Class( range <- upper - lower tensor <- quantile(lower + u * range) - } tensor - } - ), - active = list( - node_types = function(value) { vapply(self$node_list, node_type, FUN.VALUE = "") }, @@ -847,7 +812,6 @@ dag_class <- R6Class( # create human-readable base names for TF tensors. these will actually be # defined prepended with "all_forward_" or "all_sampling" or "hybrid_ node_tf_names = function(value) { - types <- self$node_types for (type in c("variable", "data", "operation", "distribution")) { @@ -856,9 +820,7 @@ dag_class <- R6Class( } types - }, - adjacency_matrix = function(value) { # make dag matrix @@ -868,18 +830,21 @@ dag_class <- R6Class( dag_mat <- matrix(0, nrow = n_node, ncol = n_node) rownames(dag_mat) <- colnames(dag_mat) <- node_names - children <- lapply(self$node_list, - member, - "child_names()") - parents <- lapply(self$node_list, - member, - "parent_names(recursive = FALSE)") + children <- lapply( + self$node_list, + member, + "child_names()" + ) + parents <- lapply( + self$node_list, + member, + "parent_names(recursive = FALSE)" + ) # for distribution nodes, remove target nodes from parents, and put them # in children to send the arrow in the opposite direction when plotting distribs <- which(node_types == "distribution") for (i in distribs) { - own_name <- node_names[i] target_name <- self$node_list[[i]]$target$unique_name @@ -893,9 +858,7 @@ dag_class <- R6Class( idx <- match(target_name, node_names) children[[idx]] <- children[[idx]][children[[idx]] != own_name] parents[[idx]] <- c(parents[[idx]], own_name) - } - } # parents in the lower left, children in the upper right diff --git a/R/data-deps-tf-tfp.R b/R/data-deps-tf-tfp.R new file mode 100644 index 00000000..4c73f536 --- /dev/null +++ b/R/data-deps-tf-tfp.R @@ -0,0 +1,20 @@ +#' Suggested valid Python dependencies for greta +#' +#' This is a dataset that contains suggested valid versions of Tensorflow (TF), +#' Tensorflow Probability (TFP), and Python for linux, mac, and windows +#' machines. It was constructed from +#' and +#' , and by inspecting +#' . +#' +#' We recommend using the default versions provided in `greta_deps_spec()`. +#' +#' @format ## `greta_deps_tf_tfp` +#' A data frame with 63 rows and 5 columns: +#' \describe{ +#' \item{os}{Operating System} +#' \item{tfp_version, tf_version}{numeric versions in format major.minor.patch for TFP and TF} +#' \item{python_version_min, python_version_max}{numeric versions range in format major.minor.patch for Python} +#' } +# @source <> +"greta_deps_tf_tfp" diff --git a/R/distribution.R b/R/distribution.R index fbd622a2..8cd0990c 100644 --- a/R/distribution.R +++ b/R/distribution.R @@ -2,17 +2,17 @@ #' @aliases distribution #' @title define a distribution over data #' -#' @description \code{distribution} defines probability distributions over +#' @description `distribution` defines probability distributions over #' observed data, e.g. to set a model likelihood. #' #' @param greta_array a data greta array. For the assignment method it must not #' already have a probability distribution assigned #' #' @param value a greta array with a distribution (see -#' \code{\link{distributions}}) +#' [distributions()]) #' #' @details The extract method returns the greta array if it has a distribution, -#' or \code{NULL} if it doesn't. It has no real use-case, but is included for +#' or `NULL` if it doesn't. It has no real use-case, but is included for #' completeness #' #' @export @@ -33,7 +33,7 @@ #' # get the distribution over y #' distribution(y) #' } -`distribution<-` <- function(greta_array, value) { # nolint +`distribution<-` <- function(greta_array, value) { # nolint # stash the old greta array to return greta_array_tmp <- greta_array @@ -43,48 +43,63 @@ node <- get_node(greta_array) + # TODO revisit checking functions here # only for greta arrays without distributions + ## TODO provide more detail on the distribution already assigned + ## This might come up when the user accidentally runs assignment + ## of a distribution twice. Is there a way to avoid this, or perhaps + ## remove a distribution in case the user wants to do reassign it? + ## or perhaps we can recommend something? if (has_distribution(node)) { - stop("left hand side already has a distribution assigned", - call. = FALSE) + cli::cli_abort( + "left hand side already has a distribution assigned" + ) } # only for data greta arrays if (node_type(node) != "data") { - stop("distributions can only be assigned to data greta arrays", - call. = FALSE) + cli::cli_abort( + "distributions can only be assigned to data {.cls greta array}s" + ) } # can only assign with greta arrays ... - if (!inherits(value, "greta_array")) { - stop("right hand side must be a greta array", - call. = FALSE) + if (!is.greta_array(value)) { + cli::cli_abort( + "right hand side must be a {.cls greta_array}" + ) } # ... that have distributions value_node <- get_node(value) distribution_node <- value_node$distribution - if (!inherits(distribution_node, "distribution_node")) { - stop("right hand side must have a distribution", - call. = FALSE) + if (!is.distribution_node(distribution_node)) { + cli::cli_abort( + "right hand side must have a distribution" + ) } # that aren't already fixed - if (inherits(distribution_node$target, "data_node")) { - stop("right hand side has already been assigned fixed values", - call. = FALSE) + if (is.data_node(distribution_node$target)) { + cli::cli_abort( + "right hand side has already been assigned fixed values" + ) } # if distribution isn't scalar, make sure it has the right dimensions + ## TODO fix explaining variable if (!is_scalar(value)) { if (!identical(dim(greta_array), dim(value))) { - stop("left and right hand sides have different dimensions. ", - "The distribution must have dimension of either ", - paste(dim(greta_array), collapse = " x "), - " or 1 x 1, but instead has dimension ", - paste(dim(value), collapse = " x "), - call. = FALSE) + cli::cli_abort( + c( + "left and right hand sides have different dimensions. ", + "The distribution must have dimension of either \\ + {.val {paste(dim(greta_array), collapse = 'x')}} or {.val 1x1},\\ + but instead has dimension \\ + {.val {paste(dim(value), collapse = 'x')}}" + ) + ) } } @@ -102,7 +117,6 @@ # return greta_array (pre-conversion to a greta array) greta_array_tmp - } #' @rdname distribution @@ -110,23 +124,16 @@ distribution <- function(greta_array) { # only for greta arrays - if (!inherits(greta_array, "greta_array")) { - stop("not a greta array", - call. = FALSE) - } + check_is_greta_array(greta_array) # if greta_array has a distribution, return this greta array - if (inherits(get_node(greta_array)$distribution, "distribution_node")) { - + if (is.distribution_node(get_node(greta_array)$distribution)) { distrib <- greta_array - } else { # otherwise return NULL distrib <- NULL - } distrib - } diff --git a/R/extract_replace_combine.R b/R/extract_replace_combine.R index d8448224..88b31188 100644 --- a/R/extract_replace_combine.R +++ b/R/extract_replace_combine.R @@ -33,41 +33,46 @@ #' #' @param x a greta array #' @param i,j indices specifying elements to extract or replace -#' @param n a single integer, as in \code{utils::head()} and -#' \code{utils::tail()} +#' @param n a single integer, as in `utils::head()` and +#' `utils::tail()` #' @param nrow,ncol optional dimensions for the resulting greta array when x is #' not a matrix. -#' @param value for \code{`[<-`} a greta array to replace elements, for -#' \code{`dim<-`} either NULL or a numeric vector of dimensions +#' @param value for ``[<-`` a greta array to replace elements, for +#' ``dim<-`` either NULL or a numeric vector of dimensions #' @param ... either further indices specifying elements to extract or replace -#' (\code{[}), or multiple greta arrays to combine (\code{cbind()}, -#' \code{rbind()} & \code{c()}), or additional arguments (\code{rep()}, -#' \code{head()}, \code{tail()}) +#' (`[`), or multiple greta arrays to combine (`cbind()`, +#' `rbind()` & `c()`), or additional arguments (`rep()`, +#' `head()`, `tail()`) #' @param drop,recursive generic arguments that are ignored for greta arrays #' -#' @details \code{diag()} can be used to extract or replace the diagonal part of +#' @details `diag()` can be used to extract or replace the diagonal part of #' a square and two-dimensional greta array, but it cannot be used to create a #' matrix-like greta array from a scalar or vector-like greta array. A static -#' diagonal matrix can always be created with e.g. \code{diag(3)}, and then +#' diagonal matrix can always be created with e.g. `diag(3)`, and then #' converted into a greta array. #' +#' Also note that since R 4.0.0, `head` and `tail` methods for arrays changed +#' to print a vector rather than maintain the array structure. The `greta` +#' package supports both methods, and will do so based on which version of R +#' you are using. +#' #' @examples #' \dontrun{ #' -#' x <- as_data(matrix(1:12, 3, 4)) +#' x <- as_data(matrix(1:12, 3, 4)) #' -#' # extract and replace -#' x[1:3, ] -#' x[, 2:4] <- 1:9 -#' e <- diag(x) -#' diag(x) <- e + 1 +#' # extract and replace +#' x[1:3, ] +#' x[, 2:4] <- 1:9 +#' e <- diag(x) +#' diag(x) <- e + 1 #' -#' # combine -#' cbind(x[, 2], x[, 1]) -#' rbind(x[1, ], x[3, ]) -#' abind(x[1, ], x[3, ], along = 1) -#' c(x[, 1], x) -#' rep(x[, 2], times = 3) +#' # combine +#' cbind(x[, 2], x[, 1]) +#' rbind(x[1, ], x[3, ]) +#' abind(x[1, ], x[3, ], along = 1) +#' c(x[, 1], x) +#' rep(x[, 2], times = 3) #' } NULL @@ -96,14 +101,14 @@ NULL rm("._dummy_in", envir = pf) if (any(is.na(dummy_out))) { - stop("subscript out of bounds", - call. = FALSE) + cli::cli_abort( + "subscript out of bounds" + ) } node <- get_node(x) # if this is a data node, also subset the values and pass on - if (inherits(node, "data_node")) { - + if (is.data_node(node)) { values_in <- node$value() call_list <- as.list(call)[-1] call_list[[1]] <- as.name("._values_in") @@ -118,11 +123,8 @@ NULL # make sure it's an array values <- as.array(values_out) - } else { - values <- NULL - } # coerce result to an array @@ -133,37 +135,42 @@ NULL dims_out <- dim(dummy_out) # make sure it's a column vector - if (length(dims_out) == 1) + if (length(dims_out) == 1) { dims_out <- c(dims_out, 1) + } # give values these dimensions - if (is.array(values)) + if (is.array(values)) { values <- array(values, dim = dims_out) + } # get the index in flat python format, as a tensor index <- flatten_rowwise(dummy_out) # create operation node, passing call and dims as additional arguments op("extract", - x, - dim = dims_out, - operation_args = list(nelem = nelem, - index = index, - dims_out = dims_out), - tf_operation = "tf_extract", - value = values) - + x, + dim = dims_out, + operation_args = list( + nelem = nelem, + index = index, + dims_out = dims_out + ), + tf_operation = "tf_extract", + value = values + ) } # replace syntax for greta array objects #' @export -`[<-.greta_array` <- function(x, ..., value) { # nolint +`[<-.greta_array` <- function(x, ..., value) { # nolint node <- get_node(x) - if (inherits(node, "variable_node")) { - stop("cannot replace values in a variable greta array", - call. = FALSE) + if (is.variable_node(node)) { + cli::cli_abort( + "cannot replace values in a variable {.cls greta_array}" + ) } # rename value since it is confusing when passed to the op @@ -190,23 +197,21 @@ NULL rm("._dummy_in", envir = pf) if (any(is.na(dummy_out))) { - stop("subscript out of bounds", - call. = FALSE) + cli::cli_abort( + "subscript out of bounds" + ) } index <- as.vector(dummy_out) if (length(index) != length(replacement)) { - - if (length(index) %% length(replacement) != 0) { - - stop("number of items to replace is not a multiple of ", - "replacement length") - + replacement_is_not_multiple <- length(index) %% length(replacement) != 0 + if (replacement_is_not_multiple) { + cli::cli_abort( + "number of items to replace is not a multiple of replacement length" + ) } else { - replacement <- rep(replacement, length.out = length(index)) - } } @@ -219,77 +224,93 @@ NULL new_value[r_index] <- replacement_value # if either parent has an unknowns array as a value, coerce this to unknowns - if (inherits(x_value, "unknowns") | inherits(replacement_value, "unknowns")) + either_are_unknowns <- is.unknowns(x_value) | is.unknowns(replacement_value) + if (either_are_unknowns) { new_value <- as.unknowns(new_value) + } # create operation node, passing call and dims as additional arguments op("replace", - x, - replacement, - dim = dims, - operation_args = list(index = index, - dims = dims), - value = new_value, - tf_operation = "tf_replace") - + x, + replacement, + dim = dims, + operation_args = list( + index = index, + dims = dims + ), + value = new_value, + tf_operation = "tf_replace" + ) } #' @export cbind.greta_array <- function(...) { - dots <- list(...) dots <- lapply(dots, as.greta_array) dims <- lapply(dots, dim) - ndims <- vapply(dims, length, FUN.VALUE = 1) - if (!all(ndims == 2)) - stop("all greta arrays must be two-dimensional") + ndims <- lengths(dims) + arrays_are_2d <- all(ndims == 2) + if (!arrays_are_2d) { + cli::cli_abort( + "all {.cls greta_array}s must be two-dimensional" + ) + } # dimensions rows <- vapply(dims, `[`, 1, FUN.VALUE = 1) cols <- vapply(dims, `[`, 2, FUN.VALUE = 1) # check all the same - if (!all(rows == rows[1])) - stop("all greta arrays must be have the same number of rows", - call. = FALSE) + same_number_of_rows <- all(rows == rows[1]) + if (!same_number_of_rows) { + cli::cli_abort( + "all {.cls greta_array}s must be have the same number of rows" + ) + } # output dimensions dims <- c(rows[1], sum(cols)) op("cbind", ..., - dim = dims, - tf_operation = "tf_cbind") - + dim = dims, + tf_operation = "tf_cbind" + ) } #' @export rbind.greta_array <- function(...) { - dots <- list(...) dots <- lapply(dots, as.greta_array) dims <- lapply(dots, dim) - ndims <- vapply(dims, length, FUN.VALUE = 1) - if (!all(ndims == 2)) - stop("all greta arrays must be two-dimensional") + ndims <- lengths(dims) + arrays_2d <- all(ndims == 2) + if (!arrays_2d) { + cli::cli_abort( + "all {.cls greta_array}s must be two-dimensional" + ) + } # dimensions rows <- vapply(dims, `[`, 1, FUN.VALUE = 1) cols <- vapply(dims, `[`, 2, FUN.VALUE = 1) # check all the same - if (!all(cols == cols[1])) - stop("all greta arrays must be have the same number of columns", - call. = FALSE) + array_cols_same <- all(cols == cols[1]) + if (!array_cols_same) { + cli::cli_abort( + "all {.cls greta_array}s must be have the same number of columns" + ) + } # output dimensions dims <- c(sum(rows), cols[1]) op("rbind", ..., - dim = dims, - tf_operation = "tf_rbind") - + dim = dims, + tf_operation = "tf_rbind" + ) } # nolint start @@ -304,10 +325,6 @@ abind <- function(..., } # nolint end -# clear CRAN checks spotting floating global variables -#' @importFrom utils globalVariables -utils::globalVariables("N", "greta") - # nolint start #' @export abind.default <- function(..., @@ -315,20 +332,24 @@ abind.default <- function(..., force.array = TRUE, make.names = use.anon.names, use.anon.names = FALSE, use.first.dimnames = FALSE, hier.names = FALSE, use.dnns = FALSE) { -# nolint end + # nolint end # error nicely if they don't have abind installed abind_installed <- requireNamespace("abind", quietly = TRUE) if (!abind_installed) { - stop("abind is being called on R arrays (not greta arrays), ", - "but the abind package is not installed", - call. = FALSE) + cli::cli_abort( + c( + "{.fun abind} is being called on R arrays (not {.cls greta_array}s), \\ + but the {.pkg abind} package is not installed", + "install {.pkg abind} with:", + "{.code install.packages('abind')}" + ) + ) } call <- sys.call() call_list <- as.list(call)[-1] do.call(abind::abind, call_list) - } # nolint start @@ -339,7 +360,7 @@ abind.greta_array <- function(..., use.anon.names = FALSE, use.first.dimnames = FALSE, hier.names = FALSE, use.dnns = FALSE) { -# nolint end + # nolint end # warn if any of the arguments have been changed # nolint start @@ -354,59 +375,76 @@ abind.greta_array <- function(..., # nolint end if (user_set_args) { - warning("only the argument 'along' is supported when using abind ", - "with greta arrays, any other arguments will be ignored") + cli::cli_warn( + "only the argument {.arg along} is supported when using {.fun abind} \\ + with {.cls greta_array}s, any other arguments will be ignored" + ) } arg_list <- list(...) # drop any NULLs - to_discard <- vapply(arg_list, is.null, FUN.VALUE = FALSE) + to_discard <- are_null(arg_list) if (any(to_discard)) { arg_list <- arg_list[!to_discard] } # get N first, in case they used the default value for along dims <- lapply(arg_list, dim) - n <- max(vapply(dims, length, FUN.VALUE = 1L)) + n <- max(lengths(dims)) # needed to keep the same formals as abind - N <- n # nolint + N <- n # nolint along <- as.integer(force(along)) # rationalise along, and pad N if we're prepending/appending a dimension + ## TODO add explaining variable here if (along < 1 || along > n || (along > floor(along) && - along < ceiling(along))) { + along < ceiling(along))) { n <- n + 1 along <- max(1, min(n + 1, ceiling(along))) } - if (!along %in% 0:n) { - stop("along must be between 0 and ", n, call. = FALSE) + # TODO revisit checking functions here + along_outside_0_n <- !(along %in% 0:n) + if (along_outside_0_n) { + cli::cli_abort( + c( + "{.arg along} must be between 0 and {n}", + "Instead {.arg along} was {.val {along}}" + ) + ) } pre <- seq(from = 1, len = along - 1) post <- seq(to = n - 1, len = n - along) # loop though all elements of arg_list padding if necessary: - arg_list <- lapply(arg_list, - function(x) { - dim <- dim(x) - if (length(dim) == n - 1) - dim(x) <- c(dim[pre], 1, dim[post]) - x - }) + arg_list <- lapply( + arg_list, + function(x) { + dim <- dim(x) + if (n_dim(x) == n - 1) { + dim(x) <- c(dim[pre], 1, dim[post]) + } + x + } + ) # check the non-binding dimensions match dims <- lapply(arg_list, dim) dim_out <- rep(NA, n) for (dim in seq_len(n)[-along]) { this_dim <- vapply(dims, `[`, dim, FUN.VALUE = 1L) - if (!all(this_dim == this_dim[1])) { - stop("all greta arrays must have the same dimensions ", - "except on the 'along' dimension, but dimension ", dim, - " had varying sizes: ", paste(this_dim, collapse = ", "), - call. = FALSE) + dim_varying <- !all(this_dim == this_dim[1]) + if (dim_varying) { + cli::cli_abort( + c( + "all {.cls greta_array}s must have the same dimensions except on \\ + the {.arg along} dimension", + "However, dimension {dim} had varying sizes: {this_dim}" + ) + ) } else { dim_out[dim] <- this_dim[1] } @@ -415,49 +453,53 @@ abind.greta_array <- function(..., bind_dims <- vapply(dims, `[`, along, FUN.VALUE = 1L) dim_out[along] <- sum(bind_dims) - do.call(op, - c(operation = "abind", - arg_list, - dim = list(dim_out), - operation_args = list(list(axis = as.integer(along))), - tf_operation = "tf_abind")) - + do.call( + op, + c( + operation = "abind", + arg_list, + dim = list(dim_out), + operation_args = list(list(axis = as.integer(along))), + tf_operation = "tf_abind" + ) + ) } #' @export c.greta_array <- function(...) { - args <- list(...) # drop NULLs from the list - is_null <- vapply(args, is.null, FUN.VALUE = FALSE) + is_null <- are_null(args) args <- args[!is_null] # try to coerce to greta arrays args <- lapply(args, as.greta_array, optional = TRUE) # return a list if they aren't all greta arrays - is_greta_array <- vapply(args, - inherits, "greta_array", - FUN.VALUE = FALSE) + is_greta_array <- are_greta_array(args) - if (!all(is_greta_array)) + if (!all(is_greta_array)) { return(args) + } # loop through arrays, flattening them R-style arrays <- lapply(args, flatten) # get output dimensions - length_vec <- vapply(arrays, length, FUN.VALUE = 1) + length_vec <- lengths(arrays) dim_out <- c(sum(length_vec), 1L) # create the op, expanding 'arrays' out to match op()'s dots input - do.call(op, - c(operation = "rbind", - arrays, - dim = list(dim_out), - tf_operation = "tf_rbind")) - + do.call( + op, + c( + operation = "rbind", + arrays, + dim = list(dim_out), + tf_operation = "tf_rbind" + ) + ) } #' @export @@ -468,116 +510,110 @@ rep.greta_array <- function(x, ...) { # apply (implicitly coercing to a column vector) x[idx] - } # get dimensions #' @export -dim.greta_array <- function(x) +dim.greta_array <- function(x) { as.integer(get_node(x)$dim) +} #' @export -length.greta_array <- function(x) +length.greta_array <- function(x) { prod(dim(x)) +} # reshape greta arrays #' @export -`dim<-.greta_array` <- function(x, value) { # nolint +`dim<-.greta_array` <- function(x, value) { # nolint dims <- value - if (is.null(dims)) - dims <- length(x) + dims <- dims %||% length(x) - if (length(dims) == 0L) - stop("length-0 dimension vector is invalid", - call. = FALSE) + # TODO revisit logic / checking functions here + if (length(dims) == 0L) { + cli::cli_abort( + "length-0 dimension vector is invalid" + ) + } - if (length(dims) == 1L) + if (length(dims) == 1L) { dims <- c(dims, 1L) + } - if (any(is.na(dims))) - stop("the dims contain missing values", - call. = FALSE) + if (any(is.na(dims))) { + cli::cli_abort( + "the dims contain missing values" + ) + } dims <- as.integer(dims) - if (any(dims < 0L)) - stop("the dims contain negative values", - call. = FALSE) + dims_contain_negatives <- any(dims < 0L) + if (dims_contain_negatives) { + cli::cli_abort( + c( + "the dims contain negative values:", + "{.code dim(x)} returns {dim(x)}" + ) + ) + } prod_dims <- prod(dims) len <- length(x) - + is_scalar <- len == 1 # if x isn't a scalar and the numbers of elements don't match, error - if (len != 1 && prod_dims != len) { - msg <- sprintf("dims [product %i] do not match the length of object [%i]", - prod_dims, len) - stop(msg, call. = FALSE) + n_elem_not_match <- prod_dims != len + if (!is_scalar && n_elem_not_match) { + cli::cli_abort( + "dims [product {prod_dims}] do not match the length of object [{len}]" + ) } # change the values similarly new_value <- get_node(x)$value() new_value <- array(new_value, dim = dims) - if (!identical(dim(x), dims) && len == 1) { + unmatch_dim <- !identical(dim(x), dims) + + if (unmatch_dim && is_scalar) { # if the dims don't match, but x is a scalar, expand it to the required # dimension op("expand_dim", - x, - operation_args = list(dims = dims), - tf_operation = "tf_expand_dim", - dim = dims, - value = new_value) - + x, + operation_args = list(dims = dims), + tf_operation = "tf_expand_dim", + dim = dims, + value = new_value + ) } else { # otherwise, if the dimensions don't match, but the number of elements do, # just change the dimensions op("set_dim", - x, - operation_args = list(dims = dims), - tf_operation = "tf_set_dim", - dim = dims, - value = new_value) + x, + operation_args = list(dims = dims), + tf_operation = "tf_set_dim", + dim = dims, + value = new_value + ) } # otherwise just reorder them - - } # head handles matrices differently to arrays, so explicitly handle 2D greta # arrays #' @export #' @importFrom utils head -head.greta_array <- function(x, n = 6L, ...) { # nolint +#' @importFrom utils head.matrix +head.greta_array <- function(x, n = 6L, ...) { # nolint stopifnot(length(n) == 1L) - # if x is matrix-like, take the top n rows - if (length(dim(x)) == 2) { - - nrx <- nrow(x) - if (n < 0L) - n <- max(nrx + n, 0L) - else - n <- min(n, nrx) - - ans <- x[seq_len(n), , drop = FALSE] - - } else { - # otherwise, take the first n elements - - if (n < 0L) - n <- max(length(x) + n, 0L) - else - n <- min(n, length(x)) - - ans <- x[seq_len(n)] - - } + ans <- head.matrix(x, n, ...) ans @@ -585,36 +621,12 @@ head.greta_array <- function(x, n = 6L, ...) { # nolint #' @export #' @importFrom utils tail -tail.greta_array <- function(x, n = 6L, ...) { # nolint +#' @importFrom utils tail.matrix +tail.greta_array <- function(x, n = 6L, ...) { # nolint stopifnot(length(n) == 1L) - # if x is matrix-like, take the top n rows - if (length(dim(x)) == 2) { - - nrx <- nrow(x) - - if (n < 0L) - n <- max(nrx + n, 0L) - else - n <- min(n, nrx) - - sel <- as.integer(seq.int(to = nrx, length.out = n)) - ans <- x[sel, , drop = FALSE] - - } else { - # otherwise, take the first n elements - - xlen <- length(x) - - if (n < 0L) - n <- max(xlen + n, 0L) - else - n <- min(n, xlen) - - ans <- x[seq.int(to = xlen, length.out = n)] - - } + ans <- tail.matrix(x, n, ...) ans @@ -622,27 +634,33 @@ tail.greta_array <- function(x, n = 6L, ...) { # nolint #' @rdname overloaded #' @export -diag <- function(x = 1, nrow, ncol) +diag <- function(x = 1, nrow, ncol) { UseMethod("diag", x) +} # wrapper function to avoid a CRAN check warning about using a .Internal() call #' @export -diag.default <- function(...) +diag.default <- function(...) { base::diag(...) +} #' @export diag.greta_array <- function(x = 1, nrow, ncol) { - dim <- dim(x) # check the rank isn't too high - if (length(dim) != 2) { - stop("cannot only extract the diagonal from a node ", - "with exactly two dimensions") + if (!is_2d(x)) { + cli::cli_abort( + "Cannot only extract the diagonal from a node with exactly two \\ + dimensions" + ) } - if (dim[1] != dim[2]) { - stop("diagonal elements can only be extracted from square matrices") + is_square <- dim[1] != dim[2] + if (is_square) { + cli::cli_abort( + "Diagonal elements can only be extracted from square matrices" + ) } # return the dimensions @@ -650,7 +668,7 @@ diag.greta_array <- function(x = 1, nrow, ncol) { # return the extraction op op("diag", x, - dim = dims, - tf_operation = "tf$linalg$diag_part") - + dim = dims, + tf_operation = "tf$linalg$diag_part" + ) } diff --git a/R/functions.R b/R/functions.R index 9b9bf01b..02d5d513 100644 --- a/R/functions.R +++ b/R/functions.R @@ -3,8 +3,8 @@ #' @title functions for greta arrays #' #' @description This is a list of functions (mostly from base R) that are -#' currently implemented to transform greta arrays. Also see \link{operators} -#' and \link{transforms}. +#' currently implemented to transform greta arrays. Also see [operators] +#' and [transforms]. #' #' @section Usage: \preformatted{ #' @@ -84,25 +84,25 @@ #' #' } #' -#' @details TensorFlow only enables rounding to integers, so \code{round()} will -#' error if \code{digits} is set to anything other than \code{0}. +#' @details TensorFlow only enables rounding to integers, so `round()` will +#' error if `digits` is set to anything other than `0`. #' -#' Any additional arguments to \code{chol()}, \code{chol2inv}, and -#' \code{solve()} will be ignored, see the TensorFlow documentation for +#' Any additional arguments to `chol()`, `chol2inv`, and +#' `solve()` will be ignored, see the TensorFlow documentation for #' details of these routines. #' -#' \code{sweep()} only works on two-dimensional greta arrays (so \code{MARGIN} +#' `sweep()` only works on two-dimensional greta arrays (so `MARGIN` #' can only be either 1 or 2), and only for subtraction, addition, division #' and multiplication. #' -#' \code{tapply()} works on column vectors (2D greta arrays with one column), -#' and \code{INDEX} cannot be a greta array. Currently five functions are +#' `tapply()` works on column vectors (2D greta arrays with one column), +#' and `INDEX` cannot be a greta array. Currently five functions are #' available, and arguments passed to \dots are ignored. #' -#' \code{cospi()}, \code{sinpi()}, and \code{tanpi()} do not use the -#' computationally more stable routines to compute \code{cos(x * pi)} etc. +#' `cospi()`, `sinpi()`, and `tanpi()` do not use the +#' computationally more stable routines to compute `cos(x * pi)` etc. #' that are available in R under some operating systems. Similarly -#' \code{trigamma()} uses TensorFlow's polygamma function, resulting in lower +#' `trigamma()` uses TensorFlow's polygamma function, resulting in lower #' precision than R's equivalent. #' #' @examples @@ -116,7 +116,7 @@ #' #' z <- t(a) #' -#' y <- sweep(x, 1, e, '-') +#' y <- sweep(x, 1, e, "-") #' } NULL @@ -125,8 +125,10 @@ log.greta_array <- function(x, base = exp(1)) { if (has_representation(x, "log")) { result <- copy_representation(x, "log") } else { - result <- op("log", x, tf_operation = "tf$math$log", - representations = list(exp = x)) + result <- op("log", x, + tf_operation = "tf$math$log", + representations = list(exp = x) + ) } result } @@ -138,8 +140,10 @@ exp.greta_array <- function(x) { result <- copy_representation(x, "exp") } else { # otherwise exponentiate it, and store the log representation - result <- op("exp", x, tf_operation = "tf$math$exp", - representations = list(log = x)) + result <- op("exp", x, + tf_operation = "tf$math$exp", + representations = list(log = x) + ) } result } @@ -154,12 +158,12 @@ expm1.greta_array <- function(x) { op("expm1", x, tf_operation = "tf$math$expm1") } -#' @export +#' @exportS3Method log10 greta_array log10.greta_array <- function(x) { op("log10", x, tf_operation = "tf_log10") } -#' @export +#' @exportS3Method log2 greta_array log2.greta_array <- function(x) { op("log2", x, tf_operation = "tf_log2") } @@ -191,9 +195,16 @@ floor.greta_array <- function(x) { #' @export round.greta_array <- function(x, digits = 0) { - if (digits != 0) - stop("greta arrays can only be rounded to the nearest integer, ", - "the digits argument cannot be set") + if (digits != 0) { + cli::cli_abort( + c( + "the {.val digits} argument of {.fun round} cannot be set for \\ + {.cls greta_array}s", + "{.cls greta_array}s can only be rounded to the nearest integer, so the \\ + {.val digits} argument cannot be set" + ) + ) + } op("round", x, tf_operation = "tf$round") } @@ -290,118 +301,130 @@ trigamma.greta_array <- function(x) { #' @export t.greta_array <- function(x) { - - if (length(dim(x)) != 2) - stop("only 2D arrays can be transposed") + if (!is_2d(x)) { + cli::cli_abort( + "only 2D arrays can be transposed", + "dimension of {.var x} was {dim(x)}" + ) + } dims <- rev(dim(x)) op("transpose", - x, - dim = dims, - tf_operation = "tf_transpose") - + x, + dim = dims, + tf_operation = "tf_transpose" + ) } #' @export aperm.greta_array <- function(a, perm = NULL, ...) { - dimnums <- seq_along(dim(a)) - if (is.null(perm)) - perm <- rev(dimnums) + perm <- perm %||% rev(dimnums) perm <- as.integer(perm) if (!identical(sort(perm), dimnums)) { - stop("perm must be a reordering of the dimensions: ", - paste(dimnums, collapse = ", "), " but was: ", - paste(perm, collapse = ", "), - call. = FALSE) + cli::cli_abort( + c( + "{.arg perm} must be a reordering of the dimensions: {dimnums}", + "but was: {perm}" + ) + ) } op("aperm", a, - dim = dim(a)[perm], - tf_operation = "tf$transpose", - operation_args = list(perm = c(0L, perm))) - + dim = dim(a)[perm], + tf_operation = "tf$transpose", + operation_args = list(perm = c(0L, perm)) + ) } +#' @title Compute the Cholesky Factor of a Matrix +#' @inheritParams base::chol +#' +#' @param ... further arguments pass to or from methods. +#' @param force_cholesky Whether to force cholesky computation. Currently +#' used as a workaround to ensure cholesky is calculated properly, and may +#' result in code that uses `chol()` to be slow. Default is TRUE. Can change +#' to FALSE, but may encounter issues in +#' \url{https://github.com/greta-dev/greta/issues/585}. +#' #' @export -chol.greta_array <- function(x, ...) { - - if (!identical(list(), list(...))) - warning("chol() options are ignored for greta arrays") +chol.greta_array <- function(x, ..., force_cholesky = FALSE) { + if (!identical(list(), list(...))) { + cli::cli_warn( + "{.fun chol} options are ignored for {.cls greta_array}s" + ) + } if (has_representation(x, "cholesky")) { result <- copy_representation(x, "cholesky") } else { dim <- dim(x) - if (!(length(dim) == 2 && dim[1] == dim[2])) { - stop("only two-dimensional, square, symmetric greta arrays ", - "can be Cholesky decomposed") + is_2d_square <- is_2d(x) && dim[1] == dim[2] + if (!is_2d_square) { + ## TODO do we need to check for symmetry? + cli::cli_abort( + c( + "only two-dimensional, square, symmetric {.cls greta_array}s can be \\ + Cholesky decomposed", + "{.code dim(x)} returns: {dim(x)}" + ) + ) } result <- op("chol", x, - dim = dim, - tf_operation = "tf_chol") + dim = dim, + tf_operation = "tf_chol" + ) + } - result + if (force_cholesky){ + result <- op("chol", x, + dim = dim(x), + tf_operation = "tf_chol" + ) + } + result } #' @export solve.greta_array <- function(a, b, ...) { - # check a is 2D - if (length(dim(a)) != 2) { - stop(sprintf("'a' and 'b' must both be 2D, but 'a' has dimensions: %s", - paste(dim(a), collapse = " x "))) - } + check_2d(a) # check the matrix is square - if (dim(a)[1] != dim(a)[2]) { - stop(sprintf("'a' must be square, but has %i rows and %i columns", - dim(a)[1], dim(a)[2])) - } + check_square(a) # if they just want the matrix inverse, do that if (missing(b)) { - if (has_representation(a, "cholesky")) { u <- representation(a, "cholesky") result <- chol2inv(u) } else { result <- op("solve", a, - tf_operation = "tf$linalg$inv") + tf_operation = "tf$linalg$inv" + ) } - } else { - # check b is 2D - if (length(dim(b)) != 2) { - stop(sprintf("'a' and 'b' must both be 2D, but 'b' has dimensions: %s", - paste(dim(b), collapse = " x "))) - } - + check_2d(b) # b must have the right number of rows - if (dim(b)[1] != dim(a)[1]) { - stop(sprintf(paste("'b' must have the same number of rows as 'a'", - "(%i), but has %i rows instead"), - dim(a)[1], dim(b)[1])) - } + check_rows_equal(a, b) # ... and solve the linear equations result <- op("solve", a, b, - dim = dim(b), - tf_operation = "tf$linalg$solve") - + dim = dim(b), + tf_operation = "tf$linalg$solve" + ) } result - } # nolint start @@ -413,105 +436,111 @@ chol2inv <- function(x, size = NCOL(x), LINPACK = FALSE) { #' @export chol2inv.default <- function(x, size = NCOL(x), LINPACK = FALSE) { - base::chol2inv(x = x, size = size, LINPACK = LINPACK) + base::chol2inv(x = x, size = size) } #' @export chol2inv.greta_array <- function(x, size = NCOL(x), LINPACK = FALSE) { - - if (!identical(LINPACK, FALSE)) { - warning("'LINPACK' is ignored for greta arrays") + if (isTRUE(LINPACK)) { + cli::cli_warn( + "The {.arg LINPACK} argument is ignored for {.cls greta_array}s, and \\ + has also been defunct since R 3.1.0" + ) } + ## TODO shouldn't this be a !/missing() or something? if (!identical(size, NCOL(x))) { - warning("'size' is ignored for greta arrays") + cli::cli_warn( + "{.arg size} is ignored for {.cls greta_array}s" + ) } op("chol2inv", x, - tf_operation = "tf_chol2inv") - + tf_operation = "tf_chol2inv" + ) } # nolint end #' @rdname overloaded #' @export -cov2cor <- function(V) { # nolint +cov2cor <- function(V) { # nolint UseMethod("cov2cor", V) } #' @export -cov2cor.default <- function(V) { # nolint +cov2cor.default <- function(V) { # nolint stats::cov2cor(V) } #' @export -cov2cor.greta_array <- function(V) { # nolint +cov2cor.greta_array <- function(V) { # nolint op("cov2cor", V, - tf_operation = "tf_cov2cor") + tf_operation = "tf_cov2cor" + ) } # sum, prod, min, mean, max #' @export -sum.greta_array <- function(..., na.rm = TRUE) { # nolint +sum.greta_array <- function(..., na.rm = TRUE) { # nolint # combine all elements into a column vector vec <- c(...) # sum the elements op("sum", vec, - dim = c(1, 1), - tf_operation = "tf_sum") - + dim = c(1, 1), + tf_operation = "tf_sum" + ) } #' @export -prod.greta_array <- function(..., na.rm = TRUE) { # nolint +prod.greta_array <- function(..., na.rm = TRUE) { # nolint # combine all elements into a column vector vec <- c(...) # sum the elements op("prod", vec, - dim = c(1, 1), - tf_operation = "tf_prod") - + dim = c(1, 1), + tf_operation = "tf_prod" + ) } #' @export -min.greta_array <- function(..., na.rm = TRUE) { # nolint +min.greta_array <- function(..., na.rm = TRUE) { # nolint # combine all elements into a column vector vec <- c(...) # sum the elements op("min", vec, - dim = c(1, 1), - tf_operation = "tf_min") - + dim = c(1, 1), + tf_operation = "tf_min" + ) } #' @export -mean.greta_array <- function(x, trim = 0, na.rm = TRUE, ...) { # nolint +mean.greta_array <- function(x, trim = 0, na.rm = TRUE, ...) { # nolint # sum the elements op("mean", x, - dim = c(1, 1), - tf_operation = "tf_mean") - + dim = c(1, 1), + tf_operation = "tf_mean" + ) } #' @export -max.greta_array <- function(..., na.rm = TRUE) { # nolint +max.greta_array <- function(..., na.rm = TRUE) { # nolint # combine all elements into a column vector vec <- c(...) # sum the elements op("max", vec, - dim = c(1, 1), - tf_operation = "tf_max") - + dim = c(1, 1), + tf_operation = "tf_max" + ) } #' @export @@ -529,48 +558,41 @@ cumprod.greta_array <- function(x) { # these primitives are not yet supported: #' @export cummax.greta_array <- function(x) { - stop("cummax not yet implemented for greta") + cli::cli_abort( + "{.fun cummax} not yet implemented for {.pkg greta}" + ) } #' @export cummin.greta_array <- function(x) { - stop("cummin not yet implemented for greta") + cli::cli_abort( + "{.fun cummin} not yet implemented for {.pkg greta}" + ) } -#' @export -Im.greta_array <- complex_error - -#' @export -Re.greta_array <- complex_error - -#' @export -Arg.greta_array <- complex_error - -#' @export -Conj.greta_array <- complex_error - -#' @export -Mod.greta_array <- complex_error # get the incides to reduce over, for colSums, rowSums, colMeans, rowMeans rowcol_idx <- function(x, dims, which = c("col", "row")) { - - if (dims < 1L || dims > length(dim(x)) - 1L) { - stop("invalid 'dims'", call. = FALSE) + invalid_dims <- dims < 1L || dims > n_dim(x) - 1L + if (invalid_dims) { + cli::cli_abort( + "invalid {.var dims}" + ) } switch(which, - row = (dims + 1):length(dim(x)), - col = seq_len(dims)) - + row = (dims + 1):n_dim(x), + col = seq_len(dims) + ) } # get output dimension for colSums, rowSums, colMeans, rowMeans rowcol_dim <- function(x, dims, which = c("row", "col")) { idx <- rowcol_idx(x, dims, which) dims <- dim(x)[-idx] - if (length(dims) == 1) + if (length(dims) == 1) { dims <- c(dims, 1L) + } dims } @@ -595,78 +617,82 @@ identity.greta_array <- function(x) { #' @rdname overloaded #' @export -colMeans <- function(x, na.rm = FALSE, dims = 1L) +colMeans <- function(x, na.rm = FALSE, dims = 1L) { UseMethod("colMeans", x) +} #' @export -colMeans.default <- function(x, na.rm = FALSE, dims = 1L) +colMeans.default <- function(x, na.rm = FALSE, dims = 1L) { base::colMeans(x = x, na.rm = na.rm, dims = dims) +} #' @export colMeans.greta_array <- function(x, na.rm = FALSE, dims = 1L) { - op("colMeans", x, - operation_args = list(dims = dims), - tf_operation = "tf_colmeans", - dim = rowcol_dim(x, dims, "col")) - + operation_args = list(dims = dims), + tf_operation = "tf_colmeans", + dim = rowcol_dim(x, dims, "col") + ) } #' @rdname overloaded #' @export -rowMeans <- function(x, na.rm = FALSE, dims = 1L) +rowMeans <- function(x, na.rm = FALSE, dims = 1L) { UseMethod("rowMeans", x) +} #' @export -rowMeans.default <- function(x, na.rm = FALSE, dims = 1L) +rowMeans.default <- function(x, na.rm = FALSE, dims = 1L) { base::rowMeans(x = x, na.rm = na.rm, dims = dims) +} #' @export rowMeans.greta_array <- function(x, na.rm = FALSE, dims = 1L) { - op("rowMeans", x, - operation_args = list(dims = dims), - tf_operation = "tf_rowmeans", - dim = rowcol_dim(x, dims, "row")) - + operation_args = list(dims = dims), + tf_operation = "tf_rowmeans", + dim = rowcol_dim(x, dims, "row") + ) } #' @rdname overloaded #' @export -colSums <- function(x, na.rm = FALSE, dims = 1L) +colSums <- function(x, na.rm = FALSE, dims = 1L) { UseMethod("colSums", x) +} #' @export -colSums.default <- function(x, na.rm = FALSE, dims = 1L) +colSums.default <- function(x, na.rm = FALSE, dims = 1L) { base::colSums(x = x, na.rm = na.rm, dims = dims) +} #' @export colSums.greta_array <- function(x, na.rm = FALSE, dims = 1L) { - op("colSums", x, - operation_args = list(dims = dims), - tf_operation = "tf_colsums", - dim = rowcol_dim(x, dims, "col")) - + operation_args = list(dims = dims), + tf_operation = "tf_colsums", + dim = rowcol_dim(x, dims, "col") + ) } #' @rdname overloaded #' @export -rowSums <- function(x, na.rm = FALSE, dims = 1L) +rowSums <- function(x, na.rm = FALSE, dims = 1L) { UseMethod("rowSums", x) +} #' @export -rowSums.default <- function(x, na.rm = FALSE, dims = 1L) +rowSums.default <- function(x, na.rm = FALSE, dims = 1L) { base::rowSums(x = x, na.rm = na.rm, dims = dims) +} #' @export rowSums.greta_array <- function(x, na.rm = FALSE, dims = 1L) { - op("rowSums", x, - operation_args = list(dims = dims), - tf_operation = "tf_rowsums", - dim = rowcol_dim(x, dims, "row")) - + operation_args = list(dims = dims), + tf_operation = "tf_rowsums", + dim = rowcol_dim(x, dims, "row") + ) } # nolint end @@ -675,12 +701,12 @@ rowSums.greta_array <- function(x, na.rm = FALSE, dims = 1L) { #' @rdname overloaded #' @export sweep <- function(x, MARGIN, STATS, FUN = "-", check.margin = TRUE, ...) { -# nolint end - if (inherits(STATS, "greta_array")) + # nolint end + if (is.greta_array(STATS)) { x <- as.greta_array(x) + } UseMethod("sweep", x) - } #' @export @@ -693,96 +719,80 @@ sweep.greta_array <- function(x, STATS, FUN = c("-", "+", "/", "*"), check.margin = TRUE, ...) { -# nolint end + # nolint end # only allow these four functions fun <- match.arg(FUN) stats <- as.greta_array(STATS) margin <- MARGIN - if (!margin %in% seq_len(2)) - stop("MARGIN can only be 1 or 2") - - # x must be 2D - if (length(dim(x)) != 2) { - stop(sprintf("x must be a 2D array, but has %i dimensions", - length(dim(x)))) - } - - # STATS must be a column array - if (!(length(dim(stats)) == 2 && dim(stats)[2] == 1)) { - stop(sprintf(paste("STATS must be a column vector array,", - "but has dimensions %s"), - paste(dim(stats), collapse = " x "))) + if (!margin %in% seq_len(2)) { + cli::cli_abort( + "MARGIN can only be 1 or 2" + ) } + check_2d(x) + check_is_column_array(stats) # STATS must have the same dimension as the correct dim of x - if (dim(x)[margin] != dim(stats)[1]) - stop("the number of elements of STATS does not match dim(x)[MARGIN]") + check_stats_dim_matches_x_dim(x, margin, stats) op("sweep", x, stats, - operation_args = list(margin = margin, fun = fun), - tf_operation = "tf_sweep", - dim = dim(x) + operation_args = list(margin = margin, fun = fun), + tf_operation = "tf_sweep", + dim = dim(x) ) - } # nolint start #' @import methods +#' @importFrom tensorflow %as% setClass("greta_array") -setMethod("kronecker", signature(X = "greta_array", Y = "greta_array"), - function(X, Y, FUN = c("*", "/", "+", "-"), make.dimnames = FALSE, - ...) { -# nolint end - fun <- match.arg(FUN) - - # X must be 2D - if (length(dim(X)) != 2) { - stop(sprintf("X must be a 2D array, but has %i dimensions", - length(dim(X)))) - } - - # Y must be 2D - if (length(dim(Y)) != 2) { - stop(sprintf("Y must be a 2D array, but has %i dimensions", - length(dim(X)))) - } - - tf_fun_name <- switch(fun, - `*` = "multiply", - `/` = "truediv", - `+` = "add", - `-` = "subtract") - - op("kronecker", X, Y, - tf_operation = "tf_kronecker", - operation_args = list(tf_fun_name = tf_fun_name), - dim = dim(X) * dim(Y)) - - } +setMethod( + "kronecker", signature(X = "greta_array", Y = "greta_array"), + function(X, Y, FUN = c("*", "/", "+", "-"), make.dimnames = FALSE, + ...) { + # nolint end + fun <- match.arg(FUN) + + check_2d(X) + check_2d(Y) + + tf_fun_name <- switch(fun, + `*` = "multiply", + `/` = "truediv", + `+` = "add", + `-` = "subtract" + ) + + op("kronecker", X, Y, + tf_operation = "tf_kronecker", + operation_args = list(tf_fun_name = tf_fun_name), + dim = dim(X) * dim(Y) + ) + } ) # nolint start #' @import methods -setMethod(kronecker, signature(X = "array", Y = "greta_array"), - function(X, Y, FUN = c("*", "/", "+", "-"), make.dimnames = FALSE, - ...) { -# nolint end - kronecker(as.greta_array(X), Y, FUN, make.dimnames = FALSE) - - } +setMethod( + kronecker, signature(X = "array", Y = "greta_array"), + function(X, Y, FUN = c("*", "/", "+", "-"), make.dimnames = FALSE, + ...) { + # nolint end + kronecker(as.greta_array(X), Y, FUN, make.dimnames = FALSE) + } ) # nolint start #' @import methods -setMethod(kronecker, signature(X = "greta_array", Y = "array"), - function(X, Y, FUN = c("*", "/", "+", "-"), make.dimnames = FALSE, - ...) { -# nolint end - kronecker(X, as.greta_array(Y), FUN, make.dimnames = FALSE) - - } +setMethod( + kronecker, signature(X = "greta_array", Y = "array"), + function(X, Y, FUN = c("*", "/", "+", "-"), make.dimnames = FALSE, + ...) { + # nolint end + kronecker(X, as.greta_array(Y), FUN, make.dimnames = FALSE) + } ) # nolint start @@ -791,7 +801,7 @@ setMethod(kronecker, signature(X = "greta_array", Y = "array"), backsolve <- function(r, x, k = ncol(r), upper.tri = TRUE, transpose = FALSE) { -# nolint end + # nolint end UseMethod("backsolve", x) } @@ -800,10 +810,12 @@ backsolve <- function(r, x, k = ncol(r), backsolve.default <- function(r, x, k = ncol(r), upper.tri = TRUE, transpose = FALSE) { -# nolint end - base::backsolve(r, x, k = ncol(r), - upper.tri = TRUE, - transpose = FALSE) + # nolint end + base::backsolve(r, x, + k = ncol(r), + upper.tri = TRUE, + transpose = FALSE + ) } # define this explicitly so CRAN doesn't think we're using .Internal @@ -813,22 +825,15 @@ backsolve.greta_array <- function(r, x, k = ncol(r), upper.tri = TRUE, transpose = FALSE) { -# nolint end - if (k != ncol(r)) { - stop("k must equal ncol(r) for greta arrays", - call. = FALSE) - } - - if (transpose) { - stop("transpose must be FALSE for greta arrays", - call. = FALSE) - } + # nolint end + check_x_matches_ncol(x = k, ncol_of = r) + check_transpose(transpose) op("backsolve", r, x, - operation_args = list(lower = !upper.tri), - tf_operation = "tf$linalg$triangular_solve", - dim = dim(x)) - + operation_args = list(lower = !upper.tri), + tf_operation = "tf$linalg$triangular_solve", + dim = dim(x) + ) } # nolint start @@ -837,7 +842,7 @@ backsolve.greta_array <- function(r, x, forwardsolve <- function(l, x, k = ncol(l), upper.tri = FALSE, transpose = FALSE) { -# nolint end + # nolint end UseMethod("forwardsolve", x) } @@ -847,10 +852,12 @@ forwardsolve <- function(l, x, k = ncol(l), forwardsolve.default <- function(l, x, k = ncol(l), upper.tri = FALSE, transpose = FALSE) { -# nolint end - base::forwardsolve(l, x, k = ncol(l), - upper.tri = FALSE, - transpose = FALSE) + # nolint end + base::forwardsolve(l, x, + k = ncol(l), + upper.tri = FALSE, + transpose = FALSE + ) } # nolint start @@ -859,52 +866,46 @@ forwardsolve.greta_array <- function(l, x, k = ncol(l), upper.tri = FALSE, transpose = FALSE) { -# nolint end - if (k != ncol(l)) { - stop("k must equal ncol(l) for greta arrays", - call. = FALSE) - } - - if (transpose) { - stop("transpose must be FALSE for greta arrays", - call. = FALSE) - } + # nolint end + check_x_matches_ncol(x = k, ncol_of = l) + check_transpose(transpose) op("forwardsolve", l, x, - operation_args = list(lower = !upper.tri), - tf_operation = "tf$linalg$triangular_solve", - dim = dim(x)) - + operation_args = list(lower = !upper.tri), + tf_operation = "tf$linalg$triangular_solve", + dim = dim(x) + ) } #' @rdname overloaded #' @export -apply <- function(X, MARGIN, FUN, ...) { # nolint +apply <- function(X, MARGIN, FUN, ...) { # nolint UseMethod("apply", X) } #' @export -apply.default <- function(X, MARGIN, FUN, ...) { # nolint - base::apply(X = X, - MARGIN = MARGIN, - FUN = FUN, - ...) +apply.default <- function(X, MARGIN, FUN, ...) { # nolint + base::apply( + X = X, + MARGIN = MARGIN, + FUN = FUN, + ... + ) } # nolint start #' @export apply.greta_array <- function(X, MARGIN, - FUN = c("sum", "max", "mean", "min", "prod", - "cumsum", "cumprod"), + FUN = c( + "sum", "max", "mean", "min", "prod", + "cumsum", "cumprod" + ), ...) { -# nolint end + # nolint end fun <- match.arg(FUN) - if (inherits(MARGIN, "greta_array")) { - stop("MARGIN cannot be a greta array", - call. = FALSE) - } + check_not_greta_array(MARGIN) margin <- as.integer(MARGIN) @@ -929,8 +930,9 @@ apply.greta_array <- function(X, MARGIN, # set final and intermediate dimensions if (reducing) { dim_out <- d[margin] - if (length(dim_out) == 1) + if (length(dim_out) == 1) { dim_out <- c(dim_out, 1L) + } dim <- c(prod(dim_out), 1) } else { dim_out <- c(prod(d[-margin]), d[margin]) @@ -943,10 +945,13 @@ apply.greta_array <- function(X, MARGIN, } out <- op("apply", new_x, - operation_args = list(axis = -2L, - tf_fun_name = tf_fun_name), - tf_operation = "tf_apply", - dim = dim) + operation_args = list( + axis = -2L, + tf_fun_name = tf_fun_name + ), + tf_operation = "tf_apply", + dim = dim + ) # need to reshape when margin is a vector, or when not reducing if (!reducing | length(margin) > 1) { @@ -954,13 +959,12 @@ apply.greta_array <- function(X, MARGIN, } out - } #' @rdname overloaded #' @export -tapply <- function(X, INDEX, FUN, ...) { # nolint +tapply <- function(X, INDEX, FUN, ...) { # nolint UseMethod("tapply", X) } @@ -968,13 +972,15 @@ tapply <- function(X, INDEX, FUN, ...) { # nolint #' @export tapply.default <- function(X, INDEX, FUN = NULL, ..., default = NA, simplify = TRUE) { -# nolint end - base::tapply(X = X, - INDEX = INDEX, - FUN = FUN, - ..., - default = default, - simplify = simplify) + # nolint end + base::tapply( + X = X, + INDEX = INDEX, + FUN = FUN, + ..., + default = default, + simplify = simplify + ) } # nolint start @@ -982,41 +988,35 @@ tapply.default <- function(X, INDEX, FUN = NULL, ..., tapply.greta_array <- function(X, INDEX, FUN = c("sum", "max", "mean", "min", "prod"), ...) { -# nolint end + # nolint end x <- X index <- INDEX fun <- match.arg(FUN) - if (inherits(index, "greta_array")) { - stop("INDEX cannot be a greta array", - call. = FALSE) - } + check_not_greta_array(INDEX) # convert index to successive integers starting at 0 groups <- sort(unique(index)) id <- match(index, groups) - 1L len <- length(groups) - dim_x <- dim(x) - if (!(length(dim_x) == 2L && dim_x[2] == 1L)) { - stop("X must be 2D greta array with one column, but has dimensions ", - paste(dim_x, collapse = " x "), - call. = FALSE) - } + check_2_by_1(x) op("tapply", x, - operation_args = list(segment_ids = id, - num_segments = len, - op_name = fun), - tf_operation = "tf_tapply", - dim = c(len, 1)) - + operation_args = list( + segment_ids = id, + num_segments = len, + op_name = fun + ), + tf_operation = "tf_tapply", + dim = c(len, 1) + ) } #' @rdname overloaded #' @export -eigen <- function(x, symmetric, only.values, EISPACK) { # nolint +eigen <- function(x, symmetric, only.values, EISPACK) { # nolint UseMethod("eigen") } @@ -1024,38 +1024,46 @@ eigen <- function(x, symmetric, only.values, EISPACK) { # nolint #' @export eigen.default <- function(x, symmetric, only.values = FALSE, EISPACK = FALSE) { -# nolint end - base::eigen(x = x, - symmetric = symmetric, - only.values = only.values, - EISPACK = EISPACK) + # nolint end + base::eigen( + x = x, + symmetric = symmetric, + only.values = only.values, + EISPACK = EISPACK + ) } # nolint start #' @export eigen.greta_array <- function(x, symmetric, only.values = FALSE, EISPACK = FALSE) { -# nolint end + # nolint end x <- as.greta_array(x) - if (missing(symmetric)) symmetric <- TRUE + if (missing(symmetric)) { + symmetric <- TRUE + } + dims <- dim(x) - if (length(dims) != 2 | dims[1] != dims[2] | !symmetric) { - stop("only two-dimensional, square, symmetric greta arrays ", - "can be eigendecomposed", - call. = FALSE) + is_square <- dims[1] == dims[2] + is_not_2d_square_symmetric <- !is_2d(x) | !is_square | !symmetric + + if (is_not_2d_square_symmetric) { + cli::cli_abort( + "only two-dimensional, square, symmetric {.cls greta_array}s can be \\ + eigendecomposed" + ) } # they just want the eigenvalues, use that tf method if (only.values) { - values <- op("eigenvalues", x, - dim = nrow(x), - tf_operation = "tf_only_eigenvalues") + dim = nrow(x), + tf_operation = "tf_only_eigenvalues" + ) vectors <- NULL - } else { # if we're doing the whole eigendecomposition, do it in three operations @@ -1064,20 +1072,24 @@ eigen.greta_array <- function(x, symmetric, # fact is a list of the two elements. But that's OK so long as the user # never sees it eig <- op("eigen", x, - tf_operation = "tf$linalg$eigh") + tf_operation = "tf$linalg$eigh" + ) # get the eigenvalues and vectors as actual, sane greta arrays - values <- op("values", eig, dim = c(nrow(eig), 1L), - tf_operation = "tf_extract_eigenvalues") + values <- op("values", eig, + dim = c(nrow(eig), 1L), + tf_operation = "tf_extract_eigenvalues" + ) vectors <- op("vectors", eig, - tf_operation = "tf_extract_eigenvectors") - + tf_operation = "tf_extract_eigenvectors" + ) } - list(values = values, - vectors = vectors) - + list( + values = values, + vectors = vectors + ) } @@ -1090,28 +1102,27 @@ rdist <- function(x1, x2 = NULL, compact = FALSE) { #' @export rdist.default <- function(x1, x2 = NULL, compact = FALSE) { # error nicely if they don't have fields installed - fields_installed <- requireNamespace("fields", quietly = TRUE) - if (!fields_installed) { - stop("rdist is being called on R arrays (not greta arrays), ", - "but the fields package is not installed", - call. = FALSE) - } - fields::rdist(x1 = x1, - x2 = x2, - compact = compact) + check_fields_installed() + + fields::rdist( + x1 = x1, + x2 = x2, + compact = compact + ) } #' @export rdist.greta_array <- function(x1, x2 = NULL, compact = FALSE) { - - if (!identical(compact, FALSE)) { - warning("'compact' is ignored for greta arrays") + if (isTRUE(compact)) { + cli::cli_warn( + "{.arg compact} is ignored for {.cls greta_array}s" + ) } x1 <- as.greta_array(x1) # like rdist, convert to a column vector if it has too many dimensions - if (length(dim(x1)) != 2) { + if (!is_2d(x1)) { x1 <- flatten(x1) } @@ -1119,38 +1130,30 @@ rdist.greta_array <- function(x1, x2 = NULL, compact = FALSE) { # square self-distance matrix if (is.null(x2)) { - op("rdist", x1, - tf_operation = "tf_self_distance", - dim = c(n1, n1)) - + tf_operation = "tf_self_distance", + dim = c(n1, n1) + ) } else { # possibly non-square pairwise distance matrix x2 <- as.greta_array(x2) - if (length(dim(x2)) != 2) { + if (!is_2d(x2)) { x2 <- flatten(x2) } # error if they have different number of columns. fields::rdist allows # different numbers of columns, takes the number of columns from x1,and # sometimes gives nonsense results - if (ncol(x1) != ncol(x2)) { - - stop("x1 and x2 must have the same number of columns, but had ", - ncol(x1), " and ", ncol(x2), " columns", - call. = FALSE) - - } + check_ncols_match(x1, x2) n2 <- nrow(x2) op("rdist", x1, x2, - tf_operation = "tf_distance", - dim = c(n1, n2)) - + tf_operation = "tf_distance", + dim = c(n1, n2) + ) } - } diff --git a/R/greta_array_class.R b/R/greta_array_class.R index 571a75b1..d98ad329 100644 --- a/R/greta_array_class.R +++ b/R/greta_array_class.R @@ -4,22 +4,25 @@ # coerce to greta_array class if optional = TRUE don't error if we fail, just # return original x, which we pass along explicitly -as.greta_array <- function(x, optional = FALSE, original_x = x, ...) +as.greta_array <- function(x, optional = FALSE, original_x = x, ...) { UseMethod("as.greta_array", x) +} # safely handle self-coercion #' @export -as.greta_array.greta_array <- function(x, optional = FALSE, original_x = x, ...) +as.greta_array.greta_array <- function(x, optional = FALSE, original_x = x, ...) { x +} # coerce logical vectors to numerics #' @export as.greta_array.logical <- function(x, optional = FALSE, original_x = x, ...) { x[] <- as.numeric(x[]) as.greta_array.numeric(x, - optional = optional, - original_x = original_x, - ...) + optional = optional, + original_x = original_x, + ... + ) } # coerce dataframes if all columns can safely be converted to numeric, error @@ -27,22 +30,13 @@ as.greta_array.logical <- function(x, optional = FALSE, original_x = x, ...) { #' @export as.greta_array.data.frame <- function(x, optional = FALSE, original_x = x, ...) { - classes <- vapply(x, class, "") - valid <- classes %in% c("numeric", "integer", "logical") - - if (!optional & !all(valid)) { - invalid_types <- unique(classes[!valid]) - stop("cannot coerce a dataframe to a greta_array unless all columns are ", - "numeric, integer or logical. This dataframe had columns of type: ", - paste(invalid_types, collapse = ", "), - call. = FALSE) - } + check_greta_data_frame(x, optional) as.greta_array.numeric(as.matrix(x), - optional = optional, - original_x = original_x, - ...) - + optional = optional, + original_x = original_x, + ... + ) } # coerce logical matrices to numeric matrices, and error if they aren't logical @@ -50,22 +44,17 @@ as.greta_array.data.frame <- function(x, optional = FALSE, #' @export as.greta_array.matrix <- function(x, optional = FALSE, original_x = x, ...) { - if (!is.numeric(x)) { - if (is.logical(x)) { + check_greta_array_type(x, optional) + + if (!is.numeric(x) && is.logical(x)) { x[] <- as.numeric(x[]) - } else if (!optional) { - stop("cannot convert a matrix to a greta_array unless it is numeric, ", - "integer or logical. This matrix had type: ", - class(as.vector(x)), - call. = FALSE) } - } as.greta_array.numeric(x, - optional = optional, - original_x = original_x, - ...) - + optional = optional, + original_x = original_x, + ... + ) } # coerce logical arrays to numeric arrays, and error if they aren't logical @@ -73,36 +62,29 @@ as.greta_array.matrix <- function(x, optional = FALSE, original_x = x, ...) { #' @export as.greta_array.array <- function(x, optional = FALSE, original_x = x, ...) { - if (!optional & !is.numeric(x)) { + check_greta_array_type(x, optional) - if (is.logical(x)) + if (!optional && !is.numeric(x) && is.logical(x)) { x[] <- as.numeric(x[]) - else - stop("cannot convert an array to a greta_array unless it is numeric, ", - "integer or logical. This array had type: ", - class(as.vector(x)), - call. = FALSE) - } as.greta_array.numeric(x, - optional = optional, - original_x = original_x, - ...) - + optional = optional, + original_x = original_x, + ... + ) } # finally, reject if there are any missing values, or set up the greta_array #' @export as.greta_array.numeric <- function(x, optional = FALSE, original_x = x, ...) { - if (!optional & any(!is.finite(x))) { - stop("cannot convert objects with missing or infinite values ", - "to greta_arrays", call. = FALSE) - } + check_missing_infinite_values(x, optional) + as.greta_array.node(data_node$new(x), - optional = optional, - original_x = original_x, - ...) + optional = optional, + original_x = original_x, + ... + ) } # node method (only one that does anything) @@ -117,35 +99,66 @@ as.greta_array.node <- function(x, optional = FALSE, original_x = x, ...) { # otherwise error #' @export as.greta_array.default <- function(x, optional = FALSE, original_x = x, ...) { - if (!optional) { - stop("objects of class ", - paste(class(x), collapse = " or "), - " cannot be coerced to greta arrays", - call. = FALSE) + cli::cli_abort( + c( + "Object cannot be coerced to {.cls greta_array}", + "Objects of class {.cls {paste(class(x), collapse = ' or ')}} cannot \\ + be coerced to a {.cls greta_array}" + ) + ) } # return x before we started messing with it original_x - } # print method #' @export -print.greta_array <- function(x, ...) { - +print.greta_array <- function(x, ..., n = 10) { node <- get_node(x) - text <- sprintf("greta array (%s)\n\n", - node$description()) - cat(text) - print(node$value(), ...) + node_desc <- node$cli_description() + + cli::cli_text("{.pkg greta} array {.cls {node_desc}}") + cli::cli_text("\n") + + if (is.unknowns(node$value())){ + return(print(node$value(), ..., n = n)) + } + + x_val <- node$value() + n_print <- getOption("greta.print_max") %||% n + + n_unknowns <- length(x_val) + x_head <- head(x_val, n = n_print) + remaining_vals <- n_unknowns - n_print + + # print with question marks + print.default(x_head, quote = FALSE, max = n) + + cli::cli_text("\n") + + if (remaining_vals <= 0) { + return(invisible(x_val)) + } + + if (remaining_vals > 0 ) { + cli::cli_alert_info( + text = c( + "i" = "{remaining_vals} more values\n", + "i" = "Use {.code print(n = ...)} to see more values" + ) + ) + } + + } + # summary method #' @export summary.greta_array <- function(object, ...) { - node <- get_node(object) sry <- list( @@ -158,47 +171,48 @@ summary.greta_array <- function(object, ...) { class(sry) <- "summary.greta_array" sry - } # summary print method #' @export #' @method print summary.greta_array -print.summary.greta_array <- function (x, ...) { +print.summary.greta_array <- function(x, ...) { # array type - type_text <- sprintf("'%s' greta array", - x$type) + type_text <- glue::glue( + "'{x$type}' greta array" + ) if (x$length == 1) { shape_text <- "with 1 element" } else { - dim_text <- paste(x$dim, collapse = " x ") - shape_text <- sprintf("with %i elements (%s)", - x$length, - dim_text) + dim_text <- glue::glue_collapse(x$dim, sep = "x") + shape_text <- glue::glue( + "with {x$length} elements ({dim_text})" + ) } # distribution info if (!is.null(x$distribution_name)) { - distribution_text <- sprintf("following a %s distribution", - x$distribution_name) + distribution_text <- glue::glue( + "following a {x$distribution_name} distribution" + ) } else { distribution_text <- "" } - if (inherits(x$values, "unknowns")) { + if (is.unknowns(x$values)) { values_text <- "\n (values currently unknown)" } else { values_print <- capture.output(summary(x$values)) values_text <- paste0("\n", paste(values_print, collapse = "\n")) } - text <- paste(type_text, shape_text, distribution_text, paste0("\n", - values_text)) + text <- glue::glue( + "{type_text} {shape_text} {distribution_text} \n {values_text}" + ) cat(text) invisible(x) - } # str method @@ -209,33 +223,32 @@ str.greta_array <- function(object, ...) { array <- unclass(value) string <- capture.output(str(array)) string <- gsub("NA", "?", string) - string <- paste("'greta_array'", string) + string <- glue::glue("'greta_array' {string}") cat(string) } # return the unknowns array for this greta array #' @export -as.matrix.greta_array <- function(x, ...) +as.matrix.greta_array <- function(x, ...) { get_node(x)$value() +} # nolint end # extract the node from a greta array -get_node <- function(x) +get_node <- function(x) { attr(x, "node") +} # check for and get representations representation <- function(x, name, error = TRUE) { - if (inherits(x, "greta_array")) { + if (is.greta_array(x)) { x_node <- get_node(x) } else { x_node <- x } repr <- x_node$representations[[name]] - if (error && is.null(repr)) { - stop("greta array has no representation '", - name, "'", call. = FALSE) - } + check_has_representation(repr, name, error) repr } @@ -244,6 +257,23 @@ has_representation <- function(x, name) { !is.null(repr) } +anti_representation <- function(x, name, error = TRUE) { + if (is.greta_array(x)) { + x_node <- get_node(x) + } else { + x_node <- x + } + repr <- x_node$anti_representations[[name]] + check_has_anti_representation(repr, name, error) + repr +} + + +has_anti_representation <- function(x, name){ + repr <- anti_representation(x, name, error = FALSE) + !is.null(repr) +} + # helper function to make a copy of the greta array & tensor copy_representation <- function(x, name) { repr <- representation(x, name) @@ -251,8 +281,9 @@ copy_representation <- function(x, name) { } greta_array_module <- module(as.greta_array, - get_node, - has_representation, - representation, - copy_representation, - unknowns = unknowns_module) + get_node, + has_representation, + representation, + copy_representation, + unknowns = unknowns_module +) diff --git a/R/greta_create_conda_env.R b/R/greta_create_conda_env.R new file mode 100644 index 00000000..8e374313 --- /dev/null +++ b/R/greta_create_conda_env.R @@ -0,0 +1,54 @@ +#' Create conda environment for greta +#' +#' This function runs [reticulate::conda_create()] inside +#' [callr::r_process_options()], to create the conda environment, +#' "greta-env-tf2". This is used within [install_greta_deps()] as part of +#' setting up python dependencies. It uses a version of python that is +#' compatible with the versions of tensorflow and tensorflow-probability, +#' which is established with [greta_deps_spec()]. We mostly recommend +#' users use [install_greta_deps()] to manage their python dependency +#' installation. +#' +#' +#' @param timeout time (minutes) until installation stops. Default is 5 minutes. +#' @param deps dependency specification, see [greta_deps_spec()] for +#' more details. +#' +#' @return nothing - creates a conda environment for a specific python version +#' @export +greta_create_conda_env <- function(timeout = 5, + deps = greta_deps_spec()) { + + check_greta_deps_spec(deps) + + stdout_file <- create_temp_file("out-greta-conda") + stderr_file <- create_temp_file("err-greta-conda") + + callr_conda_create <- callr::r_process_options( + func = function(python_version) { + reticulate::conda_create( + envname = "greta-env-tf2", + python_version = python_version + ) + }, + args = list(python_version = deps$python_version), + stdout = stdout_file, + stderr = stderr_file + ) + + install_conda_create <- new_install_process( + callr_process = callr_conda_create, + stdout_file = stdout_file, + stderr_file = stderr_file, + timeout = timeout, + cli_start_msg = glue::glue( + "Creating 'greta-env-tf2' conda environment using python \\ + v{deps$python_version}, this may take a minute" + ), + cli_end_msg = "greta-env-tf2 environment created!" + ) + + greta_stash$conda_create_notes <- install_conda_create$output_notes + greta_stash$conda_create_error <- install_conda_create$output_error + +} diff --git a/R/greta_install_miniconda.R b/R/greta_install_miniconda.R new file mode 100644 index 00000000..ed523d6c --- /dev/null +++ b/R/greta_install_miniconda.R @@ -0,0 +1,39 @@ +#' Installs miniconda +#' +#' This installs miniconda using [reticulate::install_miniconda()] inside +#' [callr::r_process_options()]. Used internally by [install_greta_deps()]. +#' We mostly recommend users use [install_greta_deps()] to manage their +#' python dependency installation. +#' +#' @param timeout time (minutes) until installation stops. Default is 5 minutes. +#' +#' @return nothing - installs miniconda. +#' @export +greta_install_miniconda <- function(timeout = 5) { + + stdout_file <- create_temp_file("out-miniconda") + stderr_file <- create_temp_file("err-miniconda") + + callr_install_miniconda <- callr::r_process_options( + func = function() { + reticulate::install_miniconda() + }, + stdout = stdout_file, + stderr = stderr_file + ) + + # if this function doesn't fail, then this code here can be run? + install_miniconda_process <- new_install_process( + callr_process = callr_install_miniconda, + timeout = timeout, + stdout_file = stdout_file, + stderr_file = stderr_file, + cli_start_msg = "No {.pkg miniconda} detected, installing \\ + {.pkg miniconda}, this may take a minute.", + cli_end_msg = "{.pkg miniconda} installed!" + ) + + greta_stash$miniconda_notes <- install_miniconda_process$output_notes + greta_stash$miniconda_error <- install_miniconda_process$output_error + +} diff --git a/R/greta_install_python_deps.R b/R/greta_install_python_deps.R new file mode 100644 index 00000000..2c50def3 --- /dev/null +++ b/R/greta_install_python_deps.R @@ -0,0 +1,52 @@ +greta_install_python_deps <- function(timeout = 5, + deps = greta_deps_spec()) { + + stdout_file <- create_temp_file("out-python-deps") + stderr_file <- create_temp_file("err-python-deps") + + callr_conda_install <- callr::r_process_options( + func = function(deps) { + cli::cli_progress_step( + msg = "Installing TF (v{deps$tf_version})", + msg_done = "Installed TF (v{deps$tf_version})!", + msg_failed = "Error installing TF (v{deps$tf_version})" + ) + tensorflow::install_tensorflow( + version = deps$tf_version, + envname = "greta-env-tf2", + method = "conda" + ) + dep_tfp <- glue::glue("tensorflow-probability=={deps$tfp_version}") + cli::cli_progress_step( + msg = "Installing TFP (v{deps$tfp_version})", + msg_done = "Installed TFP (v{deps$tfp_version})!", + msg_failed = "Error installing TFP (v{deps$tfp_version})" + ) + reticulate::py_install( + packages = dep_tfp, + pip = TRUE, + envname = "greta-env-tf2", + method = "conda" + ) + }, + args = list(deps = deps), + stdout = stdout_file, + stderr = stderr_file + ) + + install_python_modules <- new_install_process( + callr_process = callr_conda_install, + timeout = timeout, + stdout_file = stdout_file, + stderr_file = stderr_file, + cli_start_msg = glue::glue( + "Installing python modules into 'greta-env-tf2' conda environment, \\ + this may take a few minutes" + ), + cli_end_msg = "Python modules installed!" + ) + + greta_stash$conda_install_notes <- install_python_modules$output_notes + greta_stash$conda_install_error <- install_python_modules$output_error + +} diff --git a/R/greta_mcmc_list.R b/R/greta_mcmc_list.R index 4b12f7a4..5b049147 100644 --- a/R/greta_mcmc_list.R +++ b/R/greta_mcmc_list.R @@ -7,7 +7,6 @@ as_greta_mcmc_list <- function(x, model_info) { attr(x, "model_info") <- model_info class(x) <- c("greta_mcmc_list", class(x)) x - } # nolint start @@ -22,6 +21,17 @@ as.mcmc.list.greta_mcmc_list <- function(x, ...) { x } +#' @title Is object a `greta_mcmc_list`? +#' @param x An object that may be a greta_mcmc_list +#' +#' @param ... extra args (not currently used) +#' @returns logical TRUE/FALSE +#' +#' @export +is.greta_mcmc_list <- function(x, ...){ + inherits(x, "greta_mcmc_list") +} + # for window (and any other function that modifies the object), apply the same # to the free state draws @@ -41,3 +51,70 @@ window.greta_mcmc_list <- function(x, start, end, thin, ...) { # add new methods for these generics, to make them look nicer and be more # user-friendly: # print, plot, summary + +#' Print method for greta MCMC list +#' +#' @param x greta mcmc list +#' @param ... extra args (currently not used) +#' @param n number of lines to print +#' +#' @return printed MCMC output +#' @export +print.greta_mcmc_list <- function(x, ..., n = 5){ + + n_chain <- coda::nchain(x) + n_iter <- coda::niter(x) + n_thin <- coda::thin(x) + cli::cli_h1("MCMC draws from {.pkg greta}") + cli::cli_bullets( + c( + "*" = "Iterations = {n_iter}", + "*" = "Chains = {n_chain}", + "*" = "Thinning = {n_thin}" + ) + ) + + n_print <- getOption("greta.print_max") %||% n + remaining_draws <- n_iter - n_print + more_draws_than_can_print <- remaining_draws > 0 + draws_can_be_printed <- remaining_draws <= 0 + + if (more_draws_than_can_print) { + cli::cli_h1("Chain 1 (iterations 1...{n_print})") + } + + if (draws_can_be_printed) { + cli::cli_h1("Chain 1 (iterations 1...{n_iter})") + } + + flat_mat <- as.matrix(x[[1]]) + + draws_head <- head(flat_mat, n = n_print) + + print(draws_head) + + if (more_draws_than_can_print){ + cli::cli_alert_info( + text = c( + "i" = "{remaining_draws} more draws\n", + "i" = "Use {.code print(n = ...)} to see more draws" + ) + ) + } + + cli::cli_rule() + + cli::cli_alert_info( + c("View {.pkg greta} draw chain {.param i} with:\n", + "{.code greta_draws_object[[i]]}. \n", + "E.g., view chain {.param 1} with: \n", + "{.code greta_draws_object[[1]]}." + ) + ) + + cli::cli_alert_info( + c("To see a summary of draws, run:\n", + "{.code summary(greta_draws_object)}") + ) + +} diff --git a/R/greta_model_class.R b/R/greta_model_class.R index 7ac67331..db01889a 100644 --- a/R/greta_model_class.R +++ b/R/greta_model_class.R @@ -2,39 +2,39 @@ #' @name model #' @title greta model objects -#' @description Create a \code{greta_model} object representing a statistical -#' model (using \code{model}), and plot a graphical representation of the -#' model. Statistical inference can be performed on \code{greta_model} objects -#' with \code{\link{mcmc}} +#' @description Create a `greta_model` object representing a statistical +#' model (using `model`), and plot a graphical representation of the +#' model. Statistical inference can be performed on `greta_model` objects +#' with [mcmc()] NULL #' @rdname model #' @export #' -#' @param \dots for \code{model}: \code{greta_array} objects to be tracked by +#' @param \dots for `model`: `greta_array` objects to be tracked by #' the model (i.e. those for which samples will be retained during mcmc). If -#' not provided, all of the non-data \code{greta_array} objects defined in the -#' calling environment will be tracked. For \code{print} and -#' \code{plot}:further arguments passed to or from other methods (currently +#' not provided, all of the non-data `greta_array` objects defined in the +#' calling environment will be tracked. For `print` and +#' `plot`:further arguments passed to or from other methods (currently #' ignored). #' #' @param precision the floating point precision to use when evaluating this -#' model. Switching from \code{"double"} (the default) to \code{"single"} may +#' model. Switching from `"double"` (the default) to `"single"` may #' decrease the computation time but increase the risk of numerical #' instability during sampling. #' #' @param compile whether to apply -#' \href{https://www.tensorflow.org/performance/xla/}{XLA JIT compilation} to +#' [XLA JIT compilation](https://openxla.org/xla) to #' the TensorFlow graph representing the model. This may slow down model #' definition, and speed up model evaluation. #' -#' @details \code{model()} takes greta arrays as arguments, and defines a +#' @details `model()` takes greta arrays as arguments, and defines a #' statistical model by finding all of the other greta arrays on which they -#' depend, or which depend on them. Further arguments to \code{model} can be +#' depend, or which depend on them. Further arguments to `model` can be #' used to configure the TensorFlow graph representing the model, to tweak #' performance. #' -#' @return \code{model} - a \code{greta_model} object. +#' @return `model` - a `greta_model` object. #' #' @examples #' \dontrun{ @@ -52,102 +52,52 @@ NULL model <- function(..., precision = c("double", "single"), compile = TRUE) { - check_tf_version("error") # get the floating point precision + # TODO + # what does it choose as default if both double and single are listed + # as default? tf_float <- switch(match.arg(precision), - double = "float64", - single = "float32") + double = "float64", + single = "float32" + ) # nodes required target_greta_arrays <- list(...) # if no arrays were specified, find all of the non-data arrays - if (identical(target_greta_arrays, list())) { - + no_arrays_specified <- identical(target_greta_arrays, list()) + if (no_arrays_specified) { target_greta_arrays <- all_greta_arrays(parent.frame(), - include_data = FALSE) - + include_data = FALSE + ) } else { # otherwise, find variable names for the provided nodes names <- substitute(list(...))[-1] names <- vapply(names, deparse, "") names(target_greta_arrays) <- names - } target_greta_arrays <- check_greta_arrays(target_greta_arrays, "model") # get the dag containing the target nodes + # TF1/2 check + # I don't think we need to use the `compile` flag in TF2 anymore + # Well, it will be passed onto the tf_function creation step dag <- dag_class$new(target_greta_arrays, - tf_float = tf_float, - compile = compile) - - # get and check the types - types <- dag$node_types + tf_float = tf_float, + compile = compile + ) # the user might pass greta arrays with groups of nodes that are unconnected # to one another. Need to check there are densities in each graph - - # so find the subgraph to which each node belongs - graph_id <- dag$subgraph_membership() - - graphs <- unique(graph_id) - n_graphs <- length(graphs) - - # separate messages to avoid the subgraphs issue for beginners - if (n_graphs == 1) { - density_message <- paste("none of the greta arrays in the model are", - "associated with a probability density, so a", - "model cannot be defined") - variable_message <- paste("none of the greta arrays in the model are", - "unknown, so a model cannot be defined") - } else { - density_message <- paste("the model contains", n_graphs, "disjoint graphs,", - "one or more of these sub-graphs does not contain", - "any greta arrays that are associated with a", - "probability density, so a model cannot be", - "defined") - variable_message <- paste("the model contains", n_graphs, "disjoint", - "graphs, one or more of these sub-graphs does", - "not contain any greta arrays that are unknown,", - "so a model cannot be defined") - } - - for (graph in graphs) { - - types_sub <- types[graph_id == graph] - - # check they have a density among them - if (!("distribution" %in% types_sub)) - stop(density_message, call. = FALSE) - - # check they have a variable node among them - if (!("variable" %in% types_sub)) - stop(variable_message, call. = FALSE) - - } - - # check for unfixed discrete distributions - distributions <- dag$node_list[dag$node_types == "distribution"] - bad_nodes <- vapply(distributions, - function(x) { - valid_target <- is.null(x$target) || - inherits(x$target, "data_node") - x$discrete && !valid_target - }, - FALSE) - - if (any(bad_nodes)) { - stop("model contains a discrete random variable that doesn't have a ", - "fixed value, so cannot be sampled from", - call. = FALSE) - } + check_subgraphs(dag) + check_unfixed_discrete_distributions(dag) # define the TF graph - dag$define_tf() + # dag$define_tf() # create the model object and add details model <- as.greta_model(dag) @@ -155,21 +105,27 @@ model <- function(..., model$visible_greta_arrays <- all_greta_arrays(parent.frame()) model - } # register generic method to coerce objects to a greta model -as.greta_model <- function(x, ...) # nolint +#' @title Convert object to a "greta_model" object +#' @param x object to convert to greta model +#' @param ... extra arguments - not used. +#' +#' @export +as.greta_model <- function(x, ...) { # nolint UseMethod("as.greta_model", x) +} -as.greta_model.dag_class <- function(x, ...) { # nolint +#' @export +as.greta_model.dag_class <- function(x, ...) { # nolint ans <- list(dag = x) class(ans) <- "greta_model" ans } #' @rdname model -#' @param x a \code{greta_model} object +#' @param x a `greta_model` object #' @export print.greta_model <- function(x, ...) { cat("greta model") @@ -177,37 +133,34 @@ print.greta_model <- function(x, ...) { #' @rdname model #' @param y unused default argument -#' @param colour base colour used for plotting. Defaults to \code{greta} colours +#' @param colour base colour used for plotting. Defaults to `greta` colours #' in violet. #' #' @details The plot method produces a visual representation of the defined -#' model. It uses the \code{DiagrammeR} package, which must be installed +#' model. It uses the `DiagrammeR` package, which must be installed #' first. Here's a key to the plots: #' \if{html}{\figure{plotlegend.png}{options: width="100\%"}} #' \if{latex}{\figure{plotlegend.pdf}{options: width=7cm}} #' -#' @return \code{plot} - a \code{\link[DiagrammeR:grViz]{DiagrammeR::grViz}} +#' @return `plot` - a [DiagrammeR::grViz()] #' object, with the -#' \code{\link[DiagrammeR:create_graph]{DiagrammeR::dgr_graph}} object used to -#' create it as an attribute \code{"dgr_graph"}. +#' [`DiagrammeR::dgr_graph()`][DiagrammeR::create_graph] object used to +#' create it as an attribute `"dgr_graph"`. #' #' @export plot.greta_model <- function(x, y, colour = "#996bc7", ...) { - - if (!requireNamespace("DiagrammeR", quietly = TRUE)) { - stop("the DiagrammeR package must be installed to plot greta models", - call. = FALSE) - } + check_diagrammer_installed() # set up graph dag_mat <- x$dag$adjacency_matrix gr <- DiagrammeR::from_adj_matrix(dag_mat, - mode = "directed", - use_diag = FALSE) + mode = "directed", + use_diag = FALSE + ) n_nodes <- nrow(gr$nodes_df) @@ -237,28 +190,29 @@ plot.greta_model <- function(x, # get node labels node_labels <- vapply(x$dag$node_list, - member, - "plotting_label()", - FUN.VALUE = "") + member, + "plotting_label()", + FUN.VALUE = "" + ) # add greta array names where available visible_nodes <- lapply(x$visible_greta_arrays, get_node) - known_nodes <- vapply(visible_nodes, - member, - "unique_name", - FUN.VALUE = "") + known_nodes <- extract_unique_names(visible_nodes) + known_nodes <- known_nodes[known_nodes %in% names] known_idx <- match(known_nodes, names) node_labels[known_idx] <- paste(names(known_nodes), - node_labels[known_idx], - sep = "\n") + node_labels[known_idx], + sep = "\n" + ) # for the operation nodes, add the operation to the edges op_idx <- which(types == "operation") op_names <- vapply(x$dag$node_list[op_idx], - member, - "operation_name", - FUN.VALUE = "") + member, + "operation_name", + FUN.VALUE = "" + ) op_names <- gsub("`", "", op_names) ops <- rep("", length(types)) @@ -270,21 +224,19 @@ plot.greta_model <- function(x, # for distributions, put the parameter names on the edges distrib_to <- which(types == "distribution") - parameter_list <- lapply(x$dag$node_list[distrib_to], - member, - "parameters") + parameter_list <- lapply( + x$dag$node_list[distrib_to], + member, + "parameters" + ) - node_names <- lapply(parameter_list, - function(parameters) { - vapply(parameters, - member, - "unique_name", - FUN.VALUE = "") - }) + node_names <- lapply( + parameter_list, + extract_unique_names + ) # for each distribution for (i in seq_along(node_names)) { - from_idx <- match(node_names[[i]], names) to_idx <- match(names(node_names)[i], names) param_names <- names(node_names[[i]]) @@ -294,7 +246,6 @@ plot.greta_model <- function(x, idx <- from == from_idx[j] & to == to_idx edge_labels[idx] <- param_names[j] } - } edge_style <- rep("solid", length(to)) @@ -306,28 +257,29 @@ plot.greta_model <- function(x, distrib_idx <- which(types == "distribution") # find those with targets - targets <- lapply(x$dag$node_list[distrib_idx], - member, - "target") + targets <- lapply( + x$dag$node_list[distrib_idx], + member, + "target" + ) - keep <- !vapply(targets, is.null, TRUE) + keep <- !are_null(targets) distrib_idx <- distrib_idx[keep] target_names <- vapply(x$dag$node_list[distrib_idx], - member, - "target$unique_name", - FUN.VALUE = "") + member, + "target$unique_name", + FUN.VALUE = "" + ) distribution_names <- names(target_names) distribution_idx <- match(distribution_names, names) target_idx <- match(target_names, names) # for each distribution for (i in seq_along(distribution_idx)) { - idx <- which(to == target_idx[i] & from == distribution_idx[i]) edge_style[idx] <- "dashed" - } # node options @@ -356,14 +308,17 @@ plot.greta_model <- function(x, # set the layout type gr$global_attrs$value[gr$global_attrs$attr == "layout"] <- "dot" # make it horizontal - gr$global_attrs <- rbind(gr$global_attrs, - data.frame(attr = "rankdir", - value = "LR", - attr_type = "graph")) + gr$global_attrs <- rbind( + gr$global_attrs, + data.frame( + attr = "rankdir", + value = "LR", + attr_type = "graph" + ) + ) widget <- DiagrammeR::render_graph(gr) attr(widget, "dgr_graph") <- gr widget - } diff --git a/R/greta_stash.R b/R/greta_stash.R new file mode 100644 index 00000000..adff7fcf --- /dev/null +++ b/R/greta_stash.R @@ -0,0 +1,33 @@ +greta_note_msg <- cli::format_message( + c( + "If you are reading this, the {.pkg greta} installation or error notes \\ + have been wiped. This likely means that installation has not happened, or \\ + it has happened and you've restarted R. See `?install_greta_deps()` for \\ + more information." + ) +) + +greta_stash$install_miniconda_notes <- greta_note_msg +greta_stash$install_miniconda_error <- greta_note_msg +greta_stash$conda_create_notes <- greta_note_msg +greta_stash$conda_create_error <- greta_note_msg +greta_stash$conda_install_notes <- greta_note_msg +greta_stash$conda_install_error <- greta_note_msg +greta_stash$tf_num_error <- greta_note_msg + +#' @title Retrieve python messages. +#' +#' @description +#' These functions retrieve specific python error messages that might +#' come up during greta use. +#' +#' @rdname stash-notes +#' @export +#' @examples +#' \dontrun{ +#' greta_notes_tf_error() +#' } +greta_notes_tf_num_error <- function() { + # wrap in paste0 to remove list properties + cat(paste0(greta_stash$tf_num_error)) +} diff --git a/R/inference.R b/R/inference.R index ddaca382..80a1269f 100644 --- a/R/inference.R +++ b/R/inference.R @@ -1,5 +1,5 @@ #' @name inference -#' @title statistical inference on greta models +#' @title Statistical inference on greta models. #' @description Carry out statistical inference on greta models by #' MCMC or likelihood/posterior optimisation. NULL @@ -8,9 +8,11 @@ NULL # create an object stash in greta's namespace, to return traces to the user when # they abort a run greta_stash <- new.env() - -greta_stash$numerical_messages <- c("is not invertible", - "Cholesky decomposition was not successful") +greta_stash$python_has_been_initialised <- FALSE +greta_stash$numerical_messages <- c( + "is not invertible", + "Cholesky decomposition was not successful" +) #' @rdname inference #' @export @@ -20,10 +22,10 @@ greta_stash$numerical_messages <- c("is not invertible", #' #' @param model greta_model object #' @param sampler sampler used to draw values in MCMC. See -#' \code{\link{samplers}} for options. +#' [samplers()] for options. #' @param n_samples number of MCMC samples to draw per chain (after any warm-up, #' but before thinning) -#' @param thin MCMC thinning rate; every \code{thin} samples is retained, the +#' @param thin MCMC thinning rate; every `thin` samples is retained, the #' rest are discarded #' @param warmup number of samples to spend warming up the mcmc sampler (moving #' chains toward the highest density area and tuning sampler hyperparameters). @@ -32,25 +34,29 @@ greta_stash$numerical_messages <- c("is not invertible", #' details). #' @param verbose whether to print progress information to the console #' @param pb_update how regularly to update the progress bar (in iterations). -#' If \code{pb_update} is less than or equal to \code{thin}, it will be set -#' to \code{thin + 1} to ensure at least one saved iteration per -#' \code{pb_update} iterations. +#' If `pb_update` is less than or equal to `thin`, it will be set +#' to `thin + 1` to ensure at least one saved iteration per +#' `pb_update` iterations. #' @param one_by_one whether to run TensorFlow MCMC code one iteration at a #' time, so that greta can handle numerical errors as 'bad' proposals (see #' below). -#' @param initial_values an optional \code{initials} object (or list of -#' \code{initials} objects of length \code{chains}) giving initial values for +#' @param initial_values an optional `initials` object (or list of +#' `initials` objects of length `chains`) giving initial values for #' some or all of the variables in the model. These will be used as the #' starting point for sampling/optimisation. #' @param trace_batch_size the number of posterior samples to process at a time #' when tracing the parameters of interest; reduce this to reduce memory #' demands #' -#' @details For \code{mcmc()} if \code{verbose = TRUE}, the progress bar shows +#' @param compute_options Default is to use CPU only with `cpu_only()`. Use +#' `gpu_only()` to use only GPU. In the future we will add more options for +#' specifying CPU and GPU use. +#' +#' @details For `mcmc()` if `verbose = TRUE`, the progress bar shows #' the number of iterations so far and the expected time to complete the phase #' of model fitting (warmup or sampling). Occasionally, a proposed set of #' parameters can cause numerical instability (I.e. the log density or its -#' gradient is \code{NA}, \code{Inf} or \code{-Inf}); normally because the log +#' gradient is `NA`, `Inf` or `-Inf`); normally because the log #' joint density is so low that it can't be represented as a floating point #' number. When this happens, the progress bar will also display the #' proportion of proposals so far that were 'bad' (numerically unstable) and @@ -61,51 +67,55 @@ greta_stash$numerical_messages <- c("is not invertible", #' starting values to move the sampler into a more reasonable part of the #' parameter space. If you have more samples than that, it may be that your #' model is misspecified. You can often diagnose this by using -#' \code{\link{calculate}()} to evaluate the values of greta arrays, given +#' [calculate()] to evaluate the values of greta arrays, given #' fixed values of model parameters, and checking the results are what you #' expect. #' #' greta runs multiple chains simultaneously with a single sampler, #' vectorising all operations across the chains. E.g. a scalar addition in #' your model is computed as an elementwise vector addition (with vectors -#' having length \code{chains}), a vector addition is computed as a matrix +#' having length `chains`), a vector addition is computed as a matrix #' addition etc. TensorFlow is able to parallelise these operations, and this #' approach reduced computational overheads, so this is the most efficient of #' computing on multiple chains. #' #' Multiple mcmc samplers (each of which can simultaneously run multiple #' chains) can also be run in parallel by setting the execution plan with the -#' \code{future} package. Only \code{plan(multisession)} futures or -#' \code{plan(cluster)} futures that don't use fork clusters are allowed, +#' `future` package. Only `plan(multisession)` futures or +#' `plan(cluster)` futures that don't use fork clusters are allowed, #' since forked processes conflict with TensorFlow's parallelism. Explicitly -#' parallelising chains on a local machine with \code{plan(multisession)} will +#' parallelising chains on a local machine with `plan(multisession)` will #' probably be slower than running multiple chains simultaneously in a single -#' sampler (with \code{plan(sequential)}, the default) because of the overhead -#' required to start new sessions. However, \code{plan(cluster)} can be used +#' sampler (with `plan(sequential)`, the default) because of the overhead +#' required to start new sessions. However, `plan(cluster)` can be used #' to run chains on a cluster of machines on a local or remote network. See -#' \code{\link[future:cluster]{future::cluster}} for details, and the -#' \code{future.batchtools} package to set up plans on clusters with job +#' [future::cluster()] for details, and the +#' `future.batchtools` package to set up plans on clusters with job #' schedulers. #' -#' If \code{n_cores = NULL} and mcmc samplers are being run sequentially, each +#' If `n_cores = NULL` and mcmc samplers are being run sequentially, each #' sampler will be allowed to use all CPU cores (possibly to compute multiple #' chains sequentially). If samplers are being run in parallel with the -#' \code{future} package, \code{n_cores} will be set so that \code{n_cores * -#' \link[future:nbrOfWorkers]{future::nbrOfWorkers}} is less than the number +#' `future` package, `n_cores` will be set so that `n_cores * +#' [future::nbrOfWorkers]` is less than the number #' of CPU cores. #' -#' After carrying out mcmc on all the model parameters, \code{mcmc()} +#' After carrying out mcmc on all the model parameters, `mcmc()` #' calculates the values of (i.e. traces) the parameters of interest for each -#' of these samples, similarly to \code{\link{calculate}}. Multiple +#' of these samples, similarly to [calculate()]. Multiple #' posterior samples can be traced simultaneously, though this can require -#' large amounts of memory for large models. As in \code{calculate}, the -#' argument \code{trace_batch_size} can be modified to trade-off speed against +#' large amounts of memory for large models. As in `calculate`, the +#' argument `trace_batch_size` can be modified to trade-off speed against #' memory usage. #' -#' @return \code{mcmc}, \code{stashed_samples} & \code{extra_samples} - a -#' \code{greta_mcmc_list} object that can be analysed using functions from the +#' @note to set a seed with MCMC you can use [set.seed()], or +#' [tensorflow::set_random_seed()]. They both given identical results. See +#' examples below. +#' +#' @return `mcmc`, `stashed_samples` & `extra_samples` - a +#' `greta_mcmc_list` object that can be analysed using functions from the #' coda package. This will contain mcmc samples of the greta arrays used to -#' create \code{model}. +#' create `model`. #' #' @examples #' \dontrun{ @@ -132,8 +142,9 @@ greta_stash$numerical_messages <- c("is not invertible", #' #' # you can auto-generate a list of initials with something like this: #' inits <- replicate(4, -#' initials(mu = rnorm(1), sigma = runif(1)), -#' simplify = FALSE) +#' initials(mu = rnorm(1), sigma = runif(1)), +#' simplify = FALSE +#' ) #' draws <- mcmc(m, chains = 4, initial_values = inits) #' #' # or find the MAP estimate @@ -152,15 +163,15 @@ greta_stash$numerical_messages <- c("is not invertible", #' # the MLE corresponds to the *unadjusted* sample variance, but differs #' # from the sample variance #' o$par -#' mean((x - mean(x)) ^ 2) # same -#' var(x) # different +#' mean((x - mean(x))^2) # same +#' var(x) # different #' #' # initial values can also be passed to optimisers: #' o <- opt(m2, initial_values = initials(variance = 1)) #' #' # and you can return a list of the Hessians for each of these parameters -#' o <- opt(m2, hessians = TRUE) -#' o$hessians +#' o <- opt(m2, hessian = TRUE) +#' o$hessian #' #' #' # to get a hessian matrix across multiple greta arrays, you must first @@ -171,103 +182,124 @@ greta_stash$numerical_messages <- c("is not invertible", #' variance <- params[2] #' distribution(x) <- normal(mu, sqrt(variance)) #' m3 <- model(params) -#' o <- opt(m3, hessians = TRUE) -#' o$hessians +#' o <- opt(m3, hessian = TRUE) +#' o$hessian +#' +#' # using set.seed or tensorflow::set_random_seed to set RNG for MCMC +#' a <- normal(0, 1) +#' y <- normal(a, 1) +#' m <- model(y) +#' +#' set.seed(12345) +#' one <- mcmc(m, n_samples = 1, chains = 1) +#' set.seed(12345) +#' two <- mcmc(m, n_samples = 1, chains = 1) +#' # same +#' all.equal(as.numeric(one), as.numeric(two)) +#' tensorflow::set_random_seed(12345) +#' one_tf <- mcmc(m, n_samples = 1, chains = 1) +#' tensorflow::set_random_seed(12345) +#' two_tf <- mcmc(m, n_samples = 1, chains = 1) +#' # same +#' all.equal(as.numeric(one_tf), as.numeric(two_tf)) +#' # different +#' all.equal(as.numeric(one), as.numeric(one_tf)) +#' #' } -mcmc <- function(model, - sampler = hmc(), - n_samples = 1000, - thin = 1, - warmup = 1000, - chains = 4, - n_cores = NULL, - verbose = TRUE, - pb_update = 50, - one_by_one = FALSE, - initial_values = initials(), - trace_batch_size = 100) { - - # check the trace batch size - trace_batch_size <- check_trace_batch_size(trace_batch_size) - - # find variable names to label samples - target_greta_arrays <- model$target_greta_arrays - names <- names(target_greta_arrays) - - # check they're not data nodes, provide a useful error message if they are - are_data <- vapply(target_greta_arrays, - function(x) inherits(get_node(x), "data_node"), - FUN.VALUE = FALSE) - - if (any(are_data)) { - - is_are <- ifelse(sum(are_data) == 1, - "is a data greta array", - "are data greta arrays") - bad_greta_arrays <- paste(names[are_data], - collapse = ", ") - msg <- sprintf("%s %s, data greta arrays cannot be sampled", - bad_greta_arrays, - is_are) - stop(msg, call. = FALSE) - - } - - # get the dag containing the target nodes - dag <- model$dag - - chains <- check_positive_integer(chains, "chains") - - # turn initial values into a list if needed (checking the length), and convert - # from a named list on the constrained scale to free state vectors - initial_values <- prep_initials(initial_values, chains, dag) - - # determine the number of separate samplers to spin up, based on the future - # plan - max_samplers <- future::nbrOfWorkers() - - # divide chains up between the workers - chain_assignment <- sort(rep(seq_len(max_samplers), - length.out = chains)) - - # divide the initial values between them - initial_values_split <- split(initial_values, chain_assignment) - - n_samplers <- length(initial_values_split) - - # create a sampler object for each parallel job, using these (possibly NULL) - # initial values - samplers <- lapply(initial_values_split, - build_sampler, - sampler, - model) - - # add chain info for printing - for (i in seq_len(n_samplers)) { - samplers[[i]]$sampler_number <- i - samplers[[i]]$n_samplers <- n_samplers - } - - # if verbose = FALSE, make pb_update as big as possible to speed up sampling - if (!verbose) { - pb_update <- Inf - } +mcmc <- function( + model, + sampler = hmc(), + n_samples = 1000, + thin = 1, + warmup = 1000, + chains = 4, + n_cores = NULL, + verbose = TRUE, + pb_update = 50, + one_by_one = FALSE, + initial_values = initials(), + trace_batch_size = 100, + compute_options = cpu_only() +) { + + # set device to be CPU/GPU for the entire run + with(tf$device(compute_options), { + + # message users about random seeds and GPU usage if they are using GPU + message_if_using_gpu(compute_options) + + check_if_greta_array_in_mcmc(model) + + # check the trace batch size + trace_batch_size <- check_trace_batch_size(trace_batch_size) + + check_not_data_greta_arrays(model) + + # get the dag containing the target nodes + dag <- model$dag + + chains <- check_positive_integer(chains, "chains") + + # turn initial values into a list if needed (checking the length), and convert + # from a named list on the constrained scale to free state vectors + initial_values <- prep_initials(initial_values, chains, dag) + + # determine the number of separate samplers to spin up, based on the future + # plan + max_samplers <- future::nbrOfWorkers() + + # divide chains up between the workers + chain_assignment <- sort(rep( + seq_len(max_samplers), + length.out = chains + )) + + # divide the initial values between them + initial_values_split <- split(initial_values, chain_assignment) + + n_samplers <- length(initial_values_split) + + # create a sampler object for each parallel job, using these (possibly NULL) + # initial values + samplers <- lapply( + initial_values_split, + build_sampler, + sampler, + model, + compute_options = compute_options + ) + + # add chain info for printing + for (i in seq_len(n_samplers)) { + samplers[[i]]$sampler_number <- i + samplers[[i]]$n_samplers <- n_samplers + } - # now make it finite - pb_update <- min(pb_update, max(warmup, n_samples)) - pb_update <- max(pb_update, thin + 1) - - run_samplers(samplers = samplers, - n_samples = n_samples, - thin = thin, - warmup = warmup, - verbose = verbose, - pb_update = pb_update, - one_by_one = one_by_one, - n_cores = n_cores, - from_scratch = TRUE, - trace_batch_size = trace_batch_size) + # if verbose = FALSE, make pb_update as big as possible to speed up sampling + if (!verbose) { + pb_update <- Inf + } + # now make it finite + pb_update <- min(pb_update, max(warmup, n_samples)) + pb_update <- max(pb_update, thin + 1) + + run_samplers( + samplers = samplers, + n_samples = n_samples, + thin = thin, + warmup = warmup, + verbose = verbose, + pb_update = pb_update, + one_by_one = one_by_one, + n_cores = n_cores, + from_scratch = TRUE, + trace_batch_size = trace_batch_size, + compute_options = compute_options + ) + + # close `with` setting to control CPU/GPU usage + }) } #' @importFrom future future resolved value @@ -280,7 +312,8 @@ run_samplers <- function(samplers, one_by_one, n_cores, from_scratch, - trace_batch_size) { + trace_batch_size, + compute_options) { # check the future plan is valid, and get information about it plan_is <- check_future_plan() @@ -302,46 +335,49 @@ run_samplers <- function(samplers, plan_is$local & !is.null(greta_stash$callbacks) + ## TODO add explaining variable if (plan_is$parallel & plan_is$local & length(samplers) > 1) { - cores_text <- ifelse(n_cores == 1, - "1 core", - sprintf("up to %i cores", n_cores)) - msg <- sprintf("\nrunning %i samplers in parallel, each on %s\n\n", - length(samplers), - cores_text) - message(msg, appendLF = FALSE) + cores_text <- compute_text(n_cores, compute_options) + msg <- glue::glue( + "\n", + "running {length(samplers)} samplers in parallel, ", + "{cores_text}", + "\n\n" + ) + message(msg) } - if (plan_is$parallel & !plan_is$local) { - sampler_text <- ifelse(length(samplers) > 1, - "samplers on remote machines", - "sampler on a remote machine") - msg <- sprintf("\nrunning %i %s\n\n", - length(samplers), - sampler_text) - message(msg, appendLF = FALSE) + is_remote_machine <- plan_is$parallel & !plan_is$local + if (is_remote_machine) { + + cli::cli_inform( + "running {length(samplers)} \\ + {?sampler on a remote machine/samplers on remote machines}" + ) + } n_chain <- length(samplers) chains <- seq_len(n_chain) # determine the type of progress information - if (bar_width(n_chain) < 42) + if (bar_width(n_chain) < 42) { progress_callback <- percentages - else + } else { progress_callback <- progress_bars + } greta_stash$callbacks$parallel_progress <- progress_callback # if we're running in parallel and there are callbacks registered, # give the samplers somewhere to write their progress if (parallel_reporting) { - trace_log_files <- replicate(n_chain, create_log_file()) percentage_log_files <- replicate(n_chain, create_log_file(TRUE)) progress_bar_log_files <- replicate(n_chain, create_log_file(TRUE)) pb_width <- bar_width(n_chain) + for (chain in chains) { # set the log files @@ -352,14 +388,12 @@ run_samplers <- function(samplers, # set the progress bar widths for writing sampler$pb_width <- pb_width - } greta_stash$trace_log_files <- trace_log_files greta_stash$percentage_log_files <- percentage_log_files greta_stash$progress_bar_log_files <- progress_bar_log_files greta_stash$mcmc_info <- list(n_samples = n_samples) - } if (plan_is$parallel) { @@ -371,38 +405,40 @@ run_samplers <- function(samplers, # dispatch all the jobs for (chain in chains) { sampler <- samplers[[chain]] + sampler$compute_options <- compute_options samplers[[chain]] <- dispatch( - sampler$run_chain(n_samples = n_samples, - thin = thin, - warmup = warmup, - verbose = verbose, - pb_update = pb_update, - one_by_one = one_by_one, - plan_is = plan_is, - n_cores = n_cores, - float_type = float_type, - trace_batch_size = trace_batch_size, - from_scratch = from_scratch), - seed = future_seed()) + sampler$run_chain( + n_samples = n_samples, + thin = thin, + warmup = warmup, + verbose = verbose, + pb_update = pb_update, + one_by_one = one_by_one, + plan_is = plan_is, + n_cores = n_cores, + float_type = float_type, + trace_batch_size = trace_batch_size, + from_scratch = from_scratch + ), + seed = future_seed() + ) } # if we're non-sequential and there's a callback registered, # loop until they are resolved, executing the callbacks if (parallel_reporting) { - while (!all(vapply(samplers, resolved, FALSE))) { # loop through callbacks executing them - for (callback in greta_stash$callbacks) + for (callback in greta_stash$callbacks) { callback() + } # get some nap time Sys.sleep(0.1) - } cat("\n") - } @@ -420,7 +456,6 @@ run_samplers <- function(samplers, rm("samplers", envir = greta_stash) draws - } #' @rdname inference @@ -428,16 +463,14 @@ run_samplers <- function(samplers, #' @importFrom stats na.omit #' @importFrom coda mcmc.list #' -#' @details If the sampler is aborted before finishing (and \code{future} +#' @details If the sampler is aborted before finishing (and `future` #' parallelism isn't being used), the samples collected so far can be -#' retrieved with \code{stashed_samples()}. Only samples from the sampling +#' retrieved with `stashed_samples()`. Only samples from the sampling #' phase will be returned. stashed_samples <- function() { - stashed <- exists("samplers", envir = greta_stash) if (stashed) { - samplers <- greta_stash$samplers trace_names <- samplers[[1]]$model$dag$trace_names @@ -454,23 +487,23 @@ stashed_samples <- function() { values_draws <- lapply(values_draws, `colnames<-`, trace_names) # if there are no samples, return a list of NULLs - if (nrow(values_draws[[1]]) == 0) { - + no_samples <- nrow(values_draws[[1]]) == 0 + if (no_samples) { return(replicate(length(samplers), NULL)) - } else { - thins <- lapply(samplers, member, "thin") # convert to mcmc objects, passing on thinning free_state_draws <- mapply(prepare_draws, draws = free_state_draws, thin = thins, - SIMPLIFY = FALSE) + SIMPLIFY = FALSE + ) values_draws <- mapply(prepare_draws, draws = values_draws, thin = thins, - SIMPLIFY = FALSE) + SIMPLIFY = FALSE + ) # convert to mcmc.list objects free_state_draws <- coda::mcmc.list(free_state_draws) @@ -486,26 +519,21 @@ stashed_samples <- function() { values_draws <- as_greta_mcmc_list(values_draws, model_info) return(values_draws) - } - } else { - return(invisible()) - } - } #' @rdname inference #' #' @export #' -#' @param draws a greta_mcmc_list object returned by \code{mcmc} or -#' \code{stashed_samples} +#' @param draws a greta_mcmc_list object returned by `mcmc` or +#' `stashed_samples` #' -#' @details Samples returned by \code{mcmc()} and \code{stashed_samples()} can -#' be added to with \code{extra_samples()}. This continues the chain from the +#' @details Samples returned by `mcmc()` and `stashed_samples()` can +#' be added to with `extra_samples()`. This continues the chain from the #' last value of the previous chain and uses the same sampler and model as was #' used to generate the previous samples. It is not possible to change the #' sampler or extend the warmup period. @@ -517,8 +545,8 @@ extra_samples <- function(draws, verbose = TRUE, pb_update = 50, one_by_one = FALSE, - trace_batch_size = 100) { - + trace_batch_size = 100, + compute_options = cpu_only()) { model_info <- get_model_info(draws) samplers <- model_info$samplers @@ -530,50 +558,60 @@ extra_samples <- function(draws, sampler$free_state <- do.call(rbind, free_state_draws) } - run_samplers(samplers = samplers, - n_samples = n_samples, - thin = thin, - warmup = 0L, - verbose = verbose, - pb_update = pb_update, - one_by_one = one_by_one, - n_cores = n_cores, - from_scratch = FALSE, - trace_batch_size = trace_batch_size) - + run_samplers( + samplers = samplers, + n_samples = n_samples, + thin = thin, + warmup = 0L, + verbose = verbose, + pb_update = pb_update, + one_by_one = one_by_one, + n_cores = n_cores, + from_scratch = FALSE, + trace_batch_size = trace_batch_size, + compute_options = compute_options + ) } # convert some 'data' values from the constrained to the free state, for a given # 'node' #' @importFrom stats qlogis to_free <- function(node, data) { - # use reverse mode of bijectors! lower <- node$lower upper <- node$upper + # TODO + # replace these with more informative errors related to the range of values unsupported_error <- function() { - stop("some provided initial values are outside the range of values ", - "their variables can take", - call. = FALSE) + cli::cli_abort( + "Some provided initial values are outside the range of values their \\ + variables can take" + ) } high <- function(x) { - if (any(x <= lower)) + initials_outside_support <- any(x <= lower) + if (initials_outside_support) { unsupported_error() + } log(x - lower) } low <- function(x) { - if (any(x >= upper)) + initials_outside_support <- any(x >= upper) + if (initials_outside_support) { unsupported_error() + } log(upper - x) } both <- function(x) { - if (any(x >= upper | x <= lower)) + initials_outside_support <- any(x >= upper | x <= lower) + if (initials_outside_support) { unsupported_error() + } stats::qlogis((x - lower) / (upper - lower)) } @@ -581,10 +619,10 @@ to_free <- function(node, data) { scalar_all_none = identity, scalar_all_high = high, scalar_all_low = low, - scalar_all_both = both) + scalar_all_both = both + ) fun(data) - } # convert a named list of initial values into the corresponding vector of values @@ -593,11 +631,9 @@ parse_initial_values <- function(initials, dag) { # skip if no inits provided if (identical(initials, initials())) { - free_parameters <- dag$example_parameters(free = TRUE) free_parameters <- unlist_tf(free_parameters) return(free_parameters) - } # find the elements we have been given initial values for @@ -608,16 +644,10 @@ parse_initial_values <- function(initials, dag) { dag$tf_name(node) }, env = parent.frame(4), - FUN.VALUE = "") - - missing_names <- is.na(tf_names) - if (any(missing_names)) { - bad <- names(tf_names)[missing_names] - stop("some greta arrays passed to initials() ", - "are not associated with the model: ", - paste(bad, collapse = ", "), - call. = FALSE) - } + FUN.VALUE = "" + ) + + check_greta_arrays_associated_with_model(tf_names) params <- dag$example_parameters(free = FALSE) idx <- match(tf_names, names(params)) @@ -629,25 +659,14 @@ parse_initial_values <- function(initials, dag) { # variable # find the corresponding nodes and check they are variable nodes - forward_names <- paste0("all_forward_", dag$node_tf_names) + forward_names <- glue::glue("all_forward_{dag$node_tf_names}") nodes <- dag$node_list[match(tf_names, forward_names)] - types <- lapply(nodes, node_type) - are_variables <- vapply(types, identical, "variable", FUN.VALUE = FALSE) - if (!all(are_variables)) { - stop("initial values can only be set for variable greta arrays", - call. = FALSE) - } + check_nodes_all_variable(nodes) target_dims <- lapply(params[idx], dim) replacement_dims <- lapply(initials, dim) - same_dims <- mapply(identical, target_dims, replacement_dims) - - if (!all(same_dims)) { - stop("the initial values provided have different dimensions ", - "than the named greta arrays", - call. = FALSE) - } + check_initial_values_correct_dim(target_dims, replacement_dims) # convert the initial values to their free states inits_free <- mapply(to_free, nodes, initials, SIMPLIFY = FALSE) @@ -659,7 +678,6 @@ parse_initial_values <- function(initials, dag) { # force them to be row vectors and return params <- matrix(params, nrow = 1) params - } # convert (possibly NULL) user-specified initial values into a list of the @@ -668,65 +686,27 @@ prep_initials <- function(initial_values, n_chains, dag) { # if the user passed a single set of initial values, repeat them for all # chains - if (inherits(initial_values, "initials")) { - - is_blank <- identical(initial_values, initials()) - - if (!is_blank & n_chains > 1) { - message("only one set of initial values was provided, and was ", - "used for all chains") - } + if (is.initials(initial_values)) { + inform_if_one_set_of_initials(initial_values, n_chains) initial_values <- replicate(n_chains, initial_values, - simplify = FALSE) - - } else if (is.list(initial_values)) { - - # if the user provided a list of initial values, check elements and the - # length - are_initials <- vapply(initial_values, inherits, "initials", - FUN.VALUE = FALSE) - - if (all(are_initials)) { - - n_sets <- length(initial_values) - - if (n_sets != n_chains) { - stop(n_sets, " sets of initial values were provided, but there ", - ifelse(n_chains > 1, "are ", "is only "), n_chains, " chain", - ifelse(n_chains > 1, "s", ""), - call. = FALSE) - } - - } else { - - initial_values <- NULL - - } - - } else { - - initial_values <- NULL - + simplify = FALSE + ) } - # error on a bad object - if (is.null(initial_values)) { - - stop("initial_values must be an initials object created with initials(), ", - "or a simple list of initials objects", - call. = FALSE) - - } + # TODO: revisit logic here for errors and messages + check_initial_values_match_chains(initial_values, n_chains) + check_initial_values_correct_class(initial_values) # convert them to free state vectors - initial_values <- lapply(initial_values, - parse_initial_values, - dag) + initial_values <- lapply( + initial_values, + parse_initial_values, + dag + ) initial_values - } #' @rdname inference @@ -736,23 +716,15 @@ prep_initials <- function(initial_values, n_chains, dag) { #' initialised) #' initials <- function(...) { - values <- list(...) names <- names(values) - if (length(names) != length(values)) { - stop("all initial values must be named", - call. = FALSE) - } + check_initials_are_named(values) # coerce to greta-array-like shape values <- lapply(values, as_2d_array) - are_numeric <- vapply(values, is.numeric, FUN.VALUE = FALSE) - if (!all(are_numeric)) { - stop("initial values must be numeric", - call. = FALSE) - } + check_initials_are_numeric(values) class(values) <- c("initials", class(values)) values @@ -760,20 +732,15 @@ initials <- function(...) { #' @export print.initials <- function(x, ...) { - - if (identical(x, initials())) { - + empty_initials <- identical(x, initials()) + if (empty_initials) { cat("an empty greta initials object") - } else { - cat("a greta initials object with values:\n\n") print(unclass(x)) - } invisible(x) - } #' @rdname inference @@ -783,18 +750,21 @@ print.initials <- function(x, ...) { #' @param tolerance the numerical tolerance for the solution, the optimiser #' stops when the (absolute) difference in the joint density between #' successive iterations drops below this level -#' @param optimiser an \code{optimiser} object giving the optimisation algorithm -#' and parameters See \code{\link{optimisers}}. +#' @param optimiser an `optimiser` object giving the optimisation algorithm +#' and parameters See [optimisers()]. #' @param adjust whether to account for Jacobian adjustments in the joint -#' density. Set to \code{FALSE} (and do not use priors) for maximum likelihood -#' estimates, or \code{TRUE} for maximum \emph{a posteriori} estimates. -#' @param hessian whether to return a list of \emph{analytically} differentiated +#' density. Set to `FALSE` (and do not use priors) for maximum likelihood +#' estimates, or `TRUE` for maximum *a posteriori* estimates. +#' @param hessian whether to return a list of *analytically* differentiated #' Hessian arrays for the parameters +#' @param compute_options Default is to use CPU only with `cpu_only()`. Use +#' `gpu_only()` to use only GPU. In the future we will add more options for +#' specifying CPU and GPU use. #' -#' @details Because \code{opt()} acts on a list of greta arrays with possibly -#' varying dimension, the \code{par} and \code{hessian} objects returned by -#' \code{opt()} are named lists, rather than a vector (\code{par}) and a -#' matrix (\code{hessian}), as returned by \code{\link[stats:optim]{optim()}}. +#' @details Because `opt()` acts on a list of greta arrays with possibly +#' varying dimension, the `par` and `hessian` objects returned by +#' `opt()` are named lists, rather than a vector (`par`) and a +#' matrix (`hessian`), as returned by [stats::optim()]. #' Because greta arrays may not be vectors, the Hessians may not be matrices, #' but could be higher-dimensional arrays. To return a Hessian matrix covering #' multiple model parameters, you can construct your model so that all those @@ -802,18 +772,18 @@ print.initials <- function(x, ...) { #' The parameter vector can then be passed to model. See example. #' -#' @return \code{opt} - a list containing the following named elements: +#' @return `opt` - a list containing the following named elements: #' \itemize{ -#' \item{\code{par}} {a named list of the optimal values for the greta arrays -#' specified in \code{model}} -#' \item{\code{value}} {the (unadjusted) negative log joint density of the -#' model at the parameters 'par'} -#' \item{\code{iterations}} {the number of iterations taken by the optimiser} -#' \item{\code{convergence}} {an integer code, 0 indicates successful -#' completion, 1 indicates the iteration limit \code{max_iterations} had -#' been reached} -#' \item{\code{hessian}} {(if \code{hessian = TRUE}) a named list of hessian -#' matrices/arrays for the parameters (w.r.t. \code{value})} +#' \item `par` a named list of the optimal values for the greta arrays +#' specified in `model` +#' \item `value` the (unadjusted) negative log joint density of the +#' model at the parameters 'par' +#' \item `iterations` the number of iterations taken by the optimiser +#' \item `convergence` an integer code, 0 indicates successful +#' completion, 1 indicates the iteration limit `max_iterations` had +#' been reached +#' \item `hessian` (if `hessian = TRUE`) a named list of hessian +#' matrices/arrays for the parameters (w.r.t. `value`) #' } #' opt <- function(model, @@ -822,38 +792,57 @@ opt <- function(model, tolerance = 1e-6, initial_values = initials(), adjust = TRUE, - hessian = FALSE) { - - # check initial values. Can up the number of chains in the future to handle - # random restarts - initial_values_list <- prep_initials(initial_values, 1, model$dag) - - # create R6 object of the right type - object <- optimiser$class$new(initial_values = initial_values_list[1], - model = model, - name = optimiser$name, - method = optimiser$method, - parameters = optimiser$parameters, - other_args = optimiser$other_args, - max_iterations = max_iterations, - tolerance = tolerance, - adjust = adjust) - - # run it and get the outputs - object$run() - outputs <- object$return_outputs() - - # optionally evaluate the hessians at these parameters (return as hessian for - # objective function) - if (hessian) { - hessians <- model$dag$hessians() - hessians <- lapply(hessians, `*`, -1) - outputs$hessian <- hessians - } + hessian = FALSE, + compute_options = cpu_only()) { + + # set device to be CPU/GPU for the entire run + with(tf$device(compute_options), { + + # message users about random seeds and GPU usage if they are using GPU + message_if_using_gpu(compute_options) + + # check initial values. Can up the number of chains in the future to handle + # random restarts + initial_values_list <- prep_initials(initial_values, 1, model$dag) + + # create R6 object of the right type + object <- optimiser$class$new( + initial_values = initial_values_list[1], + model = model, + name = optimiser$name, + method = optimiser$method, + parameters = optimiser$parameters, + other_args = optimiser$other_args, + max_iterations = max_iterations, + tolerance = tolerance, + adjust = adjust + ) + + # run it and get the outputs + object$run() + outputs <- object$return_outputs() + + # optionally evaluate the hessians at these parameters (return as hessian for + # objective function) + if (hessian) { + which_objective <- ifelse(adjust, "adjusted", "unadjusted") + hessians <- model$dag$hessians( + # coercing to Variable as TFP free state is a Tensor not a variable + # and you can overload a Variable as a Variable without consequence + # (hopefully) + free_state = tf$Variable(object$free_state), + which_objective = which_objective + ) + hessians <- lapply(hessians, `*`, -1) + outputs$hessian <- hessians + } - outputs + outputs + # close setting of CPU/GPU usage + }) } inference_module <- module(dag_class, - progress_bar = progress_bar_module) + progress_bar = progress_bar_module +) diff --git a/R/inference_class.R b/R/inference_class.R index d49ff011..051313d0 100644 --- a/R/inference_class.R +++ b/R/inference_class.R @@ -4,9 +4,11 @@ inference <- R6Class( "inference", public = list( - model = NULL, + # compute information + compute_options = NULL, + # RNG seed seed = 1, @@ -19,7 +21,6 @@ inference <- R6Class( # where to write the traced values to trace_log_file = NULL, - parameters = list(), tuning_periods = list(), @@ -29,25 +30,21 @@ inference <- R6Class( traced_free_state = list(), # all recorded greta array values traced_values = list(), - initialize = function(initial_values, model, parameters = list(), seed = get_seed()) { - # flush the environment and redefine the tensorflow graph if needed - if (is.null(model$dag$tf_graph$unique_name)) { - model$dag$new_tf_environment() - model$dag$define_tf() - } - self$parameters <- parameters self$model <- model free_parameters <- model$dag$example_parameters(free = TRUE) free_parameters <- unlist_tf(free_parameters) self$n_free <- length(free_parameters) - self$seed <- seed + self$set_initial_values(initial_values) + # maybe inefficient- potentially speed up? + self$n_traced <- length(model$dag$trace_values(self$free_state)) + self$seed <- seed }, # Write burst values to log file; appends if the file exists, creates it if @@ -55,12 +52,16 @@ inference <- R6Class( write_trace_to_log_file = function(last_burst_values) { if (file.exists(self$trace_log_file)) { # Append - write.table(last_burst_values, self$trace_log_file, append = TRUE, - row.names = FALSE, col.names = FALSE) + write.table(last_burst_values, self$trace_log_file, + append = TRUE, + row.names = FALSE, col.names = FALSE + ) } else { # Create file - write.table(last_burst_values, self$trace_log_file, append = FALSE, - row.names = FALSE, col.names = TRUE) + write.table(last_burst_values, self$trace_log_file, + append = FALSE, + row.names = FALSE, col.names = TRUE + ) } }, @@ -68,11 +69,10 @@ inference <- R6Class( write_percentage_log = function(total, completed, stage) { if (!is.null(self$percentage_file)) { percentage <- round(100 * completed / total) - msg <- sprintf("%s %i%%", - stage, - percentage) + msg <- glue::glue( + "{stage} {percentage}%" + ) writeLines(msg, self$percentage_file) - } }, @@ -85,55 +85,67 @@ inference <- R6Class( # check and try to autofill a single set of initial values (single vector on # free state scale) - check_initial_values = function(inits) { - + check_initial_values = function(inits, + call = rlang::caller_env()) { undefined <- is.na(inits) # try to fill in any that weren't specified if (any(undefined)) { - n_missing <- sum(undefined) valid <- FALSE attempts <- 1 while (!valid & attempts < 20) { - inits[undefined] <- rnorm(n_missing, 0, 0.1) # test validity of values valid <- self$valid_parameters(inits) attempts <- attempts + 1 - } - if (!valid) { - stop("Could not find reasonable starting values after ", attempts, - " attempts. Please specify initial values manually via the ", - "initial_values argument", - call. = FALSE) - } + self$check_reasonable_starting_values(valid, attempts) } else { # if they were all provided, check they can be be used valid <- self$valid_parameters(inits) - if (!valid) { - stop("The log density could not be evaluated at these ", - "initial values.\nTry using calculate() ", - "see whether they lead to values of other ", - "greta arrays in the model.", - call. = FALSE) - } + self$check_valid_parameters(valid) } inits + }, + check_reasonable_starting_values = function(valid, attempts){ + if (!valid) { + cli::cli_abort( + message = c( + "Could not find reasonable starting values after \\ + {attempts} attempts.", + "Please specify initial values manually via the \\ + {.arg initial_values} argument" + ) + ) + } + }, + + check_valid_parameters = function(valid){ + if (!valid) { + cli::cli_abort( + c( + "The log density could not be evaluated at these initial values", + "Try using these initials as the {.arg values} argument in \\ + {.fun calculate} to see what values of subsequent \\ + {.cls greta_array}s these initial values lead to." + ) + ) + } }, # check and set a list of initial values set_initial_values = function(init_list) { + browser() # check/autofill them init_list <- lapply(init_list, self$check_initial_values) @@ -142,45 +154,43 @@ inference <- R6Class( # set them as the state self$free_state <- inits - }, # check whether the model can be evaluated at these parameters valid_parameters = function(parameters) { - + browser() dag <- self$model$dag - tfe <- dag$tf_environment - - if (!live_pointer("joint_density_adj", envir = tfe)) { - dag$on_graph(dag$define_joint_density()) - } - - dag$send_parameters(parameters) - ld <- self$model$dag$log_density() - is.finite(ld) - + tf_parameters <- fl(array( + data = parameters, + dim = c(1, length(parameters)) + )) + ld <- lapply( + dag$tf_log_prob_function(tf_parameters), + as.numeric + ) + is.finite(ld$adjusted) && is.finite(ld$unadjusted) }, # run a burst of sampling, and put the resulting free state values in # last_burst_free_states run_burst = function() { - - stop("no method to run a burst in the base inference class") + cli::cli_abort( + "no method to run a burst in the base inference class" + ) self$last_burst_free_states <- free_states - }, # store the free state, and/or corresponding values of the target greta # arrays for the latest batch of raw draws trace = function(free_state = TRUE, values = FALSE) { - if (free_state) { # append the free state trace for each chain self$traced_free_state <- mapply(rbind, self$traced_free_state, self$last_burst_free_states, - SIMPLIFY = FALSE) + SIMPLIFY = FALSE + ) } if (values) { @@ -192,9 +202,9 @@ inference <- R6Class( self$traced_values <- mapply(rbind, self$traced_values, last_burst_values, - SIMPLIFY = FALSE) + SIMPLIFY = FALSE + ) } - }, # given a matrix of free state values, get a matrix of values of the target @@ -203,24 +213,24 @@ inference <- R6Class( # can't use apply directly, as it will drop the variable name if there's # only one parameter being traced - values_trace <- lapply(free_states, - self$model$dag$trace_values) + values_trace <- lapply( + free_states, + self$model$dag$trace_values + ) values_trace - }, # is the sampler in one of the tuning periods for a given parameter in_periods = function(periods, i, n_samples) { - - within <- function(period, fraction) + within <- function(period, fraction) { fraction > period[1] & fraction <= period[2] + } fraction <- i / n_samples in_period <- vapply(periods, within, fraction, FUN.VALUE = FALSE) any(in_period) } - ) ) @@ -244,17 +254,19 @@ sampler <- R6Class( log_epsilon_bar = 0, tuning_interval = 3, uses_metropolis = TRUE, - - welford_state = list(count = 0, - mean = 0, - m2 = 0), - + welford_state = list( + count = 0, + mean = 0, + m2 = 0 + ), accept_target = 0.5, accept_history = NULL, # sampler kernel information - parameters = list(epsilon = 0.1, - diag_sd = 1), + parameters = list( + epsilon = 0.1, + diag_sd = 1 + ), # parallel progress reporting percentage_file = NULL, @@ -263,39 +275,73 @@ sampler <- R6Class( # batch sizes for tracing trace_batch_size = 100, - initialize = function(initial_values, model, parameters = list(), - seed) { - + seed, + compute_options) { # initialize the inference method - super$initialize(initial_values = initial_values, - model = model, - parameters = parameters, - seed = seed) + super$initialize( + initial_values = initial_values, + model = model, + parameters = parameters, + seed = seed + ) # duplicate diag_sd if needed + ## TODO improve explaining variable here - why does this need to happen? n_diag <- length(self$parameters$diag_sd) n_parameters <- self$n_free - if (n_diag != n_parameters && n_parameters > 1) { + multiple_parameters <- n_parameters > 1 + if (n_diag != n_parameters && multiple_parameters) { diag_sd <- rep(self$parameters$diag_sd[1], n_parameters) self$parameters$diag_sd <- diag_sd } # define the draws tensor on the tf graph - self$define_tf_draws() - self$set_initial_values(initial_values) - self$n_chains <- nrow(self$free_state) +# <<<<<<< HEAD +# self$define_tf_draws() +# self$set_initial_values(initial_values) +# self$n_chains <- nrow(self$free_state) +# ======= + # define_tf_draws is now used in place of of run_burst + self$define_tf_evaluate_sample_batch() }, +# >>>>>>> 39ef12f0b9090571c59fe09799196ffb8d8ab407 + + define_tf_evaluate_sample_batch = function(){ + self$tf_evaluate_sample_batch <- tensorflow::tf_function( + f = self$define_tf_draws, + input_signature = list( + # free state + tf$TensorSpec(shape = list(NULL, self$n_free), + dtype = tf_float()), + # sampler_burst_length + tf$TensorSpec(shape = list(), + dtype = tf$int32), + # sampler_thin + tf$TensorSpec(shape = list(), + dtype = tf$int32), + # sampler_param_vec + tf$TensorSpec(shape = list( + length( + unlist( + self$sampler_parameter_values() + ) + ) + ), + dtype = tf_float() + ) + ) + ) + }, run_chain = function(n_samples, thin, warmup, verbose, pb_update, one_by_one, plan_is, n_cores, float_type, trace_batch_size, from_scratch = TRUE) { - self$thin <- thin dag <- self$model$dag @@ -305,33 +351,27 @@ sampler <- R6Class( if (!plan_is$parallel & verbose) { self$print_sampler_number() } - if (plan_is$parallel) { - # flush the environment - dag$new_tf_environment() + dag$define_tf_trace_values_batch() - # set the batch size for multiple chains - dag$set_tf_data_list("batch_size", self$n_chains) + dag$define_tf_log_prob_function() - # rebuild the TF graph - dag$define_tf() - - # rebuild the TF draws tensor - self$define_tf_draws() + self$define_tf_evaluate_sample_batch() } # create these objects if needed if (from_scratch) { - self$traced_free_state <- replicate(self$n_chains, matrix(NA, 0, self$n_free), - simplify = FALSE) + simplify = FALSE + ) self$traced_values <- replicate(self$n_chains, matrix(NA, 0, self$n_traced), - simplify = FALSE) + simplify = FALSE + ) } # how big would we like the bursts to be @@ -339,12 +379,13 @@ sampler <- R6Class( # if warmup is required, do that now if (warmup > 0) { - if (verbose) { - pb_warmup <- create_progress_bar("warmup", - c(warmup, n_samples), - pb_update, - self$pb_width) + pb_warmup <- create_progress_bar( + "warmup", + c(warmup, n_samples), + pb_update, + self$pb_width + ) iterate_progress_bar(pb_warmup, 0, 0, self$n_chains, self$pb_file) } else { @@ -354,13 +395,24 @@ sampler <- R6Class( # split up warmup iterations into bursts of sampling burst_lengths <- self$burst_lengths(warmup, ideal_burst_size, - warmup = TRUE) + warmup = TRUE + ) completed_iterations <- cumsum(burst_lengths) + # relay between R and tensorflow in a burst to be cpu efficient for (burst in seq_along(burst_lengths)) { + # TF1/2 check todo? + # replace with define_tf_draws + + self$run_burst(n_samples = burst_lengths[burst]) + # align the free state back to the parameters we are tracing + # TF1/2 check todo? + # this is the tuning stage, might not need to evaluate + # / record the parameter values, as they will be thrown away + # after warmup - so could remove trace here. - self$run_burst(burst_lengths[burst]) self$trace() + # a memory efficient way to calculate summary stats of samples self$update_welford() self$tune(completed_iterations[burst], warmup) @@ -371,22 +423,22 @@ sampler <- R6Class( it = completed_iterations[burst], rejects = self$numerical_rejections, chains = self$n_chains, - file = self$pb_file) + file = self$pb_file + ) self$write_percentage_log(warmup, completed_iterations[burst], - stage = "warmup") - + stage = "warmup" + ) } - } # scrub the free state trace and numerical rejections self$traced_free_state <- replicate(self$n_chains, matrix(NA, 0, self$n_free), - simplify = FALSE) + simplify = FALSE + ) self$numerical_rejections <- 0 - } if (n_samples > 0) { @@ -398,10 +450,12 @@ sampler <- R6Class( # main sampling if (verbose) { - pb_sampling <- create_progress_bar("sampling", - c(warmup, n_samples), - pb_update, - self$pb_width) + pb_sampling <- create_progress_bar( + "sampling", + c(warmup, n_samples), + pb_update, + self$pb_width + ) iterate_progress_bar(pb_sampling, 0, 0, self$n_chains, self$pb_file) } else { pb_sampling <- NULL @@ -412,8 +466,13 @@ sampler <- R6Class( completed_iterations <- cumsum(burst_lengths) for (burst in seq_along(burst_lengths)) { - - self$run_burst(burst_lengths[burst], thin = thin) + # so these bursts are R objects being passed through to python + # and how often to return them + # TF1/2 check todo + # replace with define_tf_draws + self$run_burst(n_samples = burst_lengths[burst], + thin = thin) + # trace is it receiving the python self$trace() if (verbose) { @@ -423,21 +482,19 @@ sampler <- R6Class( it = completed_iterations[burst], rejects = self$numerical_rejections, chains = self$n_chains, - file = self$pb_file) + file = self$pb_file + ) self$write_percentage_log(n_samples, completed_iterations[burst], - stage = "sampling") - + stage = "sampling" + ) } - } - } # return self, to send results back when running in parallel self - }, # update the welford accumulator for summary statistics of the posterior, @@ -452,7 +509,6 @@ sampler <- R6Class( m2 <- self$welford_state$m2 for (i in seq_len(nrow(trace_matrix))) { - new_value <- trace_matrix[i, ] count <- count + 1 @@ -460,15 +516,14 @@ sampler <- R6Class( mean <- mean + delta / count delta2 <- new_value - mean m2 <- m2 + delta * delta2 - } - self$welford_state <- list(count = count, - mean = mean, - m2 = m2) - + self$welford_state <- list( + count = count, + mean = mean, + m2 = m2 + ) }, - sample_variance = function() { count <- self$welford_state$count m2 <- self$welford_state$m2 @@ -478,42 +533,38 @@ sampler <- R6Class( # convert traced free state to the traced values, accounting for # chain dimension trace_values = function(trace_batch_size) { - self$traced_values <- lapply(self$traced_free_state, self$model$dag$trace_values, - trace_batch_size = trace_batch_size) - + trace_batch_size = trace_batch_size + ) }, # print the sampler number (if relevant) print_sampler_number = function() { - msg <- "" if (self$n_samplers > 1) { - msg <- sprintf("\nsampler %i/%i", - self$sampler_number, - self$n_samplers) + msg <- glue::glue( + "\n\nsampler {self$sampler_number}/{self$n_samplers}" + ) } if (self$n_chains > 1) { - n_cores <- self$model$dag$n_cores + compute_options <- self$compute_options - cores_text <- ifelse(n_cores == 1, - "1 core", - sprintf("up to %i cores", n_cores)) - - msg <- sprintf("\nrunning %i chains simultaneously on %s", - self$n_chains, - cores_text) + cores_text <- compute_text(n_cores, compute_options) + msg <- glue::glue( + "\n\nrunning {self$n_chains} chains simultaneously {cores_text}" + ) } if (!identical(msg, "")) { - message(msg, "\n") + msg <- cli::format_message(msg) + message(msg) + cat("\n") } - }, # split the number of samples up into bursts of running the sampler, @@ -535,12 +586,10 @@ sampler <- R6Class( } changepoints <- c(changepoints, tuning_points) - } changepoints <- sort(unique(changepoints)) diff(changepoints) - }, # overall tuning method @@ -548,16 +597,17 @@ sampler <- R6Class( self$tune_epsilon(iterations_completed, total_iterations) self$tune_diag_sd(iterations_completed, total_iterations) }, - tune_epsilon = function(iter, total) { # tuning periods for the tunable parameters (first 10%, last 60%) tuning_periods <- list(c(0, 0.1), c(0.4, 1)) # whether we're tuning now - tuning_now <- self$in_periods(tuning_periods, - iter, - total) + tuning_now <- self$in_periods( + tuning_periods, + iter, + total + ) if (tuning_now) { @@ -574,7 +624,7 @@ sampler <- R6Class( w1 <- 1 / (iter + t0) hbar <- (1 - w1) * hbar + w1 * (self$accept_target - mean_accept_stat) log_epsilon <- mu - hbar * sqrt(iter) / gamma - w2 <- iter ^ -kappa + w2 <- iter^-kappa log_epsilon_bar <- w2 * log_epsilon + (1 - w2) * log_epsilon_bar self$hbar <- hbar @@ -586,23 +636,21 @@ sampler <- R6Class( if (iter == total) { self$parameters$epsilon <- exp(log_epsilon_bar) } - } - }, - tune_diag_sd = function(iterations_completed, total_iterations) { # when, during warmup, to tune this parameter (after epsilon, but stopping # before halfway through) tuning_periods <- list(c(0.1, 0.4)) - tuning_now <- self$in_periods(tuning_periods, - iterations_completed, - total_iterations) + tuning_now <- self$in_periods( + tuning_periods, + iterations_completed, + total_iterations + ) if (tuning_now) { - n_accepted <- sum(!self$accept_history) # provided there have been at least 5 acceptances in the warmup so far @@ -613,76 +661,107 @@ sampler <- R6Class( shrinkage <- 1 / (n_accepted + 5) var_shrunk <- n_accepted * shrinkage * sample_var + 5e-3 * shrinkage self$parameters$diag_sd <- sqrt(var_shrunk) - } - } - }, - - define_tf_draws = function() { + # TF1/2 check todo + # need to convert this into a TF function + define_tf_draws = function(free_state, + sampler_burst_length, + sampler_thin, + sampler_param_vec + # pass values through + ) { dag <- self$model$dag tfe <- dag$tf_environment + # TF1/2 check seed + # how do TF2 and TFP use seeds? self$set_tf_seed() - self$define_tf_kernel() - - # and the sampler info - dag$tf_run( - sampler_burst_length <- tf$compat$v1$placeholder(dtype = tf$int32) - ) - dag$tf_run( - sampler_thin <- tf$compat$v1$placeholder(dtype = tf$int32) + sampler_kernel <- self$define_tf_kernel( + sampler_param_vec ) + # TF1/2 check + # some sampler parameter values need to be re-run at each iteration to + # decide, e.g., the leap step in HMC, which is run inside define_tf_kernel + # currently we run `sample_parameter_values` which will randomly pick + # an "l" step. + # Need to understand if/how tf_function will re-run those values - might + # need to pass these arguments directly + # define the whole draws tensor - dag$tf_run( - sampler_batch <- tfp$mcmc$sample_chain( - num_results = tf$math$floordiv(sampler_burst_length, sampler_thin), - current_state = free_state, - kernel = sampler_kernel, - trace_fn = function(current_state, kernel_results) { - kernel_results - }, - num_burnin_steps = tf$constant(0L, dtype = tf$int32), - num_steps_between_results = sampler_thin, - parallel_iterations = 1L) + # TF1/2 check + # `seed` arg now gets passed to `sample_chain`. + # Need to work out how to get sampler_batch() to run as a TF function. + # To do that we need to work out how to get the free state + + sampler_batch <- tfp$mcmc$sample_chain( + num_results = tf$math$floordiv(sampler_burst_length, sampler_thin), + current_state = free_state, + kernel = sampler_kernel, + trace_fn = function(current_state, kernel_results) { + kernel_results + }, + num_burnin_steps = tf$constant(0L, dtype = tf$int32), + num_steps_between_results = sampler_thin, + parallel_iterations = 1L + ) + return( + sampler_batch ) - }, # run a burst of the sampler - run_burst = function(n_samples, thin = 1L) { - + # TF1/2 check + # this will be removed in favour of the tf_function decorated + # define_tf_draws() function that takes in argument values + # sampler_burst_length and sampler_thin + run_burst = function(n_samples, + thin = 1L) { dag <- self$model$dag tfe <- dag$tf_environment + param_vec <- unlist(self$sampler_parameter_values()) # combine the sampler information with information on the sampler's tuning # parameters, and make into a dict - sampler_values <- list(free_state = self$free_state, - sampler_burst_length = as.integer(n_samples), - sampler_thin = as.integer(thin)) - sampler_dict_list <- c(sampler_values, - self$sampler_parameter_values()) + # sampler_values <- list( + # # TF1/2 check + # do we need free state here anymore? + # free_state = self$free_state, + # sampler_burst_length = as.integer(n_samples), + # sampler_thin = as.integer(thin) + # ) + # # create a function that takes in these arguments ^^ + # # and then run the code for the sampler_batch + # dag$set_tf_data_list("batch_size", nrow(self$free_state)) - dag$build_feed_dict(sampler_dict_list) # run the sampler, handling numerical errors - batch_results <- self$sample_carefully(n_samples) + batch_results <- self$sample_carefully( + free_state = self$free_state, + sampler_burst_length = as.integer(n_samples), + sampler_thin = as.integer(thin), + sampler_param_vec = param_vec + ) # get trace of free state and drop the null dimension - free_state_draws <- batch_results$all_states + if (is.null(batch_results$all_states)){ + browser() + } + free_state_draws <- as.array(batch_results$all_states) # if there is one sample at a time, and it's rejected, conversion from # python back to R can drop a dimension, so handle that here. Ugh. - if (length(dim(free_state_draws)) != 3) { + if (n_dim(free_state_draws) != 3) { dim(free_state_draws) <- c(1, dim(free_state_draws)) } + self$last_burst_free_states <- split_chains(free_state_draws) n_draws <- nrow(free_state_draws) @@ -695,8 +774,8 @@ sampler <- R6Class( if (self$uses_metropolis) { # log acceptance probability - log_accept_stats <- batch_results$trace$log_accept_ratio - is_accepted <- batch_results$trace$is_accepted + log_accept_stats <- as.array(batch_results$trace$log_accept_ratio) + is_accepted <- as.array(batch_results$trace$is_accepted) self$accept_history <- rbind(self$accept_history, is_accepted) accept_stats_batch <- pmin(1, exp(log_accept_stats)) self$mean_accept_stat <- mean(accept_stats_batch, na.rm = TRUE) @@ -704,21 +783,47 @@ sampler <- R6Class( # numerical rejections parameter sets bad <- sum(!is.finite(log_accept_stats)) self$numerical_rejections <- self$numerical_rejections + bad - } - }, - sample_carefully = function(n_samples) { + tf_evaluate_sample_batch = NULL, + + sample_carefully = function(free_state, + sampler_burst_length, + sampler_thin, + sampler_param_vec) { # tryCatch handling for numerical errors dag <- self$model$dag tfe <- dag$tf_environment + # legacy: previously we used `n_samples` not `sampler_burst_length` + n_samples <- sampler_burst_length + + result <- cleanly( + self$tf_evaluate_sample_batch( + free_state = tensorflow::as_tensor( + free_state, + dtype = tf_float() + ), + sampler_burst_length = tensorflow::as_tensor(sampler_burst_length), + sampler_thin = tensorflow::as_tensor(sampler_thin), + sampler_param_vec = tensorflow::as_tensor( + sampler_param_vec, + dtype = tf_float(), + shape = length(sampler_param_vec) + ) + ) + ) # closing cleanly - # don't use dag$tf_sess_run, to avoid the overhead on parsing expressions - result <- cleanly(tfe$sess$run(tfe$sampler_batch, - feed_dict = tfe$feed_dict)) + # if it's fine, batch_results is the output + # if it's a non-numerical error, it will error + # if it's a numerical error, batch_results will be an error object + self$check_for_free_state_error(result, n_samples) + result + }, + + check_for_free_state_error = function(result, n_samples){ # if it's fine, batch_results is the output # if it's a non-numerical error, it will error # if it's a numerical error, batch_results will be an error object @@ -727,7 +832,6 @@ sampler <- R6Class( # simple case that this is a single bad sample. Mock up a result and # pass it back if (n_samples == 1L) { - result <- list( all_states = self$free_state, trace = list( @@ -735,34 +839,33 @@ sampler <- R6Class( is_accepted = rep(FALSE, self$n_chains) ) ) - } else { + greta_stash$tf_num_error <- result + # otherwise, *one* of these multiple samples was bad. The sampler # won't be valid if we just restart, so we need to error here, # informing the user how to run one sample at a time - - stop("TensorFlow hit a numerical problem that caused it to error. ", - "greta can handle these as bad proposals if you rerun mcmc() ", - "with the argument one_by_one = TRUE. ", - "This will slow down the sampler slightly.", - "\n\n", result, call. = FALSE) + cli::cli_abort( + message = c( + "TensorFlow hit a numerical problem that caused it to error", + "{.pkg greta} can handle these as bad proposals if you rerun \\ + {.fun mcmc} with the argument {.code one_by_one = TRUE}.", + "This will slow down the sampler slightly.", + "The error encountered can be recovered and viewed with:", + "{.code greta_notes_tf_num_error()}" + ) + ) } - } - - result - }, sampler_parameter_values = function() { # random number of integration steps self$parameters - } - ) ) @@ -770,59 +873,53 @@ hmc_sampler <- R6Class( "hmc_sampler", inherit = sampler, public = list( - - parameters = list(Lmin = 10, - Lmax = 20, - epsilon = 0.005, - diag_sd = 1), - + parameters = list( + Lmin = 10, + Lmax = 20, + epsilon = 0.005, + diag_sd = 1 + ), accept_target = 0.651, - define_tf_kernel = function() { + define_tf_kernel = function(sampler_param_vec) { dag <- self$model$dag tfe <- dag$tf_environment - # tensors for sampler parameters - dag$tf_run( - hmc_epsilon <- tf$compat$v1$placeholder(dtype = tf_float()) - ) - dag$tf_run( - hmc_l <- tf$compat$v1$placeholder(dtype = tf$int64) - ) + free_state_size <- length(sampler_param_vec) - 2 - # need to pass in the value for this placeholder as a matrix (shape(n, 1)) - dag$tf_run( - hmc_diag_sd <- tf$compat$v1$placeholder( - dtype = tf_float(), - shape = shape(dim(free_state)[[2]], 1) - ) - ) + # TF1/2 check + # this will likely get replaced... - # but it step_sizes must be a vector (shape(n, )), so reshape it - dag$tf_run( - hmc_step_sizes <- tf$reshape( + hmc_l <- sampler_param_vec[0] + hmc_epsilon <- sampler_param_vec[1] + hmc_diag_sd <- sampler_param_vec[2:(1+free_state_size)] + + hmc_step_sizes <- tf$cast( + x = tf$reshape( hmc_epsilon * (hmc_diag_sd / tf$reduce_sum(hmc_diag_sd)), - shape = shape(dim(free_state)[[2]]) - ) + shape = shape(free_state_size) + ), + dtype = tf$float64 ) - + # TF1/2 check + # where is "free_state" pulled from, given that it is the + # argument to this function, "generate_log_prob_function" ? # log probability function - tfe$log_prob_fun <- dag$generate_log_prob_function() # build the kernel # nolint start - dag$tf_run( - sampler_kernel <- tfp$mcmc$HamiltonianMonteCarlo( - target_log_prob_fn = log_prob_fun, - step_size = hmc_step_sizes, - num_leapfrog_steps = hmc_l, - seed = rng_seed) + + sampler_kernel <- tfp$mcmc$HamiltonianMonteCarlo( + target_log_prob_fn = dag$tf_log_prob_function_adjusted, + step_size = hmc_step_sizes, + num_leapfrog_steps = hmc_l + ) + return( + sampler_kernel ) # nolint end - }, - sampler_parameter_values = function() { # random number of integration steps @@ -834,13 +931,12 @@ hmc_sampler <- R6Class( diag_sd <- matrix(self$parameters$diag_sd) # return named list for replacing tensors - list(hmc_l = l, - hmc_epsilon = epsilon, - hmc_diag_sd = diag_sd) - + list( + hmc_l = l, + hmc_epsilon = epsilon, + hmc_diag_sd = diag_sd + ) } - - ) ) @@ -848,72 +944,77 @@ rwmh_sampler <- R6Class( "rwmh_sampler", inherit = sampler, public = list( - parameters = list( proposal = "normal", epsilon = 0.1, diag_sd = 1 ), - accept_target = 0.44, - define_tf_kernel = function() { + define_tf_kernel = function(sampler_param_vec) { + + # wrap this up into a function to extract these out + free_state_size <- length(sampler_param_vec) - 1 # get it from dag object + # e.g., length(dag$free_state) + rwmh_epsilon <- sampler_param_vec[0] + rwmh_diag_sd <- sampler_param_vec[1:(1+free_state_size)] dag <- self$model$dag tfe <- dag$tf_environment + tfe$rwmh_proposal <- switch(self$parameters$proposal, normal = tfp$mcmc$random_walk_normal_fn, - uniform = tfp$mcmc$random_walk_uniform_fn) + uniform = tfp$mcmc$random_walk_uniform_fn + ) - tfe$log_prob_fun <- dag$generate_log_prob_function() + # TF1/2 check + # I think a good portion of this code could be abstracted away + # Perhaps from `rwmh_epsilon` to `new_state_fn` + # could be passed + # tfe$log_prob_fun <- dag$generate_log_prob_function() # tensors for sampler parameters - dag$tf_run( - rwmh_epsilon <- tf$compat$v1$placeholder(dtype = tf_float()) - ) + # rwmh_epsilon <- tf$compat$v1$placeholder(dtype = tf_float()) # need to pass in the value for this placeholder as a matrix (shape(n, 1)) - dag$tf_run( - rwmh_diag_sd <- tf$compat$v1$placeholder( - dtype = tf_float(), - shape = shape(dim(free_state)[[2]], 1) - ) - ) + # rwmh_diag_sd <- tf$compat$v1$placeholder( + # dtype = tf_float(), + # # TF1/2 check + # again what do we with with `free_state`? + # shape = shape(dim(free_state)[[2]], 1) + # ) # but it step_sizes must be a vector (shape(n, )), so reshape it - dag$tf_run( - rwmh_step_sizes <- tf$reshape( - rwmh_epsilon * (rwmh_diag_sd / tf$reduce_sum(rwmh_diag_sd)), - shape = shape(dim(free_state)[[2]]) - ) + rwmh_step_sizes <- tf$reshape( + rwmh_epsilon * (rwmh_diag_sd / tf$reduce_sum(rwmh_diag_sd)), + # TF1/2 check + # what are we to do about `free_state` here? + shape = shape(free_state_size) ) - dag$tf_run( - new_state_fn <- rwmh_proposal(scale = rwmh_step_sizes) - ) + new_state_fn <- tfe$rwmh_proposal(scale = rwmh_step_sizes) # build the kernel # nolint start - dag$tf_run( - sampler_kernel <- tfp$mcmc$RandomWalkMetropolis( - target_log_prob_fn = log_prob_fun, - new_state_fn = new_state_fn, - seed = rng_seed) + sampler_kernel <- tfp$mcmc$RandomWalkMetropolis( + target_log_prob_fn = dag$tf_log_prob_function_adjusted, + new_state_fn = new_state_fn + ) + return( + sampler_kernel ) # nolint end }, - sampler_parameter_values = function() { - epsilon <- self$parameters$epsilon diag_sd <- matrix(self$parameters$diag_sd) # return named list for replacing tensors - list(rwmh_epsilon = epsilon, - rwmh_diag_sd = diag_sd) - + list( + rwmh_epsilon = epsilon, + rwmh_diag_sd = diag_sd + ) } - ) ) @@ -921,348 +1022,44 @@ slice_sampler <- R6Class( "slice_sampler", inherit = sampler, public = list( - parameters = list( max_doublings = NA ), tuning_interval = Inf, uses_metropolis = FALSE, - define_tf_kernel = function() { + define_tf_kernel = function(sampler_param_vec) { + slice_max_doublings <- tensorflow::as_tensor( + x = sampler_param_vec[0], + dtype = tf$int32 + ) dag <- self$model$dag tfe <- dag$tf_environment - if (dag$tf_float != "float32") { - stop("slice sampler can only currently be used for models defined ", - "with single precision, set model(..., precision = 'single') ", - "instead", - call. = FALSE) - } - - tfe$log_prob_fun <- dag$generate_log_prob_function() - dag$tf_run( - slice_max_doublings <- tf$compat$v1$placeholder(dtype = tf$int32) - ) - # build the kernel # nolint start - dag$tf_run( - sampler_kernel <- tfp$mcmc$SliceSampler( - target_log_prob_fn = log_prob_fun, - step_size = fl(1), - max_doublings = slice_max_doublings, - seed = rng_seed) + sampler_kernel <- tfp$mcmc$SliceSampler( + target_log_prob_fn = dag$tf_log_prob_function_adjusted, + step_size = fl(1), + max_doublings = slice_max_doublings + ) + + return( + sampler_kernel ) # nolint end }, - sampler_parameter_values = function() { - max_doublings <- as.integer(self$parameters$max_doublings) # return named list for replacing tensors list(slice_max_doublings = max_doublings) - }, # no additional here tuning tune = function(iterations_completed, total_iterations) { } - - ) -) - -optimiser <- R6Class( - "optimiser", - inherit = inference, - public = list( - - # optimiser information - name = "", - method = "method", - parameters = list(), - other_args = list(), - max_iterations = 100L, - tolerance = 1e-6, - uses_callbacks = TRUE, - adjust = TRUE, - - # modified during optimisation - it = 0, - old_obj = Inf, - diff = Inf, - - # set up the model - initialize = function(initial_values, - model, - name, - method, - parameters, - other_args, - max_iterations, - tolerance, - adjust) { - - super$initialize(initial_values, - model, - parameters = list(), - seed = get_seed()) - - self$name <- name - self$method <- method - self$parameters <- parameters - self$other_args <- other_args - self$max_iterations <- as.integer(max_iterations) - self$tolerance <- tolerance - self$adjust <- adjust - - if ("uses_callbacks" %in% names(other_args)) - self$uses_callbacks <- other_args$uses_callbacks - - self$create_optimiser_objective() - self$create_tf_minimiser() - self$set_initial_values(initial_values) - self$n_traced <- length(model$dag$trace_values(self$free_state)) - - }, - - parameter_names = function() { - names(self$parameters) - }, - - set_dtype = function(parameter_name, dtype) { - - params <- self$parameters - param_names <- self$parameter_names() - - if (parameter_name %in% param_names) { - param <- params[[parameter_name]] - self$model$dag$on_graph( - tf_param <- tf$constant(param, dtype = dtype) - ) - params[[parameter_name]] <- tf_param - } - - self$parameters <- params - - }, - - # initialize the variables, then set the ones we care about - set_inits = function() { - - dag <- self$model$dag - tfe <- dag$tf_environment - - dag$tf_sess_run(tf$compat$v1$global_variables_initializer()) - - shape <- tfe$optimiser_free_state$shape - dag$on_graph( - tfe$optimiser_init <- tf$constant(self$free_state, - shape = shape, - dtype = tf_float()) - ) - - . <- dag$tf_sess_run(optimiser_free_state$assign(optimiser_init)) - - }, - - # create a separate free state variable and objective, since optimisers must - # use variables - create_optimiser_objective = function() { - - dag <- self$model$dag - tfe <- dag$tf_environment - - # define a *variable* free state object - if (!live_pointer("optimiser_free_state", envir = tfe)) { - dag$define_free_state("variable", name = "optimiser_free_state") - } - - # use the log prob function to define objectives from the variable - if (!live_pointer("optimiser_objective_adj", envir = tfe)) { - - log_prob_fun <- dag$generate_log_prob_function(which = "both") - dag$on_graph(objectives <- log_prob_fun(tfe$optimiser_free_state)) - - assign("optimiser_objective_adj", - -objectives$adjusted, - envir = tfe) - - assign("optimiser_objective", - -objectives$unadjusted, - envir = tfe) - - } - - }, - - run = function() { - - self$model$dag$build_feed_dict() - self$set_inits() - self$run_minimiser() - self$fetch_free_state() - - }, - - fetch_free_state = function() { - - # get the free state as a vector - self$free_state <- self$model$dag$tf_sess_run(optimiser_free_state) - - }, - - return_outputs = function() { - - dag <- self$model$dag - - # if the optimiser was ignoring the callbacks, we have no idea about the - # number of iterations or convergence - if (!self$uses_callbacks) - self$it <- NA - - converged <- self$it < (self$max_iterations - 1) - - par <- dag$trace_values(self$free_state, flatten = FALSE) - par <- lapply(par, drop_first_dim) - par <- lapply(par, drop_column_dim) - - list(par = par, - value = -dag$tf_sess_run(joint_density), - iterations = self$it, - convergence = ifelse(converged, 0, 1)) - - } - - ) -) - -tf_optimiser <- R6Class( - "tf_optimiser", - inherit = optimiser, - public = list( - - # some of the optimisers are very fussy about dtypes, so convert them now - sanitise_dtypes = function() { - - self$set_dtype("global_step", tf$int64) - - if (self$name == "proximal_gradient_descent") - lapply(self$parameter_names(), self$set_dtype, tf$float64) - - if (self$name == "proximal_adagrad") { - - fussy_params <- c("learning_rate", - "l1_regularization_strength", - "l2_regularization_strength") - - lapply(fussy_params, self$set_dtype, tf$float64) - - } - - }, - - # create an op to minimise the objective - create_tf_minimiser = function() { - - dag <- self$model$dag - tfe <- dag$tf_environment - - self$sanitise_dtypes() - - optimise_fun <- eval(parse(text = self$method)) - dag$on_graph(tfe$tf_optimiser <- do.call(optimise_fun, - self$parameters)) - - if (self$adjust) { - dag$tf_run(train <- tf_optimiser$minimize(optimiser_objective_adj)) - } else { - dag$tf_run(train <- tf_optimiser$minimize(optimiser_objective)) - } - - }, - - # minimise the objective function - run_minimiser = function() { - - self$set_inits() - - while (self$it < self$max_iterations & - self$diff > self$tolerance) { - self$it <- self$it + 1 - self$model$dag$tf_sess_run(train) - if (self$adjust) { - obj <- self$model$dag$tf_sess_run(optimiser_objective_adj) - } else { - obj <- self$model$dag$tf_sess_run(optimiser_objective) - } - self$diff <- abs(self$old_obj - obj) - self$old_obj <- obj - } - - } - ) -) - -scipy_optimiser <- R6Class( - "scipy_optimiser", - inherit = optimiser, - public = list( - - create_tf_minimiser = function() { - - dag <- self$model$dag - tfe <- dag$tf_environment - - opt_fun <- eval(parse(text = "tf$contrib$opt$ScipyOptimizerInterface")) - - if (self$adjust) { - loss <- tfe$optimiser_objective_adj - } else { - loss <- tfe$optimiser_objective - } - - args <- list(loss = loss, - method = self$method, - options = c(self$parameters, - maxiter = self$max_iterations), - tol = self$tolerance) - - dag$on_graph(tfe$tf_optimiser <- do.call(opt_fun, args)) - - }, - - obj_progress = function(obj) { - self$diff <- abs(self$old_obj - obj) - self$old_obj <- obj - }, - - it_progress = function(...) { - self$it <- self$it + 1 - }, - - run_minimiser = function() { - - dag <- self$model$dag - tfe <- dag$tf_environment - tfe$it_progress <- self$it_progress - tfe$obj_progress <- self$obj_progress - - self$set_inits() - - # run the optimiser, suppressing python's yammering - quietly( - dag$tf_run( - tf_optimiser$minimize(sess, - feed_dict = feed_dict, - step_callback = it_progress, - loss_callback = obj_progress, - fetches = list(optimiser_objective_adj)) - ) - ) - - } ) ) diff --git a/R/install_greta_deps.R b/R/install_greta_deps.R new file mode 100644 index 00000000..61175f99 --- /dev/null +++ b/R/install_greta_deps.R @@ -0,0 +1,548 @@ +#' Install Python dependencies for greta +#' +#' This is a helper function to install Python dependencies needed. By default +#' these are TF 2.15.0, TFP 0.23.0, and Python 3.10. These Python modules +#' will be installed into a conda environment named "greta-env-tf2". +#' +#' You can specify an environment variable to write a logfile to a specific +#' location with `GRETA_INSTALLATION_LOG` using +#' `Sys.setenv('GRETA_INSTALLATION_LOG'='path/to/logfile.html')`. Or use +#' [greta_set_install_logfile()] to set the path, e.g., +#' `greta_set_install_logfile('path/to/logfile.html')`. By default it uses +#' `tools::R_user_dir("greta")` as the directory to save a logfile named +#' "greta-installation-logfile.html". To see installation notes or errors, +#' after installation you can open the logfile with +#' [open_greta_install_log()], or you can navigate to the logfile and open +#' it in a browser. +#' +#' @param deps object created with [greta_deps_spec()] where you +#' specify python, TF, and TFP versions. By default these are TF 2.15.0, +#' TFP 0.23.0, and Python 3.10. These versions must be compatible +#' with each other. If they are not, [greta_deps_spec()] will error with +#' more information and suggestions. See ?[greta_deps_spec()] for more +#' information, and see the data object `greta_deps_tf_tfp` +#' (`?greta_deps_tf_tfp``). +#' +#' @param timeout maximum time in minutes until the installation for each +#' installation component times out and exits. Default is 5 minutes per +#' installation component. +#' @param restart character. Restart R after installation? Default is "ask". +#' Other options are, "force", and "no". Using "force" will will force a +#' restart after installation. Using "no" will not restart. Note that this +#' only restarts R during interactive sessions, and only in RStudio. +#' +#' @param ... Optional arguments, reserved for future expansion. +#' +#' @details +#' By default, if using RStudio, it will now ask you if you want to restart +#' the R session. If the session is not interactive, or is not in RStudio, +#' it will not restart. You can also override this with `restart = TRUE`. +#' +#' @note This will automatically install Miniconda (a minimal version of the +#' Anaconda scientific software management system), create a 'conda' +#' environment for greta named 'greta-env-tf2' with required python and python +#' package versions, and forcibly switch over to using that conda environment. +#' +#' If you don't want to use conda or the "greta-env-tf2" conda environment, you +#' can install versions that you like, e.g., using [reticulate::py_install()]. +#' If you want to see which versions of TF, TFP, and Python work with each +#' other (at least according to information from tensorflows website), see the +#' data `greta_deps_tf_tfp`, which is provided with greta. Managing your own +#' installation is not always straightforward, so we recommend installing +#' the python packages using `install_greta_deps()` for most users. +#' +#' @name install_greta_deps +#' +#' @export +#' +#' @examples +#' \dontrun{ +#' install_greta_deps() +#' } +#' @importFrom reticulate py_available +#' @importFrom tensorflow install_tensorflow +#' @importFrom reticulate conda_create +#' @importFrom reticulate conda_install +#' @importFrom cli cli_alert_info +#' @importFrom cli cli_process_start +#' @importFrom cli cli_process_done +#' @importFrom cli cli_ul +#' @importFrom callr r_process_options +#' @importFrom callr r_process +#' @importFrom cli cli_alert_success +#' @importFrom cli cli_ul +install_greta_deps <- function(deps = greta_deps_spec(), + timeout = 5, + restart = c("ask", "force", "no"), + ...) { + + check_greta_deps_spec(deps) + + restart <- rlang::arg_match( + arg = restart, + values = c("ask", "force", "no") + ) + + # set warning message length + options(warning.length = 2000) + + # install miniconda if needed + if (!have_conda()) { + greta_install_miniconda(timeout) + } + + if (!have_greta_conda_env()) { + greta_create_conda_env( + timeout = timeout, + deps = deps + ) + } + + # TODO + # Issue warning if you already have conda env +/ miniconda + # suggest using `reinstall_greta_deps()` + greta_install_python_deps( + timeout = timeout, + deps = deps + ) + + # TODO + # Detect if you have tried to install greta multiple times in the same + # session, and suggest that perhaps they want to use + # `reinstall_greta_deps()` + # perhaps even stopping the session with a "yesno" + + greta_logfile <- sys_get_env("GRETA_INSTALLATION_LOG") + + greta_logfile <- greta_logfile %||% greta_default_logfile() + + write_greta_install_log(path = greta_logfile) + + cli::cli_alert_success("Installation of {.pkg greta} dependencies \\ + is complete!", + wrap = TRUE) + + restart_or_not(restart) + +} + +get_pkg_user_dir <- function() { + pkg_user_dir <- tools::R_user_dir("greta") + if (!dir.exists(pkg_user_dir)) { + dir.create(pkg_user_dir, recursive = TRUE) + } + pkg_user_dir +} + +greta_default_logfile <- function(){ + greta_user_dir <- get_pkg_user_dir() + file.path(greta_user_dir, "greta-installation-logfile.html") +} + + +restart_or_not <- function(restart){ + # Managing how to restart R + # requires RStudio and also an interactive session + has_rstudioapi_pkg <- requireNamespace("rstudioapi", quietly = TRUE) && + rstudioapi::hasFun("restartSession") + + # Default (if using rstudio) - we ask the user if they want to restart? + ask_restart <- interactive() && has_rstudioapi_pkg && (restart == "ask") + + # where the user has specified a restart + user_force_restart <- (restart == "force") && + interactive() && + has_rstudioapi_pkg + + # Where there is no rstudio/not interactive, suggest restarting. + suggest_restart <- (restart == "force" | restart == "no") && + (!interactive() | !has_rstudioapi_pkg) + + if (suggest_restart) { + cli::cli_inform( + "Restart R, then load {.pkg greta} with: {.code library(greta)}" + ) + return(invisible()) + } + + if (ask_restart) { + if (yesno::yesno("Restart R and load greta?")) { + rstudioapi::restartSession( + command = "library(greta)", + clean = TRUE + ) + } + } + + if (user_force_restart) { + cli::cli_inform("Restarting R, then loading {.pkg greta}") + rstudioapi::restartSession( + command = "library(greta)", + clean = TRUE + ) + } + +} + +## TODO +## Add a way to pass this along to a custom simpler python installer function +## A la: +# reticulate::py_install( +# packages = c( +# 'numpy', +# 'tensorflow==2.15', +# 'tensorflow-probability==0.23.0', +# "keras==2.15.0" +# ), +# envname = "greta-env-tf2", +# pip = TRUE +# ) + +#' Specify python dependencies for greta +#' +#' A helper function for specifying versions of Tensorflow (TF), Tensorflow +#' Probability (TFP), and Python. Defaulting to 2.15.0, 0.23.0, and 3.10, +#' respectively. You can specify the version that you want to install, but +#' it will check if these are compatible. That is, if you specify versions of +#' TF/TFP/Python which do not work with each other, it will error and give +#' a suggested version to install. It does this by using a dataset, +#' `greta_deps_tf_tfp`, to check if the versions of TF, TFP, and Python +#' specified are compatible on your operating system. You can inspect +#' this dataset with `View(greta_deps_tf_tfp)`. +#' +#' @param tf_version Character. Tensorflow (TF) version in format +#' major.minor.patch. Default is "2.15.0". +#' @param tfp_version Character.Tensorflow probability (TFP) version +#' major.minor.patch. Default is "0.23.0". +#' @param python_version Character. Python version in format major.minor.patch. +#' Default is "3.10". +#' +#' @return data frame of valid dependencies +#' @export +#' +#' @examples +#' greta_deps_spec() +#' greta_deps_spec(tf_version = "2.15.0") +#' greta_deps_spec(tf_version = "2.15.0", tfp_version = "0.23.0") +#' greta_deps_spec(tf_version = "2.15.0", python_version = "3.10") +#' greta_deps_spec( +#' tf_version = "2.15.0", +#' tfp_version = "0.23.0", +#' python_version = "3.10" +#' ) +#' # this will fail +#' \dontrun{ +#' greta_deps_spec( +#' tf_version = "2.11.0", +#' tfp_version = "0.23.0", +#' python_version = "3.10" +#' ) +#' } +greta_deps_spec <- function(tf_version = "2.15.0", + tfp_version = "0.23.0", + python_version = "3.10"){ + + deps_list <- data.frame( + tf_version = tf_version, + tfp_version = tfp_version, + python_version = python_version + ) + + deps_obj <- structure( + deps_list, + class = c("greta_deps_spec", "data.frame") + ) + + # check for envvar to silence these checks + check_tfp_tf_semantic(deps_obj) + check_greta_tf_range(deps_obj) + check_greta_tfp_range(deps_obj) + check_greta_python_range(deps_obj$python_version) + check_greta_deps_config(deps_obj) + + deps_obj + +} + +check_greta_deps_spec <- function(deps, + call = rlang::caller_env()) { + if (!inherits(deps, "greta_deps_spec")) { + cli::cli_abort( + message = "{.arg deps} must be created by {.fun greta_deps_spec}.", + call = call + ) + } +} + +#' Print method for greta python deps +#' +#' @param x greta python deps +#' @param ... extra args, not used +#' @export +print.greta_deps_spec <- function(x, ...){ + print.data.frame(x) +} + +#' Capture greta python dependencies. +#' +#' To assist with capturing and sharing python dependencies, we provide a way +#' to capture the dependencies currently used. +#' +#' @return `greta_deps_spec()` object +#' @export +#' +#' @examples +#' \dontrun{ +#' my_deps <- greta_deps_receipt() +#' } +greta_deps_receipt <- function(){ + + greta_deps_spec( + tf_version = version_tf(), + tfp_version = version_tfp(), + python_version = as.character(reticulate::py_version()) + ) + +} + +check_greta_deps_range <- function(deps, + module, + call = rlang::caller_env()){ + + greta_tf_tfp <- greta_deps_tf_tfp[[module]] + version_provided <- numeric_version(deps[[module]]) + + version_name <- switch(module, + tf_version = "TF", + tfp_version = "TFP") + + latest_version <- switch(module, + tf_version = numeric_version("2.15.0"), + tfp_version = numeric_version("0.23.0")) + + later_tf_tfp <- version_provided > latest_version + + if (later_tf_tfp){ + gh_issue <- "https://github.com/greta-dev/greta/issues/675" + cli::cli_abort( + message = c( + "{.pkg greta} Does not yet support \\ + {version_name} > {.val {latest_version}}", + "i" = "See {.url {gh_issue}} for more information", + "x" = "The provided version was {.val {version_provided}}", + "i" = "The nearest valid version that is supported by \\ + {.pkg greta} is: {.val {latest_version}}", + "i" = "Valid versions of TF, TFP, and Python are in \\ + {.code greta_deps_tf_tfp}", + "i" = "Inspect with:", + "{.run View(greta_deps_tf_tfp)}"), + call = call + ) + } + + valid <- version_provided %in% greta_tf_tfp + if (!valid) { + closest_value <- closest_version(version_provided, greta_deps_tf_tfp[[module]]) + } + + if (!valid){ + + cli::cli_abort( + message = c("{.val {version_name}} version provided does not match \\ + supported versions", + "The version {.val {version_provided}} was not in \\ + {.val {greta_deps_tf_tfp[[module]]}}", + "i" = "The nearest valid version that is supported by \\ + {.pkg greta} is: {.val {closest_value}}", + "i" = "Valid versions of TF, TFP, and Python are in \\ + {.code greta_deps_tf_tfp}", + "i" = "Inspect with:", + "{.run View(greta_deps_tf_tfp)}"), + call = call + ) + } +} + +check_greta_tf_range <- function(deps, call = rlang::caller_env()) { + check_greta_deps_range(deps = deps, + module = "tf_version", + call = call) +} + +check_greta_tfp_range <- function(deps, call = rlang::caller_env()) { + check_greta_deps_range(deps = deps, + module = "tfp_version", + call = call) +} + +check_greta_python_range <- function(version_provided, + call = rlang::caller_env()) { + + py_version_min <- unique(greta_deps_tf_tfp$python_version_min) + py_version_max <- unique(greta_deps_tf_tfp$python_version_max) + py_versions <- sort(unique(c(py_version_min, py_version_max))) + + min_py <- paste0(min(py_versions)) + max_py <- paste0(max(py_versions)) + + outside_range <- outside_version_range(version_provided, py_versions) + + if (outside_range) { + + closest_value <- paste0(closest_version(version_provided, c(py_versions))) + + cli::cli_abort( + message = c("Python version must be between \\ + {.val {min_py}}-{.val {max_py}}", + "x" = "The version provided was {.val {version_provided}}.", + "i" = "Try: {.val {closest_value}}"), + call = call + ) + } + +} + +check_greta_deps_config <- function(deps, + call = rlang::caller_env()){ + + check_greta_deps_spec(deps) + + deps <- deps |> + lapply(numeric_version) |> + as.data.frame() + + os_matches <- greta_deps_tf_tfp |> + subset(os_name() == os) + + no_os_matches <- nrow(os_matches) == 0 + if (no_os_matches) { + valid_os <- unique(greta_deps_tf_tfp$os) + cli::cli_abort( + message = c("The os provided does not match one of {.val {valid_os}}", + "i" = "Valid versions of TF, TFP, and Python are in \\ + {.code greta_deps_tf_tfp}", + "i" = "Inspect with:", + "{.run View(greta_deps_tf_tfp)}"), + call = call + ) + } + + config_matches <- os_matches |> + subset(tfp_version == deps$tfp_version) |> + subset(tf_version == deps$tf_version) |> + subset(deps$python_version >= python_version_min) |> + subset(deps$python_version <= python_version_max) + + no_matches <- nrow(config_matches) == 0 + + # Build logic to prioritise valid TFP over others + if (no_matches){ + + tfp_matches <- subset(os_matches, tfp_version == deps$tfp_version) + tf_matches <- subset(os_matches, tf_version == deps$tf_version) + py_matches <- os_matches |> + subset(deps$python_version >= python_version_min) |> + subset(deps$python_version <= python_version_max) + + config_matches <- data.frame( + tfp_match = nrow(tfp_matches) > 0, + tf_match = nrow(tf_matches) > 0, + py_match = nrow(py_matches) > 0 + ) + + all_valid <- all(config_matches) + any_valid <- any(config_matches) + tfp_valid <- config_matches$tfp_match + tf_valid <- config_matches$tf_match + py_valid <- config_matches$py_match + suggest_tfp <- all_valid | tfp_valid | tfp_valid && py_valid + suggest_tf <- !all_valid && any_valid && tf_valid + suggest_py <- !tfp_valid && !tf_valid && py_valid + + if (!any_valid){ + cli::cli_abort( + message = c("Config does not match any installation combinations.", + "i" = "Valid versions of TF, TFP, and Python are in \\ + {.code greta_deps_tf_tfp}", + "i" = "Inspect with:", + "{.run View(greta_deps_tf_tfp)}"), + call = call + ) + } + + possible_suggestions <- c( + "suggest_tfp" = suggest_tfp, + "suggest_tf" = suggest_tf, + "suggest_py" = suggest_py + ) + + which_to_suggest <- names(which(possible_suggestions)) + + # Could possibly just suggest that users consult an inbuilt dataset? + + suggested_match <- switch( + which_to_suggest, + "suggest_tfp" = tfp_matches, + "suggest_tf" = tf_matches, + "suggest_py" = py_matches + ) + + suggested_tfp <- as.character(max(suggested_match$tfp_version)) + suggested_tf <- as.character(max(suggested_match$tf_version)) + suggested_py <- as.character(max(suggested_match$python_version_max)) + + cli::cli_abort( + message = c("Provided {.code greta_deps_spec} does not match valid \\ + installation combinations.", + "See below for a suggested config to use:", + "{.code greta_deps_spec(\\ + tf_version = {.val {suggested_tf}}, \\ + tfp_version = {.val {suggested_tfp}}, \\ + python_version = {.val {suggested_py}}\\ + )}", + "i" = "Valid versions of TF, TFP, and Python are in \\ + {.code greta_deps_tf_tfp}", + "i" = "Inspect with:", + "{.run View(greta_deps_tf_tfp)}" + ), + call = call + ) + + } + +} + +check_tfp_tf_semantic <- function(deps_obj, + call = rlang::caller_env()){ + check_semantic(deps_obj$tf_version) + check_semantic(deps_obj$tfp_version) +} + +split_dots <- function(x){ + strsplit(x = x, + split = ".", + fixed = TRUE)[[1]] +} + +is_semantic <- function(x){ + separated <- split_dots(x) + is_sem <- length(separated) == 3 + is_sem +} + +check_semantic <- function(x, + arg = rlang::caller_arg(x), + call = rlang::caller_env()){ + + not_semantic <- !is_semantic(x) + + if (not_semantic){ + cli::cli_abort( + message = c("{.arg {arg}} must be semantic.", + "We saw {.val {x}}, but we require three separating dots:", + "i" = "{.val 1.1.1}", + "x" = "{.val 1.1}"), + call = call + ) + } +} diff --git a/R/internals.R b/R/internals.R index 20f6a702..beb048f0 100644 --- a/R/internals.R +++ b/R/internals.R @@ -29,28 +29,33 @@ #' This help file lists the available internals, but they are not fully #' documented and are subject to change and deprecation without warning (though #' care will be taken not to break dependent packages on CRAN). For an overview -#' of how greta works internally, see the \emph{technical details} vignette. See -#' \url{https://github.com/greta-dev} for examples of R packages extending and +#' of how greta works internally, see the *technical details* vignette. See +#' for examples of R packages extending and #' building on greta. #' #' Please get in contact via GitHub if you want to develop an extension to #' greta and need more details of how to use these internal functions. #' -#' You can use \code{attach()} to put a sublist in the search path. E.g. -#' \code{attach(.internals$nodes$constructors)} will enable you to call -#' \code{op()}, \code{vble()} and \code{distrib()} directly. +#' You can use `attach()` to put a sublist in the search path. E.g. +#' `attach(.internals$nodes$constructors)` will enable you to call +#' `op()`, `vble()` and `distrib()` directly. NULL -nodes_module <- module(constructors = node_constructors_module, - node_classes = node_classes_module, - distribution_classes = distribution_classes_module, - mixture_classes = mixture_module, - joint_classes = joint_module) +nodes_module <- module( + constructors = node_constructors_module, + node_classes = node_classes_module, + distribution_classes = distribution_classes_module, + mixture_classes = mixture_module, + joint_classes = joint_module +) #' @export -.internals <- module(greta_arrays = greta_array_module, - nodes = nodes_module, - inference = inference_module, - tensors = tf_functions_module, - utils = utilities_module, - greta_stash) +.internals <- module( + greta_arrays = greta_array_module, + nodes = nodes_module, + inference = inference_module, + tensors = tf_functions_module, + utils = utilities_module, + checks = checks_module, + greta_stash +) diff --git a/R/joint.R b/R/joint.R index 045258a7..ea35b41e 100644 --- a/R/joint.R +++ b/R/joint.R @@ -1,12 +1,12 @@ #' @name joint #' @title define joint distributions #' -#' @description \code{joint} combines univariate probability distributions -#' together into a multivariate (and \emph{a priori} independent between +#' @description `joint` combines univariate probability distributions +#' together into a multivariate (and *a priori* independent between #' dimensions) joint distribution, either over a variable, or for fixed data. #' #' @param ... scalar variable greta arrays following probability distributions -#' (see \code{\link{distributions}}); the components of the joint +#' (see [distributions()]); the components of the joint #' distribution. #' #' @param dim the dimensions of the greta array to be returned, either a scalar @@ -20,7 +20,7 @@ #' result can usually be achieved by combining variables with separate #' distributions. It is included for situations where it is more convenient to #' consider these as a single distribution, e.g. for use with -#' \code{distribution} or \code{mixture}. +#' `distribution` or `mixture`. #' #' @export #' @examples @@ -37,26 +37,23 @@ #' a <- normal(0, 3, truncation = c(0, Inf)) #' b <- normal(0, 3, truncation = c(0, Inf)) #' distribution(x) <- joint(normal(mu, sd), beta(a, b), -#' dim = 10) +#' dim = 10 +#' ) #' m <- model(mu, sd, a, b) #' plot(mcmc(m)) #' } -joint <- function(..., dim = NULL) +joint <- function(..., dim = NULL) { distrib("joint", list(...), dim) +} joint_distribution <- R6Class( "joint_distribution", inherit = distribution_node, public = list( - initialize = function(dots, dim) { - n_distributions <- length(dots) - if (n_distributions < 2) { - stop("joint must be passed at least two distributions", - call. = FALSE) - } + check_num_distributions(n_distributions, at_least = 2, name = "joint") # check the dimensions of the variables in dots single_dim <- do.call(check_dims, c(dots, target_dim = dim)) @@ -64,7 +61,8 @@ joint_distribution <- R6Class( # add the joint dimension as the last dimension dim <- single_dim ndim <- length(dim) - if (dim[ndim] == 1) { + last_dim_1d <- dim[ndim] == 1 + if (last_dim_1d) { dim[ndim] <- n_distributions } else { dim <- c(dim, n_distributions) @@ -72,12 +70,7 @@ joint_distribution <- R6Class( dot_nodes <- lapply(dots, get_node) - # check they are all scalar - are_scalar <- vapply(dot_nodes, is_scalar, logical(1)) - if (!all(are_scalar)) { - stop("joint only accepts probability distributions over scalars", - call. = FALSE) - } + check_dot_nodes_scalar(dot_nodes) # get the distributions and strip away their variables distribs <- lapply(dot_nodes, member, "distribution") @@ -89,11 +82,8 @@ joint_distribution <- R6Class( # check the distributions are all either discrete or continuous discrete <- vapply(distribs, member, "discrete", FUN.VALUE = FALSE) - if (!all(discrete) & !all(!discrete)) { - stop("cannot construct a joint distribution from a combination ", - "of discrete and continuous distributions", - call. = FALSE) - } + check_not_discrete_continuous(discrete, "joint") + n_components <- length(dot_nodes) # work out the support of the resulting distribution, and add as the @@ -112,16 +102,14 @@ joint_distribution <- R6Class( for (i in seq_len(n_distributions)) { self$add_parameter(distribs[[i]], - paste("distribution", i), - shape_matches_output = FALSE) + glue::glue("distribution {i}"), + shape_matches_output = FALSE + ) } - }, - create_target = function(truncation) { vble(self$bounds, dim = self$dim) }, - tf_distrib = function(parameters, dag) { # get tfp distributions @@ -138,7 +126,7 @@ joint_distribution <- R6Class( # split x on the joint dimension, and loop through computing the # densities - last_dim <- length(dim(x)) - 1L + last_dim <- n_dim(x) - 1L x_vals <- tf$split(x, length(tfp_distributions), axis = last_dim) log_probs <- mapply( @@ -152,19 +140,15 @@ joint_distribution <- R6Class( # sum them elementwise tf$add_n(log_probs) - } sample <- function(seed) { - samples <- lapply(distribution_nodes, dag$draw_sample) names(samples) <- NULL tf$concat(samples, axis = 2L) - } list(log_prob = log_prob, sample = sample) - } ) ) diff --git a/R/mixture.R b/R/mixture.R index 23f12587..1ff9cdfb 100644 --- a/R/mixture.R +++ b/R/mixture.R @@ -1,11 +1,11 @@ #' @name mixture #' @title mixtures of probability distributions #' -#' @description \code{mixture} combines other probability distributions into a +#' @description `mixture` combines other probability distributions into a #' single mixture distribution, either over a variable, or for fixed data. #' #' @param ... variable greta arrays following probability distributions (see -#' \code{\link{distributions}}); the component distributions in a mixture +#' [distributions()]); the component distributions in a mixture #' distribution. #' #' @param weights a column vector or array of mixture weights, which must be @@ -16,10 +16,10 @@ #' @param dim the dimensions of the greta array to be returned, either a scalar #' or a vector of positive integers. #' -#' @details The \code{weights} are rescaled to sum to one along the first +#' @details The `weights` are rescaled to sum to one along the first #' dimension, and are then used as the mixing weights of the distribution. #' I.e. the probability density is calculated as a weighted sum of the -#' component probability distributions passed in via \code{\dots} +#' component probability distributions passed in via `\dots` #' #' The component probability distributions must all be either continuous or #' discrete, and must have the same dimensions. @@ -30,22 +30,26 @@ #' # a scalar variable following a strange bimodal distibution #' weights <- uniform(0, 1, dim = 3) #' a <- mixture(normal(-3, 0.5), -#' normal(3, 0.5), -#' normal(0, 3), -#' weights = weights) +#' normal(3, 0.5), +#' normal(0, 3), +#' weights = weights +#' ) #' m <- model(a) #' plot(mcmc(m, n_samples = 500)) #' #' # simulate a mixture of poisson random variables and try to recover the #' # parameters with a Bayesian model -#' x <- c(rpois(800, 3), -#' rpois(200, 10)) +#' x <- c( +#' rpois(800, 3), +#' rpois(200, 10) +#' ) #' #' weights <- uniform(0, 1, dim = 2) #' rates <- normal(0, 10, truncation = c(0, Inf), dim = 2) #' distribution(x) <- mixture(poisson(rates[1]), -#' poisson(rates[2]), -#' weights = weights) +#' poisson(rates[2]), +#' weights = weights +#' ) #' m <- model(rates) #' draws_rates <- mcmc(m, n_samples = 500) #' @@ -63,27 +67,23 @@ #' dim <- c(5, 4) #' weights <- uniform(0, 1, dim = c(2, dim)) #' b <- mixture(normal(1, 1, dim = dim), -#' normal(-1, 1, dim = dim), -#' weights = weights) +#' normal(-1, 1, dim = dim), +#' weights = weights +#' ) #' } -mixture <- function(..., weights, dim = NULL) +mixture <- function(..., weights, dim = NULL) { distrib("mixture", list(...), weights, dim) +} mixture_distribution <- R6Class( "mixture_distribution", inherit = distribution_node, public = list( - weights_is_log = FALSE, - initialize = function(dots, weights, dim) { - n_distributions <- length(dots) - if (n_distributions < 2) { - stop("mixture must be passed at least two distributions", - call. = FALSE) - } + check_num_distributions(n_distributions, at_least = 2, name = "mixture") # check the dimensions of the variables in dots dim <- do.call(check_dims, c(dots, target_dim = dim)) @@ -97,32 +97,10 @@ mixture_distribution <- R6Class( self$weights_is_log <- TRUE } - # weights should have n_distributions as the first dimension - if (weights_dim[1] != n_distributions) { - stop("the first dimension of weights must be the number of ", - "distributions in the mixture (", n_distributions, "), ", - "but was ", weights_dim[1], - call. = FALSE) - } - # drop a trailing 1 from dim, so user doesn't need to deal with it # Ugh, need to get rid of column vector thing soon. - weights_extra_dim <- dim - n_extra_dim <- length(weights_extra_dim) - if (weights_extra_dim[n_extra_dim] == 1) { - weights_extra_dim <- weights_extra_dim[-n_extra_dim] - } - - # remainder should be 1 or match weights_extra_dim - w_dim <- weights_dim[-1] - dim_1 <- length(w_dim) == 1 && w_dim == 1 - dim_same <- all(w_dim == weights_extra_dim) - if (!(dim_1 | dim_same)) { - stop("the dimension of weights must be either ", n_distributions, - " x 1 or ", n_distributions, " x ", paste(dim, collapse = " x "), - " but was ", paste(weights_dim, collapse = " x "), - call. = FALSE) - } + # TODO get rid of column vector thing? + check_weights_dim(weights_dim, dim, n_distributions) dot_nodes <- lapply(dots, get_node) @@ -136,48 +114,32 @@ mixture_distribution <- R6Class( # check the distributions are all either discrete or continuous discrete <- vapply(distribs, member, "discrete", FUN.VALUE = logical(1)) - if (!all(discrete) & !all(!discrete)) { - stop("cannot construct a mixture from a combination of discrete ", - "and continuous distributions", - call. = FALSE) - } + check_not_discrete_continuous(discrete, name = "mixture") # check the distributions are all either multivariate or univariate multivariate <- vapply(distribs, - member, - "multivariate", - FUN.VALUE = logical(1)) - - if (!all(multivariate) & !all(!multivariate)) { - stop("cannot construct a mixture from a combination of multivariate ", - "and univariate distributions", - call. = FALSE) - } + member, + "multivariate", + FUN.VALUE = logical(1) + ) + + check_not_multivariate_univariate(multivariate) # ensure the support and bounds of each of the distributions is the same truncations <- lapply(distribs, member, "truncation") bounds <- lapply(distribs, member, "bounds") - truncated <- !vapply(truncations, is.null, logical(1)) + truncated <- !are_null(truncations) supports <- bounds supports[truncated] <- truncations[truncated] - n_supports <- length(unique(supports)) - if (n_supports != 1) { - supports_text <- vapply( - X = unique(supports), - FUN = paste, - collapse = " to ", - FUN.VALUE = character(1) - ) - stop("component distributions have different support: ", - paste(supports_text, collapse = " vs. "), - call. = FALSE) - } + check_distribution_support(supports) # get the maximal bounds for all component distributions - bounds <- c(do.call(min, bounds), - do.call(max, bounds)) + bounds <- c( + do.call(min, bounds), + do.call(max, bounds) + ) # if the support is smaller than this, treat the distribution as truncated support <- supports[[1]] @@ -191,23 +153,23 @@ mixture_distribution <- R6Class( # for any discrete ones, tell them they are fixed super$initialize("mixture", - dim, - discrete = discrete[1], - multivariate = multivariate[1]) + dim, + discrete = discrete[1], + multivariate = multivariate[1] + ) for (i in seq_len(n_distributions)) { self$add_parameter(distribs[[i]], - paste("distribution", i), - shape_matches_output = FALSE) + glue::glue("distribution {i}"), + shape_matches_output = FALSE + ) } self$add_parameter(weights, "weights") }, - create_target = function(truncation) { vble(self$bounds, dim = self$dim) }, - tf_distrib = function(parameters, dag) { # get tfp distributions and mixture weights @@ -253,11 +215,11 @@ mixture_distribution <- R6Class( dim_weights <- dim(log_weights) extra_dims <- unlist(dim(log_probs_arr)[-seq_along(dim_weights)]) for (dim in extra_dims) { - ndim <- length(dim(log_weights)) + ndim <- n_dim(log_weights) log_weights <- tf$expand_dims(log_weights, ndim) if (dim > 1L) { tiling <- c(rep(1L, ndim), dim) - tf_tiling <- tf$constant(tiling, shape = list(ndim + 1)) + tf_tiling <- tf$constant(tiling, shape = list(as.integer(ndim + 1))) log_weights <- tf$tile(log_weights, tf_tiling) } } @@ -280,12 +242,10 @@ mixture_distribution <- R6Class( log_weights <- tf$squeeze(log_weights, 2L) if (!self$multivariate) { - for (i in seq_len(ndim)) { log_weights <- tf$expand_dims(log_weights, 1L) } log_weights <- tf$tile(log_weights, c(1L, self$dim, 1L)) - } # for each observation, select a random component to sample from @@ -304,19 +264,17 @@ mixture_distribution <- R6Class( # extract the relevant component indices <- tf$expand_dims(indices, n_batches) draws <- tf$gather(samples_array, - indices, - axis = collapse_axis, - batch_dims = n_batches) + indices, + axis = collapse_axis, + batch_dims = n_batches + ) draws <- tf$squeeze(draws, collapse_axis) draws - } list(log_prob = log_prob, sample = sample) - } - ) ) diff --git a/R/new_install_process.R b/R/new_install_process.R new file mode 100644 index 00000000..278d3622 --- /dev/null +++ b/R/new_install_process.R @@ -0,0 +1,43 @@ +new_install_process <- function(callr_process, + timeout, + stdout_file = NULL, + stderr_file = NULL, + cli_start_msg = NULL, + cli_end_msg = NULL){ + cli::cli_process_start(cli_start_msg) + # convert max timeout from milliseconds into minutes + timeout_minutes <- timeout * 1000 * 60 + r_callr_process <- callr::r_process$new(callr_process) + r_callr_process$wait(timeout = timeout_minutes) + + status <- r_callr_process$get_exit_status() + output_notes <- read_char(stdout_file) + no_output <- nchar(output_notes) == 0 + output_error <- read_char(stderr_file) + + output_error <- output_error %||% "No output detected in stderr" + + if (is.null(status)) { + cli::cli_process_failed() + msg_timeout <- timeout_install_msg(timeout, output_error) + cli::cli_abort( + msg_timeout + ) + } else if (no_output) { + cli::cli_process_failed() + msg_other <- other_install_fail_msg(output_error) + cli::cli_abort( + msg_other + ) + } + + cli_process_done(msg_done = cli_end_msg) + + return( + list(output_notes = output_notes, + status = status, + no_output = no_output, + output_error = output_error) + ) + +} diff --git a/R/node_class.R b/R/node_class.R index f5ce4aef..3757adb9 100644 --- a/R/node_class.R +++ b/R/node_class.R @@ -5,36 +5,37 @@ node <- R6Class( unique_name = "", parents = list(), children = list(), + # named greta arrays giving different representations of the greta array + # represented by this node that have already been calculated, to be used for + # computational speedups or numerical stability. E.g. a logarithm or a + # cholesky factor representations = list(), + anti_representations = list(), .value = array(NA), dim = NA, distribution = NULL, - initialize = function(dim = NULL, value = NULL) { - - if (is.null(dim)) - dim <- c(1, 1) + dim <- dim %||% c(1,1) # coerce dim to integer dim <- as.integer(dim) # store array (updates dim) - if (is.null(value)) - value <- unknowns(dim = dim) + value <- value %||% unknowns(dim = dim) self$value(value) - self$get_unique_name() - + self$create_unique_name() }, - register = function(dag) { - if (!(self$unique_name %in% names(dag$node_list))) + ## TODO add explaining variable + if (!(self$unique_name %in% names(dag$node_list))) { dag$node_list[[self$unique_name]] <- self + } }, # recursively register self and family register_family = function(dag) { - + ## TODO add explaining variable if (!(self$unique_name %in% names(dag$node_list))) { # add self to list @@ -44,7 +45,7 @@ node <- R6Class( family <- c(self$list_children(dag), self$list_parents(dag)) # get and assign their names - family_names <- vapply(family, member, "unique_name", FUN.VALUE = "") + family_names <- extract_unique_names(family) names(family) <- family_names # find the unregistered ones @@ -52,32 +53,25 @@ node <- R6Class( unregistered <- family[unregistered_idx] # add them to the node list - for (relative in unregistered) + for (relative in unregistered) { relative$register_family(dag) - + } } - }, - add_parent = function(node) { # add to list of parents self$parents <- c(self$parents, node) node$add_child(self) - }, - remove_parent = function(node) { # remove node from list of parents rem_idx <- which(self$parent_names(recursive = FALSE) == node$unique_name) self$parents <- self$parents[-rem_idx] node$remove_child(self) - }, - list_parents = function(dag) { - parents <- self$parents # if this node is being sampled and has a distribution, consider @@ -87,43 +81,45 @@ node <- R6Class( parents <- c(parents, list(self$distribution)) } - parents + if (mode == "sampling" & has_representation(self, "cholesky")){ + # remove cholesky representation node from parents + parent_names <- extract_unique_names(parents) + antirep_name <- get_node(self$representations$cholesky)$unique_name + parent_names_keep <- setdiff(parent_names, antirep_name) + parents <- parents[match(parent_names_keep, parent_names)] + } - }, + if (mode == "sampling" & has_anti_representation(self, "chol2symm")){ + chol2symm_node <- get_node(self$anti_representations$chol2symm) + parents <- c(parents, list(chol2symm_node)) + } + parents + }, add_child = function(node) { # add to list of children self$children <- c(self$children, node) - }, - remove_child = function(node) { # remove node from list of parents rem_idx <- which(self$child_names() == node$unique_name) self$children <- self$children[-rem_idx] - }, - list_children = function(dag) { - children <- self$children # if this node is being sampled and has a distribution, do not consider # that a child node mode <- dag$how_to_define(self) if (mode == "sampling" & has_distribution(self)) { - child_names <- vapply(children, - member, - "unique_name", - FUN.VALUE = character(1)) + child_names <- extract_unique_names(children) keep <- child_names != self$distribution$unique_name children <- children[keep] } children - }, # return the names of all parent nodes, and if recursive = TRUE, all nodes @@ -131,30 +127,22 @@ node <- R6Class( # (from the type public object) will be listed # NB. this is the true, forward parentage and is unaffected by the dag mode! parent_names = function(recursive = FALSE) { - parents <- self$parents if (length(parents) > 0) { - - names <- vapply(parents, - member, - "unique_name", - FUN.VALUE = character(1)) + names <- extract_unique_names(parents) if (recursive) { - their_parents <- function(x) { x$parent_names(recursive = TRUE) } grandparents <- lapply(parents, their_parents) names <- c(names, unlist(grandparents)) - } # account for multiple nodes depending on the same nodes names <- unique(names) - } else { # otherwise return own name (to make sure at least somethign is returned # on recursion) @@ -162,22 +150,19 @@ node <- R6Class( } names - }, - child_names = function() { - children <- self$children if (length(children) > 0) { - - names <- vapply(children, - function(x) x$unique_name, - "") + names <- vapply( + children, + function(x) x$unique_name, + "" + ) # account for multiple nodes depending on the same nodes names <- unique(names) - } else { # otherwise return own name (to make sure at least somethign is returned # on recursion) @@ -185,54 +170,54 @@ node <- R6Class( } names - }, - defined = function(dag) { tf_name <- dag$tf_name(self) tf_name %in% ls(dag$tf_environment) }, - # define this and all descendent objects on tensorflow graph in environment - # env + # define this and all descendent objects on TF graph in environment define_tf = function(dag) { - + if (Sys.getenv("GRETA_DEBUG") == "true") { + browser() + } # if defined already, skip if (!self$defined(dag)) { # make sure parents are defined parents_defined <- vapply(self$list_parents(dag), - function(x) x$defined(dag), - FUN.VALUE = FALSE) - + function(x) x$defined(dag), + FUN.VALUE = FALSE + ) if (any(!parents_defined)) { parents <- self$list_parents(dag) - lapply(parents[which(!parents_defined)], - function(x) x$define_tf(dag)) + lapply( + parents[which(!parents_defined)], + function(x){ + x$define_tf(dag) + } + ) } # then define self + # stop("hi from the future ... parents are of class:", str(parents)) self$tf(dag) - } - }, # get or set this nodes' current value value = function(new_value = NULL, ...) { - if (is.null(new_value)) { - self$.value - } else { # get the dimension of the new value dim <- dim(new_value) # coerce 1D arrays to column vectors - if (length(dim) == 1) + if (length(dim) == 1) { dim <- c(dim, 1L) + } # update value and store dim(new_value) <- dim @@ -241,75 +226,113 @@ node <- R6Class( self$.value <- new_value } }, - set_distribution = function(distribution) { - # check it - if (!inherits(distribution, "distribution_node")) - stop("invalid distribution") + check_is_distribution_node(distribution) # add it self$distribution <- distribution - }, # return a string describing this node, for use in print and summary etc. description = function() { - text <- node_type(self) if (has_distribution(self)) { - text <- paste(text, - "following a", - self$distribution$distribution_name, - "distribution") + text <- glue::glue( + "{text} following a ", + "{self$distribution$distribution_name} distribution" + ) } text - }, + cli_description = function() { + text <- node_type(self) + text <- node_type_colour(text) - get_unique_name = function() { - self$unique_name <- paste0("node_", rhex()) + dist_txt <- glue::glue("{self$distribution$distribution_name} distribution") + if (has_distribution(self)) { + text <- cli::cli_fmt( + cli::cli_text( + # "{text} following a {.strong {dist_txt}}" + "{text} following a {cli::col_yellow({dist_txt})}" + ) + ) + } + + text }, + create_unique_name = function() { + self$unique_name <- glue::glue("node_{rhex()}") + }, plotting_label = function() { label <- "" type <- node_type(self) # replace distributions with more info - if (type == "distribution") + if (type == "distribution") { label <- self$distribution_name + } # if it's data and scalar, just put the value if (type == "data" & is_scalar(self)) { - val <- as.numeric(self$value()) val <- round(val, 2) label <- prettyNum(val) - } label - + }, + make_antirepresentations = function(representations){ + mapply( + FUN = self$make_one_anti_representation, + representations, + names(representations) + ) + }, + make_one_anti_representation = function(ga, name){ + node <- get_node(ga) + anti_name <- self$find_anti_name(name) + node$anti_representations[[anti_name]] <- as.greta_array(self) + node + }, + find_anti_name = function(name){ + switch(name, + cholesky = "chol2symm", + chol2symm = "chol", + exp = "log", + log = "exp", + probit = "iprobit", + iprobit = "probit", + logit = "ilogit", + ilogit = "logit" + ) } + ) +) - - )) - -# generic to grab dimensions -dim.node <- function(x) +#' @title generic to grab dimensions of nodes +#' @param x greta node class +#' @export +dim.node <- function(x) { x$dim +} # coerce an object to a node to_node <- function(x) { - if (!inherits(x, "node")) { - if (inherits(x, "greta_array")) + # TODO: clean up this logic + if (!is.node(x)) { + if (is.greta_array(x)) { x <- get_node(x) - else if (is.numeric(x)) + } else if (is.numeric(x)) { x <- data_node$new(x) - else - stop("cannot coerce object to a node") + } else { + cli::cli_abort( + "cannot coerce object to a node" + ) + } } x } diff --git a/R/node_types.R b/R/node_types.R index 519ce3b2..1f6faa8a 100644 --- a/R/node_types.R +++ b/R/node_types.R @@ -2,38 +2,30 @@ data_node <- R6Class( "data_node", inherit = node, public = list( - initialize = function(data) { - # coerce to an array with 2+ dimensions data <- as_2d_array(data) # update and store array and store dimension super$initialize(dim = dim(data), value = data) - }, - tf = function(dag) { - tfe <- dag$tf_environment tf_name <- dag$tf_name(self) - unbatched_name <- paste0(tf_name, "_unbatched") + unbatched_name <- glue::glue("{tf_name}_unbatched") mode <- dag$how_to_define(self) # if we're in sampling mode, get the distribution constructor and sample if (mode == "sampling") { - batched_tensor <- dag$draw_sample(self$distribution) - } # if we're defining the forward mode graph, create either a constant or a # placeholder if (mode == "forward") { - value <- self$value() - ndim <- length(dim(value)) + ndim <- n_dim(value) shape <- to_shape(c(1, dim(value))) value <- add_first_dim(value) @@ -42,30 +34,41 @@ data_node <- R6Class( using_constants <- !is.null(greta_stash$data_as_constants) if (using_constants) { - - unbatched_tensor <- tf$constant(value = value, - dtype = tf_float(), - shape = shape) - + unbatched_tensor <- tf$constant( + value = value, + dtype = tf_float(), + shape = shape + ) } else { - - unbatched_tensor <- tf$compat$v1$placeholder(shape = shape, - dtype = tf_float()) + # TF1/2 check + # We can pass tensors directly into ops and layers + # tf.function arguments do the job of placeholders + # or we can use tf$keras$Input ? + # unbatched_tensor <- tf$keras$Input( + # for data - find yourself so it can be substituted in + # we need to fetch the data from the DAG + # what is the TF2 method for casting data into a tensor + # we can probably just use `as_tensor` + unbatched_tensor <- tensorflow::as_tensor( + x = value, + shape = shape, + dtype = tf_float() + ) + # TF1/2 check + # note - we might not need this anymore as it was to do with + # stashing things for use in the feed_dict later dag$set_tf_data_list(unbatched_name, value) - } - # expand up to batch size - batched_tensor <- tile_to_batch(unbatched_tensor, tfe$batch_size) + # expand up to batch size - so we can run multiple chains + tiling <- c(tfe$batch_size, rep(1L, ndim)) + batched_tensor <- tf$tile(unbatched_tensor, tiling) # put unbatched tensor in environment so it can be set assign(unbatched_name, unbatched_tensor, envir = tfe) - } assign(tf_name, batched_tensor, envir = tfe) - - } ) ) @@ -75,19 +78,11 @@ operation_node <- R6Class( "operation_node", inherit = node, public = list( - operation_name = NA, operation = NA, operation_args = NA, arguments = list(), tf_function_env = NA, - - # named greta arrays giving different representations of the greta array - # represented by this node that have already been calculated, to be used for - # computational speedups or numerical stability. E.g. a logarithm or a - # cholesky factor - representations = list(), - initialize = function(operation, ..., dim = NULL, @@ -107,7 +102,7 @@ operation_node <- R6Class( # the provided list of nodes arguments if (is.null(dim)) { dim_list <- lapply(dots, dim) - dim_lengths <- vapply(dim_list, length, numeric(1)) + dim_lengths <- lengths(dim_list) dim_list <- lapply(dim_list, pad_vector, to_length = max(dim_lengths)) dim <- do.call(pmax, dim_list) } @@ -125,61 +120,59 @@ operation_node <- R6Class( self$operation <- tf_operation self$operation_args <- operation_args self$representations <- representations + self$make_antirepresentations(representations) self$tf_function_env <- tf_function_env # assign empty value of the right dimension, or the values passed via the # operation - if (is.null(value)) - value <- unknowns(dim = dim) - else if (!all.equal(dim(value), dim)) - stop("values have the wrong dimension so cannot be used") + check_values_dim(value, dim) - super$initialize(dim, value) + value <- value %||% unknowns(dim = dim) + super$initialize(dim, value) }, - add_argument = function(argument) { # guess at a name, coerce to a node, and add as a parent parameter <- to_node(argument) self$add_parent(parameter) - }, - tf = function(dag) { - + # where to put it tfe <- dag$tf_environment + # what to call the tensor object tf_name <- dag$tf_name(self) - mode <- dag$how_to_define(self) + # cholesky + # maybe put this warning inside the calculate part + # !! check whether the change to define tf will break + mode <- dag$how_to_define(self) # if sampling get the distribution constructor and sample this if (mode == "sampling") { - tensor <- dag$draw_sample(self$distribution) - } if (mode == "forward") { - # fetch the tensors for the environment + # fetch the tensors from the environment arg_tf_names <- lapply(self$list_parents(dag), dag$tf_name) tf_args <- lapply(arg_tf_names, get, envir = tfe) # fetch additional (non-tensor) arguments, if any - if (length(self$operation_args) > 0) + multiple_operation_args <- length(self$operation_args) > 0 + if (multiple_operation_args) { tf_args <- c(tf_args, self$operation_args) + } # get the tensorflow function and apply it to the args operation <- eval(parse(text = self$operation), - envir = self$tf_function_env) - + envir = self$tf_function_env + ) tensor <- do.call(operation, tf_args) - } # assign it in the environment assign(tf_name, tensor, envir = dag$tf_environment) - } ) ) @@ -188,24 +181,16 @@ variable_node <- R6Class( "variable_node", inherit = node, public = list( - constraint = NULL, constraint_array = NULL, lower = -Inf, upper = Inf, free_value = NULL, - initialize = function(lower = -Inf, upper = Inf, dim = NULL, free_dim = prod(dim)) { - - if (!is.numeric(lower) | ! is.numeric(upper)) { - - stop("lower and upper must be numeric", - call. = FALSE) - - } + check_if_lower_upper_numeric(lower, upper) # replace values of lower and upper with finite values for dimension # checking (this is pain, but necessary because check_dims coerces to @@ -230,34 +215,23 @@ variable_node <- R6Class( constraint_array[lower_limit & upper_limit] <- "both" # pass a string depending on whether they are all the same - if (all(constraint_array == constraint_array[1])) { - self$constraint <- paste0("scalar_all_", constraint_array[1]) + constraint_arrays_are_same <- all(constraint_array == constraint_array[1]) + if (constraint_arrays_are_same) { + self$constraint <- glue::glue("scalar_all_{constraint_array[1]}") } else { self$constraint <- "scalar_mixed" } - bad_limits <- switch( - self$constraint, + bad_limits <- switch(self$constraint, scalar_all_low = any(!is.finite(upper)), scalar_all_high = any(!is.finite(lower)), scalar_all_both = any(!is.finite(lower)) | any(!is.finite(upper)), FALSE ) - if (bad_limits) { + check_if_lower_upper_has_bad_limits(bad_limits) - stop("lower and upper must either be -Inf (lower only), ", - "Inf (upper only) or finite", - call. = FALSE) - - } - - if (any(lower >= upper)) { - - stop("upper bounds must be greater than lower bounds", - call. = FALSE) - - } + check_if_upper_gt_lower(lower, upper) # add parameters super$initialize(dim) @@ -265,154 +239,144 @@ variable_node <- R6Class( self$upper <- array(upper, dim) self$constraint_array <- constraint_array self$free_value <- unknowns(dim = free_dim) - }, # handle two types of value for variables value = function(new_value = NULL, free = FALSE, ...) { - if (free) { - if (is.null(new_value)) { self$free_value } else { self$free_value <- new_value } - } else { - super$value(new_value, ...) - } - }, - tf = function(dag) { - # get the names of the variable and (already-defined) free state version tf_name <- dag$tf_name(self) mode <- dag$how_to_define(self) if (mode == "sampling") { - distrib_node <- self$distribution if (is.null(distrib_node)) { + # does it have an anti-representation where it is the cholesky? + # the antirepresentation of cholesky is chol2symm + # if yes, we take antirep and get it to `tf`, then get the tf_name + chol2symm_ga <- self$anti_representations$chol2symm + chol2symm_existing <- !is.null(chol2symm_ga) - # if the variable has no distribution create a placeholder instead - # (the value must be passed in via values when using simulate) - shape <- to_shape(c(1, self$dim)) - tensor <- tf$compat$v1$placeholder(shape = shape, dtype = tf_float()) + if (chol2symm_existing) { - } else { + chol2symm_node <- get_node(chol2symm_ga) + chol2symm_name <- dag$tf_name(chol2symm_node) + chol2symm_tensor <- get(chol2symm_name, envir = dag$tf_environment) + tensor <- tf_chol(chol2symm_tensor) - tensor <- dag$draw_sample(self$distribution) + } + } else { + tensor <- dag$draw_sample(self$distribution) } - } # if we're defining the forward mode graph, get the free state, transform, # and compute any transformation density if (mode == "forward") { - - free_name <- sprintf("%s_free", tf_name) - + free_name <- glue::glue("{tf_name}_free") # create the log jacobian adjustment for the free state tf_adj <- self$tf_adjustment(dag) - adj_name <- sprintf("%s_adj", tf_name) + adj_name <- glue::glue("{tf_name}_adj") assign(adj_name, - tf_adj, - envir = dag$tf_environment) + tf_adj, + envir = dag$tf_environment + ) # map from the free to constrained state in a new tensor tf_free <- get(free_name, envir = dag$tf_environment) tensor <- self$tf_from_free(tf_free) - } # assign to environment variable assign(tf_name, - tensor, - envir = dag$tf_environment) - + tensor, + envir = dag$tf_environment + ) }, - create_tf_bijector = function() { - dim <- self$dim lower <- flatten_rowwise(self$lower) upper <- flatten_rowwise(self$upper) constraints <- flatten_rowwise(self$constraint_array) - switch( - self$constraint, + switch(self$constraint, scalar_all_none = tf_scalar_bijector(dim), scalar_all_low = tf_scalar_neg_bijector(dim, upper = upper), scalar_all_high = tf_scalar_pos_bijector(dim, lower = lower), scalar_all_both = tf_scalar_neg_pos_bijector(dim, - lower = lower, - upper = upper), + lower = lower, + upper = upper + ), scalar_mixed = tf_scalar_mixed_bijector(dim, - lower = lower, - upper = upper, - constraints = constraints), + lower = lower, + upper = upper, + constraints = constraints + ), correlation_matrix = tf_correlation_cholesky_bijector(), covariance_matrix = tf_covariance_cholesky_bijector(), simplex = tf_simplex_bijector(dim), ordered = tf_ordered_bijector(dim) ) - }, - tf_from_free = function(x) { - tf_bijector <- self$create_tf_bijector() tf_bijector$forward(x) - }, # adjustments for univariate variables tf_log_jacobian_adjustment = function(free) { - tf_bijector <- self$create_tf_bijector() - event_ndims <- tf_bijector$forward_min_event_ndims + event_ndims <- as.integer(tf_bijector$forward_min_event_ndims) ljd <- tf_bijector$forward_log_det_jacobian( x = free, - event_ndims = event_ndims + event_ndims = as.integer(event_ndims) ) # sum across all dimensions of jacobian already_summed <- - identical(dim(ljd), list(NULL)) | identical(dim(ljd), list()) + identical(dim(ljd), NA_integer_) | identical(dim(ljd), integer(0)) if (!already_summed) { ljd <- tf_sum(ljd, drop = TRUE) } # make sure there's something in the batch dimension - if (identical(dim(ljd), list())) { + no_batch_dimension <- identical(dim(ljd), integer(0)) + if (no_batch_dimension) { ljd <- tf$expand_dims(ljd, 0L) + tiling <- tf$stack( + list(tf$shape(free)[0]), + axis = 0L) + ljd <- tf$tile(ljd, tiling) } ljd - }, # create a tensor giving the log jacobian adjustment for this variable tf_adjustment = function(dag) { # find free version of node - free_tensor_name <- paste0(dag$tf_name(self), "_free") + free_tensor_name <- glue::glue("{dag$tf_name(self)}_free") free_tensor <- get(free_tensor_name, envir = dag$tf_environment) # apply jacobian adjustment to it self$tf_log_jacobian_adjustment(free_tensor) - } - ) ) @@ -430,14 +394,12 @@ distribution_node <- R6Class( truncation = NULL, parameters = list(), parameter_shape_matches_output = logical(), - initialize = function(name = "no distribution", dim = NULL, truncation = NULL, discrete = FALSE, multivariate = FALSE, truncatable = TRUE) { - super$initialize(dim) # for all distributions, set name, store dims, and set whether discrete @@ -455,45 +417,34 @@ distribution_node <- R6Class( can_be_truncated <- !self$multivariate & !self$discrete & self$truncatable if (!is.null(truncation) & - !identical(truncation, self$bounds) & - can_be_truncated) { - + !identical(truncation, self$bounds) & + can_be_truncated) { self$truncation <- truncation - } # set the target as the user node (user-facing representation) by default self$user_node <- self$target - }, # create a target variable node (unconstrained by default) create_target = function(truncation) { vble(truncation, dim = self$dim) }, - list_parents = function(dag) { - parents <- self$parents # if this node is being used for sampling and has a target, do not # consider that a parent node mode <- dag$how_to_define(self) if (mode == "sampling" & !is.null(self$target)) { - parent_names <- vapply(parents, - member, - "unique_name", - FUN.VALUE = character(1)) + parent_names <- extract_unique_names(parents) keep <- parent_names != self$target$unique_name parents <- parents[keep] } parents - }, - list_children = function(dag) { - children <- self$children # if this node is being used for sampling and has a target, consider that @@ -504,12 +455,10 @@ distribution_node <- R6Class( } children - }, # create target node, add as a parent, and give it this distribution add_target = function(new_target) { - # add as target and as a parent self$target <- new_target self$add_parent(new_target) @@ -522,7 +471,6 @@ distribution_node <- R6Class( # optionally reset any distribution flags relating to the previous target self$reset_target_flags() - }, # optional function to reset the flags for target representations whenever a @@ -537,9 +485,7 @@ distribution_node <- R6Class( # remove x from parents self$remove_parent(self$target) self$target <- NULL - }, - tf = function(dag) { # build a tfp distribution object @@ -548,9 +494,9 @@ distribution_node <- R6Class( # assign it to the environment assign(dag$tf_name(self), - tfp_distribution, - envir = dag$tf_environment) - + self$tf_distrib, + envir = dag$tf_environment + ) }, # which node to use as the *tf* target (overwritten by some distributions) @@ -579,7 +525,6 @@ distribution_node <- R6Class( parameter <- to_node(parameter) self$add_parent(parameter) self$parameters[[name]] <- parameter - }, # try to expand a greta array for a parameter up to the required dimension @@ -587,84 +532,75 @@ distribution_node <- R6Class( # can this realisation of the parameter be expanded? expandable_shape <- ifelse(self$multivariate, - is_row(parameter), - is_scalar(parameter)) + is_row(parameter), + is_scalar(parameter) + ) # should we expand it now? expanded_target <- ifelse(self$multivariate, - !identical(dim[1], 1L), - !identical(dim, c(1L, 1L))) + !identical(dim[1], 1L), + !identical(dim, c(1L, 1L)) + ) # expand now if needed (and remove flag) if (expandable_shape & expanded_target) { - if (self$multivariate) { - n_realisations <- self$dim[1] reps <- replicate(n_realisations, parameter, simplify = FALSE) parameter <- do.call(rbind, reps) - } else { - parameter <- greta_array(parameter, dim = self$dim) - } - } parameter - }, # try to expand all expandable (scalar for univariate, or row for # multivariate) parameters to the required dimension expand_parameters_to = function(dim) { - parameter_names <- names(self$parameters) for (name in parameter_names) { - if (self$parameter_shape_matches_output[[name]]) { - parameter <- as.greta_array(self$parameters[[name]]) expanded <- self$expand_parameter(parameter, dim) self$add_parameter(expanded, - name, - self$parameter_shape_matches_output[[name]], - expand_now = FALSE) - + name, + self$parameter_shape_matches_output[[name]], + expand_now = FALSE + ) } - } - } - ) ) # modules for export via .internals -node_classes_module <- module(node, - distribution_node, - data_node, - variable_node, - operation_node) +node_classes_module <- module( + node, + distribution_node, + data_node, + variable_node, + operation_node +) # shorthand for distribution parameter constructors distrib <- function(distribution, ...) { - check_tf_version("error") # get and initialize the distribution, with a default value node - constructor <- get(paste0(distribution, "_distribution"), - envir = parent.frame()) + constructor <- get( + x = glue::glue("{distribution}_distribution"), + envir = parent.frame() + ) distrib <- constructor$new(...) # return the user-facing representation of the node as a greta array value <- distrib$user_node as.greta_array(value) - } # shorthand to speed up op definitions @@ -676,19 +612,22 @@ op <- function(...) { # by default, make x (the node # containing the value) a free parameter of the correct dimension vble <- function(truncation, dim = 1, free_dim = prod(dim)) { - - if (is.null(truncation)) + if (is.null(truncation)) { truncation <- c(-Inf, Inf) + } truncation <- as.list(truncation) - variable_node$new(lower = truncation[[1]], - upper = truncation[[2]], - dim = dim, - free_dim = free_dim) - + variable_node$new( + lower = truncation[[1]], + upper = truncation[[2]], + dim = dim, + free_dim = free_dim + ) } -node_constructors_module <- module(distrib, - op, - vble) +node_constructors_module <- module( + distrib, + op, + vble +) diff --git a/R/operators.R b/R/operators.R index f02b903e..a0dca594 100644 --- a/R/operators.R +++ b/R/operators.R @@ -4,7 +4,7 @@ #' #' @description This is a list of currently implemented arithmetic, logical and #' relational operators to combine greta arrays into probabilistic models. -#' Also see \link{functions} and \link{transforms}. +#' Also see [functions] and [transforms]. #' #' @section Usage: \preformatted{ #' # arithmetic operators @@ -65,8 +65,9 @@ NULL `+.greta_array` <- function(e1, e2) { check_dims(e1, e2) op("add", e1, e2, - tf_operation = "tf$add", - expand_scalars = TRUE) + tf_operation = "tf$add", + expand_scalars = TRUE + ) } #' @export @@ -74,12 +75,14 @@ NULL # handle unary minus if (missing(e2)) { op("minus", e1, - tf_operation = "tf$negative") + tf_operation = "tf$negative" + ) } else { check_dims(e1, e2) op("subtract", e1, e2, - tf_operation = "tf$subtract", - expand_scalars = TRUE) + tf_operation = "tf$subtract", + expand_scalars = TRUE + ) } } @@ -87,153 +90,160 @@ NULL `*.greta_array` <- function(e1, e2) { check_dims(e1, e2) op("multiply", e1, e2, - tf_operation = "tf$multiply", - expand_scalars = TRUE) + tf_operation = "tf$multiply", + expand_scalars = TRUE + ) } #' @export `/.greta_array` <- function(e1, e2) { check_dims(e1, e2) op("divide", e1, e2, - tf_operation = "tf$truediv", - expand_scalars = TRUE) + tf_operation = "tf$truediv", + expand_scalars = TRUE + ) } #' @export `^.greta_array` <- function(e1, e2) { check_dims(e1, e2) op("power", e1, e2, - tf_operation = "tf$pow", - expand_scalars = TRUE) + tf_operation = "tf$pow", + expand_scalars = TRUE + ) } #' @export `%%.greta_array` <- function(e1, e2) { check_dims(e1, e2) op("`modulo`", e1, e2, - tf_operation = "tf$math$mod", - expand_scalars = TRUE) + tf_operation = "tf$math$mod", + expand_scalars = TRUE + ) } #' @export -`%/%.greta_array` <- function(e1, e2) { # nolint +`%/%.greta_array` <- function(e1, e2) { # nolint check_dims(e1, e2) op("`integer divide`", e1, e2, - tf_operation = "tf$math$floordiv", - expand_scalars = TRUE) + tf_operation = "tf$math$floordiv", + expand_scalars = TRUE + ) } # overload %*% as an S3 generic # would rather get S4 version working properly, but uuurgh S4. #' @export -`%*%.default` <- function(x, y) # nolint +`%*%.default` <- function(x, y) { # nolint .Primitive("%*%")(x, y) +} #' @rdname overloaded #' @export -`%*%` <- function(x, y) { # nolint +`%*%` <- function(x, y) { # nolint # if y is a greta array, coerce x before dispatch - if (inherits(y, "greta_array") & !inherits(x, "greta_array")) + if (is.greta_array(y) & !is.greta_array(x)) { as_data(x) %*% y - else + # if y is not a greta array and x is, coerce y before dispatch + } else if (!is.greta_array(y) & is.greta_array(x)){ + x %*% as_data(y) + } else { UseMethod("%*%", x) - + } } #' @export -`%*%.greta_array` <- function(x, y) { # nolint +`%*%.greta_array` <- function(x, y) { # nolint - # check they're matrices - if (length(dim(x)) != 2 | length(dim(y)) != 2) { - stop("only two-dimensional greta arrays can be matrix-multiplied", - call. = FALSE) - } - - # check the dimensions match - if (dim(x)[2] != dim(y)[1]) { - msg <- sprintf("incompatible dimensions: %s vs %s", - paste0(dim(x), collapse = "x"), - paste0(dim(y), collapse = "x")) - stop(msg) - } + check_both_2d(x,y) + check_compatible_dimensions(x, y) op("matrix multiply", x, y, - dim = c(nrow(x), ncol(y)), - tf_operation = "tf$matmul") - + dim = c(nrow(x), ncol(y)), + tf_operation = "tf$matmul" + ) } # logical operators #' @export `!.greta_array` <- function(e1) { op("not", e1, - tf_operation = "tf_not") + tf_operation = "tf_not" + ) } #' @export -`&.greta_array` <- function(e1, e2) { # nolint +`&.greta_array` <- function(e1, e2) { # nolint check_dims(e1, e2) op("and", e1, e2, - tf_operation = "tf_and", - expand_scalars = TRUE) + tf_operation = "tf_and", + expand_scalars = TRUE + ) } #' @export -`|.greta_array` <- function(e1, e2) { # nolint +`|.greta_array` <- function(e1, e2) { # nolint check_dims(e1, e2) op("or", e1, e2, - tf_operation = "tf_or", - expand_scalars = TRUE) + tf_operation = "tf_or", + expand_scalars = TRUE + ) } # relational operators #' @export -`<.greta_array` <- function(e1, e2) { # nolint +`<.greta_array` <- function(e1, e2) { # nolint check_dims(e1, e2) op("less", e1, e2, - tf_operation = "tf_lt", - expand_scalars = TRUE) + tf_operation = "tf_lt", + expand_scalars = TRUE + ) } #' @export -`>.greta_array` <- function(e1, e2) { # nolint +`>.greta_array` <- function(e1, e2) { # nolint check_dims(e1, e2) op("greater", e1, e2, - tf_operation = "tf_gt", - expand_scalars = TRUE) + tf_operation = "tf_gt", + expand_scalars = TRUE + ) } #' @export -`<=.greta_array` <- function(e1, e2) { # nolint +`<=.greta_array` <- function(e1, e2) { # nolint check_dims(e1, e2) op("less/equal", e1, e2, - tf_operation = "tf_lte", - expand_scalars = TRUE) + tf_operation = "tf_lte", + expand_scalars = TRUE + ) } #' @export -`>=.greta_array` <- function(e1, e2) { # nolint +`>=.greta_array` <- function(e1, e2) { # nolint check_dims(e1, e2) op("greater/equal", e1, e2, - tf_operation = "tf_gte", - expand_scalars = TRUE) + tf_operation = "tf_gte", + expand_scalars = TRUE + ) } #' @export -`==.greta_array` <- function(e1, e2) { # nolint +`==.greta_array` <- function(e1, e2) { # nolint check_dims(e1, e2) op("equal", e1, e2, - tf_operation = "tf_eq", - expand_scalars = TRUE) + tf_operation = "tf_eq", + expand_scalars = TRUE + ) } #' @export -`!=.greta_array` <- function(e1, e2) { # nolint +`!=.greta_array` <- function(e1, e2) { # nolint check_dims(e1, e2) op("not equal", e1, e2, - tf_operation = "tf_neq", - expand_scalars = TRUE) + tf_operation = "tf_neq", + expand_scalars = TRUE + ) } diff --git a/R/optimiser_class.R b/R/optimiser_class.R new file mode 100644 index 00000000..38aa1c42 --- /dev/null +++ b/R/optimiser_class.R @@ -0,0 +1,360 @@ +optimiser <- R6Class( + "optimiser", + inherit = inference, + public = list( + # optimiser information + name = "", + method = "method", + parameters = list(), + other_args = list(), + max_iterations = 100L, + tolerance = 1e-6, + uses_callbacks = TRUE, + adjust = TRUE, + run_minimiser = NULL, + + # modified during optimisation + it = 0, + old_obj = Inf, + diff = Inf, + + # set up the model + initialize = function( + initial_values, + model, + name, + method, + parameters, + other_args, + max_iterations, + tolerance, + adjust + ) { + super$initialize( + initial_values, + model, + parameters = list(), + seed = get_seed() + ) + + self$name <- name + self$method <- method + self$parameters <- parameters + self$other_args <- other_args + self$max_iterations <- as.integer(max_iterations) + self$tolerance <- tolerance + self$adjust <- adjust + + if ("uses_callbacks" %in% names(other_args)) { + self$uses_callbacks <- other_args$uses_callbacks + } + run_optimiser(self) + }, + parameter_names = function() { + names(self$parameters) + }, + + set_dtype = function(parameter_name, dtype) { + params <- self$parameters + param_names <- self$parameter_names() + + if (parameter_name %in% param_names) { + param <- params[[parameter_name]] + tf_param <- tf$constant(param, dtype = dtype) + params[[parameter_name]] <- tf_param + } + + self$parameters <- params + }, + + run = function() { + self$run_minimiser(self$free_state) + self$fetch_free_state() + }, + fetch_free_state = function() { + self$free_state <- self$model$dag$tf_environment$free_state + }, + return_outputs = function() { + dag <- self$model$dag + + # if the optimiser was ignoring the callbacks, we have no idea about the + # number of iterations or convergence + if (!self$uses_callbacks) { + self$it <- NA + } + + converged <- self$it < (self$max_iterations - 1) + # because we need to resolve an issue with indexing of TF object + r_free_state <- as.array(self$free_state) + par <- dag$trace_values(r_free_state, flatten = FALSE) + par <- lapply(par, drop_first_dim) + par <- lapply(par, drop_column_dim) + + if (self$adjust) { + value <- dag$tf_log_prob_function(self$free_state)$adjusted + } else { + value <- dag$tf_log_prob_function(self$free_state)$unadjusted + } + + value <- as.array(value) * -1 + + list( + par = par, + value = value, + iterations = self$it, + convergence = ifelse(converged, 0, 1) + ) + } + ) +) + +tf_optimiser <- R6Class( + "tf_optimiser", + inherit = optimiser, + public = list( + + # create an op to minimise the objective + run_tf_minimiser = function() { + dag <- self$model$dag + tfe <- dag$tf_environment + + optimise_fun <- eval(parse(text = self$method)) + + tfe$tf_optimiser <- do.call( + optimise_fun, + self$parameters + ) + + self$run_minimiser <- function(inits) { + free_state <- tf$Variable(inits) + + objective_adjusted <- function() { + -dag$tf_log_prob_function(free_state)$adjusted + } + + objective_unadjusted <- function() { + -dag$tf_log_prob_function(free_state)$unadjusted + } + + # TF1/2 todo + # get this to work inside TF with TF while loop + while (self$it < self$max_iterations & + all(self$diff > self$tolerance)) { + # add 1 because python indexing + self$it <- as.numeric(tfe$tf_optimiser$iterations) + 1 + ## TF1/2 For Keras 3.0, this is the new syntax + # self$it <- tfe$tf_optimiser$iterations$numpy() + 1 + + if (self$adjust) { + tfe$tf_optimiser$minimize( + objective_adjusted, + var_list = list(free_state) + ) + obj_numeric <- objective_adjusted()$numpy() + } else { + tfe$tf_optimiser$minimize( + objective_unadjusted, + var_list = list(free_state) + ) + obj_numeric <- objective_unadjusted()$numpy() + } + + # The objective value can reach numerical overflow, so we error and + # suggest changing initial values or changing sampler, e.g., `adam` + self$check_numerical_overflow(obj_numeric) + + self$diff <- abs(self$old_obj - obj_numeric) + self$old_obj <- obj_numeric + } + tfe$free_state <- free_state + } + }, + + check_numerical_overflow = function(x, + arg = rlang::caller_arg(x), + call = rlang::caller_env()){ + if (!is.finite(x)){ + cli::cli_abort( + message = c( + "Detected numerical overflow during optimisation", + "Please try one of the following:", + "i" = "Using different initial values", + "i" = "Using another optimiser. (E.g., instead of \\ + {.fun {self$name}}, try {.fun adam})" + ), + call = call + ) + } + } + + + ) +) + +tfp_optimiser <- R6Class( + "tfp_optimiser", + inherit = optimiser, + public = list( + + run_tfp_minimiser = function() { + dag <- self$model$dag + tfe <- dag$tf_environment + + optimise_fun <- eval(parse(text = self$method)) + + if (self$adjust) { + objective <- function(x) { + -dag$tf_log_prob_function(x)$adjusted + } + } else { + objective <- function(x) { + -dag$tf_log_prob_function(x)$adjusted + } + } + + # bfgs uses value_and_gradient + value_and_gradient <- function(x){ + tfp$math$value_and_gradient( + function(x) objective(x), + x + ) + } + + self$run_minimiser <- function(inits) { + + self$parameters$max_iterations <- self$max_iterations + # TF1/2 todo + # will be better in the long run to have some kind of + # constructor function or similar to implement this + if (self$name == "bfgs") { + self$parameters$value_and_gradients_function <- value_and_gradient + self$parameters$initial_position <- inits + } else if (self$name == "nelder_mead") { + # nelder_mead uses different args, so we must change the ags in place + self$parameters$batch_evaluate_objective <- FALSE + self$parameters$objective_function <- function(x){ + x_expand <- tf$expand_dims(x, axis = 0L) + val <- objective(x_expand) + tf$squeeze(val) + } + self$parameters$initial_vertex <- fl(inits[1,]) + } + + tfe$tf_optimiser <- do.call( + optimise_fun, + self$parameters + ) + + self$it <- as.numeric(tfe$tf_optimiser$num_iterations) + if (self$name == "nelder_mead") { + tfe$free_state <- tf$expand_dims(tfe$tf_optimiser$position, axis = 0L) + } else if (self$name == "bfgs") { + tfe$free_state <- tfe$tf_optimiser$position + } + } + } + ) +) + +tf_compat_optimiser <- R6Class( + "tf_compat_optimiser", + inherit = optimiser, + public = list( + + # some of the optimisers are very fussy about dtypes, so convert them now + sanitise_dtypes = function() { + self$set_dtype("global_step", tf$int64) + + if (self$name == "proximal_gradient_descent") { + lapply(self$parameter_names(), self$set_dtype, tf$float64) + } + + if (self$name == "proximal_adagrad") { + fussy_params <- c( + "learning_rate", + "l1_regularization_strength", + "l2_regularization_strength" + ) + + lapply(fussy_params, self$set_dtype, tf$float64) + } + }, + + # create an op to minimise the objective + run_tf_compat_minimiser = function() { + dag <- self$model$dag + tfe <- dag$tf_environment + self$sanitise_dtypes() + + optimise_fun <- eval(parse(text = self$method)) + + tfe$tf_optimiser <- do.call( + optimise_fun, + self$parameters + ) + + self$run_minimiser <- function(inits) { + free_state <- tf$Variable(inits) + + objective_adjusted <- function() { + -dag$tf_log_prob_function(free_state)$adjusted + } + + objective_unadjusted <- function() { + -dag$tf_log_prob_function(free_state)$unadjusted + } + + # need to get this to work for tf compat + + # TF1/2 todo + # get this to work inside TF with TF while loop + while (self$it < self$max_iterations & + all(self$diff > self$tolerance)) { + # add 1 because python indexing + self$it <- self$it + 1 + + if (self$adjust) { + tfe$tf_optimiser$minimize(objective_adjusted) + obj_numeric <- objective_adjusted()$numpy() + } else { + tfe$tf_optimiser$minimize(objective_unadjusted) + obj_numeric <- objective_unadjusted()$numpy() + } + + self$diff <- abs(self$old_obj - obj_numeric) + self$old_obj <- obj_numeric + } + tfe$free_state <- free_state + } + } + ) +) + + +#' @title Dispatch optimisation method to right class +#' +#' @description +#' Should also allow for building other methods in the future +#' +#' @param self optimiser of class: `tf_optimiser`, `tfp_optimiser`, or +#' `tf_compat_optimiser`. +#' +#' @export +run_optimiser <- function(self) { + UseMethod("run_optimiser") +} + +#' @export +run_optimiser.tf_optimiser <- function(self) { + self$run_tf_minimiser() +} + +#' @export +run_optimiser.tfp_optimiser <- function(self) { + self$run_tfp_minimiser() +} + +#' @export +run_optimiser.tf_compat_optimiser <- function(self) { + self$run_tf_compat_minimiser() +} diff --git a/R/optimisers.R b/R/optimisers.R index 862ab04b..0baa015b 100644 --- a/R/optimisers.R +++ b/R/optimisers.R @@ -4,19 +4,18 @@ #' @title optimisation methods #' @description Functions to set up optimisers (which find parameters that #' maximise the joint density of a model) and change their tuning parameters, -#' for use in \code{\link{opt}()}. For details of the algorithms and how to -#' tune them, see the -#' \href{https://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.minimize.html}{SciPy -#' optimiser docs} or the -#' \href{https://www.tensorflow.org/api_docs/python/tf/contrib/opt}{TensorFlow -#' optimiser docs}. +#' for use in [opt()]. For details of the algorithms and how to +#' tune them, see the [TensorFlow optimiser docs](https://www.tensorflow.org/api_docs/python/tf/keras/optimizers), or the [Tensorflow Probability optimiser docs](https://www.tensorflow.org/probability/api_docs/python/tfp/optimizer). #' -#' @details The optimisers \code{powell()}, \code{cg()}, \code{newton_cg()}, -#' \code{l_bfgs_b()}, \code{tnc()}, \code{cobyla()}, and \code{slsqp()} are -#' deprecated. They will be removed in greta 0.4.0, since they will no longer -#' be available in TensorFlow 2.0, on which that version of greta will depend. +#' @details The optimisers `powell()`, `cg()`, `newton_cg()`, +#' `l_bfgs_b()`, `tnc()`, `cobyla()`, and `slsqp()` are +#' now defunct. They will error when called in greta 0.5.0. This are removed +#' because they are no longer available in TensorFlow 2.0. Note that +#' optimiser `momentum()` has been replaced with `gradient_descent()` #' -#' @return an \code{optimiser} object that can be passed to \code{\link{opt}}. +#' +#' +#' @return an `optimiser` object that can be passed to [opt()]. #' #' @examples #' \dontrun{ @@ -37,194 +36,303 @@ NULL # nolint end -# deprecate some optimisers -optimiser_deprecation_warning <- function() { - warning("This optimiser is deprecated and will be removed in greta 0.4.0. ", - "Please use a different optimiser.", - call. = FALSE) +# defunct some optimisers +optimiser_defunct_error <- function(optimiser) { + cli::cli_abort( + c( + "The optimiser, {.fun {optimiser}}, is defunct and has been removed \\ + in {.pkg greta} 0.5.0.", + "Please use a different optimiser.", + "See {.code ?optimisers} for detail on which optimizers are removed." + ) + ) } -# set up an optimiser object -define_scipy_optimiser <- function(name, - method, - parameters = list(), - other_args = list(uses_callbacks = TRUE)) { +# deprecate some optimisers +optimiser_deprecation_warning <- function(version = "0.4.0") { + cli::cli_warn( + c( + "This optimiser is deprecated and will be removed in {.pkg greta} \\ + {.val {version}}.", + "Please use a different optimiser." + ) + ) +} - obj <- list(name = name, - method = method, - parameters = parameters, - other_args = other_args, - class = scipy_optimiser) +new_optimiser <- function(name, + method, + parameters, + class, + other_args){ + obj <- list( + name = name, + method = method, + parameters = parameters, + class = class, + other_args = other_args + ) - class_name <- paste0(name, "_optimiser") + class_name <- glue::glue("{name}_optimiser") class(obj) <- c(class_name, "optimiser") obj - } define_tf_optimiser <- function(name, method, parameters = list(), other_args = list()) { + new_optimiser( + name = name, + method = method, + parameters = parameters, + class = tf_optimiser, + other_args = other_args + ) +} - obj <- list(name = name, - method = method, - parameters = parameters, - class = tf_optimiser, - other_args = other_args) - - class_name <- paste0(name, "_optimiser") - class(obj) <- c(class_name, "optimiser") - obj +define_tf_compat_optimiser <- function(name, + method, + parameters = list(), + other_args = list()) { + new_optimiser( + name = name, + method = method, + parameters = parameters, + class = tf_compat_optimiser, + other_args = other_args + ) +} +define_tfp_optimiser <- function(name, + method, + parameters = list(), + other_args = list()) { + new_optimiser( + name = name, + method = method, + parameters = parameters, + class = tfp_optimiser, + other_args = other_args + ) } #' @rdname optimisers +#' +#' @param objective_function A function that accepts a point as a real Tensor +#' and returns a Tensor of real dtype containing the value of the function at +#' that point. The function to be minimized. If `batch_evaluate_objective` is +#' TRUE, the function may be evaluated on a Tensor of shape `[n+1] + s` where +#' n is the dimension of the problem and s is the shape of a single point in +#' the domain (so n is the size of a Tensor representing a single point). In +#' this case, the expected return value is a Tensor of shape `[n+1]`. Note +#' that this method does not support univariate functions so the problem +#' dimension n must be strictly greater than 1. +#' @param initial_vertex Tensor of real dtype and any shape that can be +#' consumed by the `objective_function`. A single point in the domain that +#' will be used to construct an axes aligned initial simplex. +#' @param step_sizes Tensor of real dtype and shape broadcasting compatible +#' with `initial_vertex`. Supplies the simplex scale along each axes. +#' @param func_tolerance Single numeric number. The algorithm stops if the +#' absolute difference between the largest and the smallest function value +#' on the vertices of the simplex is below this number. Default is 1e-08. +#' @param position_tolerance Single numeric number. The algorithm stops if +#' the largest absolute difference between the coordinates of the vertices +#' is below this threshold. +#' @param reflection (optional) Positive Scalar Tensor of same dtype as +#' `initial_vertex`. This parameter controls the scaling of the reflected +#' vertex. See, [Press et al(2007)](https://numerical.recipes/book.html) +#' for details. If not specified, uses the dimension dependent prescription of +#' Gao and Han (2012) \doi{10.1007/s10589-010-9329-3} +#' @param expansion (optional) Positive Scalar Tensor of same dtype as +#' `initial_vertex`. Should be greater than 1 and reflection. This parameter +#' controls the expanded scaling of a reflected vertex.See, +#' [Press et al(2007)](https://numerical.recipes/book.html) for +#' details. If not specified, uses the dimension dependent prescription of +#' Gao and Han (2012) \doi{10.1007/s10589-010-9329-3} +#' @param contraction (optional) Positive scalar Tensor of same dtype as +#' `initial_vertex`. Must be between 0 and 1. This parameter controls the +#' contraction of the reflected vertex when the objective function at the +#' reflected point fails to show sufficient decrease. See, +#' [Press et al(2007)](https://numerical.recipes/book.html) for +#' details. If not specified, uses the dimension dependent prescription of +#' Gao and Han (2012) \doi{10.1007/s10589-010-9329-3} +#' @param shrinkage (Optional) Positive scalar Tensor of same dtype as +#' `initial_vertex`. Must be between 0 and 1. This parameter is the scale by +#' which the simplex is shrunk around the best point when the other steps fail +#' to produce improvements. See, +#' [Press et al(2007)](https://numerical.recipes/book.html) for +#' details. If not specified, uses the dimension dependent prescription of +#' Gao and Han (2012) \doi{10.1007/s10589-010-9329-3} +#' #' @export #' -nelder_mead <- function() { - - define_scipy_optimiser( +nelder_mead <- function( + objective_function = NULL, + initial_vertex = NULL, + step_sizes = NULL, + func_tolerance = 1e-08, + position_tolerance = 1e-08, + reflection = NULL, + expansion = NULL, + contraction = NULL, + shrinkage = NULL) { + + define_tfp_optimiser( name = "nelder_mead", - method = "Nelder-Mead" + method = "tfp$optimizer$nelder_mead_minimize", + parameters = list( + objective_function = objective_function, + initial_simplex = NULL, + initial_vertex = initial_vertex, + step_sizes = step_sizes, + objective_at_initial_simplex = NULL, + objective_at_initial_vertex = NULL, + func_tolerance = func_tolerance, + position_tolerance = position_tolerance, + parallel_iterations = 1L, + reflection = reflection, + expansion = expansion, + contraction = contraction, + shrinkage = shrinkage, + name = NULL + ) ) +} +#' @rdname optimisers +#' +#' @param value_and_gradients_function A function that accepts a point as a +#' real Tensor and returns a tuple of Tensors of real dtype containing the +#' value of the function and its gradient at that point. The function to be +#' minimized. The input should be of shape `[..., n]`, where n is the size of +#' the domain of input points, and all others are batching dimensions. The +#' first component of the return value should be a real Tensor of matching +#' shape `[...]`. The second component (the gradient) should also be of +#' shape `[..., n]` like the input value to the function. +#' @param initial_position real Tensor of shape `[..., n]`. The starting point, +#' or points when using batching dimensions, of the search procedure. At +#' these points the function value and the gradient norm should be finite. +#' @param tolerance Scalar Tensor of real dtype. Specifies the gradient +#' tolerance for the procedure. If the supremum norm of the gradient vector +#' is below this number, the algorithm is stopped. Default is 1e-08. +#' @param x_tolerance Scalar Tensor of real dtype. If the absolute change in +#' the position between one iteration and the next is smaller than this +#' number, the algorithm is stopped. Default of 0L. +#' @param f_relative_tolerance Scalar Tensor of real dtype. If the relative +#' change in the objective value between one iteration and the next is +#' smaller than this value, the algorithm is stopped. +#' @param initial_inverse_hessian_estimate Optional Tensor of the same dtype +#' as the components of the output of the value_and_gradients_function. If +#' specified, the shape should broadcastable to shape `[..., n, n]`; e.g. if a +#' single `[n, n]` matrix is provided, it will be automatically broadcasted to +#' all batches. Alternatively, one can also specify a different hessian +#' estimate for each batch member. For the correctness of the algorithm, it +#' is required that this parameter be symmetric and positive definite. +#' Specifies the starting estimate for the inverse of the Hessian at the +#' initial point. If not specified, the identity matrix is used as the +#' starting estimate for the inverse Hessian. +#' @param stopping_condition (Optional) A function that takes as input two +#' Boolean tensors of shape `[...]`, and returns a Boolean scalar tensor. The +#' input tensors are converged and failed, indicating the current status of +#' each respective batch member; the return value states whether the +#' algorithm should stop. The default is `tfp$optimizer.converged_all` which +#' only stops when all batch members have either converged or failed. An +#' alternative is `tfp$optimizer.converged_any` which stops as soon as one +#' batch member has converged, or when all have failed. +#' @param validate_args Logical, default TRUE. When TRUE, optimizer +#' parameters are checked for validity despite possibly degrading runtime +#' performance. When FALSE invalid inputs may silently render incorrect outputs. +#' @param max_line_search_iterations Python int. The maximum number of +#' iterations for the hager_zhang line search algorithm. +#' @param f_absolute_tolerance Scalar Tensor of real dtype. If the absolute +#' change in the objective value between one iteration and the next is +#' smaller than this value, the algorithm is stopped. +#' +#' @export +bfgs <- function(value_and_gradients_function = NULL, + initial_position = NULL, + tolerance = 1e-08, + x_tolerance = 0L, + f_relative_tolerance = 0L, + initial_inverse_hessian_estimate = NULL, + stopping_condition = NULL, + validate_args = TRUE, + max_line_search_iterations = 50L, + f_absolute_tolerance = 0L) { + define_tfp_optimiser( + name = "bfgs", + method = "tfp$optimizer$bfgs_minimize", + parameters = list( + value_and_gradients_function = value_and_gradients_function, + initial_position = initial_position, + tolerance = tolerance, + x_tolerance = x_tolerance, + f_relative_tolerance = f_relative_tolerance, + initial_inverse_hessian_estimate = initial_inverse_hessian_estimate, + parallel_iterations = 1L, + stopping_condition = stopping_condition, + validate_args = validate_args, + max_line_search_iterations = max_line_search_iterations, + f_absolute_tolerance = f_absolute_tolerance, + name = NULL + ) + ) } #' @rdname optimisers #' @export #' powell <- function() { - - optimiser_deprecation_warning() - - define_scipy_optimiser( - name = "powell", - method = "Powell" - ) - + optimiser_defunct_error("powell") } #' @rdname optimisers #' @export #' -cg <- function() { - - optimiser_deprecation_warning() - - define_scipy_optimiser( - name = "cg", - method = "CG" - ) - +momentum <- function() { + optimiser_defunct_error("momentum") } #' @rdname optimisers #' @export #' -bfgs <- function() { - - define_scipy_optimiser( - name = "bfgs", - method = "BFGS" - ) - +cg <- function() { + optimiser_defunct_error("cg") } #' @rdname optimisers #' @export #' newton_cg <- function() { - - optimiser_deprecation_warning() - - define_scipy_optimiser( - name = "newton_cg", - method = "Newton-CG" - ) - + optimiser_defunct_error("newton_cg") } #' @rdname optimisers #' @export #' -#' @param maxcor maximum number of 'variable metric corrections' used to define -#' the approximation to the hessian matrix -#' @param maxls maximum number of line search steps per iteration -#' -l_bfgs_b <- function(maxcor = 10, maxls = 20) { - - optimiser_deprecation_warning() - - define_scipy_optimiser( - name = "l_bfgs_b", - method = "L-BFGS-B", - parameters = list( - maxcor = as.integer(maxcor), - maxls = as.integer(maxls) - ) - ) - +l_bfgs_b <- function() { + optimiser_defunct_error("l_bfgs_b") } #' @rdname optimisers #' @export #' -#' @param max_cg_it maximum number of hessian * vector evaluations per iteration -#' @param stepmx maximum step for the line search -#' @param rescale log10 scaling factor used to trigger rescaling of objective -#' -tnc <- function(max_cg_it = -1, stepmx = 0, rescale = -1) { - - optimiser_deprecation_warning() - - define_scipy_optimiser( - name = "tnc", - method = "TNC", - parameters = list( - maxCGit = as.integer(max_cg_it), - stepmx = stepmx, - rescale = rescale - ) - ) - +tnc <- function() { + optimiser_defunct_error("tnc") } #' @rdname optimisers #' @export #' -#' @param rhobeg reasonable initial changes to the variables -#' -#' @details The \code{cobyla()} does not provide information about the number of -#' iterations nor convergence, so these elements of the output are set to NA -#' -cobyla <- function(rhobeg = 1) { - - optimiser_deprecation_warning() - - define_scipy_optimiser( - name = "cobyla", - method = "COBYLA", - parameters = list( - rhobeg = rhobeg - ), - other_args = list(uses_callbacks = FALSE) - ) - +cobyla <- function() { + optimiser_defunct_error("cobyla") } #' @rdname optimisers #' @export #' slsqp <- function() { - - optimiser_deprecation_warning() - - define_scipy_optimiser( - name = "slsqp", - method = "SLSQP" - ) - + optimiser_defunct_error("slsqp") } @@ -232,17 +340,23 @@ slsqp <- function() { #' @export #' #' @param learning_rate the size of steps (in parameter space) towards the -#' optimal value -gradient_descent <- function(learning_rate = 0.01) { - +#' optimal value. Default value 0.01 +#' @param momentum hyperparameter that accelerates gradient descent in the +#' relevant direction and dampens oscillations. Defaults to 0, which is +#' vanilla gradient descent. +#' @param nesterov Whether to apply Nesterov momentum. Defaults to FALSE. +gradient_descent <- function(learning_rate = 0.01, + momentum = 0, + nesterov = FALSE) { define_tf_optimiser( name = "gradient_descent", - method = "tf$compat$v1$train$GradientDescentOptimizer", + method = "tf$keras$optimizers$legacy$SGD", parameters = list( - learning_rate = learning_rate + learning_rate = learning_rate, + momentum = momentum, + nesterov = nesterov ) ) - } @@ -252,17 +366,16 @@ gradient_descent <- function(learning_rate = 0.01) { #' @param rho the decay rate #' @param epsilon a small constant used to condition gradient updates adadelta <- function(learning_rate = 0.001, rho = 1, epsilon = 1e-08) { - define_tf_optimiser( name = "adadelta", - method = "tf$compat$v1$train$AdadeltaOptimizer", + # method = "tf$keras$optimizers$Adadelta", + method = "tf$keras$optimizers$legacy$Adadelta", parameters = list( learning_rate = learning_rate, rho = rho, epsilon = epsilon ) ) - } #' @rdname optimisers @@ -272,17 +385,18 @@ adadelta <- function(learning_rate = 0.001, rho = 1, epsilon = 1e-08) { #' tune the algorithm #' adagrad <- function(learning_rate = 0.8, - initial_accumulator_value = 0.1) { - + initial_accumulator_value = 0.1, + epsilon = 1e-08) { define_tf_optimiser( name = "adagrad", - method = "tf$compat$v1$train$AdagradOptimizer", + # method = "tf$keras$optimizers$Adagrad", + method = "tf$keras$optimizers$legacy$Adagrad", parameters = list( learning_rate = learning_rate, - initial_accumulator_value = initial_accumulator_value + initial_accumulator_value = initial_accumulator_value, + epsilon = epsilon ) ) - } # nolint start @@ -297,13 +411,18 @@ adagrad <- function(learning_rate = 0.8, #' @param l2_regularization_strength L2 regularisation coefficient (must be 0 or #' greater) #' +#' @note This optimizer isn't supported in TF2, so proceed with caution. See +#' the [TF docs on AdagradDAOptimiser](https://www.tensorflow.org/api_docs/python/tf/compat/v1/train/AdagradDAOptimizer) for more detail. +#' adagrad_da <- function(learning_rate = 0.8, global_step = 1L, initial_gradient_squared_accumulator_value = 0.1, l1_regularization_strength = 0, l2_regularization_strength = 0) { - define_tf_optimiser( + optimiser_deprecation_warning(version = "0.6.0") + + define_tf_compat_optimiser( name = "adagrad_da", method = "tf$compat$v1$train$AdagradDAOptimizer", parameters = list( @@ -315,89 +434,103 @@ adagrad_da <- function(learning_rate = 0.8, l2_regularization_strength = l2_regularization_strength ) ) - } # nolint end #' @rdname optimisers #' @export #' -#' @param momentum the momentum of the algorithm -#' @param use_nesterov whether to use Nesterov momentum +#' @param beta_1 exponential decay rate for the 1st moment estimates +#' @param beta_2 exponential decay rate for the 2nd moment estimates +#' @param amsgrad Boolean. Whether to apply AMSGrad variant of this algorithm +#' from the paper "On the Convergence of Adam and beyond". Defaults to FALSE. #' -momentum <- function(learning_rate = 0.001, - momentum = 0.9, - use_nesterov = TRUE) { - +adam <- function(learning_rate = 0.1, + beta_1 = 0.9, + beta_2 = 0.999, + amsgrad = FALSE, + epsilon = 1e-08) { define_tf_optimiser( - name = "momentum", - method = "tf$compat$v1$train$MomentumOptimizer", + name = "adam", + # method = "tf$keras$optimizers$Adam", + method = "tf$keras$optimizers$legacy$Adam", parameters = list( learning_rate = learning_rate, - momentum = momentum, - use_nesterov = use_nesterov + beta_1 = beta_1, + beta_2 = beta_2, + epsilon = epsilon, + amsgrad = amsgrad ) ) - } #' @rdname optimisers #' @export #' -#' @param beta1 exponential decay rate for the 1st moment estimates -#' @param beta2 exponential decay rate for the 2nd moment estimates -#' -adam <- function(learning_rate = 0.1, - beta1 = 0.9, - beta2 = 0.999, - epsilon = 1e-08) { - +adamax <- function(learning_rate = 0.001, + beta_1 = 0.9, + beta_2 = 0.999, + epsilon = 1e-07){ define_tf_optimiser( - name = "adam", - method = "tf$compat$v1$train$AdamOptimizer", + name = "adamax", + # method = "tf$keras$optimizers$Adamax", + method = "tf$keras$optimizers$legacy$Adamax", parameters = list( learning_rate = learning_rate, - beta1 = beta1, - beta2 = beta2, + beta_1 = beta_1, + beta_2 = beta_2, epsilon = epsilon ) ) - } #' @rdname optimisers #' @export #' #' @param learning_rate_power power on the learning rate, must be 0 or less +#' @param l2_shrinkage_regularization_strength A float value, must be greater +#' than or equal to zero. This differs from L2 above in that the L2 above is +#' a stabilization penalty, whereas this L2 shrinkage is a magnitude penalty. +#' When input is sparse shrinkage will only happen on the active weights. +#' @param beta A float value, representing the beta value from the paper by +#' [McMahan et al 2013](https://static.googleusercontent.com/media/research.google.com/en//pubs/archive/41159.pdf). Defaults to 0 #' ftrl <- function(learning_rate = 1, learning_rate_power = -0.5, initial_accumulator_value = 0.1, l1_regularization_strength = 0, - l2_regularization_strength = 0) { - + l2_regularization_strength = 0, + l2_shrinkage_regularization_strength = 0, + beta = 0) { define_tf_optimiser( name = "ftrl", - method = "tf$compat$v1$train$FtrlOptimizer", + # method = "tf$keras$optimizers$Ftrl", + method = "tf$keras$optimizers$legacy$Ftrl", parameters = list( learning_rate = learning_rate, learning_rate_power = learning_rate_power, initial_accumulator_value = initial_accumulator_value, l1_regularization_strength = l1_regularization_strength, - l2_regularization_strength = l2_regularization_strength + l2_regularization_strength = l2_regularization_strength, + l2_shrinkage_regularization_strength = l2_shrinkage_regularization_strength, + beta = beta ) ) - } #' @rdname optimisers #' @export #' +#' @note This optimizer isn't supported in TF2, so proceed with caution. See +#' the [TF docs on ProximalGradientDescentOptimizer](https://www.tensorflow.org/api_docs/python/tf/compat/v1/train/ProximalGradientDescentOptimizer) for more detail. +#' proximal_gradient_descent <- function(learning_rate = 0.01, l1_regularization_strength = 0, l2_regularization_strength = 0) { - define_tf_optimiser( + optimiser_deprecation_warning(version = "0.6.0") + + define_tf_compat_optimiser( name = "proximal_gradient_descent", method = "tf$compat$v1$train$ProximalGradientDescentOptimizer", parameters = list( @@ -406,18 +539,23 @@ proximal_gradient_descent <- function(learning_rate = 0.01, l2_regularization_strength = l2_regularization_strength ) ) - } #' @rdname optimisers #' @export +#' +#' @note This optimizer isn't supported in TF2, so proceed with caution. See +#' the [TF docs on ProximalAdagradOptimizer](https://www.tensorflow.org/api_docs/python/tf/compat/v1/train/ProximalAdagradOptimizer) for more detail. + #' proximal_adagrad <- function(learning_rate = 1, initial_accumulator_value = 0.1, l1_regularization_strength = 0, l2_regularization_strength = 0) { - define_tf_optimiser( + optimiser_deprecation_warning(version = "0.6.0") + + define_tf_compat_optimiser( name = "proximal_adagrad", method = "tf$compat$v1$train$ProximalAdagradOptimizer", parameters = list( @@ -427,30 +565,54 @@ proximal_adagrad <- function(learning_rate = 1, l2_regularization_strength = l2_regularization_strength ) ) - } #' @rdname optimisers #' @export #' -#' @param decay discounting factor for the gradient +nadam <- function(learning_rate = 0.001, + beta_1 = 0.9, + beta_2 = 0.999, + epsilon = 1e-07){ + + define_tf_optimiser( + name = "nadam", + # method = "tf$keras$optimizers$Nadam", + method = "tf$keras$optimizers$legacy$Nadam", + parameters = list( + learning_rate = learning_rate, + beta_1 = beta_1, + beta_2 = beta_2, + epsilon = epsilon + ) + ) + +} + +#' @rdname optimisers +#' @export #' +#' @param centered Boolean. If TRUE, gradients are normalized by the estimated +#' variance of the gradient; if FALSE, by the uncentered second moment. +#' Setting this to TRUE may help with training, but is slightly more +#' expensive in terms of computation and memory. Defaults to FALSE. rms_prop <- function(learning_rate = 0.1, - decay = 0.9, + rho = 0.9, momentum = 0, - epsilon = 1e-10) { - + epsilon = 1e-10, + centered = FALSE) { define_tf_optimiser( name = "rms_prop", - method = "tf$compat$v1$train$RMSPropOptimizer", + # method = "tf$keras$optimizers$RMSprop", + method = "tf$keras$optimizers$legacy$RMSprop", parameters = list( learning_rate = learning_rate, - decay = decay, + rho = rho, momentum = momentum, - epsilon = epsilon + epsilon = epsilon, + centered = centered ) ) - } #' @noRd diff --git a/R/overloaded.R b/R/overloaded.R index cfece9d6..779b1ebe 100644 --- a/R/overloaded.R +++ b/R/overloaded.R @@ -4,7 +4,7 @@ #' @title Functions overloaded by greta #' #' @description greta provides a wide range of methods to apply common R -#' functions and operations to \code{greta_array} objects. A few of these +#' functions and operations to `greta_array` objects. A few of these #' functions and operators are not associated with a class system, so they are #' overloaded here. This should not affect normal use of these functions, but #' they need to be documented to satisfy CRAN's check. @@ -13,5 +13,13 @@ #' x,y,size,LINPACK,V,na.rm,dims,MARGIN,STATS,FUN,check.margin,\dots,r,k,upper.tri,transpose,l,X,INDEX,symmetric,only.values,EISPACK,x1,x2,compact,along,rev.along,new.names,force.array,make.names,use.anon.names,use.first.dimnames,hier.names,use.dnns,nrow,ncol #' arguments as in original documentation #' +#' @details +#' Note that, since R 3.1, the LINPACK argument is defunct and silently ignored. +#' The argument is only included for compatibility with the base functions +#' that call it. +#' +#' To find the original help file for these overloaded functions, search for +#' the function, e.g., `?cov2cor` and select the non-greta function. +#' NULL # nolint end diff --git a/R/package.R b/R/package.R index 122c27fd..e945bbb8 100644 --- a/R/package.R +++ b/R/package.R @@ -1,5 +1,3 @@ -# package file - #' greta: simple and scalable statistical modelling in R #' @name greta #' @@ -12,12 +10,11 @@ #' clusters or on GPUs. #' #' See the simple example below, and take a look at the -#' \href{https://greta-stats.org}{greta website} for more information +#' [greta website](https://greta-stats.org) for more information #' including -#' \href{https://greta-stats.org/articles/get_started.html}{tutorials} and -#' \href{https://greta-stats.org/articles/example_models.html}{examples}. +#' [tutorials](https://greta-stats.org/articles/get_started.html) and +#' [examples](https://greta-stats.org/articles/example_models.html). #' -#' @docType package #' @importFrom tensorflow tf #' @examples #' \dontrun{ @@ -36,29 +33,18 @@ #' m <- model(int, coef, sd) #' draws <- mcmc(m, n_samples = 100) #' } -NULL - -# load tf probability -tfp <- reticulate::import("tensorflow_probability", delay_load = TRUE) - -# crate the node list object whenever the package is loaded -.onLoad <- function(libname, pkgname) { # nolint - - # silence TF's CPU instructions message - Sys.setenv(TF_CPP_MIN_LOG_LEVEL = 2) - - # silence messages about deprecation etc. - disable_tensorflow_logging() - - # warn if TF version is bad - check_tf_version("startup") - - # switch back to 0-based extraction in tensorflow, and don't warn about - # indexing with tensors - options(tensorflow.one_based_extract = FALSE) - options(tensorflow.extract.warn_tensors_passed_asis = FALSE) - - # default float type - options(greta_tf_float = "float64") - -} +"_PACKAGE" + +# clear CRAN checks spotting floating global variables +#' @importFrom utils globalVariables +utils::globalVariables( + c("N", + "greta_deps_tf_tfp", + "greta_logfile", + "os", + "python_version_max", + "python_version_min", + "tf_version", + "tfp_version", + "greta") +) diff --git a/R/probability_distributions.R b/R/probability_distributions.R index 06116d90..1f1c35ba 100644 --- a/R/probability_distributions.R +++ b/R/probability_distributions.R @@ -2,38 +2,16 @@ uniform_distribution <- R6Class( "uniform_distribution", inherit = distribution_node, public = list( - min = NA, max = NA, - initialize = function(min, max, dim) { - - if (inherits(min, "greta_array") | inherits(max, "greta_array")) - stop("min and max must be fixed, they cannot be another greta array") - - good_types <- is.numeric(min) && length(min) == 1 & - is.numeric(max) && length(max) == 1 - - if (!good_types) { - - stop("min and max must be numeric vectors of length 1", - call. = FALSE) - - } - - if (!is.finite(min) | !is.finite(max)) { - - stop("min and max must finite scalars", - call. = FALSE) - - } - - if (min >= max) { - - stop("max must be greater than min", - call. = FALSE) - - } + check_param_greta_array(min) + check_param_greta_array(max) + check_numeric_length_1(min) + check_numeric_length_1(max) + check_finite(min) + check_finite(max) + check_x_gte_y(min, max) # store min and max as numeric scalars (needed in create_target, done in # initialisation) @@ -49,24 +27,21 @@ uniform_distribution <- R6Class( max <- as.greta_array(max) self$add_parameter(min, "min") self$add_parameter(max, "max") - }, # default value (ignore any truncation arguments) create_target = function(...) { - vble(truncation = c(self$min, self$max), - dim = self$dim) + vble( + truncation = c(self$min, self$max), + dim = self$dim + ) }, - tf_distrib = function(parameters, dag) { - tfp$distributions$Uniform( low = parameters$min, high = parameters$max ) - } - ) ) @@ -74,9 +49,7 @@ normal_distribution <- R6Class( "normal_distribution", inherit = distribution_node, public = list( - initialize = function(mean, sd, dim, truncation) { - mean <- as.greta_array(mean) sd <- as.greta_array(sd) @@ -86,12 +59,14 @@ normal_distribution <- R6Class( self$add_parameter(mean, "mean") self$add_parameter(sd, "sd") }, - + # TODO + # why is "dag" an argument here? tf_distrib = function(parameters, dag) { - tfp$distributions$Normal(loc = parameters$mean, - scale = parameters$sd) + tfp$distributions$Normal( + loc = parameters$mean, + scale = parameters$sd + ) } - ) ) @@ -99,9 +74,7 @@ lognormal_distribution <- R6Class( "lognormal_distribution", inherit = distribution_node, public = list( - initialize = function(meanlog, sdlog, dim, truncation) { - meanlog <- as.greta_array(meanlog) sdlog <- as.greta_array(sdlog) @@ -115,11 +88,12 @@ lognormal_distribution <- R6Class( # nolint start tf_distrib = function(parameters, dag) { - tfp$distributions$LogNormal(loc = parameters$meanlog, - scale = parameters$sdlog) + tfp$distributions$LogNormal( + loc = parameters$meanlog, + scale = parameters$sdlog + ) } # nolint end - ) ) @@ -127,12 +101,9 @@ bernoulli_distribution <- R6Class( "bernoulli_distribution", inherit = distribution_node, public = list( - prob_is_logit = FALSE, prob_is_probit = FALSE, - initialize = function(prob, dim) { - prob <- as.greta_array(prob) # add the nodes as parents and parameters @@ -149,12 +120,9 @@ bernoulli_distribution <- R6Class( self$add_parameter(prob, "prob") }, - tf_distrib = function(parameters, dag) { if (self$prob_is_logit) { - tfp$distributions$Bernoulli(logits = parameters$prob) - } else if (self$prob_is_probit) { # in the probit case, get the log probability of success and compute the @@ -169,14 +137,10 @@ bernoulli_distribution <- R6Class( } list(log_prob = log_prob) - } else { - tfp$distributions$Bernoulli(probs = parameters$prob) - } } - ) ) @@ -184,12 +148,9 @@ binomial_distribution <- R6Class( "binomial_distribution", inherit = distribution_node, public = list( - prob_is_logit = FALSE, prob_is_probit = FALSE, - initialize = function(size, prob, dim) { - size <- as.greta_array(size) prob <- as.greta_array(prob) @@ -207,13 +168,13 @@ binomial_distribution <- R6Class( self$add_parameter(prob, "prob") self$add_parameter(size, "size") - }, - tf_distrib = function(parameters, dag) { if (self$prob_is_logit) { - tfp$distributions$Binomial(total_count = parameters$size, - logits = parameters$prob) + tfp$distributions$Binomial( + total_count = parameters$size, + logits = parameters$prob + ) } else if (self$prob_is_probit) { # in the probit case, get the log probability of success and compute the @@ -232,13 +193,13 @@ binomial_distribution <- R6Class( } list(log_prob = log_prob) - } else { - tfp$distributions$Binomial(total_count = parameters$size, - probs = parameters$prob) + tfp$distributions$Binomial( + total_count = parameters$size, + probs = parameters$prob + ) } } - ) ) @@ -246,9 +207,7 @@ beta_binomial_distribution <- R6Class( "beta_binomial_distribution", inherit = distribution_node, public = list( - initialize = function(size, alpha, beta, dim) { - size <- as.greta_array(size) alpha <- as.greta_array(alpha) beta <- as.greta_array(beta) @@ -259,11 +218,8 @@ beta_binomial_distribution <- R6Class( self$add_parameter(size, "size") self$add_parameter(alpha, "alpha") self$add_parameter(beta, "beta") - }, - tf_distrib = function(parameters, dag) { - size <- parameters$size alpha <- parameters$alpha beta <- parameters$beta @@ -276,20 +232,20 @@ beta_binomial_distribution <- R6Class( # generate a beta, then a binomial sample <- function(seed) { - - beta <- tfp$distributions$Beta(concentration1 = alpha, - concentration0 = beta) + beta <- tfp$distributions$Beta( + concentration1 = alpha, + concentration0 = beta + ) probs <- beta$sample(seed = seed) - binomial <- tfp$distributions$Binomial(total_count = size, - probs = probs) + binomial <- tfp$distributions$Binomial( + total_count = size, + probs = probs + ) binomial$sample(seed = seed) - } list(log_prob = log_prob, sample = sample) - } - ) ) @@ -297,11 +253,8 @@ poisson_distribution <- R6Class( "poisson_distribution", inherit = distribution_node, public = list( - lambda_is_log = FALSE, - initialize = function(lambda, dim) { - lambda <- as.greta_array(lambda) # add the nodes as parents and parameters @@ -314,9 +267,7 @@ poisson_distribution <- R6Class( } self$add_parameter(lambda, "lambda") }, - tf_distrib = function(parameters, dag) { - if (self$lambda_is_log) { log_lambda <- parameters$lambda } else { @@ -324,9 +275,7 @@ poisson_distribution <- R6Class( } tfp$distributions$Poisson(log_rate = log_lambda) - } - ) ) @@ -334,9 +283,7 @@ negative_binomial_distribution <- R6Class( "negative_binomial_distribution", inherit = distribution_node, public = list( - initialize = function(size, prob, dim) { - size <- as.greta_array(size) prob <- as.greta_array(prob) @@ -349,11 +296,12 @@ negative_binomial_distribution <- R6Class( # nolint start tf_distrib = function(parameters, dag) { - tfp$distributions$NegativeBinomial(total_count = parameters$size, - probs = fl(1) - parameters$prob) + tfp$distributions$NegativeBinomial( + total_count = parameters$size, + probs = fl(1) - parameters$prob + ) } # nolint end - ) ) @@ -361,9 +309,7 @@ hypergeometric_distribution <- R6Class( "hypergeometric_distribution", inherit = distribution_node, public = list( - initialize = function(m, n, k, dim) { - m <- as.greta_array(m) n <- as.greta_array(n) k <- as.greta_array(k) @@ -375,9 +321,7 @@ hypergeometric_distribution <- R6Class( self$add_parameter(n, "n") self$add_parameter(k, "k") }, - tf_distrib = function(parameters, dag) { - m <- parameters$m n <- parameters$n k <- parameters$k @@ -389,9 +333,7 @@ hypergeometric_distribution <- R6Class( } list(log_prob = log_prob) - } - ) ) @@ -399,9 +341,7 @@ gamma_distribution <- R6Class( "gamma_distribution", inherit = distribution_node, public = list( - initialize = function(shape, rate, dim, truncation) { - shape <- as.greta_array(shape) rate <- as.greta_array(rate) @@ -413,12 +353,12 @@ gamma_distribution <- R6Class( self$add_parameter(shape, "shape") self$add_parameter(rate, "rate") }, - tf_distrib = function(parameters, dag) { - tfp$distributions$Gamma(concentration = parameters$shape, - rate = parameters$rate) + tfp$distributions$Gamma( + concentration = parameters$shape, + rate = parameters$rate + ) } - ) ) @@ -426,9 +366,7 @@ inverse_gamma_distribution <- R6Class( "inverse_gamma_distribution", inherit = distribution_node, public = list( - initialize = function(alpha, beta, dim, truncation) { - alpha <- as.greta_array(alpha) beta <- as.greta_array(beta) @@ -443,11 +381,12 @@ inverse_gamma_distribution <- R6Class( # nolint start tf_distrib = function(parameters, dag) { - tfp$distributions$InverseGamma(concentration = parameters$alpha, - rate = parameters$beta) + tfp$distributions$InverseGamma( + concentration = parameters$alpha, + scale = parameters$beta + ) } # nolint end - ) ) @@ -455,9 +394,7 @@ weibull_distribution <- R6Class( "weibull_distribution", inherit = distribution_node, public = list( - initialize = function(shape, scale, dim, truncation) { - shape <- as.greta_array(shape) scale <- as.greta_array(scale) @@ -469,17 +406,15 @@ weibull_distribution <- R6Class( self$add_parameter(shape, "shape") self$add_parameter(scale, "scale") }, - tf_distrib = function(parameters, dag) { - a <- parameters$shape b <- parameters$scale # use the TFP Weibull CDF bijector - bijector <- tfp$bijectors$Weibull(scale = b, concentration = a) + bijector <- tfp$bijectors$WeibullCDF(scale = b, concentration = a) log_prob <- function(x) { - log(a) - log(b) + (a - fl(1)) * (log(x) - log(b)) - (x / b) ^ a + log(a) - log(b) + (a - fl(1)) * (log(x) - log(b)) - (x / b)^a } cdf <- function(x) { @@ -499,7 +434,6 @@ weibull_distribution <- R6Class( # sample by pushing standard uniforms through the inverse cdf u <- tf_randu(self$dim, dag) quantile(u) - } list( @@ -509,9 +443,7 @@ weibull_distribution <- R6Class( quantile = quantile, sample = sample ) - } - ) ) @@ -519,9 +451,7 @@ exponential_distribution <- R6Class( "exponential_distribution", inherit = distribution_node, public = list( - initialize = function(rate, dim, truncation) { - rate <- as.greta_array(rate) # add the nodes as parents and parameters @@ -531,11 +461,9 @@ exponential_distribution <- R6Class( super$initialize("exponential", dim, truncation) self$add_parameter(rate, "rate") }, - tf_distrib = function(parameters, dag) { tfp$distributions$Exponential(rate = parameters$rate) } - ) ) @@ -543,7 +471,6 @@ pareto_distribution <- R6Class( "pareto_distribution", inherit = distribution_node, public = list( - initialize = function(a, b, dim, truncation) { a <- as.greta_array(a) b <- as.greta_array(b) @@ -556,14 +483,14 @@ pareto_distribution <- R6Class( self$add_parameter(a, "a") self$add_parameter(b, "b") }, - tf_distrib = function(parameters, dag) { # a is shape, b is scale - tfp$distributions$Pareto(concentration = parameters$a, - scale = parameters$b) + tfp$distributions$Pareto( + concentration = parameters$a, + scale = parameters$b + ) } - ) ) @@ -571,9 +498,7 @@ student_distribution <- R6Class( "student_distribution", inherit = distribution_node, public = list( - initialize = function(df, mu, sigma, dim, truncation) { - df <- as.greta_array(df) mu <- as.greta_array(mu) sigma <- as.greta_array(sigma) @@ -588,12 +513,13 @@ student_distribution <- R6Class( # nolint start tf_distrib = function(parameters, dag) { - tfp$distributions$StudentT(df = parameters$df, - loc = parameters$mu, - scale = parameters$sigma) + tfp$distributions$StudentT( + df = parameters$df, + loc = parameters$mu, + scale = parameters$sigma + ) } # nolint end - ) ) @@ -601,9 +527,7 @@ laplace_distribution <- R6Class( "laplace_distribution", inherit = distribution_node, public = list( - initialize = function(mu, sigma, dim, truncation) { - mu <- as.greta_array(mu) sigma <- as.greta_array(sigma) @@ -613,12 +537,12 @@ laplace_distribution <- R6Class( self$add_parameter(mu, "mu") self$add_parameter(sigma, "sigma") }, - tf_distrib = function(parameters, dag) { - tfp$distributions$Laplace(loc = parameters$mu, - scale = parameters$sigma) + tfp$distributions$Laplace( + loc = parameters$mu, + scale = parameters$sigma + ) } - ) ) @@ -626,9 +550,7 @@ beta_distribution <- R6Class( "beta_distribution", inherit = distribution_node, public = list( - initialize = function(shape1, shape2, dim, truncation) { - shape1 <- as.greta_array(shape1) shape2 <- as.greta_array(shape2) @@ -640,12 +562,12 @@ beta_distribution <- R6Class( self$add_parameter(shape1, "shape1") self$add_parameter(shape2, "shape2") }, - tf_distrib = function(parameters, dag) { - tfp$distributions$Beta(concentration1 = parameters$shape1, - concentration0 = parameters$shape2) + tfp$distributions$Beta( + concentration1 = parameters$shape1, + concentration0 = parameters$shape2 + ) } - ) ) @@ -653,9 +575,7 @@ cauchy_distribution <- R6Class( "cauchy_distribution", inherit = distribution_node, public = list( - initialize = function(location, scale, dim, truncation) { - location <- as.greta_array(location) scale <- as.greta_array(scale) @@ -665,13 +585,12 @@ cauchy_distribution <- R6Class( self$add_parameter(location, "location") self$add_parameter(scale, "scale") }, - tf_distrib = function(parameters, dag) { - - tfp$distributions$Cauchy(loc = parameters$location, - scale = parameters$scale) + tfp$distributions$Cauchy( + loc = parameters$location, + scale = parameters$scale + ) } - ) ) @@ -679,9 +598,7 @@ chi_squared_distribution <- R6Class( "chi_squared_distribution", inherit = distribution_node, public = list( - initialize = function(df, dim, truncation) { - df <- as.greta_array(df) # add the nodes as parents and parameters @@ -691,11 +608,9 @@ chi_squared_distribution <- R6Class( super$initialize("chi_squared", dim, truncation) self$add_parameter(df, "df") }, - tf_distrib = function(parameters, dag) { tfp$distributions$Chi2(df = parameters$df) } - ) ) @@ -703,9 +618,7 @@ logistic_distribution <- R6Class( "logistic_distribution", inherit = distribution_node, public = list( - initialize = function(location, scale, dim, truncation) { - location <- as.greta_array(location) scale <- as.greta_array(scale) @@ -715,12 +628,12 @@ logistic_distribution <- R6Class( self$add_parameter(location, "location") self$add_parameter(scale, "scale") }, - tf_distrib = function(parameters, dag) { - tfp$distributions$Logistic(loc = parameters$location, - scale = parameters$scale) + tfp$distributions$Logistic( + loc = parameters$location, + scale = parameters$scale + ) } - ) ) @@ -728,9 +641,7 @@ f_distribution <- R6Class( "f_distribution", inherit = distribution_node, public = list( - initialize = function(df1, df2, dim, truncation) { - df1 <- as.greta_array(df1) df2 <- as.greta_array(df2) @@ -742,14 +653,13 @@ f_distribution <- R6Class( self$add_parameter(df1, "df1") self$add_parameter(df2, "df2") }, - tf_distrib = function(parameters, dag) { - df1 <- parameters$df1 df2 <- parameters$df2 - tf_lbeta <- function(a, b) + tf_lbeta <- function(a, b) { tf$math$lgamma(a) + tf$math$lgamma(b) - tf$math$lgamma(a + b) + } log_prob <- function(x) { df1_x <- df1 * x @@ -765,8 +675,9 @@ f_distribution <- R6Class( tf$math$betainc(df1 / fl(2), df2 / fl(2), ratio) } - log_cdf <- function(x) + log_cdf <- function(x) { log(cdf(x)) + } sample <- function(seed) { @@ -778,7 +689,6 @@ f_distribution <- R6Class( u2 <- d2$sample(seed = seed) (u1 / df1) / (u2 / df2) - } list( @@ -787,9 +697,7 @@ f_distribution <- R6Class( log_cdf = log_cdf, sample = sample ) - } - ) ) @@ -797,43 +705,36 @@ dirichlet_distribution <- R6Class( "dirichlet_distribution", inherit = distribution_node, public = list( - initialize = function(alpha, n_realisations, dimension) { - - alpha <- as.greta_array(alpha) - # coerce to greta arrays alpha <- as.greta_array(alpha) - dim <- check_multivariate_dims(vectors = list(alpha), - n_realisations = n_realisations, - dimension = dimension) + dim <- check_multivariate_dims( + vectors = list(alpha), + n_realisations = n_realisations, + dimension = dimension + ) # coerce the parameter arguments to nodes and add as parents and # parameters self$bounds <- c(0, Inf) super$initialize("dirichlet", dim, - truncation = c(0, Inf), - multivariate = TRUE) + truncation = c(0, Inf), + multivariate = TRUE + ) self$add_parameter(alpha, "alpha") - }, - create_target = function(truncation) { - simplex_greta_array <- simplex_variable(self$dim) # return the node for the simplex target_node <- get_node(simplex_greta_array) target_node - }, - tf_distrib = function(parameters, dag) { alpha <- parameters$alpha tfp$distributions$Dirichlet(concentration = alpha) } - ) ) @@ -841,17 +742,18 @@ dirichlet_multinomial_distribution <- R6Class( "dirichlet_multinomial_distribution", inherit = distribution_node, public = list( - initialize = function(size, alpha, n_realisations, dimension) { # coerce to greta arrays size <- as.greta_array(size) alpha <- as.greta_array(alpha) - dim <- check_multivariate_dims(scalars = list(size), - vectors = list(alpha), - n_realisations = n_realisations, - dimension = dimension) + dim <- check_multivariate_dims( + scalars = list(size), + vectors = list(alpha), + n_realisations = n_realisations, + dimension = dimension + ) # need to handle size as a vector! @@ -859,23 +761,24 @@ dirichlet_multinomial_distribution <- R6Class( # coerce the parameter arguments to nodes and add as parents and # parameters super$initialize("dirichlet_multinomial", - dim = dim, - discrete = TRUE, - multivariate = TRUE) + dim = dim, + discrete = TRUE, + multivariate = TRUE + ) self$add_parameter(size, "size", shape_matches_output = FALSE) self$add_parameter(alpha, "alpha") - }, # nolint start tf_distrib = function(parameters, dag) { parameters$size <- tf_flatten(parameters$size) distrib <- tfp$distributions$DirichletMultinomial - distrib(total_count = parameters$size, - concentration = parameters$alpha) + distrib( + total_count = parameters$size, + concentration = parameters$alpha + ) } # nolint end - ) ) @@ -883,40 +786,43 @@ multinomial_distribution <- R6Class( "multinomial_distribution", inherit = distribution_node, public = list( - initialize = function(size, prob, n_realisations, dimension) { # coerce to greta arrays size <- as.greta_array(size) prob <- as.greta_array(prob) - dim <- check_multivariate_dims(scalars = list(size), - vectors = list(prob), - n_realisations = n_realisations, - dimension = dimension) + dim <- check_multivariate_dims( + scalars = list(size), + vectors = list(prob), + n_realisations = n_realisations, + dimension = dimension + ) # need to make sure size is a column vector! # coerce the parameter arguments to nodes and add as parents and # parameters super$initialize("multinomial", - dim = dim, - discrete = TRUE, - multivariate = TRUE) + dim = dim, + discrete = TRUE, + multivariate = TRUE + ) self$add_parameter(size, "size", shape_matches_output = FALSE) self$add_parameter(prob, "prob") - }, - tf_distrib = function(parameters, dag) { parameters$size <- tf_flatten(parameters$size) # scale probs to get absolute density correct - parameters$prob <- parameters$prob / tf_sum(parameters$prob) + # parameters$prob <- parameters$prob / tf_sum(parameters$prob) + parameters$prob <- parameters$prob / tf_rowsums(parameters$prob, + dims = 1L) - tfp$distributions$Multinomial(total_count = parameters$size, - probs = parameters$prob) + tfp$distributions$Multinomial( + total_count = parameters$size, + probs = parameters$prob + ) } - ) ) @@ -924,34 +830,36 @@ categorical_distribution <- R6Class( "categorical_distribution", inherit = distribution_node, public = list( - initialize = function(prob, n_realisations, dimension) { # coerce to greta arrays prob <- as.greta_array(prob) - dim <- check_multivariate_dims(vectors = list(prob), - n_realisations = n_realisations, - dimension = dimension) + dim <- check_multivariate_dims( + vectors = list(prob), + n_realisations = n_realisations, + dimension = dimension + ) # coerce the parameter arguments to nodes and add as parents and # parameters super$initialize("categorical", - dim = dim, - discrete = TRUE, - multivariate = TRUE) + dim = dim, + discrete = TRUE, + multivariate = TRUE + ) self$add_parameter(prob, "prob") - }, - tf_distrib = function(parameters, dag) { # scale probs to get absolute density correct probs <- parameters$prob - probs <- probs / tf_sum(probs) - tfp$distributions$Multinomial(total_count = fl(1), - probs = probs) + # probs <- probs / tf_sum(probs) + probs <- probs / tf_rowsums(probs, dims = 1L) + tfp$distributions$Multinomial( + total_count = fl(1), + probs = probs + ) } - ) ) @@ -959,46 +867,26 @@ multivariate_normal_distribution <- R6Class( "multivariate_normal_distribution", inherit = distribution_node, public = list( - sigma_is_cholesky = FALSE, # nolint start initialize = function(mean, Sigma, n_realisations, dimension) { - # nolint end + # nolint end # coerce to greta arrays mean <- as.greta_array(mean) sigma <- as.greta_array(Sigma) # check dim is a positive scalar integer - dim <- check_multivariate_dims(vectors = list(mean), - squares = list(sigma), - n_realisations = n_realisations, - dimension = dimension) - - # check dimensions of Sigma - if (nrow(sigma) != ncol(sigma) | - length(dim(sigma)) != 2) { - - stop("Sigma must be a square 2D greta array, ", - "but has dimensions ", - paste(dim(sigma), collapse = " x "), - call. = FALSE) - - } - - # compare possible dimensions - dim_mean <- ncol(mean) - dim_sigma <- nrow(sigma) - - if (dim_mean != dim_sigma) { - - stop("mean and Sigma have different dimensions, ", - dim_mean, " vs ", dim_sigma, - call. = FALSE) + dim <- check_multivariate_dims( + vectors = list(mean), + squares = list(sigma), + n_realisations = n_realisations, + dimension = dimension + ) - } + check_sigma_square_2d_greta_array(sigma) + check_mean_sigma_have_same_dimensions(mean, sigma) - # coerce the parameter arguments to nodes and add as parents and - # parameters + # coerce parameter arguments to nodes and add as parents and parameters super$initialize("multivariate_normal", dim, multivariate = TRUE) if (has_representation(sigma, "cholesky")) { @@ -1007,9 +895,7 @@ multivariate_normal_distribution <- R6Class( } self$add_parameter(mean, "mean") self$add_parameter(sigma, "sigma") - }, - tf_distrib = function(parameters, dag) { # if Sigma is a cholesky factor transpose it to tensorflow expoectation, @@ -1027,11 +913,12 @@ multivariate_normal_distribution <- R6Class( mu <- parameters$mean # nolint start - tfp$distributions$MultivariateNormalTriL(loc = mu, - scale_tril = l) + tfp$distributions$MultivariateNormalTriL( + loc = mu, + scale_tril = l + ) # nolint end } - ) ) @@ -1040,33 +927,25 @@ wishart_distribution <- R6Class( inherit = distribution_node, public = list( + # TF1/2 - consider setting this as NULL for debugging purposes # set when defining the distribution sigma_is_cholesky = FALSE, + # TF1/2 - consider setting this as NULL for debugging purposes # set when defining the graph target_is_cholesky = FALSE, - - initialize = function(df, Sigma) { # nolint + initialize = function(df, Sigma) { # nolint # add the nodes as parents and parameters - df <- as.greta_array(df) sigma <- as.greta_array(Sigma) # check dimensions of Sigma - if (nrow(sigma) != ncol(sigma) | - length(dim(sigma)) != 2) { - - stop("Sigma must be a square 2D greta array, but has dimensions ", - paste(dim(sigma), collapse = " x "), - call. = FALSE) - - } + check_sigma_square_2d_greta_array(sigma) dim <- nrow(sigma) # initialize with a cholesky factor super$initialize("wishart", dim(sigma), multivariate = TRUE) - # set parameters if (has_representation(sigma, "cholesky")) { sigma <- representation(sigma, "cholesky") @@ -1077,13 +956,11 @@ wishart_distribution <- R6Class( # make the initial value PD (no idea whether this does anything) self$value(unknowns(dims = c(dim, dim), data = diag(dim))) - }, # create a variable, and transform to a symmetric matrix (with cholesky # factor representation) create_target = function(truncation) { - # create cholesky factor variable greta array chol_greta_array <- cholesky_variable(self$dim[1]) @@ -1092,8 +969,8 @@ wishart_distribution <- R6Class( # return the node for the symmetric matrix target_node <- get_node(matrix_greta_array) - target_node + target_node }, # get a cholesky factor for the target if possible @@ -1112,14 +989,11 @@ wishart_distribution <- R6Class( reset_target_flags = function() { self$target_is_cholesky <- FALSE }, - tf_distrib = function(parameters, dag) { - # this is messy, we want to use the tfp wishart, but can't define the # density without expanding the dimension of x log_prob <- function(x) { - # reshape the dimensions df <- tf_flatten(parameters$df) sigma <- tf$expand_dims(parameters$sigma, 1L) @@ -1140,16 +1014,25 @@ wishart_distribution <- R6Class( } # use the density for choleskied x, with choleskied Sigma - distrib <- tfp$distributions$Wishart(df = df, - scale_tril = sigma_chol, - input_output_cholesky = TRUE) + distrib <- tfp$distributions$WishartTriL( + df = df, + scale_tril = sigma_chol, + input_output_cholesky = TRUE + ) + + log_prob_raw <- distrib$log_prob(x_chol) + + # add an adjustment for the implicit chol2symm bijection in using the + # choleskied distribution, rather than the symmetric matrix version + chol2symm_bijector <- tfp$bijectors$CholeskyOuterProduct() + adjustment <- chol2symm_bijector$forward_log_det_jacobian(x_chol) + log_prob <- log_prob_raw + adjustment - distrib$log_prob(x_chol) + log_prob } sample <- function(seed) { - df <- tf$squeeze(parameters$df, 1:2) sigma <- parameters$sigma @@ -1161,23 +1044,24 @@ wishart_distribution <- R6Class( } # use the density for choleskied x, with choleskied Sigma - distrib <- tfp$distributions$Wishart(df = df, - scale_tril = sigma_chol) - - draws <- distrib$sample(seed = seed) - - if (self$target_is_cholesky) { - draws <- tf_chol(draws) - } - + chol_distrib <- tfp$distributions$WishartTriL( + df = df, + scale_tril = sigma_chol, + input_output_cholesky = TRUE + ) + + chol_draws <- chol_distrib$sample(seed = seed) + + # equivalent to (but faster than) tf_chol2symm(tf_transpose(chol_draws)) + # the transpose is needed because TF uses lower triangular + # (non-zeros are in bottom left) + # and R uses upper triangular (non zeroes are in top right) + draws <- tf$matmul(chol_draws, chol_draws, adjoint_b = TRUE) draws - } list(log_prob = log_prob, sample = sample) - } - ) ) @@ -1188,30 +1072,18 @@ lkj_correlation_distribution <- R6Class( # set when defining the graph target_is_cholesky = FALSE, - + eta_is_cholesky = FALSE, initialize = function(eta, dimension = 2) { - dimension <- check_dimension(target = dimension) - if (!inherits(eta, "greta_array")) { - - if (!is.numeric(eta) || !length(eta) == 1 || eta <= 0) { - stop("eta must be a positive scalar value, or a scalar greta array", - call. = FALSE) - } - + if (!is.greta_array(eta)) { + check_positive_scalar(eta) } # add the nodes as parents and parameters eta <- as.greta_array(eta) - if (!is_scalar(eta)) { - - stop("eta must be a scalar, but had dimensions: ", - capture.output(dput(dim(eta))), - call. = FALSE) - - } + check_scalar(eta) dim <- c(dimension, dimension) super$initialize("lkj_correlation", dim, multivariate = TRUE) @@ -1221,7 +1093,6 @@ lkj_correlation_distribution <- R6Class( # make the initial value PD self$value(unknowns(dims = dim, data = diag(dimension))) - }, # default (cholesky factor, ignores truncation) @@ -1236,9 +1107,9 @@ lkj_correlation_distribution <- R6Class( # return the node for the symmetric matrix target_node <- get_node(matrix_greta_array) target_node - }, + # NOTE: this code is repeated above on line 1032, is that intended? # get a cholesky factor for the target if possible get_tf_target_node = function() { target <- self$target @@ -1255,76 +1126,104 @@ lkj_correlation_distribution <- R6Class( reset_target_flags = function() { self$target_is_cholesky <- FALSE }, - tf_distrib = function(parameters, dag) { - eta <- tf$squeeze(parameters$eta, 1:2) dim <- self$dim[1] - distrib <- tfp$distributions$LKJ( - dimension = dim, - concentration = eta, - input_output_cholesky = self$target_is_cholesky - ) + log_prob <- function(x){ + if (self$target_is_cholesky) { + x_chol <- tf$linalg$matrix_transpose(x) + } else { + x_chol <- tf$linalg$cholesky(x) + } + + chol_distrib <- tfp$distributions$CholeskyLKJ( + dimension = dim, + concentration = eta + ) + + # NOTE there seems to be a difference with our implementation of + # normalising constant of the log prob. So we need to find a different + # reference implementation of the normalising constant. This does not + # impact MCMC or sampling, but may affect future uses of this. + # e.g., the integration and marginalisation interface + # chol_distrib$log_prob(x_chol) + + log_prob_raw <- chol_distrib$log_prob(x_chol) + + # add an adjustment for the implicit chol2symm bijection in using the + # choleskied distribution, rather than the symmetric matrix version + chol2symm_bijector <- tfp$bijectors$CholeskyOuterProduct() + adjustment <- chol2symm_bijector$forward_log_det_jacobian(x_chol) + log_prob <- log_prob_raw + adjustment + + log_prob + + } # tfp's lkj sampling can't detect the size of the output from eta, for - # some reason. But we can use map_fun to apply their simulation to each + # some reason. But we can use map_fn to apply their simulation to each # element of eta. sample <- function(seed) { - sample_once <- function(eta) { - - d <- tfp$distributions$LKJ( + d <- tfp$distributions$CholeskyLKJ( dimension = dim, - concentration = eta, - input_output_cholesky = self$target_is_cholesky + concentration = eta ) - d$sample(seed = seed) + chol_draws <- d$sample(seed = seed) + + # equivalent to (but faster than) tf_chol2symm(tf_transpose(chol_draws)) + # the transpose is needed because TF uses lower triangular + # (non-zeros are in bottom left) + # and R uses upper triangular (non zeroes are in top right) + draws <- tf$matmul(chol_draws, chol_draws, adjoint_b = TRUE) + draws } tf$map_fn(sample_once, eta) - } - list(log_prob = distrib$log_prob, - sample = sample) - + list( + log_prob = log_prob, + sample = sample + ) } - ) ) # module for export via .internals -distribution_classes_module <- module(uniform_distribution, - normal_distribution, - lognormal_distribution, - bernoulli_distribution, - binomial_distribution, - beta_binomial_distribution, - negative_binomial_distribution, - hypergeometric_distribution, - poisson_distribution, - gamma_distribution, - inverse_gamma_distribution, - weibull_distribution, - exponential_distribution, - pareto_distribution, - student_distribution, - laplace_distribution, - beta_distribution, - cauchy_distribution, - chi_squared_distribution, - logistic_distribution, - f_distribution, - multivariate_normal_distribution, - wishart_distribution, - lkj_correlation_distribution, - multinomial_distribution, - categorical_distribution, - dirichlet_distribution, - dirichlet_multinomial_distribution) +distribution_classes_module <- module( + uniform_distribution, + normal_distribution, + lognormal_distribution, + bernoulli_distribution, + binomial_distribution, + beta_binomial_distribution, + negative_binomial_distribution, + hypergeometric_distribution, + poisson_distribution, + gamma_distribution, + inverse_gamma_distribution, + weibull_distribution, + exponential_distribution, + pareto_distribution, + student_distribution, + laplace_distribution, + beta_distribution, + cauchy_distribution, + chi_squared_distribution, + logistic_distribution, + f_distribution, + multivariate_normal_distribution, + wishart_distribution, + lkj_correlation_distribution, + multinomial_distribution, + categorical_distribution, + dirichlet_distribution, + dirichlet_multinomial_distribution +) # export constructors @@ -1335,30 +1234,30 @@ distribution_classes_module <- module(uniform_distribution, #' greta model. They return a variable greta array that follows the specified #' distribution. This variable greta array can be used to represent a #' parameter with prior distribution, combined into a mixture distribution -#' using \code{\link{mixture}}, or used with \code{\link{distribution}} to +#' using [mixture()], or used with [distribution()] to #' define a distribution over a data greta array. #' #' @param truncation a length-two vector giving values between which to truncate -#' the distribution, similarly to the \code{lower} and \code{upper} arguments -#' to \code{\link{variable}} +#' the distribution, similarly to the `lower` and `upper` arguments +#' to [variable()] #' -#' @param min,max scalar values giving optional limits to \code{uniform} -#' variables. Like \code{lower} and \code{upper}, these must be specified as +#' @param min,max scalar values giving optional limits to `uniform` +#' variables. Like `lower` and `upper`, these must be specified as #' numerics, they cannot be greta arrays (though see details for a -#' workaround). Unlike \code{lower} and \code{upper}, they must be finite. -#' \code{min} must always be less than \code{max}. +#' workaround). Unlike `lower` and `upper`, they must be finite. +#' `min` must always be less than `max`. #' #' @param mean,meanlog,location,mu unconstrained parameters #' #' @param #' sd,sdlog,sigma,lambda,shape,rate,df,scale,shape1,shape2,alpha,beta,df1,df2,a,b,eta -#' positive parameters, \code{alpha} must be a vector for \code{dirichlet} -#' and \code{dirichlet_multinomial}. +#' positive parameters, `alpha` must be a vector for `dirichlet` +#' and `dirichlet_multinomial`. #' #' @param size,m,n,k positive integer parameter #' -#' @param prob probability parameter (\code{0 < prob < 1}), must be a vector for -#' \code{multinomial} and \code{categorical} +#' @param prob probability parameter (`0 < prob < 1`), must be a vector for +#' `multinomial` and `categorical` #' #' @param Sigma positive definite variance-covariance matrix parameter #' @@ -1370,77 +1269,77 @@ distribution_classes_module <- module(uniform_distribution, #' @param n_realisations the number of independent realisation of a multivariate #' distribution #' -#' @details The discrete probability distributions (\code{bernoulli}, -#' \code{binomial}, \code{negative_binomial}, \code{poisson}, -#' \code{multinomial}, \code{categorical}, \code{dirichlet_multinomial}) can +#' @details The discrete probability distributions (`bernoulli`, +#' `binomial`, `negative_binomial`, `poisson`, +#' `multinomial`, `categorical`, `dirichlet_multinomial`) can #' be used when they have fixed values (e.g. defined as a likelihood using -#' \code{\link{distribution}}, but not as unknown variables. +#' [distribution()], but not as unknown variables. #' -#' For univariate distributions \code{dim} gives the dimensions of the greta +#' For univariate distributions `dim` gives the dimensions of the greta #' array to create. Each element of the greta array will be (independently) -#' distributed according to the distribution. \code{dim} can also be left at -#' its default of \code{NULL}, in which case the dimension will be detected +#' distributed according to the distribution. `dim` can also be left at +#' its default of `NULL`, in which case the dimension will be detected #' from the dimensions of the parameters (provided they are compatible with #' one another). #' -#' For multivariate distributions (\code{multivariate_normal()}, -#' \code{multinomial()}, \code{categorical()}, \code{dirichlet()}, and -#' \code{dirichlet_multinomial()}) each row of the output and parameters +#' For multivariate distributions (`multivariate_normal()`, +#' `multinomial()`, `categorical()`, `dirichlet()`, and +#' `dirichlet_multinomial()`) each row of the output and parameters #' corresponds to an independent realisation. If a single realisation or #' parameter value is specified, it must therefore be a row vector (see -#' example). \code{n_realisations} gives the number of rows/realisations, and -#' \code{dimension} gives the dimension of the distribution. I.e. a bivariate -#' normal distribution would be produced with \code{multivariate_normal(..., -#' dimension = 2)}. The dimension can usually be detected from the parameters. +#' example). `n_realisations` gives the number of rows/realisations, and +#' `dimension` gives the dimension of the distribution. I.e. a bivariate +#' normal distribution would be produced with `multivariate_normal(..., +#' dimension = 2)`. The dimension can usually be detected from the parameters. #' -#' \code{multinomial()} does not check that observed values sum to -#' \code{size}, and \code{categorical()} does not check that only one of the +#' `multinomial()` does not check that observed values sum to +#' `size`, and `categorical()` does not check that only one of the #' observed entries is 1. It's the user's responsibility to check their data #' matches the distribution! #' -#' The parameters of \code{uniform} must be fixed, not greta arrays. This +#' The parameters of `uniform` must be fixed, not greta arrays. This #' ensures these values can always be transformed to a continuous scale to run -#' the samplers efficiently. However, a hierarchical \code{uniform} parameter -#' can always be created by defining a \code{uniform} variable constrained +#' the samplers efficiently. However, a hierarchical `uniform` parameter +#' can always be created by defining a `uniform` variable constrained #' between 0 and 1, and then transforming it to the required scale. See below #' for an example. #' #' Wherever possible, the parameterisations and argument names of greta #' distributions match commonly used R functions for distributions, such as -#' those in the \code{stats} or \code{extraDistr} packages. The following +#' those in the `stats` or `extraDistr` packages. The following #' table states the distribution function to which greta's implementation #' corresponds: #' -#' \tabular{ll}{ greta \tab reference\cr \code{uniform} \tab -#' \link[stats:dunif]{stats::dunif}\cr \code{normal} \tab -#' \link[stats:dnorm]{stats::dnorm}\cr \code{lognormal} \tab -#' \link[stats:dlnorm]{stats::dlnorm}\cr \code{bernoulli} \tab -#' \link[extraDistr:dbern]{extraDistr::dbern}\cr \code{binomial} \tab -#' \link[stats:dbinom]{stats::dbinom}\cr \code{beta_binomial} \tab -#' \link[extraDistr:dbbinom]{extraDistr::dbbinom}\cr \code{negative_binomial} -#' \tab \link[stats:dnbinom]{stats::dnbinom}\cr \code{hypergeometric} \tab -#' \link[stats:dhyper]{stats::dhyper}\cr \code{poisson} \tab -#' \link[stats:dpois]{stats::dpois}\cr \code{gamma} \tab -#' \link[stats:dgamma]{stats::dgamma}\cr \code{inverse_gamma} \tab -#' \link[extraDistr:dinvgamma]{extraDistr::dinvgamma}\cr \code{weibull} \tab -#' \link[stats:dweibull]{stats::dweibull}\cr \code{exponential} \tab -#' \link[stats:dexp]{stats::dexp}\cr \code{pareto} \tab -#' \link[extraDistr:dpareto]{extraDistr::dpareto}\cr \code{student} \tab -#' \link[extraDistr:dlst]{extraDistr::dlst}\cr \code{laplace} \tab -#' \link[extraDistr:dlaplace]{extraDistr::dlaplace}\cr \code{beta} \tab -#' \link[stats:dbeta]{stats::dbeta}\cr \code{cauchy} \tab -#' \link[stats:dcauchy]{stats::dcauchy}\cr \code{chi_squared} \tab -#' \link[stats:dchisq]{stats::dchisq}\cr \code{logistic} \tab -#' \link[stats:dlogis]{stats::dlogis}\cr \code{f} \tab -#' \link[stats:df]{stats::df}\cr \code{multivariate_normal} \tab -#' \link[mvtnorm:dmvnorm]{mvtnorm::dmvnorm}\cr \code{multinomial} \tab -#' \link[stats:dmultinom]{stats::dmultinom}\cr \code{categorical} \tab -#' {\link[stats:dmultinom]{stats::dmultinom} (size = 1)}\cr \code{dirichlet} -#' \tab \link[extraDistr:ddirichlet]{extraDistr::ddirichlet}\cr -#' \code{dirichlet_multinomial} \tab -#' \link[extraDistr:ddirmnom]{extraDistr::ddirmnom}\cr \code{wishart} \tab -#' \link[stats:rWishart]{stats::rWishart}\cr \code{lkj_correlation} \tab -#' \href{https://rdrr.io/github/rmcelreath/rethinking/man/dlkjcorr.html}{rethinking::dlkjcorr} +#' \tabular{ll}{ greta \tab reference\cr `uniform` \tab +#' [stats::dunif]\cr `normal` \tab +#' [stats::dnorm]\cr `lognormal` \tab +#' [stats::dlnorm]\cr `bernoulli` \tab +#' [extraDistr::dbern]\cr `binomial` \tab +#' [stats::dbinom]\cr `beta_binomial` \tab +#' [extraDistr::dbbinom]\cr `negative_binomial` +#' \tab [stats::dnbinom]\cr `hypergeometric` \tab +#' [stats::dhyper]\cr `poisson` \tab +#' [stats::dpois]\cr `gamma` \tab +#' [stats::dgamma]\cr `inverse_gamma` \tab +#' [extraDistr::dinvgamma]\cr `weibull` \tab +#' [stats::dweibull]\cr `exponential` \tab +#' [stats::dexp]\cr `pareto` \tab +#' [extraDistr::dpareto]\cr `student` \tab +#' [extraDistr::dlst]\cr `laplace` \tab +#' [extraDistr::dlaplace]\cr `beta` \tab +#' [stats::dbeta]\cr `cauchy` \tab +#' [stats::dcauchy]\cr `chi_squared` \tab +#' [stats::dchisq]\cr `logistic` \tab +#' [stats::dlogis]\cr `f` \tab +#' [stats::df]\cr `multivariate_normal` \tab +#' [mvtnorm::dmvnorm]\cr `multinomial` \tab +#' [stats::dmultinom]\cr `categorical` \tab +#' {[stats::dmultinom] (size = 1)}\cr `dirichlet` +#' \tab [extraDistr::ddirichlet]\cr +#' `dirichlet_multinomial` \tab +#' [extraDistr::ddirmnom]\cr `wishart` \tab +#' [stats::rWishart]\cr `lkj_correlation` \tab +#' [rethinking::dlkjcorr](https://rdrr.io/github/rmcelreath/rethinking/man/dlkjcorr.html) #' } #' #' @examples @@ -1487,30 +1386,33 @@ distribution_classes_module <- module(uniform_distribution, #' #' # a Wishart variable with the same covariance parameter #' theta <- wishart(df = 5, Sigma = Sig) -#' #' } NULL # nolint end #' @rdname distributions #' @export -uniform <- function(min, max, dim = NULL) +uniform <- function(min, max, dim = NULL) { distrib("uniform", min, max, dim) +} #' @rdname distributions #' @export -normal <- function(mean, sd, dim = NULL, truncation = c(-Inf, Inf)) +normal <- function(mean, sd, dim = NULL, truncation = c(-Inf, Inf)) { distrib("normal", mean, sd, dim, truncation) +} #' @rdname distributions #' @export -lognormal <- function(meanlog, sdlog, dim = NULL, truncation = c(0, Inf)) +lognormal <- function(meanlog, sdlog, dim = NULL, truncation = c(0, Inf)) { distrib("lognormal", meanlog, sdlog, dim, truncation) +} #' @rdname distributions #' @export -bernoulli <- function(prob, dim = NULL) +bernoulli <- function(prob, dim = NULL) { distrib("bernoulli", prob, dim) +} #' @rdname distributions #' @export @@ -1521,18 +1423,21 @@ binomial <- function(size, prob, dim = NULL) { #' @rdname distributions #' @export -beta_binomial <- function(size, alpha, beta, dim = NULL) +beta_binomial <- function(size, alpha, beta, dim = NULL) { distrib("beta_binomial", size, alpha, beta, dim) +} #' @rdname distributions #' @export -negative_binomial <- function(size, prob, dim = NULL) +negative_binomial <- function(size, prob, dim = NULL) { distrib("negative_binomial", size, prob, dim) +} #' @rdname distributions #' @export -hypergeometric <- function(m, n, k, dim = NULL) +hypergeometric <- function(m, n, k, dim = NULL) { distrib("hypergeometric", m, n, k, dim) +} #' @rdname distributions #' @export @@ -1543,103 +1448,124 @@ poisson <- function(lambda, dim = NULL) { #' @rdname distributions #' @export -gamma <- function(shape, rate, dim = NULL, truncation = c(0, Inf)) +gamma <- function(shape, rate, dim = NULL, truncation = c(0, Inf)) { distrib("gamma", shape, rate, dim, truncation) +} #' @rdname distributions #' @export -inverse_gamma <- function(alpha, beta, dim = NULL, truncation = c(0, Inf)) +inverse_gamma <- function(alpha, beta, dim = NULL, truncation = c(0, Inf)) { distrib("inverse_gamma", alpha, beta, dim, truncation) +} #' @rdname distributions #' @export -weibull <- function(shape, scale, dim = NULL, truncation = c(0, Inf)) +weibull <- function(shape, scale, dim = NULL, truncation = c(0, Inf)) { distrib("weibull", shape, scale, dim, truncation) +} #' @rdname distributions #' @export -exponential <- function(rate, dim = NULL, truncation = c(0, Inf)) +exponential <- function(rate, dim = NULL, truncation = c(0, Inf)) { distrib("exponential", rate, dim, truncation) +} #' @rdname distributions #' @export -pareto <- function(a, b, dim = NULL, truncation = c(0, Inf)) +pareto <- function(a, b, dim = NULL, truncation = c(0, Inf)) { distrib("pareto", a, b, dim, truncation) +} #' @rdname distributions #' @export -student <- function(df, mu, sigma, dim = NULL, truncation = c(-Inf, Inf)) +student <- function(df, mu, sigma, dim = NULL, truncation = c(-Inf, Inf)) { distrib("student", df, mu, sigma, dim, truncation) +} #' @rdname distributions #' @export -laplace <- function(mu, sigma, dim = NULL, truncation = c(-Inf, Inf)) +laplace <- function(mu, sigma, dim = NULL, truncation = c(-Inf, Inf)) { distrib("laplace", mu, sigma, dim, truncation) +} #' @rdname distributions #' @export -beta <- function(shape1, shape2, dim = NULL, truncation = c(0, 1)) +beta <- function(shape1, shape2, dim = NULL, truncation = c(0, 1)) { distrib("beta", shape1, shape2, dim, truncation) +} #' @rdname distributions #' @export -cauchy <- function(location, scale, dim = NULL, truncation = c(-Inf, Inf)) +cauchy <- function(location, scale, dim = NULL, truncation = c(-Inf, Inf)) { distrib("cauchy", location, scale, dim, truncation) +} #' @rdname distributions #' @export -chi_squared <- function(df, dim = NULL, truncation = c(0, Inf)) +chi_squared <- function(df, dim = NULL, truncation = c(0, Inf)) { distrib("chi_squared", df, dim, truncation) +} #' @rdname distributions #' @export -logistic <- function(location, scale, dim = NULL, truncation = c(-Inf, Inf)) +logistic <- function(location, scale, dim = NULL, truncation = c(-Inf, Inf)) { distrib("logistic", location, scale, dim, truncation) +} #' @rdname distributions #' @export -f <- function(df1, df2, dim = NULL, truncation = c(0, Inf)) +f <- function(df1, df2, dim = NULL, truncation = c(0, Inf)) { distrib("f", df1, df2, dim, truncation) +} # nolint start #' @rdname distributions #' @export multivariate_normal <- function(mean, Sigma, n_realisations = NULL, dimension = NULL) { -# nolint end - distrib("multivariate_normal", mean, Sigma, - n_realisations, dimension) + # nolint end + distrib( + "multivariate_normal", mean, Sigma, + n_realisations, dimension + ) } #' @rdname distributions #' @export -wishart <- function(df, Sigma) # nolint +wishart <- function(df, Sigma) { # nolint distrib("wishart", df, Sigma) +} #' @rdname distributions #' @export -lkj_correlation <- function(eta, dimension = 2) +lkj_correlation <- function(eta, dimension = 2) { distrib("lkj_correlation", eta, dimension) +} #' @rdname distributions #' @export -multinomial <- function(size, prob, n_realisations = NULL, dimension = NULL) +multinomial <- function(size, prob, n_realisations = NULL, dimension = NULL) { distrib("multinomial", size, prob, n_realisations, dimension) +} #' @rdname distributions #' @export -categorical <- function(prob, n_realisations = NULL, dimension = NULL) +categorical <- function(prob, n_realisations = NULL, dimension = NULL) { distrib("categorical", prob, n_realisations, dimension) +} #' @rdname distributions #' @export -dirichlet <- function(alpha, n_realisations = NULL, dimension = NULL) +dirichlet <- function(alpha, n_realisations = NULL, dimension = NULL) { distrib("dirichlet", alpha, n_realisations, dimension) +} #' @rdname distributions #' @export dirichlet_multinomial <- function(size, alpha, n_realisations = NULL, dimension = NULL) { - distrib("dirichlet_multinomial", - size, alpha, n_realisations, dimension) + distrib( + "dirichlet_multinomial", + size, alpha, n_realisations, dimension + ) } diff --git a/R/progress_bar.R b/R/progress_bar.R index ffe52da3..4542f8e8 100644 --- a/R/progress_bar.R +++ b/R/progress_bar.R @@ -11,13 +11,15 @@ create_progress_bar <- function(phase, iter, pb_update, width, ...) { # name for formatting name <- switch(phase, - warmup = " warmup", - sampling = "sampling") + warmup = " warmup", + sampling = "sampling" + ) # total iterations for bat iter_this <- switch(phase, - warmup = iter[1], - sampling = iter[2]) + warmup = iter[1], + sampling = iter[2] + ) # pad the frmat so that the width iterations counter is the same for both # warmup and sampling @@ -25,33 +27,30 @@ create_progress_bar <- function(phase, iter, pb_update, width, ...) { count_pad <- paste0(rep(" ", 2 * digit_diff), collapse = "") # formatting - format_text <- sprintf(" %s :bar %s:iter/:total | eta: :eta :rejection", - name, - count_pad) - - pb <- progress::progress_bar$new(format = format_text, - total = iter_this, - width = width, - incomplete = " ", - clear = FALSE, - current = "=", - show_after = 0, - force = TRUE, - ...) + format_text <- glue::glue( + " {name} :bar {count_pad}:iter/:total | eta: :eta :rejection" + ) + + pb <- progress::progress_bar$new( + format = format_text, + total = iter_this, + width = width, + incomplete = " ", + clear = FALSE, + current = "=", + show_after = 0, + force = TRUE, + ... + ) # add the increment information and return pb_update <- round(pb_update) - if (!is.numeric(pb_update) || length(pb_update) != 1 || - !is.finite(pb_update) || pb_update <= 0) { - stop("pb_update must be a finite, positive, scalar integer", - call. = FALSE) - } + check_finite_positive_scalar_integer(pb_update) assign("pb_update", pb_update, envir = pb$.__enclos_env__) pb - } @@ -62,11 +61,9 @@ create_progress_bar <- function(phase, iter, pb_update, width, ...) { # 'rejects' is the total number of rejections so far due to numerical # instability iterate_progress_bar <- function(pb, it, rejects, chains, file = NULL) { - increment <- pb$.__enclos_env__$pb_update if (it %% increment == 0) { - if (rejects > 0) { reject_perc <- 100 * rejects / (it * chains) if (reject_perc < 1) { @@ -78,7 +75,7 @@ iterate_progress_bar <- function(pb, it, rejects, chains, file = NULL) { pad_char <- pmax(0, 2 - nchar(reject_perc_string)) pad <- paste0(rep(" ", pad_char), collapse = "") - reject_text <- paste0("| ", reject_perc_string, "% bad", pad) + reject_text <- glue::glue("| {reject_perc_string}% bad{pad}") } else { reject_text <- " " } @@ -91,13 +88,17 @@ iterate_progress_bar <- function(pb, it, rejects, chains, file = NULL) { # tick the progess bar and record the output message # (or print it if file = NULL) record(pb$tick(amount, - tokens = list(iter = iter_pretty, - rejection = reject_text)), - file = file) - + tokens = list( + iter = iter_pretty, + rejection = reject_text + ) + ), + file = file + ) } - } -progress_bar_module <- module(create_progress_bar, - iterate_progress_bar) +progress_bar_module <- module( + create_progress_bar, + iterate_progress_bar +) diff --git a/R/reinstallers.R b/R/reinstallers.R new file mode 100644 index 00000000..9444d98f --- /dev/null +++ b/R/reinstallers.R @@ -0,0 +1,109 @@ +#' Helpers to remove, and reinstall python environments and miniconda +#' +#' This can be useful when debugging greta installation to get to "clean slate". +#' There are four functions: +#' +#' - [remove_greta_env()] removes the 'greta-env-tf2' conda environment +#' - [remove_miniconda()] removes miniconda installation +#' - [reinstall_greta_env()] remove 'greta-env-tf2' and reinstall it +#' using [greta_create_conda_env()] (which is used internally). +#' - [reinstall_miniconda()] removes miniconda and reinstalls it using +#' [greta_install_miniconda()] (which is used internally) +#' +#' @return invisible +#' @export +#' @name reinstallers +#' @seealso [destroy_greta_deps()] +#' +#' @examples +#' \dontrun{ +#' remove_greta_env() +#' remove_miniconda() +#' reinstall_greta_env() +#' reinstall_miniconda() +#' } +remove_greta_env <- function(){ + cli::cli_alert_info("removing 'greta-env-tf2' conda environment", + wrap = TRUE) + reticulate::conda_remove( + envname = "greta-env-tf2" + ) + cli::cli_alert_success("greta-env-tf2 environment removed!", + wrap = TRUE) +} + +#' @export +#' @param timeout time in minutes to wait until timeout (default is 5 minutes) +#' @rdname reinstallers +reinstall_greta_env <- function(timeout = 5){ + remove_greta_env() + greta_create_conda_env(timeout = timeout) +} + +#' @export +#' @rdname reinstallers +remove_miniconda <- function(){ + path_to_miniconda <- reticulate::miniconda_path() + if (!file.exists(path_to_miniconda)){ + cli::cli_alert_info("No miniconda files found at {path_to_miniconda}", + wrap = TRUE) + return(invisible()) + } + if (yesno::yesno("Are you sure you want to delete miniconda from ", + path_to_miniconda,"?") ){ + cli::cli_alert_info("removing 'miniconda' installation", + wrap = TRUE) + unlink(path_to_miniconda, recursive = TRUE) + cli::cli_alert_success("'miniconda' successfully removed!", + wrap = TRUE) + } else { + return(invisible()) + } + +} + +#' @param timeout time in minutes to wait until timeout (default is 5 minutes) +#' @rdname reinstallers +#' @export +reinstall_miniconda <- function(timeout = 5){ + remove_miniconda() + greta_install_miniconda(timeout) +} + +#' @rdname install_greta_deps +#' @export +#' @examples +#' \dontrun{ +#' # to help troubleshoot your greta installation, this can help resolve some +#' # issues with installing greta dependencies +#' reinstall_greta_deps() +#' } +reinstall_greta_deps <- function(deps = greta_deps_spec(), + timeout = 5, + restart = c("ask", "force", "no")){ + remove_greta_env() + remove_miniconda() + install_greta_deps( + deps = deps, + timeout = timeout, + restart = restart + ) +} + +#' Remove greta dependencies and remove miniconda +#' +#' Sometimes when installing greta you might encounter an error and the best +#' thing to do is start from a clean slate. This function does two things: +#' 1. Removes the "greta-tf2-env" with [remove_greta_env()] +#' 2. Removes the miniconda installation with [remove_miniconda()] +#' +#' @return nothing +#' @export +destroy_greta_deps <- function(){ + cli::cli_progress_step( + msg = "You are removing greta env and miniconda", + msg_done = c("You have successfully removed greta env and miniconda") + ) + remove_greta_env() + remove_miniconda() +} diff --git a/R/samplers.R b/R/samplers.R index f08c58c5..e83d3125 100644 --- a/R/samplers.R +++ b/R/samplers.R @@ -2,13 +2,13 @@ #' #' @title MCMC samplers #' @description Functions to set up MCMC samplers and change the starting values -#' of their parameters, for use in \code{\link{mcmc}()}. +#' of their parameters, for use in [mcmc()]. #' -#' @details During the warmup iterations of \code{mcmc}, some of these +#' @details During the warmup iterations of `mcmc`, some of these #' sampler parameters will be tuned to improve the efficiency of the sampler, #' so the values provided here are used as starting values. #' -#' @return a \code{sampler} object that can be passed to \code{\link{mcmc}}. +#' @return a `sampler` object that can be passed to [mcmc()]. NULL @@ -22,28 +22,31 @@ NULL #' @param diag_sd estimate of the posterior marginal standard deviations #' (positive, will be tuned). #' -#' @details For \code{hmc()}, the number of leapfrog steps at each iteration is -#' selected uniformly at random from between \code{Lmin} and \code{Lmax}. -#' \code{diag_sd} is used to rescale the parameter space to make it more +#' @details For `hmc()`, the number of leapfrog steps at each iteration is +#' selected uniformly at random from between `Lmin` and `Lmax`. +#' `diag_sd` is used to rescale the parameter space to make it more #' uniform, and make sampling more efficient. hmc <- function(Lmin = 5, Lmax = 10, epsilon = 0.1, diag_sd = 1) { # nolint end - obj <- list(parameters = list(Lmin = Lmin, - Lmax = Lmax, - epsilon = epsilon, - diag_sd = diag_sd), - class = hmc_sampler) + obj <- list( + parameters = list( + Lmin = Lmin, + Lmax = Lmax, + epsilon = epsilon, + diag_sd = diag_sd + ), + class = hmc_sampler + ) class(obj) <- c("hmc sampler", "sampler") obj - } #' @rdname samplers #' -#' @details \code{rwmh()} creates a random walk Metropolis-Hastings sampler; a +#' @details `rwmh()` creates a random walk Metropolis-Hastings sampler; a #' a gradient-free sampling algorithm. The algorithm involves a proposal #' generating step `proposal_state = current_state + perturb` by a random #' perturbation, followed by Metropolis-Hastings accept/reject step. The class @@ -55,31 +58,34 @@ hmc <- function(Lmin = 5, rwmh <- function(proposal = c("normal", "uniform"), epsilon = 0.1, diag_sd = 1) { - proposal <- match.arg(proposal) - obj <- list(parameters = list(proposal = proposal, - epsilon = epsilon, - diag_sd = diag_sd), - class = rwmh_sampler) + obj <- list( + parameters = list( + proposal = proposal, + epsilon = epsilon, + diag_sd = diag_sd + ), + class = rwmh_sampler + ) class(obj) <- c("rwmh sampler", "sampler") obj } #' @rdname samplers #' -#' @details \code{slice()} implements a multivariate slice sampling algorithm. -#' Currently this algorithm can only be used with single-precision models (set -#' using the \code{precision} argument to \code{\link{model}}). The parameter -#' \code{max_doublings} is not tuned during warmup. +#' @details `slice()` implements a multivariate slice sampling algorithm. +#' The parameter `max_doublings` is not tuned during warmup. #' #' @param max_doublings the maximum number of iterations of the 'doubling' #' algorithm used to adapt the size of the slice #' #' @export slice <- function(max_doublings = 5) { - obj <- list(parameters = list(max_doublings = as.integer(max_doublings)[1]), - class = slice_sampler) + obj <- list( + parameters = list(max_doublings = as.integer(max_doublings)[1]), + class = slice_sampler + ) class(obj) <- c("slice sampler", "sampler") obj } @@ -87,20 +93,22 @@ slice <- function(max_doublings = 5) { #' @noRd #' @export print.sampler <- function(x, ...) { - values_text <- paste(names(x$parameters), - prettyNum(x$parameters), - sep = " = ", - collapse = ", ") + prettyNum(x$parameters), + sep = " = ", + collapse = ", " + ) if (!nzchar(values_text)) values_text <- "None" - parameters_text <- sprintf("parameters:\n %s", - values_text) + parameters_text <- glue::glue(" + parameters: + {values_text} + ") - msg <- sprintf("%s object with %s", - class(x)[1], - parameters_text) + msg <- glue::glue( + "{class(x)[1]} object with {parameters_text}" + ) cat(msg) } diff --git a/R/simulate.R b/R/simulate.R index 2bf3f69b..70392a5d 100644 --- a/R/simulate.R +++ b/R/simulate.R @@ -1,22 +1,22 @@ -#' @title Simulate Responses From \code{greta_model} Object +#' @title Simulate Responses From `greta_model` Object #' #' @description Simulate values of all named greta arrays associated with a #' greta model from the model priors, including the response variable. #' -#' @param object a \code{\link[greta:model]{greta_model}} object +#' @param object a [`greta_model()`][greta::model] object #' @param nsim positive integer scalar - the number of responses to simulate #' @param seed an optional seed to be used in set.seed immediately before the #' simulation so as to generate a reproducible sample #' @param precision the floating point precision to use when calculating values. #' @param ... optional additional arguments, none are used at present #' -#' @details This is essentially a wrapper around \code{\link{calculate}()} that +#' @details This is essentially a wrapper around [calculate()] that #' finds all relevant greta arrays. See that function for more functionality, #' including simulation conditional on fixed values or posterior samples. #' #' To simulate values of the response variable, it must be both a named object #' (in the calling environment) and be a greta array. If you don't see it -#' showing up in the output, you may need to use \code{as_data} to convert it +#' showing up in the output, you may need to use `as_data` to convert it #' to a greta array before defining the model. #' #' @return A named list of vectors, matrices or arrays containing independent @@ -46,37 +46,29 @@ #' #' # 100 simulations of y, mu and sd #' sims <- simulate(m, nsim = 100) -#' #' } -# nolint start -simulate.greta_model <- function( - object, - nsim = 1, - seed = NULL, - precision = c("double", "single"), - ... -) { +#' # nolint start +simulate.greta_model <- function(object, + nsim = 1, + seed = NULL, + precision = c("double", "single"), + ...) { # nolint end # find all the greta arrays in the calling environment target_greta_arrays <- all_greta_arrays(parent.frame()) # subset these to only those that are associated with the model target_nodes <- lapply(target_greta_arrays, get_node) - target_node_names <- vapply(target_nodes, - member, - "unique_name", - FUN.VALUE = character(1)) - object_node_names <- vapply(object$dag$node_list, - member, - "unique_name", - FUN.VALUE = character(1)) + target_node_names <- extract_unique_names(target_nodes) + object_node_names <- extract_unique_names(object$dag$node_list) keep <- target_node_names %in% object_node_names target_greta_arrays <- target_greta_arrays[keep] - other_args <- list(precision = precision, - nsim = nsim, - seed = seed) + other_args <- list( + precision = precision, + nsim = nsim, + seed = seed + ) do.call(calculate, c(target_greta_arrays, other_args)) - } diff --git a/R/structures.R b/R/structures.R index 20642dfb..b271de6d 100644 --- a/R/structures.R +++ b/R/structures.R @@ -2,22 +2,22 @@ #' @title create data greta arrays #' @description These structures can be used to set up more complex models. For #' example, scalar parameters can be embedded in a greta array by first -#' creating a greta array with \code{zeros()} or \code{ones()}, and then +#' creating a greta array with `zeros()` or `ones()`, and then #' embedding the parameter value using greta's replacement syntax. #' @param ... dimensions of the greta arrays to create #' @param data a vector giving data to fill the greta array. Other object types -#' are coerced by \code{\link{as.vector}}. +#' are coerced by [as.vector()]. #' @param dim an integer vector giving the dimensions for the greta array to be #' created. #' -#' @details \code{greta_array} is a convenience function to create an R array -#' with \code{\link{array}} and then coerce it to a greta array. I.e. when +#' @details `greta_array` is a convenience function to create an R array +#' with [array()] and then coerce it to a greta array. I.e. when #' passed something that can be coerced to a numeric array, it is equivalent -#' to \code{as_data(array(data, dim))}. +#' to `as_data(array(data, dim))`. #' -#' If \code{data} is a greta array and -#' dim is different than \code{dim(data)}, a reshaped greta array is returned. -#' This is equivalent to: \code{dim(data) <- dim}. +#' If `data` is a greta array and +#' dim is different than `dim(data)`, a reshaped greta array is returned. +#' This is equivalent to: `dim(data) <- dim`. #' #' @return a greta array object #' @examples @@ -35,7 +35,7 @@ #' # a 3x3x3 greta array filled with 1, 2, and 3 #' z <- greta_array(1:3, dim = c(3, 3, 3)) #' } - +#' NULL #' @export @@ -56,8 +56,10 @@ ones <- function(...) { #' @export #' @rdname structures -greta_array <- function(data = 0, dim = length(data)) +greta_array <- function(data = 0, dim = length(data)) { + check_tf_version("error") UseMethod("greta_array") +} # safely handle self-coersion, possibly with reshaping @@ -66,15 +68,16 @@ greta_array.greta_array <- function(data = 0, dim = length(data)) { # reshape if necessary (apparently users expect this functionality) dim <- as.integer(dim) - if (length(dim) == 1) + if (length(dim) == 1) { dim <- c(dim, 1L) + } - if (!identical(dim, dim(data))) { + dim_matches_data_dim <- identical(dim, dim(data)) + if (!dim_matches_data_dim) { dim(data) <- dim } data - } # else try to coerce to a greta array @@ -82,3 +85,14 @@ greta_array.greta_array <- function(data = 0, dim = length(data)) { greta_array.default <- function(data = 0, dim = length(data)) { as.greta_array(array(data = data, dim = dim)) } + +#' @title Is object a greta array? +#' +#' @param x object to test if is greta array +#' +#' @param ... extra args (currently not used) +#' +#' @export +is.greta_array <- function(x, ...) { + inherits(x, "greta_array") +} diff --git a/R/sysdata.rda b/R/sysdata.rda new file mode 100644 index 00000000..a7446893 Binary files /dev/null and b/R/sysdata.rda differ diff --git a/R/test_if_forked_cluster.R b/R/test_if_forked_cluster.R new file mode 100644 index 00000000..5aa2a56f --- /dev/null +++ b/R/test_if_forked_cluster.R @@ -0,0 +1,8 @@ +test_if_forked_cluster <- function(){ + is_forked <- value(future(parallelly::isForkedChild())) + if (is_forked) { + cli::cli_abort( + "parallel mcmc samplers cannot be run with a fork cluster" + ) + } +} diff --git a/R/testthat-helpers.R b/R/testthat-helpers.R new file mode 100644 index 00000000..854f49e9 --- /dev/null +++ b/R/testthat-helpers.R @@ -0,0 +1,116 @@ +# an array of random standard normals with the specificed dims +# e.g. randn(3, 2, 1) +randn <- function(...) { + dim <- c(...) + array(stats::rnorm(prod(dim)), dim = dim) +} + +# ditto for standard uniforms +randu <- function(...) { + dim <- c(...) + array(stats::runif(prod(dim)), dim = dim) +} + +# create a variable with the same dimensions as as_data(x) +as_variable <- function(x) { + x <- as_2d_array(x) + variable(dim = dim(x)) +} + + +# check a greta operation and the equivalent R operation give the same output +# e.g. check_op(sum, randn(100, 3)) +check_op <- function(op, a, b, greta_op = NULL, + other_args = list(), + tolerance = 1e-3, + only = c("data", "variable", "batched"), + relative_error = FALSE) { + greta_op <- greta_op %||% op + + r_out <- run_r_op(op, a, b, other_args) + + for (type in only) { + # compare with ops on data greta arrays + greta_out <- run_greta_op(greta_op, a, b, other_args, type) + compare_op(r_out, greta_out, tolerance, relative_error = relative_error) + } +} + +compare_op <- function(r_out, greta_out, tolerance = 1e-4, relative_error = FALSE) { + if (relative_error){ + difference <- as.vector(abs(r_out - greta_out) / abs(r_out)) + } else if (!relative_error){ + difference <- as.vector(abs(r_out - greta_out)) + } + difference_lt_tolerance <- difference < tolerance + are_all_true <- all(difference_lt_tolerance) + are_all_true + testthat::expect_true(are_all_true) +} + +run_r_op <- function(op, a, b, other_args) { + arg_list <- list(a) + if (!missing(b)) { + arg_list <- c(arg_list, list(b)) + } + arg_list <- c(arg_list, other_args) + do.call(op, arg_list) +} + +run_greta_op <- function(greta_op, a, b, other_args, + type = c("data", "variable", "batched")) { + type <- match.arg(type) + + converter <- switch(type, + data = as_data, + variable = as_variable, + batched = as_variable + ) + + g_a <- converter(a) + + arg_list <- list(g_a) + values <- list(g_a = a) + + if (!missing(b)) { + g_b <- converter(b) + arg_list <- c(arg_list, list(g_b)) + values <- c(values, list(g_b = b)) + } + + arg_list <- c(arg_list, other_args) + out <- do.call(greta_op, arg_list) + + if (type == "data") { + # data greta arrays should provide their own values + result <- calculate(out, values = list())[[1]] + } else if (type == "variable") { + result <- grab_via_free_state(out, values) + } else if (type == "batched") { + result <- grab_via_free_state(out, values, batches = 3) + } else { + result <- calculate(out, values = values)[[1]] + } + + result +} + +# get the value of the target greta array, by passing values for the named +# variable greta arrays via the free state parameter, optionally with batches +grab_via_free_state <- function(target, values, batches = 1) { + dag <- dag_class$new(list(target)) + inits <- do.call(initials, values) + inits_flat <- prep_initials(inits, 1, dag)[[1]] + if (batches > 1) { + inits_list <- replicate(batches, inits_flat, simplify = FALSE) + inits_flat <- do.call(rbind, inits_list) + vals <- dag$trace_values(inits_flat)[1, ] + } else { + vals <- dag$trace_values(inits_flat) + } + array(vals, dim = dim(target)) +} + +expect_ok <- function(expr) { + testthat::expect_error(expr, NA) +} diff --git a/R/tf_functions.R b/R/tf_functions.R index 644d6182..9e3c8d46 100644 --- a/R/tf_functions.R +++ b/R/tf_functions.R @@ -23,7 +23,7 @@ tf_tanpi <- function(x) { } tf_gamma_fun <- function(x) { - log_gamma <- tf$math$lgamma(x) + log_gamma <- tf$math$lgamma(x) tf$math$exp(log_gamma) } @@ -32,16 +32,19 @@ tf_trigamma <- function(x) { } # convert Tensor to logical -tf_as_logical <- function(x) +tf_as_logical <- function(x) { tf$cast(x, tf$bool) +} # and to float -tf_as_float <- function(x) +tf_as_float <- function(x) { tf$cast(x, tf_float()) +} # and to integer -tf_as_integer <- function(x) +tf_as_integer <- function(x) { tf$cast(x, tf$int32) +} tf_lchoose <- function(n, k) { one <- fl(1) @@ -50,13 +53,14 @@ tf_lchoose <- function(n, k) { tf$math$lgamma(one + n) } -tf_lbeta <- function(a, b) +tf_lbeta <- function(a, b) { tf$math$lgamma(a) + tf$math$lgamma(b) - tf$math$lgamma(a + b) +} # set up the tf$reduce_* functions to ignore the first dimension skip_dim <- function(op_name, x, drop = FALSE) { - n_dim <- length(dim(x)) - reduction_dims <- seq_len(n_dim - 1) + ndim <- n_dim(x) + reduction_dims <- seq_len(ndim - 1) tf[[op_name]](x, axis = reduction_dims, keepdims = !drop) } @@ -99,10 +103,10 @@ tf_set_dim <- function(x, dims) { x <- tf$reshape(x, shape = c(-1L, rev(dims))) # transpose back + browser() perm_new <- c(0L, rev(seq_along(dims))) x <- tf$transpose(x, perm_new) x - } # expand the dimensions of a scalar tensor, reshaping in the same way @@ -113,7 +117,7 @@ tf_expand_dim <- function(x, dims) { dims <- c(1L, dims) # pad/shrink x to have the correct number of dimensions - x_dims <- length(dim(x)) + x_dims <- n_dim(x) target_dims <- length(dims) # add extra dimensions at the end @@ -126,12 +130,11 @@ tf_expand_dim <- function(x, dims) { # tile x to match target dimensions tf$tile(x, dims) - } # skip the first index when transposing tf_transpose <- function(x) { - nelem <- length(dim(x)) + nelem <- n_dim(x) perm <- c(0L, (nelem - 1):1) tf$transpose(x, perm = perm) } @@ -140,7 +143,7 @@ tf_apply <- function(x, axis, tf_fun_name) { fun <- tf$math[[tf_fun_name]] out <- fun(x, axis = axis) # if we reduced we lost a dimension, make sure we have enough - if (length(dim(out)) < 3) { + if (n_dim(out) < 3) { out <- tf$expand_dims(out, 2L) } out @@ -149,16 +152,14 @@ tf_apply <- function(x, axis, tf_fun_name) { # permute the tensor to get the non-batch dim first, do the relevant # "unsorted_segment_*" op, then permute it back tf_tapply <- function(x, segment_ids, num_segments, op_name) { - - op_name <- paste0("unsorted_segment_", op_name) + op_name <- glue::glue("unsorted_segment_{op_name}") x <- tf$transpose(x, perm = c(1:2, 0L)) x <- tf$math[[op_name]](x, - segment_ids = segment_ids, - num_segments = num_segments) + segment_ids = segment_ids, + num_segments = num_segments) x <- tf$transpose(x, perm = c(2L, 0:1)) x - } # given a (batched, column) vector tensor of elements, corresponding to the @@ -169,7 +170,6 @@ tf_tapply <- function(x, segment_ids, num_segments, op_name) { # "values", the output vector has one more element than the input, since the # diagonal element depends deterministically on the other elements. tf_corrmat_row <- function(z, which = c("values", "ljac")) { - which <- match.arg(which) n <- dim(z)[[2]] @@ -193,56 +193,58 @@ tf_corrmat_row <- function(z, which = c("values", "ljac")) { # initial sum of squares is from the first element z_0 <- z[, 0] - sumsq <- z_0 ^ 2 + sumsq <- z_0^2 x <- tf$expand_dims(z_0, 1L) lp <- tf$zeros(shape(1), tf_float()) lp <- expand_to_batch(lp, z) # x has no elements yet, append them - values <- list(z, - x, - sumsq, - lp, - tf$constant(1L), - tf$constant(n)) - - cond <- function(z, x, sumsq, lp, iter, maxiter) + values <- list( + z, + x, + sumsq, + lp, + tf$constant(1L), + tf$constant(n) + ) + + cond <- function(z, x, sumsq, lp, iter, maxiter) { tf$less(iter, maxiter) + } # nolint start - shapes <- list(tf$TensorShape(shape(NULL, n)), - tf$TensorShape(shape(NULL, NULL)), - tf$TensorShape(shape(NULL)), - tf$TensorShape(shape(NULL)), - tf$TensorShape(shape()), - tf$TensorShape(shape())) + shapes <- list( + tf$TensorShape(shape(NULL, n)), + tf$TensorShape(shape(NULL, NULL)), + tf$TensorShape(shape(NULL)), + tf$TensorShape(shape(NULL)), + tf$TensorShape(shape()), + tf$TensorShape(shape()) + ) # nolint end body <- switch(which, - values = body_values, - ljac = body_ljac) + values = body_values, + ljac = body_ljac + ) out <- tf$while_loop(cond, - body, - values, - shape_invariants = shapes) + body, + values, + shape_invariants = shapes + ) if (which == "values") { - x <- out[[2]] sumsq <- out[[3]] final_x <- tf$sqrt(fl(1) - sumsq) final_x <- tf$expand_dims(final_x, 1L) x <- tf$concat(list(x, final_x), axis = 1L) return(x) - } else { - lp <- out[[4]] return(lp) - } - } tf_chol2symm <- function(x) { @@ -250,104 +252,98 @@ tf_chol2symm <- function(x) { } tf_colmeans <- function(x, dims) { - idx <- rowcol_idx(x, dims, "col") y <- tf$reduce_mean(x, axis = idx) - if (length(dim(y)) == 2) { + if (is_2d(y)) { dims_out <- c(-1L, unlist(dim(y)[-1]), 1L) y <- tf$reshape(y, dims_out) } y - } tf_rowmeans <- function(x, dims) { - idx <- rowcol_idx(x, dims, "row") idx <- idx[-length(idx)] y <- tf$reduce_mean(x, axis = idx) - if (length(dim(y)) == 2) { + if (is_2d(y)) { dims_out <- c(-1L, unlist(dim(y)[-1]), 1L) y <- tf$reshape(y, dims_out) } y - } tf_colsums <- function(x, dims) { - idx <- rowcol_idx(x, dims, "col") y <- tf$reduce_sum(x, axis = idx) - if (length(dim(y)) == 2) { + if (is_2d(y)) { dims_out <- c(-1L, unlist(dim(y)[-1]), 1L) y <- tf$reshape(y, dims_out) } y - } tf_rowsums <- function(x, dims) { - idx <- rowcol_idx(x, dims, "row") idx <- idx[-length(idx)] y <- tf$reduce_sum(x, axis = idx) - if (length(dim(y)) == 2) { + if (is_2d(y)) { dims_out <- c(-1L, unlist(dim(y)[-1]), 1L) y <- tf$reshape(y, dims_out) } y - } # calculate kronecker product of two matrices tf_kronecker <- function(x, y, tf_fun_name) { - tf_function <- tf[[tf_fun_name]] dims <- unlist(c(dim(x)[-1], dim(y)[-1])) # expand dimensions of tensors to allow direct multiplication for kronecker # prod - x_rsh <- tf$reshape(x, shape(-1, dims[1], 1L, dims[2], 1L)) - y_rsh <- tf$reshape(y, shape(-1, 1L, dims[3], 1L, dims[4])) + x_rsh <- tf$reshape(x, tensorflow::as_tensor(shape(-1, dims[1], 1L, dims[2], 1L))) + y_rsh <- tf$reshape(y, tensorflow::as_tensor(shape(-1, 1L, dims[3], 1L, dims[4]))) # multiply tensors and reshape with appropriate dimensions z <- tf_function(x_rsh, y_rsh) shape_out <- shape(-1, dims[1] * dims[3], dims[2] * dims[4]) - tensor_out <- tf$reshape(z, shape_out) + tensor_out <- tf$reshape(z, tensorflow::as_tensor(shape_out)) tensor_out - } # tensorflow version of sweep, based on broadcasting of tf ops tf_sweep <- function(x, stats, margin, fun) { # if the second margin, transpose before and after - if (margin == 2) + if (margin == 2) { x <- tf_transpose(x) + } # apply the function rowwise result <- do.call(fun, list(x, stats)) - if (margin == 2) + if (margin == 2) { result <- tf_transpose(result) + } result - } # transpose and get the right matrix, like R -tf_chol <- function(x) - tf_transpose(tf$linalg$cholesky(x)) +tf_chol <- function(x) { + x_chol <- tf$linalg$cholesky(x) + x_chol_t <- tf_transpose(x_chol) + x_chol_t +} tf_chol2inv <- function(u) { n <- dim(u)[[2]] @@ -372,42 +368,54 @@ tf_cov2cor <- function(v) { tf$linalg$set_diag(v, new_diag) } -tf_not <- function(x) +tf_not <- function(x) { tf_as_float(!tf_as_logical(x)) +} -tf_and <- function(x, y) +tf_and <- function(x, y) { tf_as_float(tf_as_logical(x) & tf_as_logical(y)) +} -tf_or <- function(x, y) +tf_or <- function(x, y) { tf_as_float(tf_as_logical(x) | tf_as_logical(y)) +} -tf_lt <- function(x, y) +tf_lt <- function(x, y) { tf_as_float(x < y) +} -tf_gt <- function(x, y) +tf_gt <- function(x, y) { tf_as_float(x > y) +} -tf_lte <- function(x, y) +tf_lte <- function(x, y) { tf_as_float(x <= y) +} -tf_gte <- function(x, y) +tf_gte <- function(x, y) { tf_as_float(x >= y) +} -tf_eq <- function(x, y) +tf_eq <- function(x, y) { tf_as_float(x == y) +} -tf_neq <- function(x, y) +tf_neq <- function(x, y) { tf_as_float(x != y) +} # inverse link functions in tensorflow -tf_iprobit <- function(x) +tf_iprobit <- function(x) { (tf$math$erf(x / fl(sqrt(2))) + fl(1)) / fl(2) +} -tf_icloglog <- function(x) +tf_icloglog <- function(x) { fl(1) - tf$exp(-tf$exp(x)) +} -tf_icauchit <- function(x) +tf_icauchit <- function(x) { fl(1 / pi) * tf$atan(x) + fl(0.5) +} tf_imultilogit <- function(x) { batch_size <- tf$shape(x)[[0]] @@ -426,18 +434,17 @@ tf_imultilogit <- function(x) { tf_extract <- function(x, nelem, index, dims_out) { # flatten tensor, gather using index, reshape to output dimension - tensor_in_flat <- tf$reshape(x, shape(-1, nelem)) + tensor_in_flat <- tf$reshape(x, tensorflow::as_tensor(shape(-1, nelem))) tf_index <- tf$constant(as.integer(index), dtype = tf$int32) tensor_out_flat <- tf$gather(tensor_in_flat, tf_index, axis = 1L) # reshape, handling unknown dimensions even when the output has 0-dimension # (which prevents us from just using -1 on the first dimension) batch_size <- tf$shape(x)[[0]] - shape_list <- c(list(batch_size), to_shape(dims_out)) + shape_list <- c(list(batch_size), as.integer(to_shape(dims_out))) shape_out <- tf$stack(shape_list) tensor_out <- tf$reshape(tensor_out_flat, shape_out) tensor_out - } # using tf$concat, update the elements of a tensor `ref`, putting the new @@ -461,14 +468,14 @@ tf_recombine <- function(ref, index, updates) { keep_idx <- which(runs$values == 0) keep_list <- lapply(keep_idx, function(i) { idx <- starts_old[i] + 0:(runs$lengths[i] - 1) - 1 - tf$reshape(ref[, idx, ], shape(-1, length(idx), 1)) + tf$reshape(ref[, idx, ], tensorflow::as_tensor(shape(-1, length(idx), 1))) }) run_id <- runs$values[runs$values != 0] update_idx <- match(run_id, runs$values) # get them in increasing order update_list <- lapply(run_id, function(i) { - tf$reshape(updates[, i - 1, ], shape(-1, 1, 1)) + tf$reshape(updates[, i - 1, ], tensorflow::as_tensor(shape(-1, 1, 1))) }) # combine them @@ -480,7 +487,6 @@ tf_recombine <- function(ref, index, updates) { result <- tf$concat(full_list, 1L) result - } # flatten a tensor x, ignoring the first (batch) dimension, and optionally @@ -488,7 +494,7 @@ tf_recombine <- function(ref, index, updates) { tf_flatten <- function(x, extra_ones = 0) { nelem <- prod(unlist(dim(x)[-1])) out_dim <- c(-1, nelem, rep(1, extra_ones)) - tf$reshape(x, to_shape(out_dim)) + tf$reshape(x, tensorflow::as_tensor(to_shape(out_dim))) } # replace elements in a tensor with another tensor @@ -499,15 +505,18 @@ tf_replace <- function(x, replacement, index, dims) { replacement_flat <- tf_flatten(replacement, 1) # update the values into a new tensor - result_flat <- tf_recombine(ref = x_flat, - index = index, - updates = replacement_flat) + result_flat <- tf_recombine( + ref = x_flat, + index = index, + updates = replacement_flat + ) # reshape the result - result <- tf$reshape(result_flat, - to_shape(c(-1, dims))) + result <- tf$reshape( + result_flat, + tensorflow::as_tensor(to_shape(c(-1, dims))) + ) result - } # mapping of cbind and rbind to tf$concat @@ -528,19 +537,19 @@ tf_abind <- function(..., axis) { tf_only_eigenvalues <- function(x) { vals <- tf$linalg$eigvalsh(x) - dim <- tf$constant(1L, shape = list(1)) + dim <- tf$constant(1L, shape = list(1L)) tf$reverse(vals, dim) } tf_extract_eigenvectors <- function(x) { vecs <- x[[2]] - dim <- tf$constant(2L, shape = list(1)) + dim <- tf$constant(2L, shape = list(1L)) tf$reverse(vecs, dim) } tf_extract_eigenvalues <- function(x) { vals <- x[[1]] - dim <- tf$constant(1L, shape = list(1)) + dim <- tf$constant(1L, shape = list(1L)) tf$reverse(vals, dim) } @@ -549,7 +558,6 @@ tf_self_distance <- function(x1) { } tf_distance <- function(x1, x2) { - n1 <- dim(x1)[[2]] n2 <- dim(x2)[[2]] @@ -557,18 +565,16 @@ tf_distance <- function(x1, x2) { x2 <- tf$transpose(x2, perm = c(0L, 2L, 1L)) x2 <- tf$tile(tf$expand_dims(x2, 1L), list(1L, n1, 1L, 1L)) - dists <- (x1 - x2) ^ 2 + dists <- (x1 - x2)^2 dist <- tf$reduce_sum(dists, axis = 2L) dist <- tf$sqrt(dist) dist - } # common construction of a chained bijector for scalars, optionally adding a # final reshaping step tf_scalar_biject <- function(..., dim) { - steps <- list(...) if (!is.null(dim)) { @@ -576,51 +582,48 @@ tf_scalar_biject <- function(..., dim) { } tfp$bijectors$Chain(steps) - } tf_scalar_bijector <- function(dim, lower, upper) { - tf_scalar_biject( tfp$bijectors$Identity(), dim = dim ) +} +tfb_shift_scale <- function(shift, scale){ + tfb_shift <- tfp$bijectors$Shift(shift) + tfb_scale <- tfp$bijectors$Scale(scale) + tfb_shift_scale <- tfb_shift(tfb_scale) + tfb_shift_scale } tf_scalar_pos_bijector <- function(dim, lower, upper) { - tf_scalar_biject( - tfp$bijectors$AffineScalar(shift = fl(lower)), + tfp$bijectors$Shift(fl(lower)), tfp$bijectors$Exp(), dim = dim ) - } tf_scalar_neg_bijector <- function(dim, lower, upper) { - tf_scalar_biject( - tfp$bijectors$AffineScalar(shift = fl(upper), scale = fl(-1)), + tfb_shift_scale(fl(upper), fl(-1)), tfp$bijectors$Exp(), dim = dim ) - } tf_scalar_neg_pos_bijector <- function(dim, lower, upper) { - tf_scalar_biject( - tfp$bijectors$AffineScalar(shift = fl(lower), scale = fl(upper - lower)), + tfb_shift_scale(shift = fl(lower), scale = fl(upper - lower)), tfp$bijectors$Sigmoid(), dim = dim ) - } # a blockwise combination of other transformations, with final reshaping tf_scalar_mixed_bijector <- function(dim, lower, upper, constraints) { - constructors <- list( none = tf_scalar_bijector, @@ -641,70 +644,49 @@ tf_scalar_mixed_bijector <- function(dim, lower, upper, constraints) { n_blocks <- length(rle$lengths) dims <- replicate(n_blocks, NULL, simplify = FALSE) block_parameters <- mapply(list, dims, lowers, uppers, SIMPLIFY = FALSE) - block_parameters <- lapply(block_parameters, - `names<-`, - c("dim", "lower", "upper")) + block_parameters <- lapply( + block_parameters, + `names<-`, + c("dim", "lower", "upper") + ) # create bijectors for each block names(block_constructors) <- NULL bijectors <- mapply(do.call, - block_constructors, - block_parameters, - SIMPLIFY = FALSE) + block_constructors, + block_parameters, + SIMPLIFY = FALSE + ) # roll into single bijector tf_scalar_biject( tfp$bijectors$Blockwise(bijectors, block_sizes = rle$lengths), dim = dim ) - } tf_correlation_cholesky_bijector <- function() { - steps <- list( tfp$bijectors$Transpose(perm = 1:0), tfp$bijectors$CorrelationCholesky() ) - bijector <- tfp$bijectors$Chain(steps) - - # forward_log_det_jacobian doesn't seem to work with unknown dimensions yet, - # so replace for now with our own - ljac_corr_mat <- function(x, event_ndims) { - - # find dimension - k <- dim(x)[[2]] - n <- (1 + sqrt(8 * k + 1)) / 2 - - # convert to correlation-scale (-1, 1) & get log jacobian - z <- tf$tanh(x) - - free_to_correl_lp <- tf_sum(log(fl(1) - tf$square(z))) - free_to_correl_lp <- tf$squeeze(free_to_correl_lp, 1L) - # split z up into rows - z_rows <- tf$split(z, 1:(n - 1), axis = 1L) - - # accumulate log prob within each row - lps <- lapply(z_rows, tf_corrmat_row, which = "ljac") - correl_to_mat_lp <- tf$add_n(lps) + tfp$bijectors$Chain(steps) - free_to_correl_lp + correl_to_mat_lp +} - } +tf_covariance_cholesky_bijector <- function() { - list(forward = bijector$forward, - inverse = bijector$inverse, - forward_log_det_jacobian = ljac_corr_mat) + steps <- list( + tfp$bijectors$Transpose(perm = 1:0), + tfp$bijectors$FillScaleTriL(diag_shift = fl(1e-5)) + ) + tfp$bijectors$Chain(steps) } -tf_covariance_cholesky_bijector <- function() { - tfp$bijectors$FillTriangular(upper = TRUE) -} tf_simplex_bijector <- function(dim) { - n_dim <- length(dim) last_dim <- dim[n_dim] raw_dim <- dim @@ -715,17 +697,15 @@ tf_simplex_bijector <- function(dim) { tfp$bijectors$Reshape(raw_dim) ) tfp$bijectors$Chain(steps) - } tf_ordered_bijector <- function(dim) { - steps <- list( - tfp$bijectors$Invert(tfp$bijectors$Ordered()), + # tfp$bijectors$Invert(tfp$bijectors$Ordered()), + tfp$bijectors$Ascending(), tfp$bijectors$Reshape(dim) ) tfp$bijectors$Chain(steps) - } # generate a tensor of random standard uniforms with a given shape, @@ -744,48 +724,50 @@ tf_randint <- function(n, dim, dag) { } # combine as module for export via internals -tf_functions_module <- module(tf_as_logical, - tf_as_float, - tf_as_integer, - tf_lchoose, - tf_lbeta, - tf_chol, - tf_chol2inv, - tf_corrmat_row, - tf_chol2symm, - tf_colmeans, - tf_rowmeans, - tf_colsums, - tf_rowsums, - tf_kronecker, - tf_sweep, - tf_not, - tf_and, - tf_or, - tf_lt, - tf_gt, - tf_lte, - tf_gte, - tf_eq, - tf_neq, - tf_iprobit, - tf_icloglog, - tf_icauchit, - tf_imultilogit, - tf_extract, - tf_recombine, - tf_flatten, - tf_replace, - tf_cbind, - tf_rbind, - tf_only_eigenvalues, - tf_extract_eigenvectors, - tf_extract_eigenvalues, - tf_self_distance, - tf_distance, - tf_scalar_bijector, - tf_scalar_neg_bijector, - tf_scalar_pos_bijector, - tf_scalar_neg_pos_bijector, - tf_correlation_cholesky_bijector, - tf_covariance_cholesky_bijector) +tf_functions_module <- module( + tf_as_logical, + tf_as_float, + tf_as_integer, + tf_lchoose, + tf_lbeta, + tf_chol, + tf_chol2inv, + tf_corrmat_row, + tf_chol2symm, + tf_colmeans, + tf_rowmeans, + tf_colsums, + tf_rowsums, + tf_kronecker, + tf_sweep, + tf_not, + tf_and, + tf_or, + tf_lt, + tf_gt, + tf_lte, + tf_gte, + tf_eq, + tf_neq, + tf_iprobit, + tf_icloglog, + tf_icauchit, + tf_imultilogit, + tf_extract, + tf_recombine, + tf_flatten, + tf_replace, + tf_cbind, + tf_rbind, + tf_only_eigenvalues, + tf_extract_eigenvectors, + tf_extract_eigenvalues, + tf_self_distance, + tf_distance, + tf_scalar_bijector, + tf_scalar_neg_bijector, + tf_scalar_pos_bijector, + tf_scalar_neg_pos_bijector, + tf_correlation_cholesky_bijector, + tf_covariance_cholesky_bijector +) diff --git a/R/transforms.R b/R/transforms.R index 221e747f..ac434219 100644 --- a/R/transforms.R +++ b/R/transforms.R @@ -3,7 +3,7 @@ #' @title transformation functions for greta arrays #' #' @description transformations for greta arrays, which may also be used as -#' inverse link functions. Also see \link{operators} and \link{functions}. +#' inverse link functions. Also see [operators] and [functions]. #' #' @param x a real-valued (i.e. values ranging from -Inf to Inf) greta array to #' transform to a constrained value @@ -14,12 +14,12 @@ #' existence. The inverse forms of the common link functions (prefixed with an #' 'i') can be used instead. #' -#' The \code{log1pe} inverse link function is equivalent to \code{log(1 + -#' exp(x))}, yielding a positive transformed parameter. Unlike the log +#' The `log1pe` inverse link function is equivalent to `log(1 + +#' exp(x))`, yielding a positive transformed parameter. Unlike the log #' transformation, this transformation is approximately linear for x > 1. i.e. #' when \eqn{x > 1}, \eqn{y} is approximately \eqn{x} #' -#' \code{imultilogit} expects an n-by-m greta array, and returns an n-by-(m+1) +#' `imultilogit` expects an n-by-m greta array, and returns an n-by-(m+1) #' greta array of positive reals whose rows sum to one. This is equivalent #' adding a final column of 0s and then running the softmax function widely #' used in machine learning. @@ -27,66 +27,69 @@ #' @examples #' \dontrun{ #' -#' x1 <- normal(1, 3, dim = 10) +#' x1 <- normal(1, 3, dim = 10) #' -#' # transformation to the unit interval -#' p1 <- iprobit(x1) -#' p2 <- ilogit(x1) -#' p3 <- icloglog(x1) -#' p4 <- icauchit(x1) +#' # transformation to the unit interval +#' p1 <- iprobit(x1) +#' p2 <- ilogit(x1) +#' p3 <- icloglog(x1) +#' p4 <- icauchit(x1) #' -#' # and to positive reals -#' y <- log1pe(x1) -#' -#' # transform from 10x3 to 10x4, where rows are a complete set of -#' # probabilities -#' x2 <- normal(1, 3, dim = c(10, 3)) -#' z <- imultilogit(x2) +#' # and to positive reals +#' y <- log1pe(x1) #' +#' # transform from 10x3 to 10x4, where rows are a complete set of +#' # probabilities +#' x2 <- normal(1, 3, dim = c(10, 3)) +#' z <- imultilogit(x2) #' } NULL #' @rdname transforms #' @export -iprobit <- function(x) - op("iprobit", x, tf_operation = "tf_iprobit", - representations = list(probit = x)) +iprobit <- function(x) { + op("iprobit", x, + tf_operation = "tf_iprobit", + representations = list(probit = x) + ) +} #' @rdname transforms #' @export ilogit <- function(x) { - op("ilogit", x, tf_operation = "tf$nn$sigmoid", - representations = list(logit = x)) + op("ilogit", x, + tf_operation = "tf$nn$sigmoid", + representations = list(logit = x) + ) } #' @rdname transforms #' @export -icloglog <- function(x) +icloglog <- function(x) { op("icloglog", x, tf_operation = "tf_icloglog") +} #' @rdname transforms #' @export -icauchit <- function(x) +icauchit <- function(x) { op("icauchit", x, tf_operation = "tf_icauchit") +} #' @rdname transforms #' @export -log1pe <- function(x) +log1pe <- function(x) { op("log1pe", x, tf_operation = "tf$nn$softplus") +} #' @rdname transforms #' @export imultilogit <- function(x) { - dim <- dim(x) - # check it's a matrix - if (length(dim) != 2) { - stop("imultilogit expects a 2D greta array", - call. = FALSE) - } + check_2d(x) op("imultilogit", x, - dim = dim + c(0, 1), - tf_operation = "tf_imultilogit") + dim = dim + c(0, 1), + tf_operation = "tf_imultilogit" + ) } diff --git a/R/unknowns_class.R b/R/unknowns_class.R index 0a5faf8d..345d4f18 100644 --- a/R/unknowns_class.R +++ b/R/unknowns_class.R @@ -1,38 +1,57 @@ -# Create objects of class 'unknowns' to nicely print ? valued arrays - -as.unknowns <- function(x) { # nolint +#' @title Create objects of class 'unknowns' to nicely print ? valued arrays +#' @param x object to convert to "unknowns" class +#' @export +as.unknowns <- function(x) { # nolint UseMethod("as.unknowns") } -as.unknowns.unknowns <- function(x) { # nolint +#' @export +as.unknowns.unknowns <- function(x) { # nolint x } -as.unknowns.array <- function(x) { # nolint + +#' @export +as.unknowns.array <- function(x) { # nolint class(x) <- c("unknowns", class(x)) x } -as.unknowns.matrix <- function(x) { # nolint +#' @export +as.unknowns.matrix <- function(x) { # nolint as.unknowns.array(x) } -strip_unknown_class <- function(x) { - classes <- class(x) - classes <- classes[classes != "unknowns"] - class(x) <- classes - x -} - #' @export -print.unknowns <- function(x, ...) { +print.unknowns <- function(x, ..., n = 10) { # remove 'unknown' class attribute - x <- strip_unknown_class(x) + x <- unclass(x) # set NA values to ? for printing x[is.na(x)] <- " ?" + n_print <- getOption("greta.print_max") %||% n + + n_unknowns <- length(x) + x_head <- head(x, n = n_print) + remaining_vals <- n_unknowns - n_print + # print with question marks - print.default(x, quote = FALSE, ...) + print.default(x_head, quote = FALSE) + + cli::cli_text("\n") + + if (remaining_vals <= 0) { + return(invisible(x)) + } + + if (remaining_vals > 0 ) { + cli::cli_alert_info( + text = c( + "i" = "{remaining_vals} more values\n", + "i" = "Use {.code print(n = ...)} to see more values" + ) + ) + } } @@ -42,13 +61,17 @@ unknowns <- function(dims = c(1, 1), data = as.numeric(NA)) { as.unknowns(x) } -# set dims like on a matrix/array -`dim<-.unknowns` <- function(x, value) { # nolint - x <- strip_unknown_class(x) +#' @title set dims like on a matrix/array +#' @param x matrix/array to set values to +#' @param value values that are being set set +#' @export +`dim<-.unknowns` <- function(x, value) { # nolint + x <- unclass(x) dim(x) <- value as.unknowns(x) } -unknowns_module <- module(unknowns, - as.unknowns, - strip_unknown_class) +unknowns_module <- module( + unknowns, + as.unknowns +) diff --git a/R/utils.R b/R/utils.R index 08c75b48..70cb276c 100644 --- a/R/utils.R +++ b/R/utils.R @@ -2,7 +2,6 @@ # create a named list module <- function(..., sort = TRUE) { - dots <- list(...) names <- names(dots) @@ -18,151 +17,81 @@ module <- function(..., sort = TRUE) { names(dots) <- names } - if (sort) + if (sort) { dots <- dots[order(names(dots))] + } dots - } # find out whether the usr has conda installed and visible #' @importFrom reticulate conda_binary have_conda <- function() { conda_bin <- tryCatch(reticulate::conda_binary("auto"), - error = function(e) NULL) + error = function(e) NULL + ) !is.null(conda_bin) } #' @importFrom reticulate py_available have_python <- function() { - tryCatch(reticulate::py_available(initialize = TRUE), - error = function(e) FALSE) + tryCatch( + expr = reticulate::py_available(initialize = TRUE), + error = function(e) FALSE + ) } #' @importFrom reticulate py_module_available have_tfp <- function() { - reticulate::py_module_available("tensorflow_probability") -} - -#' @importFrom reticulate py_module_available -have_tf <- function() { - reticulate::py_module_available("tensorflow") -} - -# check tensorflow and tensorflow-probability are installed and have valid -# versions. error, warn, or message if not and (if not an error) return an -# invisible logical saying whether it is valid - -#' @importFrom utils compareVersion -check_tf_version <- function(alert = c("none", - "error", - "warn", - "message", - "startup")) { - - alert <- match.arg(alert) - - py_available <- TRUE - tf_available <- TRUE - tfp_available <- TRUE + is_tfp_available <- reticulate::py_module_available("tensorflow_probability") - # check python installation - if (!have_python()) { + if (is_tfp_available) { - text <- paste0("\n\ngreta requires Python and several Python packages ", - "to be installed, but no Python installation was detected.\n", - "You can install Python directly from ", - "https://www.python.org/downloads/ ", - "or with the Anaconda distribution from ", - "https://www.anaconda.com/download/") - - py_available <- tf_available <- tfp_available <- FALSE + pkg <- reticulate::import("pkg_resources") + tfp_version <- pkg$get_distribution("tensorflow_probability")$version + is_tfp_available <- utils::compareVersion("0.15.0", tfp_version) <= 0 } - if (py_available) { - - text <- NULL - - # check TF installation - if (!have_tf()) { - - text <- "TensorFlow isn't installed" - tf_available <- FALSE - - } else { - - tf_version <- tf$`__version__` - tf_version_valid <- utils::compareVersion("1.14.0", tf_version) != 1 + return(is_tfp_available) - if (!tf_version_valid) { - text <- paste0("you have TensorFlow version ", tf_version) - tf_available <- FALSE - } - - } - - # check TFP installation - if (!have_tfp()) { - - text <- paste0(text, - ifelse(is.null(text), "", " and "), - "TensorFlow Probability isn't installed") - tfp_available <- FALSE - - } else { - - pkg <- reticulate::import("pkg_resources") - tfp_version <- pkg$get_distribution("tensorflow_probability")$version - tfp_version_valid <- utils::compareVersion("0.7.0", tfp_version) != 1 +} - if (!tfp_version_valid) { - text <- paste0("you have TensorFlow Probability version ", tfp_version) - tfp_available <- FALSE - } +#' @importFrom reticulate py_module_available +have_tf <- function() { + is_tf_available <- reticulate::py_module_available("tensorflow") - } + if (is_tf_available) { - # if there was a problem, append the solution - if (!tf_available | !tfp_available) { + tf_version <- suppressMessages(tf$`__version__`) + is_tf_available <- utils::compareVersion("2.9.0", tf_version) <= 0 - install <- paste0( - " install_tensorflow(\n", - ifelse(have_conda(), " method = \"conda\",\n", ""), - " version = \"1.14.0\",\n", - " extra_packages = \"tensorflow-probability==0.7.0\"\n", - " )" - ) + } - # combine the problem and solution messages - text <- paste0( - "\n\n", - "This version of greta requires TensorFlow v1.14.0 ", - "and TensorFlow Probability v0.7.0, but ", text, ". ", - "To install the correct versions do:\n\n", install, - "\n" - ) + return(is_tf_available) - } +} +version_tf <- function(){ + if (have_tf()) { + tf$`__version__` + } else { + NULL } +} - if (!is.null(text)) { - switch(alert, - error = stop(text, call. = FALSE), - warn = warning(text, call. = FALSE), - message = message(text), - startup = packageStartupMessage(text), - none = NULL) +version_tfp <- function(){ + if (have_tfp()) { + tfp$`__version__` + } else { + NULL } - - invisible(py_available & tf_available & tfp_available) - } # helper for *apply statements on R6 objects -member <- function(x, method) - eval(parse(text = paste0("x$", method))) +member <- function(x, method) { + eval(parse(text = glue::glue("x${method}"))) +} get_element <- function(x, element) { x[[element]] @@ -185,22 +114,24 @@ fl <- function(x) { tf$constant(x, dtype = tf_float()) } -# get the tensor for the batch size in the dag currently defining (since it's -# not alway possible to pass the dag in) +# get the tensor for the batch size in the dag recently defined (since it's +# not always possible to pass the dag in) get_batch_size <- function() { - options()$greta_batch_size + greta_stash$batch_size } # coerce an integer(ish) vector to a list as expected in tensorflow shape # arguments #' @noRd #' @importFrom tensorflow shape -to_shape <- function(dim) +to_shape <- function(dim) { do.call(shape, as.list(dim)) +} # is this greta_array actually a scalar? -is_scalar <- function(x) +is_scalar <- function(x) { identical(dim(x), c(1L, 1L)) +} # is it a row vector? is_row <- function(x) { @@ -208,12 +139,18 @@ is_row <- function(x) { } # flatten a greta array into a column vector in column-major order -flatten <- function(x) +flatten <- function(x) { x[seq_along(x)] +} # return an integer to pass on as an RNG seed get_seed <- function() { - sample.int(1e12, 1) + # if n is >= 2^31 then the vector is represented as a double, and causes + # a bunch of TF mechanics to break as they require integers + sample.int( + n = 2^30, + size = 1 + ) } # does a pointer exist (as a named object) and is it from the current session @@ -235,22 +172,21 @@ future_seed <- function() { create_log_file <- function(create = FALSE) { filename <- tempfile(pattern = "greta_log_") - if (create) + if (create) { file.create(filename) + } filename } # given a number of bars to be printed at the same time, determine the width of # sub process bars, so they all fit on the same line bar_width <- function(n_bars) { - terminal_width <- options()$width # a space between each bar, divide up the remainder and add 2 spaces to each total_width <- terminal_width - (n_bars - 1) bar_width <- total_width %/% n_bars bar_width - 2 - } # record the messages produced by the expression in the file @@ -272,8 +208,10 @@ as_2d_array <- function(x) { x <- as.array(x) # coerce 1D arrays to column vectors - if (length(dim(x)) == 1) + one_dimensional <- n_dim(x) == 1 + if (one_dimensional) { dim(x) <- c(dim(x), 1) + } x } @@ -287,7 +225,8 @@ add_first_dim <- function(x) { # drop the additional dimension at the beginning of an array drop_first_dim <- function(x) { x <- as.array(x) - if (length(dim(x)) > 1) { + not_1d <- n_dim(x) > 1 + if (not_1d) { x <- array(x, dim = dim(x)[-1]) } x @@ -303,7 +242,8 @@ tile_first_dim <- function(x, times) { # if x is an R matrix representing a column vector, make it a plain R vector drop_column_dim <- function(x) { dims <- dim(x) - if (length(dims) == 2 && dims[2] == 1L) { + is_2_by_1 <- length(dims) == 2 && dims[2] == 1L + if (is_2_by_1) { x <- as.vector(x) } x @@ -321,73 +261,73 @@ tile_to_batch <- function(x, batch_size) { # run time) expand_to_batch <- function(x, y) { batch_size <- tf$shape(y)[[0]] - tile_to_batch(x, batch_size) + ndim <- n_dim(x) + tf$tile(x, c(batch_size, rep(1L, ndim - 1))) } # does this tensor have a batch dimension (of unknown size) as its first # dimension? -has_batch <- function(x) is.null(dim(x)[[1]]) +has_batch <- function(x) is.na(dim(x)[1]) # given a list of tensors, if none or all of them have a batch dimension, return # the list. If any (but not all) of them has a batch dimension, tile the # unbatched ones (which are assumed to have first dimension 1) to match the # dimension of the batched ones dimension match_batches <- function(values) { - is_tensor <- vapply(values, inherits, "tensorflow.tensor", FUN.VALUE = FALSE) values_mutable <- values[is_tensor] have_batches <- vapply(values_mutable, has_batch, FUN.VALUE = TRUE) - # if any, but not all, have a batch, dimension, tile the others to match the - # batch - if (!all(have_batches) & any(have_batches)) { - + any_but_not_all_have_batch_and_dim <- !all(have_batches) & any(have_batches) + if (any_but_not_all_have_batch_and_dim) { + # tile the others to match the batch target_id <- which(have_batches)[1] target <- values_mutable[[target_id]] for (i in which(!have_batches)) { values_mutable[[i]] <- expand_to_batch(values_mutable[[i]], target) } - } values[is_tensor] <- values_mutable values - } # split a 3D array of n_samples * n_chains * n_parameters posterior samples into # a list of n_chains 2D arrays of dimension n_samples * n_parameters split_chains <- function(samples_array) { - dims_in <- dim(samples_array) dims_out <- dims_in[-2] n_chains <- dims_in[2] - lapply(seq_len(n_chains), - function(i) { - x <- samples_array[, i, , drop = FALSE] - dim(x) <- dims_out - x - }) - + lapply( + seq_len(n_chains), + function(i) { + x <- samples_array[, i, , drop = FALSE] + dim(x) <- dims_out + x + } + ) } # take a greta array dimension and return the dimension of the hessian to return # to the user hessian_dims <- function(dim) { - if (length(dim) == 2 && dim[2] == 1L) { + has_2d <- length(dim) == 2 + is_2_by_1 <- has_2d && dim[2] == 1L + if (is_2_by_1) { dim <- dim[1] } rep(dim, 2) } # generate a random 8-digit hexadecimal string -rhex <- function() +rhex <- function() { paste(as.raw(sample.int(256L, 4, TRUE) - 1L), collapse = "") +} # stop TensorFlow messaging about deprecations etc. #' @importFrom reticulate py_set_attr import @@ -519,598 +459,36 @@ has_distribution <- function(node) { !is.null(node$distribution) } -misc_module <- module(module, - check_tf_version, - member, - node_type, - tf_float, - fl, - to_shape, - is_scalar, - flatten, - get_seed, - live_pointer, - future_seed, - create_log_file, - bar_width, - record, - as_2d_array, - add_first_dim, - drop_first_dim, - tile_first_dim, - drop_column_dim, - tile_to_batch, - expand_to_batch, - has_batch, - match_batches, - split_chains, - hessian_dims, - rhex, - gss, - disable_tensorflow_logging, - pad_vector) - -# check dimensions of arguments to ops, and return the maximum dimension -check_dims <- function(..., target_dim = NULL) { - - # coerce args to greta arrays - elem_list <- list(...) - elem_list <- lapply(elem_list, as.greta_array) - - # dimensions of each - dim_list <- lapply(elem_list, dim) - - # as text, for printing - dims_paste <- vapply(dim_list, paste, "", collapse = "x") - dims_text <- paste(dims_paste, collapse = ", ") - - # which are scalars - scalars <- vapply(elem_list, is_scalar, FALSE) - - # if more than one is non-scalar, need to check them - if (sum(!scalars) > 1) { - - match_first <- vapply(dim_list[!scalars], - identical, - FUN.VALUE = FALSE, - dim_list[!scalars][[1]]) - - # if they're non-scalar, but have the same dimensions, that's fine too - if (!all(match_first)) { - - # otherwise it's not fine - msg <- sprintf("incompatible dimensions: %s", - dims_text) - stop(msg, call. = FALSE) - - } - } - - # if there's a target dimension, make sure they all match it - if (!is.null(target_dim)) { - - # make sure it's 2D - if (length(target_dim) == 1) - target_dim <- c(target_dim, 1) - - target_dim <- as.integer(target_dim) - - # if they are all scalars, that's fine too - if (!all(scalars)) { - - # check all arguments against this - matches_target <- vapply(dim_list[!scalars], - identical, - FUN.VALUE = FALSE, - target_dim) - - # error if not - if (!all(matches_target)) { - stop(sprintf(paste("array dimensions should be %s,", - "but input dimensions were %s"), - paste(target_dim, collapse = "x"), - dims_text), - call. = FALSE) - } - - } - - output_dim <- target_dim - - } else { - - # otherwise, find the correct output dimension - dim_lengths <- vapply(dim_list, length, numeric(1)) - dim_list <- lapply(dim_list, pad_vector, to_length = max(dim_lengths)) - output_dim <- do.call(pmax, dim_list) - - } - - output_dim - -} - -# make sure a greta array is 2D -check_2d <- function(x) { - - if (length(dim(x)) != 2L) { - stop("parameters of multivariate distributions ", - "cannot have more than two dimensions", - call. = FALSE) - } -} - -check_square <- function(x) { - dim <- dim(x) - ndim <- length(dim) - is_square <- ndim == 2 && dim[1] == dim[2] - if (!is_square) { - stop("expected a 2D square greta array, but object had dimension ", - paste(dim, collapse = "x"), - call. = FALSE) - } -} - -# given lists of greta arrays for the vector and scalar parameters (can be -# matrices and column vectors, respectively, where number of rows implies the -# number of realisations) and an optional target number of realisations, error -# if there's a mismatch, and otherwise return the output number of realisations -check_n_realisations <- function(vectors = list(), - scalars = list(), - target = NULL) { - - # get the number of rows in the vector and scalar objects - nrows <- lapply(c(vectors, scalars), nrow) - - # which are single rows - single_rows <- unlist(nrows) == 1 - - # if more than one has multiple rows, need to check them - if (sum(!single_rows) > 1) { - - match_first <- vapply(nrows[!single_rows], - identical, - FUN.VALUE = FALSE, - nrows[!single_rows][[1]]) - - # if they're non-scalar, but have the same dimensions, that's fine too - if (!all(match_first)) { - - # otherwise it's not fine - msg <- sprintf("incompatible number of rows: %s", - paste(nrows, collapse = " vs ")) - stop(msg, call. = FALSE) - - } - } - - # if there's a target number of realisations, check it's valid and make sure - # they all match it - if (!is.null(target)) { - - # make sure it's a scalar - if (length(target) != 1 || target < 1) { - stop("'n_realisations' must be a positive scalar integer ", - "giving the number of rows of the output", - call. = FALSE) - } - - target <- as.integer(target) - - # if they are all scalars, that's fine too - if (!all(single_rows)) { - - # check all arguments against this - matches_target <- vapply(nrows[!single_rows], - identical, - FUN.VALUE = FALSE, - target) - - # error if not - if (!all(matches_target)) { - stop(sprintf(paste("number of realisations should be %s,", - "but arguments had %s rows"), - target, - paste(nrows, collapse = ", ")), - call. = FALSE) - } - - } - - n_realisations <- target - - } else { - - # otherwise, find the correct output dimension - n_realisations <- max(unlist(nrows)) - - } - - n_realisations - -} - - -# check the dimension of maultivariate parameters matches, and matches the -# optional target dimension -check_dimension <- function(vectors = list(), - squares = list(), - target = NULL, - min_dimension = 2L) { - - # get the number of columns in the vector and scalar objects - ncols <- lapply(c(vectors, squares), ncol) - - # if there's a target dimension, check then use that: - if (!is.null(target)) { - - # make sure it's a scalar - if (length(target) != 1 || target < 1 || !is.finite(target)) { - stop("'dimension' must be a positive scalar integer ", - "giving the dimension of the distribution", - call. = FALSE) - } - - dimension <- as.integer(target) - - } else { - - # otherwise, get it from the first parameter - dimension <- ncols[[1]] - - } - - # check it's big enough - if (dimension < min_dimension) { - stop("the dimension of this distribution must be at least ", - min_dimension, " but was ", dimension, - "\n\nmultivariate distributions treat each *row* as a separate ", - "realisation - perhaps you need to transpose something?", - call. = FALSE) - } - - # make sure all the parameters match this dimension - match_dimension <- vapply(ncols, identical, dimension, - FUN.VALUE = FALSE) - - if (!all(match_dimension)) { - - # otherwise it's not fine - msg <- sprintf(paste0("the distribution dimension should be %s, ", - "but parameters implied dimensions: %s\n\n", - "multivariate distributions treat each *row* as a ", - "separate realisation - perhaps you need to ", - "transpose something?"), - dimension, - paste(ncols, collapse = " vs ")) - stop(msg, call. = FALSE) - - } - - dimension - -} - -# check dimensions of arguments to multivariate distributions -# if n_realisations isn't given, get it from the objects passed in -# if dimension isn't given, get it from the objects passed in -# if n_realisations *is* given, and the objects have one row, replicate them -# if n_realisations is given, and the objects have multiple rows, they must -# match. - -# the objects passed in can either be vector-like (like 'mean'), -# scalar-like (like 'size'), or square (like 'Sigma'). -check_multivariate_dims <- function(vectors = list(), - scalars = list(), - squares = list(), - n_realisations = NULL, - dimension = NULL, - min_dimension = 2L) { - - # coerce args to greta arrays - vectors <- lapply(vectors, as.greta_array) - scalars <- lapply(scalars, as.greta_array) - squares <- lapply(squares, as.greta_array) - - # make sure they are all 2D and the squares are square - lapply(c(vectors, scalars, squares), check_2d) - lapply(squares, check_square) - - # check and return the output number of distribution realisations - n_realisations <- check_n_realisations(vectors, - scalars, - n_realisations) - - # check and return the distribution dimension - dimension <- check_dimension(vectors, - squares, - dimension, - min_dimension) - - # return the output greta array dimension - c(n_realisations, dimension) - -} - - -# check truncation for different distributions -check_positive <- function(truncation) { - if (truncation[1] < 0) { - stop("lower bound must be 0 or higher", - call. = FALSE) - } -} - -check_unit <- function(truncation) { - if (truncation[1] < 0 | truncation[2] > 1) { - stop("lower and upper bounds must be between 0 and 1", - call. = FALSE) - } -} - -# check whether the function calling this is being used as the 'family' argument -# of another modelling function -check_in_family <- function(function_name, arg) { - - if (missing(arg)) { - # if the first argument is missing, the user might be doing - # `family = binomial()` or similar - arg_is_link <- TRUE - } else { - # if the first argument is one of these text strings, the user might be - # doing `family = binomial("logit")` or similar - links <- c("logit", "probit", "cloglog", "cauchit", - "log", "identity", "sqrt") - arg_is_link <- inherits(arg, "character") && - length(arg) == 1 && arg %in% links - } - - # if it's being executed in an environment where it's named 'family', the user - # might be doing `family = binomial` or similar - greta_function <- get(function_name, envir = asNamespace("greta")) - family <- parent.frame(2)$family - function_is_family <- !is.null(family) && identical(family, greta_function) - - # nice user-friendly error message - if (arg_is_link | function_is_family) { - msg <- paste0("It looks like you're using greta's ", function_name, - " function in the family argment of another model.", - " Maybe you want to use 'family = stats::", function_name, - "' instead?") - stop(msg, call. = FALSE) - } - -} - -# get & return information about the future plan, and error nicely if invalid - -#' @importFrom future plan future -check_future_plan <- function() { - - plan_info <- future::plan() - - plan_is <- list(parallel = !inherits(plan_info, "sequential"), - cluster = inherits(plan_info, "cluster"), - multiprocess = inherits(plan_info, "multiprocess"), - multisession = inherits(plan_info, "multisession"), - local = TRUE) - - # if running in parallel - if (plan_is$parallel) { - - # if it's a cluster, check there's no forking - if (plan_is$cluster) { - - # This stopgap trick from Henrik on github: - f <- future::future(NULL, lazy = TRUE) - workers <- f$workers - if (inherits(workers, "cluster")) { - worker <- workers[[1]] - if (inherits(worker, "forknode")) { - stop("parallel mcmc samplers cannot be run with a fork cluster", - call. = FALSE) - } - } - - # check whether the cluster is local - if (!is.null(worker$host)) { - localhosts <- c("localhost", "127.0.0.1", Sys.info()[["nodename"]]) - plan_is$local <- worker$host %in% localhosts - } - - } else { - - # if multi*, check it's multisession - if (plan_is$multiprocess && !plan_is$multisession) { - stop("parallel mcmc samplers cannot be run with plan(multiprocess) or ", - "plan(multicore)", - call. = FALSE) - } - - } - - } - - plan_is - -} - -# check a list of greta arrays and return a list with names scraped from call -check_greta_arrays <- function(greta_array_list, fun_name, hint = NULL) { - - # check they are greta arrays - are_greta_arrays <- vapply(greta_array_list, - inherits, "greta_array", - FUN.VALUE = FALSE) - - - msg <- NULL - - if (length(greta_array_list) == 0) { - - msg <- "could not find any non-data greta arrays" - - } - - if (!all(are_greta_arrays)) { - - unexpected_items <- names(greta_array_list)[!are_greta_arrays] - - msg <- ngettext(length(unexpected_items), - paste0("The following objects passed to ", - fun_name, "() are not greta arrays: "), - paste0("The following object passed to ", - fun_name, "() is not a greta array: ")) - - msg <- paste(msg, paste(unexpected_items, sep = ", ")) - - } - - - - if (!is.null(msg)) { - stop(msg, hint, call. = FALSE) - } - - greta_array_list - -} - -# check the provided list of greta array fixed values (as used in calculate and -# simulate) is valid -check_values_list <- function(values, env) { - - # get the values and their names - names <- names(values) - stopifnot(length(names) == length(values)) - - # get the corresponding greta arrays - fixed_greta_arrays <- lapply(names, get, envir = env) - - # make sure that's what they are - are_greta_arrays <- vapply(fixed_greta_arrays, - inherits, - "greta_array", - FUN.VALUE = FALSE) - - if (!all(are_greta_arrays)) { - stop("the names of arguments to values must all correspond to named ", - "greta arrays", - call. = FALSE) - } - - # coerce value to have the correct dimensions - assign_dim <- function(value, greta_array) { - array <- strip_unknown_class(get_node(greta_array)$value()) - if (length(array) != length(value)) { - stop("a provided value has different number of elements", - " than the greta array", call. = FALSE) - } - array[] <- value - array - } - - # make sure the values have the correct dimensions - values <- mapply(assign_dim, - values, - fixed_greta_arrays, - SIMPLIFY = FALSE) - - list(fixed_greta_arrays = fixed_greta_arrays, - values = values) - -} - -# check that all the variable greta arrays on which the target greta array -# depends are in the list fixed_greta_arrays (for use in calculate_list) -check_dependencies_satisfied <- function(target, fixed_greta_arrays, dag, env) { - - dependency_names <- function(x) { - get_node(x)$parent_names(recursive = TRUE) - } - - # find all the nodes depended on by this one - dependencies <- dependency_names(target) - - # find all the nodes depended on by the new values, and remove them from the - # list - complete_dependencies <- vapply( - fixed_greta_arrays, - dependency_names, - FUN.VALUE = character(1) - ) - - unmet <- !dependencies %in% complete_dependencies - unmet_dependencies <- dependencies[unmet] - - # find all of the remaining nodes that are variables - unmet_nodes <- dag$node_list[unmet_dependencies] - unmet_node_types <- vapply(unmet_nodes, node_type, FUN.VALUE = "") - is_variable <- unmet_node_types == "variable" - - # if there are any undefined variables - if (any(is_variable)) { - - # try to find the associated greta arrays to provide a more informative - # error message - greta_arrays <- all_greta_arrays(env, include_data = FALSE) - - greta_array_node_names <- vapply(greta_arrays, - function(x) get_node(x)$unique_name, - FUN.VALUE = "") - - unmet_variables <- unmet_nodes[is_variable] - - matches <- names(unmet_variables) %in% greta_array_node_names - - unmet_names_idx <- greta_array_node_names %in% names(unmet_variables) - unmet_names <- names(greta_array_node_names)[unmet_names_idx] - - # build the message - msg <- paste("values have not been provided for all greta arrays on which", - "the target depends, and nsim has not been set.") - - if (any(matches)) { - names_text <- paste(unmet_names, collapse = ", ") - msg <- paste(msg, - sprintf("Please provide values for the greta array%s: %s", - ifelse(length(matches) > 1, "s", ""), - names_text)) - } else { - msg <- paste(msg, - "\nThe names of the missing greta arrays", - "could not be detected") - } - - stop(msg, - call. = FALSE) - } -} - -check_cum_op <- function(x) { - dims <- dim(x) - if (length(dims) > 2 | dims[2] != 1) { - stop("'x' must be a column vector, but has dimensions ", - paste(dims, collapse = " x "), - call. = FALSE) - } -} - -complex_error <- function(z) { - stop("greta does not yet support complex numbers", - call. = FALSE) -} -checks_module <- module(check_dims, - check_unit, - check_positive, - check_in_family, - check_future_plan, - check_greta_arrays, - check_values_list, - check_dependencies_satisfied, - check_cum_op, - complex_error) +misc_module <- module( + module, + member, + node_type, + tf_float, + fl, + to_shape, + is_scalar, + flatten, + get_seed, + live_pointer, + future_seed, + create_log_file, + bar_width, + record, + as_2d_array, + add_first_dim, + drop_first_dim, + tile_first_dim, + drop_column_dim, + expand_to_batch, + has_batch, + match_batches, + split_chains, + hessian_dims, + rhex, + disable_tensorflow_logging, + pad_vector +) # convert an array to a vector row-wise flatten_rowwise <- function(array) { @@ -1122,11 +500,11 @@ flatten_rowwise <- function(array) { # convert an vector to an array row-wise unflatten_rowwise <- function(array, dim) { - array <- as.array(array) # if any dim has length 1, make it a column vector - if (length(dim) == 1) + if (length(dim) == 1) { dim <- c(dim, 1) + } dim(array) <- rev(dim) array <- aperm(array, rev(seq_along(dim))) @@ -1146,10 +524,12 @@ dummy_greta_array <- function(x) { do.call(zeros, list(dim(x))) } -dummy_array_module <- module(flatten_rowwise, - unflatten_rowwise, - dummy, - dummy_greta_array) +dummy_array_module <- module( + flatten_rowwise, + unflatten_rowwise, + dummy, + dummy_greta_array +) # given a base colour, return a function taking a value between 0 and 1 and # returning a colour linearly interpolated between black, the colour and white, @@ -1167,18 +547,22 @@ palettize <- function(base_colour) { # colour scheme for plotting #' @importFrom grDevices col2rgb -greta_col <- function(which = c("main", - "dark", - "light", - "lighter", - "super_light"), - colour = "#996bc7") { +greta_col <- function(which = c( + "main", + "dark", + "light", + "lighter", + "super_light" +), +colour = "#996bc7") { # tests if a color encoded as string can be converted to RGB tryCatch( is.matrix(grDevices::col2rgb(colour)), error = function(e) { - stop(paste("Invalid colour:", colour), call. = FALSE) + cli::cli_abort( + "Invalid colour: {colour}" + ) } ) @@ -1189,11 +573,14 @@ greta_col <- function(which = c("main", main = pal(0.55), # 55% light = pal(0.65), # 65%ish lighter = pal(0.85), # 85%ish - super_light = pal(0.95)) # 95%ish + super_light = pal(0.95) + ) # 95%ish } -colour_module <- module(palettize, - greta_col) +colour_module <- module( + palettize, + greta_col +) # look in the environment specified by env, and return a named list of all greta # arrays in that environment @@ -1207,34 +594,32 @@ all_greta_arrays <- function(env = parent.frame(), all_objects <- list() for (name in all_object_names) { all_objects[[name]] <- tryCatch(get(name, envir = env), - error = function(e) NULL) + error = function(e) NULL + ) } # find the greta arrays - is_greta_array <- vapply(all_objects, - inherits, - "greta_array", - FUN.VALUE = FALSE) + is_greta_array <- are_greta_array(all_objects) + all_arrays <- all_objects[is_greta_array] # optionally strip out the data arrays if (!include_data) { - is_data <- vapply(all_arrays, - function(x) inherits(get_node(x), "data_node"), - FUN.VALUE = FALSE) + function(x) is.data_node(get_node(x)), + FUN.VALUE = FALSE + ) all_arrays <- all_arrays[!is_data] - } all_arrays - } # suppress the R or python output of R expressions quietly <- function(expr) { py_out <- reticulate::py_capture_output( - r_out <- capture.output(expr)) + r_out <- capture.output(expr) + ) out <- c(py_out, r_out) invisible(out) } @@ -1242,26 +627,11 @@ quietly <- function(expr) { # evaluate expressions (dag density or gradient), capturing numerical errors # like matrix inversions as bad samples, and erroring otherwise cleanly <- function(expr) { - res <- tryCatch(expr, error = function(e) e) - # if it errored - if (inherits(res, "error")) { - - # check for known numerical errors - numerical_errors <- vapply(greta_stash$numerical_messages, - grepl, - res$message, - FUN.VALUE = 0) == 1 - - # if it was just a numerical error, quietly return a bad value - if (!any(numerical_errors)) - stop("greta hit a tensorflow error:\n\n", res, call. = FALSE) - - } + check_for_errors(res) res - } # prepare a matrix of draws and return as an mcmc object @@ -1273,12 +643,17 @@ prepare_draws <- function(draws, thin = 1) { coda::mcmc(draws_df, thin = thin) } -build_sampler <- function(initial_values, sampler, model, seed = get_seed()) { - +build_sampler <- function(initial_values, sampler, model, seed = get_seed(), + compute_options) { + ## TF1/2 retracing + ## This is where a retracing warning happens + ## in mcmc sampler$class$new(initial_values, model, sampler$parameters, - seed = seed) + seed = seed, + compute_options = compute_options + ) } # unlist and flatten a list of arrays to a vector row-wise @@ -1288,65 +663,6 @@ unlist_tf <- function(x) { do.call(c, x) } -#' @importFrom future availableCores -check_n_cores <- function(n_cores, samplers, plan_is) { - - # if the plan is remote, and the user hasn't specificed the number of cores, - # leave it as all of them - if (is.null(n_cores) & !plan_is$local) { - return(NULL) - } - - n_cores_detected <- future::availableCores() - allowed_n_cores <- seq_len(n_cores_detected) - - # check user-provided cores - if (!is.null(n_cores) && !n_cores %in% allowed_n_cores) { - - check_positive_integer(n_cores, "n_cores") - - message("\n", n_cores, " cores were requested, but only ", - n_cores_detected, " are available.") - - n_cores <- NULL - - } - - # if n_cores isn't user-specified, set it so - # there's no clash between samplers - if (is.null(n_cores)) - n_cores <- floor(n_cores_detected / samplers) - - # make sure there's at least 1 - n_cores <- max(n_cores, 1) - - as.integer(n_cores) - -} - -check_positive_integer <- function(x, name = "") { - - suppressWarnings(x <- as.integer(x)) - - if (length(x) != 1 | is.na(x) | x < 1) { - stop(name, " must be a positive integer", - call. = FALSE) - } - - x - -} - -# batch sizes must be positive numerics, rounded off to integers -check_trace_batch_size <- function(x) { - valid <- is.numeric(x) && length(x) == 1 && x >= 1 - if (!valid) { - stop("trace_batch_size must be a single numeric value ", - "greater than or equal to 1", - call. = FALSE) - } - x -} # get better names for the scalar elements of a greta array, for labelling mcmc # samples @@ -1354,10 +670,11 @@ get_indices_text <- function(dims, name) { ndim <- prod(dims) if (ndim > 1) { vec <- seq_len(ndim) - if (length(vec)) + if (length(vec)) { indices <- arrayInd(vec, dims) + } mid_text <- apply(indices, 1, paste, collapse = ",") - name <- paste0(name, "[", mid_text, "]") + name <- glue::glue("{name}[{mid_text}]") } name } @@ -1379,85 +696,102 @@ flatten_trace <- function(i, trace_list) { # extract the model information object from mcmc samples returned by # stashed_samples, and error nicely if there's something fishy -get_model_info <- function(draws, name = "value") { +get_model_info <- function(draws) { - if (!inherits(draws, "greta_mcmc_list")) { - stop(name, " must be an greta_mcmc_list object created by greta::mcmc(), ", - "greta::stashed_samples() or greta::extra_samples()", - call. = FALSE) - } + check_if_greta_mcmc_list(draws) model_info <- attr(draws, "model_info") - valid <- !is.null(model_info) - if (!valid) { - stop(name, " is an mcmc.list object, but is not associated with any ", - "model information, perhaps it wasn't created by greta::mcmc(), ", - "greta::stashed_samples() or greta::extra_samples() ?", - call. = FALSE) - } + check_if_model_info(model_info) model_info - } -sampler_utils_module <- module(all_greta_arrays, - cleanly, - build_sampler, - prepare_draws, - unlist_tf, - check_future_plan, - check_n_cores, - check_positive_integer, - get_indices_text, - flatten_trace, - get_model_info) - +sampler_utils_module <- module( + all_greta_arrays, + cleanly, + build_sampler, + prepare_draws, + unlist_tf, + get_indices_text, + flatten_trace, + get_model_info +) + +# TF1/2 check remove? +# Is this still needed with the new `tf_function` from TF2? +# I cannot actually currently see uses of `as_tf_function ` in the code +# base currently # convert a function on greta arrays into a function on corresponding tensors, # given the greta arrays for inputs. When executed, this needs to be wrapped in # dag$on_graph() to get the tensors connected up with the rest of the graph +# NOTE: Could use this as a way of getting the functions we need from greta +# we could use this as a way of returning a function that TF recognises +# as a function tensorflow function that returns tensors as_tf_function <- function(r_fun, ...) { # run the operation on isolated greta arrays, so nothing gets attached to the # model real greta arrays in dots + # creating a fake greta array ga_dummies <- lapply(list(...), dummy_greta_array) + + # now run the function on these completely separate ones ga_out <- do.call(r_fun, ga_dummies) ga_out + # a function that will act on TF things function(...) { - tensor_inputs <- list(...) # if any of these are shapeless, make them into greta scalars (3D) - tensor_inputs <- lapply(tensor_inputs, - function(x) { - if (identical(dim(x), list())) - x <- tf$reshape(x, shape(1, 1, 1)) - x - }) + tensor_inputs <- lapply( + tensor_inputs, + function(x) { + empty_dim <- identical(dim(x), list()) + if (empty_dim) { + x <- tf$reshape(x, shape(1, 1, 1)) + } + x + } + ) # create a sub-dag for these operations, from ga_dummies to ga_out - if (!is.list(ga_out)) + if (!is.list(ga_out)) { ga_out <- list(ga_out) + } targets <- c(ga_out, ga_dummies) sub_dag <- dag_class$new(targets, tf_float = options()$greta_tf_float) + # TF1/2 check remove + # `get_default_graph()` doesn't work with either eager execution or + # `tf.function`. # use the default graph, so that it can be overwritten when this is called? # alternatively fetch from above, or put it in greta_stash? - sub_dag$tf_graph <- tf$compat$v1$get_default_graph() + # sub_dag$tf_graph <- tf$compat$v1$get_default_graph() sub_tfe <- sub_dag$tf_environment + # pass on the batch size, used when defining data + # - how many chains or whatever to use + # get the batch size from the input tensors - it should be written to the + # stash by the main dag - but only if a main dag is defined. What about in calculate? + sub_tfe$batch_size <- get_batch_size() + # set the input tensors as the values for the dummy greta arrays in the new # tf_environment node_dummies <- lapply(ga_dummies, get_node) tf_names <- lapply(node_dummies, sub_dag$tf_name) - for (i in seq_along(tf_names)) + for (i in seq_along(tf_names)) { assign(tf_names[[i]], tensor_inputs[[i]], envir = sub_tfe) + } # have output node define_tf in the new environment, with data defined as # constants + # trying to not get them to use placeholders + # (TF can have data as a placeholder or a constant) + # (using a constant is expensive, normally) greta_stash$data_as_constants <- TRUE + # TODO explore changin this to previous state on.exit(greta_stash$data_as_constants <- NULL) tf_out <- list() @@ -1476,17 +810,487 @@ as_tf_function <- function(r_fun, ...) { } tf_out - } +} +is_windows <- function() { + identical(.Platform$OS.type, "windows") } greta_array_ops_module <- module(as_tf_function) + # utilities to export via .internals -utilities_module <- module(misc = misc_module, - dummy_arrays = dummy_array_module, - greta_array_operations = greta_array_ops_module, - samplers = sampler_utils_module, - checks = checks_module, - colours = colour_module) +utilities_module <- module( + misc = misc_module, + dummy_arrays = dummy_array_module, + greta_array_operations = greta_array_ops_module, + samplers = sampler_utils_module, + colours = colour_module +) + +# remove empty strings +base_remove_empty_string <- function(string){ + string[string != ""] +} + + +other_install_fail_msg <- function(error_passed){ + # drop "" + error_passed <- base_remove_empty_string(error_passed) + cli::format_error( + message = c( + "Stopping as installation of {.pkg greta} dependencies failed", + "An error occured:", + "{.code {cat(error_passed)}}", + "You can perform the entire installation manually with:", + "{.code reticulate::install_miniconda()}", + "Then:", + "{.code reticulate::conda_create(envname = 'greta-env-tf2', \\ + python_version = '3.8')}", + "Then:", + "{.code reticulate::py_install( + packages = c( + 'numpy', + 'tensorflow', + 'tensorflow-probability' + ), + pip = TRUE + )}", + "Then, restart R, and load {.pkg greta} with: {.code library(greta)}", + "If this does not work, lodge an issue on github at:", + "{.url https://github.com/greta-dev/greta/issues/new}" + ) + ) +} + +timeout_install_msg <- function(timeout = 5, py_error = NULL){ + msg <- c( + "Stopping as installation of {.pkg greta} dependencies took longer than \\ + {timeout} minutes", + "You can increase the timeout time by increasing the {.arg timeout} \\ + argument.", + "For example, to wait 5 minutes:", + "{.code install_greta_deps(timeout = 5)}", + "Alternatively, you can perform the entire installation with:", + "{.code reticulate::install_miniconda()}", + "Then:", + "{.code reticulate::conda_create(envname = 'greta-env-tf2', \\ + python_version = '3.8')}", + "Then:", + "{.code reticulate::py_install( + packages = c( + 'numpy', + 'tensorflow', + 'tensorflow-probability' + ), + pip = TRUE + )}", + "Then, restart R, and load {.pkg greta} with: {.code library(greta)}" + ) + + if (nchar(py_error) == 0) { + py_error <- NULL + } + + if (is.null(py_error)){ + cli::format_error( + message = msg + ) + } else { + msg <- c( + msg, + "Additionally, the following error appeared:", + "{cat({py_error})}" + ) + cli::format_error( + message = msg + ) + } +} + +is_DiagrammeR_installed <- function(){ + requireNamespace("DiagrammeR", quietly = TRUE) +} + +check_if_software_available <- function(software_available, + version = NULL, + ideal_version = NULL, + software_name){ + + cli::cli_process_start("checking if {.pkg {software_name}} available") + # if the software is detected + + if (!software_available) { + cli::cli_process_failed( + msg_failed = "{.pkg {software_name}} not available" + ) + } + + if (software_available) { + + if (is.null(ideal_version) & !is.null(version)){ + cli::cli_process_done( + msg_done = "{.pkg {software_name}} (v{version}) available" + ) + } + + # if it has a version and ideal version + has_ideal_version <- !is.null(version) & !is.null(ideal_version) + if (has_ideal_version){ + version_chr <- paste0(version) + version_match <- compareVersion(version_chr, ideal_version) == 0 + + if (version_match){ + cli::cli_process_done( + msg_done = "{.pkg {software_name}} (v{version}) available" + ) + } + if (!version_match){ + cli::cli_process_failed( + msg_failed = "{.pkg {software_name}} available, \\ + however {.strong {ideal_version}} is needed and \\ + {.strong {version}} was detected" + ) + } + # if there is no version for the software + } else if (is.null(version)){ + cli::cli_process_done( + msg_done = "{.pkg {software_name}} available" + ) + } + } +} + +compare_version_vec <- Vectorize( + FUN = compareVersion, + vectorize.args = "b", + SIMPLIFY = TRUE + ) + +#' Greta Situation Report +#' +#' This checks if Python, Tensorflow, Tensorflow Probability, and the greta +#' conda environment are available, and also loads and initialises python +#' +#' @return Message if greta is ready to use +#' @export +#' +#' @examples +#' \dontrun{ +#' greta_sitrep() +#' } +greta_sitrep <- function(){ + + check_if_software_available(software_available = have_python(), + version = reticulate::py_version(), + software_name = "python") + + check_if_software_available(software_available = have_tf(), + version = version_tf(), + software_name = "TensorFlow") + + check_if_software_available(software_available = have_tfp(), + version = version_tfp(), + software_name = "TensorFlow Probability") + + check_if_software_available(software_available = have_greta_conda_env(), + software_name = "greta conda environment") + + software_available <- c( + python = have_python(), + tf = have_tf(), + tfp = have_tfp(), + greta_env = have_greta_conda_env() + ) + + if (!all(software_available)) { + check_tf_version("warn") + } else if (all(software_available)) { + software_version <- data.frame( + software = c( + "python", + "tfp", + "tf" + ), + current = c( + paste0(reticulate::py_version()), + paste0(version_tf()), + paste0(version_tfp()) + ), + # versions must be at least this version + ideal = c( + "3.8", + "2.15.0", + "0.23.0" + ) + ) + software_version$match <- c( + compareVersion(software_version$current[1], software_version$ideal[1]) >= 0, + compareVersion(software_version$current[2], software_version$ideal[2]) >= 0, + compareVersion(software_version$current[3], software_version$ideal[3]) >= 0 + ) + + if (all(software_version$match)){ + check_tf_version("none") + cli::cli_alert_info("{.pkg greta} is ready to use!", + wrap = TRUE) + } else { + check_tf_version("warn") + } + + } + +} + +# adapted from https://github.com/rstudio/tensorflow/blob/main/R/utils.R +is_mac_arm64 <- function() { + if (nzchar(Sys.getenv("GRETA_M1_MESSAGE_TESTING"))) { + return(TRUE) + } + si <- Sys.info() + is_darwin <- si[["sysname"]] == "Darwin" + is_arm64 <- si[["machine"]] == "arm64" + is_darwin && is_arm64 +} + +read_char <- function(path){ + trimws(readChar(path, nchars = file.info(path)$size)) +} + +create_temp_file <- function(path){ + file_path <- tempfile(path, fileext = ".txt") + file.create(file_path) + return(file_path) +} + +#' @title Set GPU or CPU usage +#' @name gpu_cpu +#' @description These functions set the use of CPU or GPU inside of greta. They +#' simply return either "GPU" or "CPU", but in the future may handle more +#' complexity. These functions are passed to `compute_options` inside of a few +#' functions: [mcmc()], [opt()], and [calculate()]. +#' @export +gpu_only <- function(){ + "GPU" +} + +#' @rdname gpu_cpu +#' @export +cpu_only <- function(){ + "CPU" +} + +compute_text <- function(n_cores, compute_options){ + ifelse( + test = n_cores == 1, + yes = "each on 1 core", + no = ifelse( + test = compute_options == "CPU", + yes = glue::glue("on up to {n_cores} {compute_options} cores"), + # "on GPU" + no = glue::glue("on {compute_options}") + ) + ) +} + +connected_to_draws <- function(dag, mcmc_dag) { + names(dag$node_list) %in% names(mcmc_dag$node_list) +} + + + +is_using_gpu <- function(x){ + x == "GPU" +} + +is_using_cpu <- function(x){ + x == "CPU" +} + +`%||%` <- function(x, y) if (is.null(x)) y else x + +message_if_using_gpu <- function(compute_options){ + if (is_using_gpu(compute_options)) { + if (getOption("greta_gpu_message") %||% TRUE){ + cli::cli_inform( + c( + "NOTE: When using GPU, the random number seed may not always be \\ + respected (results may not be fully reproducible).", + "For more information, see details of the {.code compute_options} \\ + argument in {.code ?calculate}.", + "You can turn off this message with:", + "{.code options(greta_gpu_message = FALSE)}" + ) + ) + } + } +} + +n_dim <- function(x) length(dim(x)) +is_2d <- function(x) n_dim(x) == 2 + +is.node <- function(x, ...){ + inherits(x, "node") +} + +is.data_node <- function(x, ...){ + inherits(x, "data_node") +} + +is.distribution_node <- function(x, ...){ + inherits(x, "distribution_node") +} + +is.variable_node <- function(x, ...){ + inherits(x, "variable_node") +} + +is.greta_model <- function(x, ...){ + inherits(x, "greta_model") +} + +is.unknowns <- function(x, ...){ + inherits(x, "unknowns") +} + +is.initials <- function(x, ...){ + inherits(x, "initials") +} + +node_type_colour <- function(type){ + + switch_cols <- switch( + type, + variable = cli::col_red(type), + data = cli::col_green(type), + operation = cli::col_cyan(type), + distribution = cli::col_yellow(type) + ) + + switch_cols +} + +extract_unique_names <- function(x){ + vapply( + X = x, + FUN = member, + "unique_name", + FUN.VALUE = character(1) + ) +} + +are_identical <- function(x, y){ + vapply( + X = x, + FUN = identical, + FUN.VALUE = logical(1), + y + ) +} + +#' Vectorised is.null +#' +#' @param x list of things that may contain NULL values +#' +#' @return logical +#' @export +#' +#' @examples +#' is.null(list(NULL, NULL, 1)) +#' are_null(list(NULL, NULL, 1)) +#' are_null(list(NULL, NULL, NULL)) +#' are_null(list(1, 2, 3)) +#' is.null(list(1, 2, 3)) +are_null <- function(x){ + vapply( + x, + is.null, + FUN.VALUE = logical(1) + ) +} + +are_greta_array <- function(x){ + vapply( + x, + is.greta_array, + FUN.VALUE = logical(1) + ) +} + +have_distribution <- function(x){ + vapply( + x, + has_distribution, + FUN.VALUE = logical(1) + ) +} + +is_windows <- function() { + identical(.Platform$OS.type, "windows") +} + +is_mac <- function() { + as.logical(Sys.info()["sysname"] == "Darwin") +} + +is_linux <- function() { + identical(tolower(Sys.info()[["sysname"]]), "linux") +} + +os_name <- function(){ + os <- c( + windows = is_windows(), + mac = is_mac(), + linux = is_linux() + ) + names(which(os)) +} + +# semantic version finder +closest_version <- function(current, available){ + + available <- sort(available) + not_available <- !(current %in% available) + + current_gt_available <- all(current > available) + current_lt_available <- all(current < available) + current_btn_available <- any(current > available) && any(current < available) + + pick_largest <- not_available && current_gt_available + pick_smallest <- not_available && current_lt_available + + if (pick_largest) { + closest <- max(available) + } + + if (pick_smallest) { + closest <- min(available) + } + + if (current_btn_available){ + version_gt <- current > available + closest <- max(available[version_gt]) + } + + return(closest) + +} + +outside_version_range <- function(provided, range) { + version_num <- numeric_version(provided) + above_range <- all(version_num > range) + below_range <- all(version_num < range) + outside_range <- above_range || below_range + outside_range +} + +pretty_dim <- function(x) paste0(dim(x), collapse = "x") + +are_initials <- function(x){ + vapply( + X = x, + FUN = is.initials, + FUN.VALUE = logical(1) + ) +} diff --git a/R/variable.R b/R/variable.R index 62d605e6..ad7a698f 100644 --- a/R/variable.R +++ b/R/variable.R @@ -1,30 +1,30 @@ #' @rdname variable #' @export #' @title create greta variables -#' @description \code{variable()} creates greta arrays representing unknown +#' @description `variable()` creates greta arrays representing unknown #' parameters, to be learned during model fitting. These parameters are not #' associated with a probability distribution. To create a variable greta #' array following a specific probability distribution, see -#' \code{\link{distributions}}. +#' [distributions()]. #' #' @param lower,upper optional limits to variables. These must be specified as #' numerics, they cannot be greta arrays (though see details for a -#' workaround). They can be set to \code{-Inf} (\code{lower}) or \code{Inf} -#' (\code{upper}), though \code{lower} must always be less than \code{upper}. +#' workaround). They can be set to `-Inf` (`lower`) or `Inf` +#' (`upper`), though `lower` must always be less than `upper`. #' #' @param dim the dimensions of the greta array to be returned, either a scalar #' or a vector of positive integers. See details. #' -#' @details \code{lower} and \code{upper} must be fixed, they cannot be greta +#' @details `lower` and `upper` must be fixed, they cannot be greta #' arrays. This ensures these values can always be transformed to a continuous #' scale to run the samplers efficiently. However, a variable parameter with #' dynamic limits can always be created by first defining a variable #' constrained between 0 and 1, and then transforming it to the required #' scale. See below for an example. #' -#' The constraints in \code{simplex_variable()} and \code{ordered_variable()} +#' The constraints in `simplex_variable()` and `ordered_variable()` #' operate on the final dimension, which must have more than 1 element. -#' Passing in a scalar value for \code{dim} therefore results in a row-vector. +#' Passing in a scalar value for `dim` therefore results in a row-vector. #' #' @examples #' \dontrun{ @@ -40,19 +40,16 @@ #' #' # create a variable, with lower and upper defined by greta arrays #' min <- as_data(iris$Sepal.Length) -#' max <- min ^ 2 +#' max <- min^2 #' d <- min + variable(0, 1, dim = nrow(iris)) * (max - min) #' } variable <- function(lower = -Inf, upper = Inf, dim = NULL) { - check_tf_version("error") - - if (inherits(lower, "greta_array") | inherits(upper, "greta_array")) - stop("lower and upper must be fixed, they cannot be another greta array") + check_param_greta_array(lower) + check_param_greta_array(upper) node <- variable_node$new(lower, upper, dim) as.greta_array(node) - } #' @export @@ -72,36 +69,34 @@ variable <- function(lower = -Inf, upper = Inf, dim = NULL) { #' cov <- chol2symm(e_cov) #' correl <- chol2symm(e_correl) cholesky_variable <- function(dim, correlation = FALSE) { - n_dim <- length(dim) if (n_dim == 1) { dim <- c(dim, dim) - } else if (n_dim == 2) { - if (dim[1] != dim[2]) { - stop("cholesky variables must be square, but dim was ", - paste(dim, collapse = " x "), call. = FALSE) - } - } else { - stop("dim can either be a scalar or a vector of length 2", - call. = FALSE) } + check_square(dim = dim) + check_dim_length(dim) + k <- dim[1] # dimension of the free state version free_dim <- ifelse(correlation, k * (k - 1) / 2, - k + k * (k - 1) / 2) + k + k * (k - 1) / 2 + ) # create variable node - node <- vble(truncation = c(-Inf, Inf), - dim = dim, - free_dim = free_dim) + node <- vble( + truncation = c(-Inf, Inf), + dim = dim, + free_dim = free_dim + ) # set the constraint, to enable transformation node$constraint <- ifelse(correlation, "correlation_matrix", - "covariance_matrix") + "covariance_matrix" + ) # set the printed value to be nicer cholesky_value <- unknowns(dim) @@ -110,7 +105,6 @@ cholesky_variable <- function(dim, correlation = FALSE) { # reeturn as a greta array as.greta_array(node) - } #' @export @@ -125,35 +119,32 @@ cholesky_variable <- function(dim, correlation = FALSE) { simplex_variable <- function(dim) { # for scalar dims, return a row vector - if (length(dim) == 1) + if (length(dim) == 1) { dim <- c(1, dim) + } dim <- check_dims(target_dim = dim) - - # dimension of the free state version n_dim <- length(dim) last_dim <- dim[n_dim] - if (!last_dim > 1) { - stop("the final dimension of a simplex variable must have ", - "more than one element", - call. = FALSE) - } + # dimension of the free state version + check_final_dim(dim, thing = "simplex variable") raw_dim <- dim raw_dim[n_dim] <- last_dim - 1 free_dim <- prod(raw_dim) # create variable node - node <- vble(truncation = c(-Inf, Inf), - dim = dim, - free_dim = free_dim) + node <- vble( + truncation = c(-Inf, Inf), + dim = dim, + free_dim = free_dim + ) # set the constraint, to enable transformation node$constraint <- "simplex" # reeturn as a greta array as.greta_array(node) - } #' @export @@ -168,18 +159,13 @@ simplex_variable <- function(dim) { ordered_variable <- function(dim) { # for scalar dims, return a row vector - if (length(dim) == 1) + if (length(dim) == 1) { dim <- c(1, dim) + } dim <- check_dims(target_dim = dim) - # dimension of the free state version - n_dim <- length(dim) - if (!dim[n_dim] > 1) { - stop("the final dimension of an ordered variable must have ", - "more than one element", - call. = FALSE) - } + check_final_dim(dim, thing = "ordered variable") # create variable node node <- vble(truncation = c(-Inf, Inf), dim = dim) @@ -189,5 +175,4 @@ ordered_variable <- function(dim) { # reeturn as a greta array as.greta_array(node) - } diff --git a/R/write-logfiles.R b/R/write-logfiles.R new file mode 100644 index 00000000..65d772c2 --- /dev/null +++ b/R/write-logfiles.R @@ -0,0 +1,163 @@ +#' Set logfile path when installing greta +#' +#' To help debug greta installation, you can save all installation output +#' to a single logfile. +#' +#' @param path valid path to logfile - should end with `.html` so you +#' can benefit from the html rendering. +#' +#' @return nothing - sets an environment variable for use with +#' [install_greta_deps()]. +#' @export +greta_set_install_logfile <- function(path){ + Sys.setenv("GRETA_INSTALLATION_LOG"=path) +} + +#' Write greta dependency installation log file +#' +#' This can only be run after installation has happened with +#' [install_greta_deps()], and before restarting R. +#' +#' @param path a path with an HTML (.html) extension. +#' +#' @return nothing - writes to file +#' @export +write_greta_install_log <- function(path = greta_logfile) { + + cli::cli_progress_step( + msg = "Writing logfile to {.path {path}}", + msg_done = "Logfile written to {.path {path}}" + ) + + cli::cli_progress_step( + msg = "Open with: {.run open_greta_install_log()}" + ) + + template <- ' +

Greta installation logfile

+

Created: {{sys_date}}

+

Use this logfile to explore potential issues in installation with greta

+

Try opening this in a HTML browser and searching the text for "error" with Cmd/Ctrl+F

+ +

Miniconda

+ +
+ + Miniconda Installation Notes +
+        
+          {{{miniconda_notes}}}
+        
+      
+
+
+ +
+ + Miniconda Installation Errors + +
+        
+          {{{miniconda_error}}}
+        
+      
+
+ +

Conda Environment

+ +
+ + Conda Environment Notes + +
+        
+     {{{conda_create_notes}}}
+        
+      
+
+ +
+ + Conda Environment Errors + +
+        
+      {{{conda_create_error}}}
+        
+      
+
+ +

Python Module Installation

+ +
+ + Python Module Installation Notes + +
+        
+  {{{conda_install_notes}}}
+        
+      
+
+ +
+ + Python Module Installation Errors + +
+        
+       {{{conda_install_error}}}
+        
+      
+
+ ' + + greta_install_data <- list( + sys_date = Sys.time(), + miniconda_notes = greta_stash$miniconda_notes, + miniconda_error = greta_stash$miniconda_error, + conda_create_notes = greta_stash$conda_create_notes, + conda_create_error = greta_stash$conda_create_error, + conda_install_notes = greta_stash$conda_install_notes, + conda_install_error = greta_stash$conda_install_error + ) + + writeLines(whisker::whisker.render(template, greta_install_data), + path) + +} + +# returns NULL if no envvar +sys_get_env <- function(envvar){ + retrieved_envvar <- Sys.getenv(envvar) + env_exists <- nzchar(retrieved_envvar) + if (env_exists){ + envvar + } else { + envvar <- NULL + } + + envvar +} +#' Read a greta logfile +#' +#' This is a convenience function to facilitate reading logfiles. It opens +#' a HTML browser using [utils::browseURL()]. It will search for +#' the environment variable "GRETA_INSTALLATION_LOG" or default to +#' `tools::R_user_dir("greta")`. To set +#' "GRETA_INSTALLATION_LOG" you can use +#' `Sys.setenv('GRETA_INSTALLATION_LOG'='path/to/logfile.html')`. Or use +#' [greta_set_install_logfile()] to set the path, e.g., +#' `greta_set_install_logfile('path/to/logfile.html')`. +#' +#' @return opens a URL in your default HTML browser. +#' @export +open_greta_install_log <- function(){ + + greta_logfile <- sys_get_env("GRETA_INSTALLATION_LOG") + + greta_logfile <- greta_logfile %||% greta_default_logfile() + + utils::browseURL(greta_logfile) + +} diff --git a/R/zzz.R b/R/zzz.R new file mode 100644 index 00000000..9f5116fe --- /dev/null +++ b/R/zzz.R @@ -0,0 +1,32 @@ +# load tf probability +tfp <- reticulate::import("tensorflow_probability", delay_load = TRUE) +tf <- reticulate::import("tensorflow", delay_load = TRUE) + +# crate the node list object whenever the package is loaded +.onLoad <- function(libname, pkgname) { # nolint + + # unset reticulate python environment, for more details, see: + # https://github.com/greta-dev/greta/issues/444 + Sys.unsetenv("RETICULATE_PYTHON") + + if (have_greta_conda_env()) { + use_greta_conda_env() + } + + # silence TF's CPU instructions message + Sys.setenv(TF_CPP_MIN_LOG_LEVEL = 2) + + # silence messages about deprecation etc. + # disable_tensorflow_logging() + + # warn if TF version is bad + # check_tf_version("startup") + + # switch back to 0-based extraction in tensorflow, and don't warn about + # indexing with tensors + options(tensorflow.one_based_extract = FALSE) + options(tensorflow.extract.warn_tensors_passed_asis = FALSE) + + # default float type + options(greta_tf_float = "float64") +} diff --git a/README.md b/README.md index ea1ec5e8..1a3fb436 100644 --- a/README.md +++ b/README.md @@ -15,18 +15,40 @@ CRAN: install.packages("greta") ``` -or the development version from GitHub: +Or install the development version of `greta` from [r-universe](http://greta-dev.r-universe.dev/): + +```r +install.packages("greta", repos = c("https://greta-dev.r-universe.dev", "https://cloud.r-project.org")) +``` + +(Note - installing from r-universe is just like installing from CRAN, and should be faster and more convenient than installing from GitHub) + +You can also install the development version of `greta` via GitHub: ``` r devtools::install_github("greta-dev/greta") ``` -[![build -status](https://travis-ci.org/greta-dev/greta.svg?branch=master)](https://travis-ci.org/greta-dev/greta) -[![codecov.io](https://codecov.io/github/greta-dev/greta/coverage.svg?branch=master)](https://codecov.io/github/greta-dev/greta?branch=master) -[![cran -version](http://www.r-pkg.org/badges/version/greta)](https://cran.rstudio.com/web/packages/greta) -[![license](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0) +# Installing Python Dependencies + +The `install_greta_deps()` function helps install the Python dependencies (Google's [TensorFlow](https://www.tensorflow.org/) and [tensorflow-probability](https://github.com/tensorflow/probability)). + +By default, `install_greta_deps()` installs versions TF 2.15.0, and TFP version 0.23.0, using python 3.10. To change the versions of TF, TFP, or python that you want to use, you specify the `deps` argument of `install_greta_deps()`, which used `greta_deps_spec()`. See `?install_greta_deps()` or `?greta_deps_spec()` for more information. + +This helper function, `install_greta_deps()`, installs the exact pythons package versions needed. It also places these inside a conda environment, "greta-env-tf2". This isolates these exact python modules from other python installations, so that only `greta` will see them. This helps avoids installation issues, where previously you might update tensorflow on your computer and overwrite the current version needed by `greta`. Using this "greta-env-tf2" conda environment means installing other python packages should not be impact the Python packages needed by `greta`. + +If these python modules aren't yet installed, when `greta` is used, it provides instructions on how to install them for your system. If in doubt follow those. + + +[![CRAN status](https://www.r-pkg.org/badges/version/greta)](https://CRAN.R-project.org/package=greta) +[![R-CMD-check](https://github.com/greta-dev/greta/workflows/R-CMD-check/badge.svg)](https://github.com/greta-dev/greta/actions) +[![greta status badge](https://greta-dev.r-universe.dev/badges/greta)](https://greta-dev.r-universe.dev/greta) +[![Codecov test coverage](https://codecov.io/gh/greta-dev/greta/branch/master/graph/badge.svg)](https://app.codecov.io/gh/greta-dev/greta?branch=master) + + +[![license](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://opensource.org/license/apache-2-0) [![doi](https://zenodo.org/badge/73758247.svg)](https://zenodo.org/badge/latestdoi/73758247) -[![joss](http://joss.theoj.org/papers/62e62338d8ba44ff9e5dc295cf631477/status.svg)](http://joss.theoj.org/papers/62e62338d8ba44ff9e5dc295cf631477) +[![joss](https://joss.theoj.org/papers/10.21105/joss.01601/status.svg)](https://joss.theoj.org/papers/10.21105/joss.01601) + + ![](logos/bottom_banner.png) diff --git a/_pkgdown.yml b/_pkgdown.yml index 13e220fb..506351b9 100644 --- a/_pkgdown.yml +++ b/_pkgdown.yml @@ -45,19 +45,25 @@ reference: navbar: structure: - left: [get_started, docs, examples, analyses, more] + left: [get_started, docs, examples, analyses, more, news, FAQ] right: [forum, twitter, github] components: home: ~ reference: ~ articles: ~ - news: ~ get_started: text: get started href: articles/get_started.html examples: text: examples href: articles/example_models.html + FAQ: + text: FAQ + href: articles/faq.html + news: + releases: + - text: "greta 0.4.0.9000" + href: "tbd" analyses: text: analyses menu: @@ -87,4 +93,4 @@ navbar: href: https://forum.greta-stats.org github: icon: fa-lg fa-github - href: https://github.com/greta-dev/greta + href: https://github.com/greta-dev/greta diff --git a/codecov.yml b/codecov.yml new file mode 100644 index 00000000..04c55859 --- /dev/null +++ b/codecov.yml @@ -0,0 +1,14 @@ +comment: false + +coverage: + status: + project: + default: + target: auto + threshold: 1% + informational: true + patch: + default: + target: auto + threshold: 1% + informational: true diff --git a/codemeta.json b/codemeta.json index 418086b3..9fdd8753 100644 --- a/codemeta.json +++ b/codemeta.json @@ -1,23 +1,20 @@ { - "@context": [ - "https://doi.org/10.5063/schema/codemeta-2.0", - "http://schema.org" - ], + "@context": "https://doi.org/10.5063/schema/codemeta-2.0", "@type": "SoftwareSourceCode", "identifier": "greta", - "description": "Write statistical models in R and fit them by MCMC and optimisation on CPUs and GPUs, using Google 'TensorFlow'.\n greta lets you write your own model like in BUGS, JAGS and Stan, except that you write models right in R, it scales well to massive datasets, and it’s easy to extend and build on.\n See the website for more information, including tutorials, examples, package documentation, and the greta forum.", + "description": "Write statistical models in R and fit them by MCMC and optimisation on CPUs and GPUs, using Google 'TensorFlow'. greta lets you write your own model like in BUGS, JAGS and Stan, except that you write models right in R, it scales well to massive datasets, and it’s easy to extend and build on. See the website for more information, including tutorials, examples, package documentation, and the greta forum.", "name": "greta: Simple and Scalable Statistical Modelling in R", - "codeRepository": "https://greta-stats.org", + "relatedLink": ["https://greta-stats.org", "https://CRAN.R-project.org/package=greta"], + "codeRepository": "https://github.com/greta-dev/greta", "issueTracker": "https://github.com/greta-dev/greta/issues", "license": "https://spdx.org/licenses/Apache-2.0", - "version": "0.3.1.9011", + "version": "0.5.0.9000", "programmingLanguage": { "@type": "ComputerLanguage", "name": "R", - "version": "3.6.2", "url": "https://r-project.org" }, - "runtimePlatform": "R version 3.6.2 (2019-12-12)", + "runtimePlatform": "R version 4.4.2 (2024-10-31)", "provider": { "@id": "https://cran.r-project.org", "@type": "Organization", @@ -31,6 +28,13 @@ "familyName": "Golding", "email": "nick.golding.research@gmail.com", "@id": "https://orcid.org/0000-0001-8916-5570" + }, + { + "@type": "Person", + "givenName": "Nicholas", + "familyName": "Tierney", + "email": "nicholas.tierney@gmail.com", + "@id": "https://orcid.org/0000-0003-1460-8722" } ], "contributor": [ @@ -95,41 +99,51 @@ "familyName": "Yen" } ], - "copyrightHolder": {}, - "funder": {}, "maintainer": [ { "@type": "Person", - "givenName": "Nick", - "familyName": "Golding", - "email": "nick.golding.research@gmail.com", - "@id": "https://orcid.org/0000-0001-8916-5570" + "givenName": "Nicholas", + "familyName": "Tierney", + "email": "nicholas.tierney@gmail.com", + "@id": "https://orcid.org/0000-0003-1460-8722" } ], "softwareSuggestions": [ { "@type": "SoftwareApplication", - "identifier": "knitr", - "name": "knitr", + "identifier": "bayesplot", + "name": "bayesplot", "provider": { "@id": "https://cran.r-project.org", "@type": "Organization", "name": "Comprehensive R Archive Network (CRAN)", "url": "https://cran.r-project.org" }, - "sameAs": "https://CRAN.R-project.org/package=knitr" + "sameAs": "https://CRAN.R-project.org/package=bayesplot" }, { "@type": "SoftwareApplication", - "identifier": "rmarkdown", - "name": "rmarkdown", + "identifier": "covr", + "name": "covr", "provider": { "@id": "https://cran.r-project.org", "@type": "Organization", "name": "Comprehensive R Archive Network (CRAN)", "url": "https://cran.r-project.org" }, - "sameAs": "https://CRAN.R-project.org/package=rmarkdown" + "sameAs": "https://CRAN.R-project.org/package=covr" + }, + { + "@type": "SoftwareApplication", + "identifier": "cramer", + "name": "cramer", + "provider": { + "@id": "https://cran.r-project.org", + "@type": "Organization", + "name": "Comprehensive R Archive Network (CRAN)", + "url": "https://cran.r-project.org" + }, + "sameAs": "https://CRAN.R-project.org/package=cramer" }, { "@type": "SoftwareApplication", @@ -145,15 +159,75 @@ }, { "@type": "SoftwareApplication", - "identifier": "bayesplot", - "name": "bayesplot", + "identifier": "dplyr", + "name": "dplyr", "provider": { "@id": "https://cran.r-project.org", "@type": "Organization", "name": "Comprehensive R Archive Network (CRAN)", "url": "https://cran.r-project.org" }, - "sameAs": "https://CRAN.R-project.org/package=bayesplot" + "sameAs": "https://CRAN.R-project.org/package=dplyr" + }, + { + "@type": "SoftwareApplication", + "identifier": "DiagrammeRsvg", + "name": "DiagrammeRsvg", + "provider": { + "@id": "https://cran.r-project.org", + "@type": "Organization", + "name": "Comprehensive R Archive Network (CRAN)", + "url": "https://cran.r-project.org" + }, + "sameAs": "https://CRAN.R-project.org/package=DiagrammeRsvg" + }, + { + "@type": "SoftwareApplication", + "identifier": "extraDistr", + "name": "extraDistr", + "provider": { + "@id": "https://cran.r-project.org", + "@type": "Organization", + "name": "Comprehensive R Archive Network (CRAN)", + "url": "https://cran.r-project.org" + }, + "sameAs": "https://CRAN.R-project.org/package=extraDistr" + }, + { + "@type": "SoftwareApplication", + "identifier": "fields", + "name": "fields", + "provider": { + "@id": "https://cran.r-project.org", + "@type": "Organization", + "name": "Comprehensive R Archive Network (CRAN)", + "url": "https://cran.r-project.org" + }, + "sameAs": "https://CRAN.R-project.org/package=fields" + }, + { + "@type": "SoftwareApplication", + "identifier": "ggplot2", + "name": "ggplot2", + "provider": { + "@id": "https://cran.r-project.org", + "@type": "Organization", + "name": "Comprehensive R Archive Network (CRAN)", + "url": "https://cran.r-project.org" + }, + "sameAs": "https://CRAN.R-project.org/package=ggplot2" + }, + { + "@type": "SoftwareApplication", + "identifier": "knitr", + "name": "knitr", + "provider": { + "@id": "https://cran.r-project.org", + "@type": "Organization", + "name": "Comprehensive R Archive Network (CRAN)", + "url": "https://cran.r-project.org" + }, + "sameAs": "https://CRAN.R-project.org/package=knitr" }, { "@type": "SoftwareApplication", @@ -169,15 +243,39 @@ }, { "@type": "SoftwareApplication", - "identifier": "testthat", - "name": "testthat", + "identifier": "MASS", + "name": "MASS", "provider": { "@id": "https://cran.r-project.org", "@type": "Organization", "name": "Comprehensive R Archive Network (CRAN)", "url": "https://cran.r-project.org" }, - "sameAs": "https://CRAN.R-project.org/package=testthat" + "sameAs": "https://CRAN.R-project.org/package=MASS" + }, + { + "@type": "SoftwareApplication", + "identifier": "MCMCpack", + "name": "MCMCpack", + "provider": { + "@id": "https://cran.r-project.org", + "@type": "Organization", + "name": "Comprehensive R Archive Network (CRAN)", + "url": "https://cran.r-project.org" + }, + "sameAs": "https://CRAN.R-project.org/package=MCMCpack" + }, + { + "@type": "SoftwareApplication", + "identifier": "mockery", + "name": "mockery", + "provider": { + "@id": "https://cran.r-project.org", + "@type": "Organization", + "name": "Comprehensive R Archive Network (CRAN)", + "url": "https://cran.r-project.org" + }, + "sameAs": "https://CRAN.R-project.org/package=mockery" }, { "@type": "SoftwareApplication", @@ -193,15 +291,27 @@ }, { "@type": "SoftwareApplication", - "identifier": "MCMCpack", - "name": "MCMCpack", + "identifier": "purrr", + "name": "purrr", "provider": { "@id": "https://cran.r-project.org", "@type": "Organization", "name": "Comprehensive R Archive Network (CRAN)", "url": "https://cran.r-project.org" }, - "sameAs": "https://CRAN.R-project.org/package=MCMCpack" + "sameAs": "https://CRAN.R-project.org/package=purrr" + }, + { + "@type": "SoftwareApplication", + "identifier": "rmarkdown", + "name": "rmarkdown", + "provider": { + "@id": "https://cran.r-project.org", + "@type": "Organization", + "name": "Comprehensive R Archive Network (CRAN)", + "url": "https://cran.r-project.org" + }, + "sameAs": "https://CRAN.R-project.org/package=rmarkdown" }, { "@type": "SoftwareApplication", @@ -217,162 +327,163 @@ }, { "@type": "SoftwareApplication", - "identifier": "extraDistr", - "name": "extraDistr", + "identifier": "rsvg", + "name": "rsvg", "provider": { "@id": "https://cran.r-project.org", "@type": "Organization", "name": "Comprehensive R Archive Network (CRAN)", "url": "https://cran.r-project.org" }, - "sameAs": "https://CRAN.R-project.org/package=extraDistr" + "sameAs": "https://CRAN.R-project.org/package=rsvg" }, { "@type": "SoftwareApplication", - "identifier": "truncdist", - "name": "truncdist", + "identifier": "spelling", + "name": "spelling", "provider": { "@id": "https://cran.r-project.org", "@type": "Organization", "name": "Comprehensive R Archive Network (CRAN)", "url": "https://cran.r-project.org" }, - "sameAs": "https://CRAN.R-project.org/package=truncdist" + "sameAs": "https://CRAN.R-project.org/package=spelling" }, { "@type": "SoftwareApplication", - "identifier": "cramer", - "name": "cramer", + "identifier": "testthat", + "name": "testthat", + "version": ">= 3.1.0", "provider": { "@id": "https://cran.r-project.org", "@type": "Organization", "name": "Comprehensive R Archive Network (CRAN)", "url": "https://cran.r-project.org" }, - "sameAs": "https://CRAN.R-project.org/package=cramer" + "sameAs": "https://CRAN.R-project.org/package=testthat" }, { "@type": "SoftwareApplication", - "identifier": "tidyverse", - "name": "tidyverse", + "identifier": "tibble", + "name": "tibble", "provider": { "@id": "https://cran.r-project.org", "@type": "Organization", "name": "Comprehensive R Archive Network (CRAN)", "url": "https://cran.r-project.org" }, - "sameAs": "https://CRAN.R-project.org/package=tidyverse" + "sameAs": "https://CRAN.R-project.org/package=tibble" }, { "@type": "SoftwareApplication", - "identifier": "fields", - "name": "fields", + "identifier": "tidyr", + "name": "tidyr", "provider": { "@id": "https://cran.r-project.org", "@type": "Organization", "name": "Comprehensive R Archive Network (CRAN)", "url": "https://cran.r-project.org" }, - "sameAs": "https://CRAN.R-project.org/package=fields" + "sameAs": "https://CRAN.R-project.org/package=tidyr" }, { "@type": "SoftwareApplication", - "identifier": "MASS", - "name": "MASS", + "identifier": "truncdist", + "name": "truncdist", "provider": { "@id": "https://cran.r-project.org", "@type": "Organization", "name": "Comprehensive R Archive Network (CRAN)", "url": "https://cran.r-project.org" }, - "sameAs": "https://CRAN.R-project.org/package=MASS" + "sameAs": "https://CRAN.R-project.org/package=truncdist" }, { "@type": "SoftwareApplication", - "identifier": "abind", - "name": "abind", + "identifier": "withr", + "name": "withr", "provider": { "@id": "https://cran.r-project.org", "@type": "Organization", "name": "Comprehensive R Archive Network (CRAN)", "url": "https://cran.r-project.org" }, - "sameAs": "https://CRAN.R-project.org/package=abind" + "sameAs": "https://CRAN.R-project.org/package=withr" }, { "@type": "SoftwareApplication", - "identifier": "spelling", - "name": "spelling", + "identifier": "rstudioapi", + "name": "rstudioapi", "provider": { "@id": "https://cran.r-project.org", "@type": "Organization", "name": "Comprehensive R Archive Network (CRAN)", "url": "https://cran.r-project.org" }, - "sameAs": "https://CRAN.R-project.org/package=spelling" + "sameAs": "https://CRAN.R-project.org/package=rstudioapi" } ], - "softwareRequirements": [ - { + "softwareRequirements": { + "1": { "@type": "SoftwareApplication", "identifier": "R", "name": "R", - "version": ">= 3.0" + "version": ">= 4.1.0" }, - { + "2": { "@type": "SoftwareApplication", - "identifier": "R6", - "name": "R6", + "identifier": "abind", + "name": "abind", "provider": { "@id": "https://cran.r-project.org", "@type": "Organization", "name": "Comprehensive R Archive Network (CRAN)", "url": "https://cran.r-project.org" }, - "sameAs": "https://CRAN.R-project.org/package=R6" + "sameAs": "https://CRAN.R-project.org/package=abind" }, - { + "3": { "@type": "SoftwareApplication", - "identifier": "tensorflow", - "name": "tensorflow", - "version": ">= 1.13.0", + "identifier": "callr", + "name": "callr", "provider": { "@id": "https://cran.r-project.org", "@type": "Organization", "name": "Comprehensive R Archive Network (CRAN)", "url": "https://cran.r-project.org" }, - "sameAs": "https://CRAN.R-project.org/package=tensorflow" + "sameAs": "https://CRAN.R-project.org/package=callr" }, - { + "4": { "@type": "SoftwareApplication", - "identifier": "reticulate", - "name": "reticulate", + "identifier": "cli", + "name": "cli", + "version": ">= 3.4.1", "provider": { "@id": "https://cran.r-project.org", "@type": "Organization", "name": "Comprehensive R Archive Network (CRAN)", "url": "https://cran.r-project.org" }, - "sameAs": "https://CRAN.R-project.org/package=reticulate" + "sameAs": "https://CRAN.R-project.org/package=cli" }, - { + "5": { "@type": "SoftwareApplication", - "identifier": "progress", - "name": "progress", - "version": ">= 1.2.0", + "identifier": "coda", + "name": "coda", "provider": { "@id": "https://cran.r-project.org", "@type": "Organization", "name": "Comprehensive R Archive Network (CRAN)", "url": "https://cran.r-project.org" }, - "sameAs": "https://CRAN.R-project.org/package=progress" + "sameAs": "https://CRAN.R-project.org/package=coda" }, - { + "6": { "@type": "SoftwareApplication", "identifier": "future", "name": "future", + "version": ">= 1.22.1", "provider": { "@id": "https://cran.r-project.org", "@type": "Organization", @@ -381,35 +492,137 @@ }, "sameAs": "https://CRAN.R-project.org/package=future" }, - { + "7": { "@type": "SoftwareApplication", - "identifier": "coda", - "name": "coda", + "identifier": "glue", + "name": "glue", + "version": ">= 1.5.1", "provider": { "@id": "https://cran.r-project.org", "@type": "Organization", "name": "Comprehensive R Archive Network (CRAN)", "url": "https://cran.r-project.org" }, - "sameAs": "https://CRAN.R-project.org/package=coda" + "sameAs": "https://CRAN.R-project.org/package=glue" }, - { + "8": { "@type": "SoftwareApplication", "identifier": "methods", "name": "methods" }, - { + "9": { "@type": "SoftwareApplication", - "identifier": "https://sysreqs.r-hub.io/get/python-2.7" - } - ], - "releaseNotes": "https://github.com/dill/greta/blob/master/NEWS.md", - "readme": "https://github.com/dill/greta/blob/master/README.md", - "fileSize": "504.898KB", - "contIntegration": [ - "https://travis-ci.org/greta-dev/greta", - "https://codecov.io/github/greta-dev/greta?branch=master" - ], + "identifier": "parallelly", + "name": "parallelly", + "version": ">= 1.29.0", + "provider": { + "@id": "https://cran.r-project.org", + "@type": "Organization", + "name": "Comprehensive R Archive Network (CRAN)", + "url": "https://cran.r-project.org" + }, + "sameAs": "https://CRAN.R-project.org/package=parallelly" + }, + "10": { + "@type": "SoftwareApplication", + "identifier": "progress", + "name": "progress", + "version": ">= 1.2.0", + "provider": { + "@id": "https://cran.r-project.org", + "@type": "Organization", + "name": "Comprehensive R Archive Network (CRAN)", + "url": "https://cran.r-project.org" + }, + "sameAs": "https://CRAN.R-project.org/package=progress" + }, + "11": { + "@type": "SoftwareApplication", + "identifier": "R6", + "name": "R6", + "provider": { + "@id": "https://cran.r-project.org", + "@type": "Organization", + "name": "Comprehensive R Archive Network (CRAN)", + "url": "https://cran.r-project.org" + }, + "sameAs": "https://CRAN.R-project.org/package=R6" + }, + "12": { + "@type": "SoftwareApplication", + "identifier": "reticulate", + "name": "reticulate", + "version": ">= 1.19.0", + "provider": { + "@id": "https://cran.r-project.org", + "@type": "Organization", + "name": "Comprehensive R Archive Network (CRAN)", + "url": "https://cran.r-project.org" + }, + "sameAs": "https://CRAN.R-project.org/package=reticulate" + }, + "13": { + "@type": "SoftwareApplication", + "identifier": "rlang", + "name": "rlang", + "provider": { + "@id": "https://cran.r-project.org", + "@type": "Organization", + "name": "Comprehensive R Archive Network (CRAN)", + "url": "https://cran.r-project.org" + }, + "sameAs": "https://CRAN.R-project.org/package=rlang" + }, + "14": { + "@type": "SoftwareApplication", + "identifier": "tensorflow", + "name": "tensorflow", + "version": "== 2.16.0", + "provider": { + "@id": "https://cran.r-project.org", + "@type": "Organization", + "name": "Comprehensive R Archive Network (CRAN)", + "url": "https://cran.r-project.org" + }, + "sameAs": "https://CRAN.R-project.org/package=tensorflow" + }, + "15": { + "@type": "SoftwareApplication", + "identifier": "tools", + "name": "tools" + }, + "16": { + "@type": "SoftwareApplication", + "identifier": "utils", + "name": "utils" + }, + "17": { + "@type": "SoftwareApplication", + "identifier": "whisker", + "name": "whisker", + "provider": { + "@id": "https://cran.r-project.org", + "@type": "Organization", + "name": "Comprehensive R Archive Network (CRAN)", + "url": "https://cran.r-project.org" + }, + "sameAs": "https://CRAN.R-project.org/package=whisker" + }, + "18": { + "@type": "SoftwareApplication", + "identifier": "yesno", + "name": "yesno", + "provider": { + "@id": "https://cran.r-project.org", + "@type": "Organization", + "name": "Comprehensive R Archive Network (CRAN)", + "url": "https://cran.r-project.org" + }, + "sameAs": "https://CRAN.R-project.org/package=yesno" + }, + "SystemRequirements": "Python (>= 3.7.0) with header files and shared\n library; TensorFlow (>= v2.0.0; https://www.tensorflow.org/); TensorFlow\n Probability (v0.8.0; https://www.tensorflow.org/probability/)" + }, + "fileSize": "1715.299KB", "citation": [ { "@type": "ScholarlyArticle", @@ -423,8 +636,7 @@ ], "name": "{greta}: simple and scalable statistical modelling in R", "identifier": "10.21105/joss.01601", - "url": "http://dx.doi.org/10.21105/joss.01601", - "paginiation": "1601", + "pagination": "1601", "@id": "https://doi.org/10.21105/joss.01601", "sameAs": "https://doi.org/10.21105/joss.01601", "isPartOf": { @@ -438,5 +650,8 @@ } } } - ] + ], + "releaseNotes": "https://github.com/greta-dev/greta/blob/master/NEWS.md", + "readme": "https://github.com/greta-dev/greta/blob/master/README.md", + "contIntegration": ["https://github.com/greta-dev/greta/actions", "https://app.codecov.io/gh/greta-dev/greta?branch=master"] } diff --git a/cran-comments.md b/cran-comments.md new file mode 100644 index 00000000..452a0cfa --- /dev/null +++ b/cran-comments.md @@ -0,0 +1,29 @@ +## Test environments +* local R installation, R 4.4.2 +* win-builder (devel) + +## R CMD check results + +0 errors | 0 warnings | 1 notes + +> Found the following (possibly) invalid URLs: + URL: http://www.phidot.org/software/mark/docs/book/ + From: inst/doc/example_models.html + Status: 403 + Message: Forbidden + +We could not find an issue with this link, or an alternative link. + +* Days since last update: 244 days + +## Submission notes + +This release is a substantial overhaul of the internals of greta to migrate the internals from tensorflow 1 to tensorflow 2. + +## revdepcheck results + +We checked 1 reverse dependencies, comparing R CMD check results across CRAN and dev versions of this package. + + * We saw 0 new problems + * We failed to check 0 packages + diff --git a/data-raw/valid-greta-deps.R b/data-raw/valid-greta-deps.R new file mode 100644 index 00000000..93a95a02 --- /dev/null +++ b/data-raw/valid-greta-deps.R @@ -0,0 +1,191 @@ +## code to prepare `DATASET` dataset goes here +library(rvest) +library(polite) +library(janitor) +library(tidyverse) + +linux_mac_deps <- "https://www.tensorflow.org/install/source" |> + bow() |> + scrape() + +windows_deps <- "https://www.tensorflow.org/install/source_windows" |> + bow() |> + scrape() + +get_tidy_html_tables <- function(html_raw){ + html_raw |> + html_table() |> + map(clean_names) +} + +bind_html_tables <- function(tidied_tables, os_hardware_names){ + tidied_tables |> + setNames(os_hardware_names) |> + bind_rows( + .id = "os_hardware" + ) |> + separate_wider_delim( + cols = "os_hardware", + delim = "-", + names = c("os", "hardware") + ) +} + +tidy_tf_dep_tables <- function(html_raw, os_hardware_names){ + html_raw |> + get_tidy_html_tables() |> + bind_html_tables(os_hardware_names) +} + +tf_deps_linux_mac <- linux_mac_deps |> + tidy_tf_dep_tables( + os_hardware_names = c( + "linux-cpu", + "linux-gpu", + "mac-cpu", + "mac-gpu" + ) + ) + +tf_deps_windows <- windows_deps |> + tidy_tf_dep_tables( + os_hardware_names = c( + "windows-cpu", + "windows-gpu" + ) + ) + +# check classes are the same +# waldo::compare( +# map(tf_deps_windows, class), +# map(tf_linux_mac_deps, class) +# ) + +tf_deps <- bind_rows( + tf_deps_windows, + tf_deps_linux_mac +) + +tf_cpu_deps <- tf_deps |> + filter( + hardware == "cpu" + ) |> + select(os, + version, + python_version) |> + mutate( + version = str_remove_all(version, "tensorflow-") + ) |> + rename( + tf_version = version + ) |> + mutate( + tf_lt2 = map_int(tf_version, \(x) compareVersion(x, "2.0.0")) + ) |> + filter( + tf_lt2 >= 0 + ) |> + select(-tf_lt2) |> + separate_wider_delim( + cols = python_version, + delim = "-", + names = c("python_version_min", "python_version_max") + ) + + +# TFP versions are in https://github.com/greta-dev/greta/issues/638#issuecomment-2268372432 + +# This is the 0.24.0 release of TensorFlow Probability. It is tested and stable against TensorFlow 2.16.1 and JAX 0.4.25 (cannot use as TF 2.15 uses keras 3 which has breaking changes) (Mar 13, 2024) +# + +tfp_to_tf_compatability <- tibble::tribble( + ~tfp_version, ~tf_version, + "tfp==0.24.0", "tf==2.16.1", + "tfp==0.23.0", "tf==2.15.0", + "tfp==0.22.1", "tf==2.14.0", + "tfp==0.22.0", "tf==2.14.0", + "tfp==0.21.0", "tf==2.13.0", + "tfp==0.20.0", "tf==2.12.0", + "tfp==0.19.0", "tf==2.11.0", + "tfp==0.18.0", "tf==2.10.0", + "tfp==0.17.0", "tf==2.9.1", + "tfp==0.16.0", "tf==2.8.0", + "tfp==0.15.0", "tf==2.7.0", + "tfp==0.14.1", "tf==2.6.0", + "tfp==0.14.0", "tf==2.6.0", + "tfp==0.13.0", "tf==2.5.0", + "tfp==0.12.2", "tf==2.4.0", + "tfp==0.12.1", "tf==2.4.0", + "tfp==0.12.0", "tf==2.4.0", + "tfp==0.11.1", "tf==2.3.0", + "tfp==0.11.0", "tf==2.3.0", + "tfp==0.10.1", "tf==2.2.0", + "tfp==0.9.0", "tf==2.1.0", + "tfp==0.8.0", "tf==2.0.0" +) |> + mutate( + tfp_version = str_remove_all(tfp_version,"tfp=="), + tf_version = str_remove_all(tf_version,"tf==") + ) + +tfp_to_tf_compatability + +extra_rows <- tibble( + os = c("windows", "linux", "mac"), + tf_version = rep("2.9.1", 3), + python_version_min = rep("3.7", 3), + python_version_max = rep("3.10", 3) +) + + + +numeric_version(tf_cpu_deps$tf_version) + +.deps_tf <- bind_rows(tf_cpu_deps, extra_rows) |> + mutate(tf_version = numeric_version(tf_version)) |> + arrange(os, desc(tf_version)) |> + mutate(tf_version = as.character(tf_version)) +.deps_tfp <- tfp_to_tf_compatability + +remove_before_comma <- function(x){ + trimws(str_remove_all(x, ".*?,")) +} + +greta_deps_tf_tfp <- .deps_tf |> + left_join(.deps_tfp, + by = "tf_version", + relationship = "many-to-many") |> + relocate(tfp_version, + .after = tf_version) |> + mutate( + python_version_min = remove_before_comma(python_version_min) + ) |> + mutate( + across( + contains("version"), + numeric_version + ) + ) |> + relocate( + tfp_version, + .after = os + ) |> + arrange(os, + desc(tfp_version)) |> + drop_na() |> + filter( + tfp_version < "0.24.0" + ) + + usethis::use_data( + .deps_tf, + .deps_tfp, + internal = TRUE, + overwrite = TRUE + ) + + usethis::use_data( + greta_deps_tf_tfp, + overwrite = TRUE + ) + diff --git a/data/greta_deps_tf_tfp.rda b/data/greta_deps_tf_tfp.rda new file mode 100644 index 00000000..8a7e288a Binary files /dev/null and b/data/greta_deps_tf_tfp.rda differ diff --git a/docs/CODE_OF_CONDUCT.html b/docs/CODE_OF_CONDUCT.html index d27b2d70..affe3a84 100644 --- a/docs/CODE_OF_CONDUCT.html +++ b/docs/CODE_OF_CONDUCT.html @@ -130,6 +130,12 @@ contribute to greta + +
  • + Changelog +
  • +
  • + FAQ
  • + +
  • + Changelog +
  • +
  • + FAQ
  • + +
  • + Changelog +
  • +
  • + FAQ
  • + +
  • + Changelog +
  • +
  • + FAQ
  • -
    avg_effect <- normal(mean = 0, sd = 10)
    -avg_effect
    +
    avg_effect <- normal(mean = 0, sd = 10)
    +avg_effect
    ## greta array (variable following a normal distribution)
     ## 
     ##      [,1]
    @@ -204,8 +210,8 @@ 

  • avg_stddev: normal density function (dnorm) with a mean of 5 and standard deviation of 1; controls the amount of variance between schools.
  • -
    avg_stddev <- normal(5, 1)
    -avg_stddev
    +
    avg_stddev <- normal(5, 1)
    +avg_stddev
    ## greta array (variable following a normal distribution)
     ## 
     ##      [,1]
    @@ -215,8 +221,8 @@ 

    school_effects_standard: normal density function (dnorm) with a mean of 0, standard deviation of 1 and dimension of 8 -
    school_effects_standard <- normal(0, 1, dim = length(N))
    -school_effects_standard
    +
    school_effects_standard <- normal(0, 1, dim = length(N))
    +school_effects_standard
    ## greta array (variable following a normal distribution)
     ## 
     ##      [,1]
    @@ -233,8 +239,8 @@ 

    school_effects: here we multiply the exponential of avg_stddev with school_effects_standard and add avg_effect -
    school_effects <- avg_effect + exp(avg_stddev) * school_effects_standard
    -school_effects
    +
    school_effects <- avg_effect + exp(avg_stddev) * school_effects_standard
    +school_effects
    ## greta array (operation)
     ## 
     ##      [,1]
    @@ -247,14 +253,14 @@ 

    ## [7,] ? ## [8,] ?

    An alternative would be to directly use the lognormal() density function for avg_stddev and use that to calculate school_effect:

    -
    avg_stddev <- lognormal(5, 1)
    -school_effects <- avg_effect + avg_stddev * school_effects_standard
    +
    avg_stddev <- lognormal(5, 1)
    +school_effects <- avg_effect + avg_stddev * school_effects_standard

    Likelihood

    Next, we want to link the variables and priors with the observed dependent data - in this case the school estimate treatment_effects. We define the likelihood over our observed estimates treatment_effects given a random sample from the normal probability distribution with mean school_effects and standard deviation treatment_stddevs. From this, we would now like to calculate the parameter of that probability distribution by using the distribution() function:

    -
    distribution(treatment_effects) <- normal(school_effects, treatment_stddevs)
    +
    distribution(treatment_effects) <- normal(school_effects, treatment_stddevs)

    @@ -262,16 +268,16 @@

    Now we have all the prerequisites for building a Hamiltonian Monte Carlo (HMC) to calculate the posterior distribution over the model’s parameters.

    We first define the model by combining the calculated avg_effect, avg_stddev and school_effects_standard variables so that we can sample from them during modelling. The model m we define below contains all our prior distributions and thus represent the combined density of the model.

    It is recommended that you check your model at this step by plotting the model graph. More information about these plots can be found here.

    -
    # defining the hierarchical model
    -m <- model(avg_effect, avg_stddev, school_effects_standard)
    -m
    +
    # defining the hierarchical model
    +m <- model(avg_effect, avg_stddev, school_effects_standard)
    +m
    ## greta model
    -
    plot(m)
    -
    -

    The actual sampling from the model happens with the mcmc() function. By default 1000 MCMC samples are drawn after warm-up. What we obtain is a probability measure that describes the likelihood of a set of randomly sampled values for the model variables.

    -
    # sampling
    -draws <- greta::mcmc(m, n_samples = 1000, warmup = 1000, chains = 4)
    -
    summary(draws)
    +
    plot(m)
    +
    +

    The actual sampling from the model happens with the mcmc() function. By default 1000 MCMC samples are drawn after warm-up. What we obtain is a probability measure that describes the likelihood of a set of randomly sampled values for the model variables.

    +
    # sampling
    +draws <- greta::mcmc(m, n_samples = 1000, warmup = 1000, chains = 4)
    +
    summary(draws)
    ## 
     ## Iterations = 1:1000
     ## Thinning interval = 1 
    @@ -282,96 +288,108 @@ 

    ## plus standard error of the mean: ## ## Mean SD Naive SE Time-series SE -## avg_stddev 13.34410 7.4121 0.11720 0.30686 -## school_effects_standard[1,1] 0.67942 0.8090 0.01279 0.01550 -## school_effects_standard[2,1] 0.07902 0.6941 0.01097 0.01349 -## school_effects_standard[3,1] -0.23530 0.7938 0.01255 0.01442 -## school_effects_standard[4,1] 0.02425 0.7215 0.01141 0.01321 -## school_effects_standard[5,1] -0.33197 0.6835 0.01081 0.01237 -## school_effects_standard[6,1] -0.20530 0.7410 0.01172 0.01409 -## school_effects_standard[7,1] 0.52226 0.7098 0.01122 0.01274 -## school_effects_standard[8,1] 0.16803 0.8303 0.01313 0.01615 -## avg_effect 5.96913 5.5232 0.08733 0.11305 +## avg_effect 5.66639 5.4058 0.08547 0.11406 +## avg_stddev 13.23355 7.0904 0.11211 0.24471 +## school_effects_standard[1,1] 0.65643 0.7890 0.01248 0.01573 +## school_effects_standard[2,1] 0.10173 0.7145 0.01130 0.01418 +## school_effects_standard[3,1] -0.21187 0.8164 0.01291 0.01618 +## school_effects_standard[4,1] 0.04093 0.7438 0.01176 0.01369 +## school_effects_standard[5,1] -0.29814 0.6720 0.01063 0.01319 +## school_effects_standard[6,1] -0.19047 0.7308 0.01155 0.01433 +## school_effects_standard[7,1] 0.52154 0.6945 0.01098 0.01326 +## school_effects_standard[8,1] 0.13518 0.8489 0.01342 0.01640 ## ## 2. Quantiles for each variable: ## ## 2.5% 25% 50% 75% 97.5% -## avg_stddev 3.8937 8.32668 11.85203 16.6972 30.9743 -## school_effects_standard[1,1] -0.9832 0.15694 0.69172 1.2197 2.2386 -## school_effects_standard[2,1] -1.2758 -0.36769 0.07515 0.5149 1.4459 -## school_effects_standard[3,1] -1.8624 -0.74132 -0.21911 0.2866 1.2835 -## school_effects_standard[4,1] -1.3963 -0.42649 0.02580 0.4916 1.4576 -## school_effects_standard[5,1] -1.6972 -0.75841 -0.31379 0.1215 0.9957 -## school_effects_standard[6,1] -1.6735 -0.68559 -0.21268 0.2821 1.2588 -## school_effects_standard[7,1] -0.8777 0.07559 0.52240 0.9760 1.9762 -## school_effects_standard[8,1] -1.4581 -0.38927 0.17397 0.7153 1.7875 -## avg_effect -5.1900 2.38110 5.92440 9.6904 16.8460

    -
    mcmc_trace(draws, facet_args = list(ncol = 3))
    +## avg_effect -5.3445 2.28764 5.77921 9.2812 15.6988 +## avg_stddev 4.1594 8.32819 11.71733 16.5100 33.1951 +## school_effects_standard[1,1] -0.9430 0.15193 0.66124 1.1683 2.2007 +## school_effects_standard[2,1] -1.3107 -0.34421 0.10414 0.5532 1.5196 +## school_effects_standard[3,1] -1.8459 -0.73635 -0.20636 0.3352 1.3145 +## school_effects_standard[4,1] -1.4767 -0.43877 0.05423 0.5166 1.5597 +## school_effects_standard[5,1] -1.6740 -0.72760 -0.28705 0.1321 0.9997 +## school_effects_standard[6,1] -1.6760 -0.65693 -0.17677 0.2787 1.2420 +## school_effects_standard[7,1] -0.8987 0.08377 0.53535 0.9619 1.9026 +## school_effects_standard[8,1] -1.5778 -0.42636 0.14659 0.6951 1.8485

    +
    mcmc_trace(draws, facet_args = list(ncol = 3))

    - +
    mcmc_intervals(draws)

    - +
    mcmc_acf_bar(draws)

    -
    mcmc_hist(draws, facet_args = list(ncol = 3))
    +
    mcmc_hist(draws, facet_args = list(ncol = 3))
    ## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

    Use of calculate() for transforming estimates to natural scale

    The calculate() function can be used with the transformation function used in building the model to get the school-specific posteriors chains. This function is also how you would get posterior predictive values.

    -
    # Calculate school effects on original scale
    -school_effects           <- avg_effect + avg_stddev * school_effects_standard
    -posterior_school_effects <- calculate(school_effects, draws) 
    +
    # Calculate school effects on original scale
    +school_effects           <- avg_effect + avg_stddev * school_effects_standard
    +posterior_school_effects <- calculate(school_effects, values = draws) 

    Comparison with Edward2 HMC

    As a sanity check that we parameterized our model correctly, we can compare the back-transformed school-specific estimates to the results from the Edward2 approach in the TensorFlow Probability documentation. The results are very similar.

    -
    # Posterior means via Edward2
    -edward2_school_means <-
    -  data.frame(tool = "Edward2",
    -             school = N,
    -             #mean_school_effects_standard = c(0.61157268, 0.06430732, -0.25459746,
    -             #                                 0.04828103, -0.36940941, -0.23154463,
    -             #                                 0.49402338,  0.13042814),
    -             mean = c(14.93237686, 7.50939941, 3.07602358, 7.21652555,
    -                                     2.0329783, 3.41213799, 12.92509365, 8.36702347),
    -             sd = 0)
    -
    -edward2_pop_mean <- data.frame(tool = "Edward2", 'mean' = 6.48866844177, 'sd' = 0)
    -# hmc_mean_avg_stddev <- 2.46163249016
    -
    -
    -posterior_school_effects <- as.data.frame(as.matrix(posterior_school_effects))
    -
    -# Relabel school measures
    -colnames(posterior_school_effects) <- N
    -
    -# Summarise and combine all chains of interest for plotting
    -posterior_summaries <-
    -  posterior_school_effects %>%
    -  gather(key = school, value = value) %>% 
    -  group_by(school) %>%
    -  summarise_all(funs(mean, sd)) 
    -
    -school_summaries <- 
    -  posterior_summaries %>% 
    -  mutate(tool = "greta") %>%
    -  rbind(edward2_school_means)
    -
    -population_parameters <- 
    -  as.data.frame(as.matrix(draws)) %>% 
    -  select(avg_effect) %>%
    -  summarise_all(funs(mean, sd)) %>%
    -  mutate(tool = "greta") %>%
    -  rbind(edward2_pop_mean)
    -
    -ggplot(school_summaries, aes(x = school, y = mean, color = tool, shape = tool)) + 
    -  geom_errorbar(aes(ymin = mean - sd, ymax = mean + sd), width = 0.2) +
    -  geom_point() +
    -  geom_hline(data = population_parameters, 
    -             aes(yintercept = mean, linetype = 'Population mean', color = tool)) +
    -  scale_linetype_manual(name = "", values = c(2, 2)) 
    +
    # Posterior means via Edward2
    +edward2_school_means <-
    +  data.frame(tool = "Edward2",
    +             school = N,
    +             #mean_school_effects_standard = c(0.61157268, 0.06430732, -0.25459746,
    +             #                                 0.04828103, -0.36940941, -0.23154463,
    +             #                                 0.49402338,  0.13042814),
    +             mean = c(14.93237686, 7.50939941, 3.07602358, 7.21652555,
    +                                     2.0329783, 3.41213799, 12.92509365, 8.36702347),
    +             sd = 0)
    +
    +edward2_pop_mean <- data.frame(tool = "Edward2", 'mean' = 6.48866844177, 'sd' = 0)
    +# hmc_mean_avg_stddev <- 2.46163249016
    +
    +
    +posterior_school_effects <- as.data.frame(as.matrix(posterior_school_effects))
    +
    +# Relabel school measures
    +colnames(posterior_school_effects) <- N
    +
    +# Summarise and combine all chains of interest for plotting
    +posterior_summaries <-
    +  posterior_school_effects %>%
    +  gather(key = school, value = value) %>% 
    +  group_by(school) %>%
    +  summarise_all(funs(mean, sd)) 
    +
    ## Warning: `funs()` was deprecated in dplyr 0.8.0.
    +## Please use a list of either functions or lambdas: 
    +## 
    +##   # Simple named list: 
    +##   list(mean = mean, median = median)
    +## 
    +##   # Auto named with `tibble::lst()`: 
    +##   tibble::lst(mean, median)
    +## 
    +##   # Using lambdas
    +##   list(~ mean(., trim = .2), ~ median(., na.rm = TRUE))
    +## This warning is displayed once every 8 hours.
    +## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was generated.
    +
    school_summaries <- 
    +  posterior_summaries %>% 
    +  mutate(tool = "greta") %>%
    +  rbind(edward2_school_means)
    +
    +population_parameters <- 
    +  as.data.frame(as.matrix(draws)) %>% 
    +  select(avg_effect) %>%
    +  summarise_all(funs(mean, sd)) %>%
    +  mutate(tool = "greta") %>%
    +  rbind(edward2_pop_mean)
    +
    +ggplot(school_summaries, aes(x = school, y = mean, color = tool, shape = tool)) + 
    +  geom_errorbar(aes(ymin = mean - sd, ymax = mean + sd), width = 0.2) +
    +  geom_point() +
    +  geom_hline(data = population_parameters, 
    +             aes(yintercept = mean, linetype = 'Population mean', color = tool)) +
    +  scale_linetype_manual(name = "", values = c(2, 2)) 

    @@ -380,55 +398,50 @@

    Session information

    - -
    ## R version 3.5.1 (2018-07-02)
    -## Platform: x86_64-apple-darwin15.6.0 (64-bit)
    -## Running under: macOS Sierra 10.12.6
    +
    sessionInfo()
    +
    ## R version 4.1.2 (2021-11-01)
    +## Platform: x86_64-apple-darwin17.0 (64-bit)
    +## Running under: macOS Big Sur 10.16
     ## 
     ## Matrix products: default
    -## BLAS: /Library/Frameworks/R.framework/Versions/3.5/Resources/lib/libRblas.0.dylib
    -## LAPACK: /Library/Frameworks/R.framework/Versions/3.5/Resources/lib/libRlapack.dylib
    +## BLAS:   /Library/Frameworks/R.framework/Versions/4.1/Resources/lib/libRblas.0.dylib
    +## LAPACK: /Library/Frameworks/R.framework/Versions/4.1/Resources/lib/libRlapack.dylib
     ## 
     ## locale:
    -## [1] en_GB.UTF-8/en_GB.UTF-8/en_GB.UTF-8/C/en_GB.UTF-8/en_GB.UTF-8
    +## [1] en_AU.UTF-8/en_AU.UTF-8/en_AU.UTF-8/C/en_AU.UTF-8/en_AU.UTF-8
     ## 
     ## attached base packages:
     ## [1] stats     graphics  grDevices utils     datasets  methods   base     
     ## 
     ## other attached packages:
    -##  [1] bindrcpp_0.2.2  bayesplot_1.6.0 forcats_0.3.0   stringr_1.3.1  
    -##  [5] dplyr_0.7.6     purrr_0.2.5     readr_1.1.1     tidyr_0.8.1    
    -##  [9] tibble_1.4.2    ggplot2_3.0.0   tidyverse_1.2.1 greta_0.2.5    
    +##  [1] bayesplot_1.8.1 forcats_0.5.1   stringr_1.4.0   dplyr_1.0.7    
    +##  [5] purrr_0.3.4     readr_2.1.1     tidyr_1.1.4     tibble_3.1.6   
    +##  [9] ggplot2_3.3.5   tidyverse_1.3.1 greta_0.4.0    
     ## 
     ## loaded via a namespace (and not attached):
    -##  [1] nlme_3.1-137       fs_1.2.5           lubridate_1.7.4   
    -##  [4] RColorBrewer_1.1-2 progress_1.2.0     httr_1.3.1        
    -##  [7] rprojroot_1.3-2    tools_3.5.1        backports_1.1.2   
    -## [10] R6_2.2.2           lazyeval_0.2.1     colorspace_1.3-2  
    -## [13] withr_2.1.2        tidyselect_0.2.4   gridExtra_2.3     
    -## [16] prettyunits_1.0.2  compiler_3.5.1     cli_1.0.0         
    -## [19] rvest_0.3.2        xml2_1.2.0         influenceR_0.1.0  
    -## [22] desc_1.2.0         labeling_0.3       scales_1.0.0      
    -## [25] ggridges_0.5.1     tfruns_1.4         pkgdown_1.1.0.9000
    -## [28] commonmark_1.5     digest_0.6.17      rmarkdown_1.10.13 
    -## [31] base64enc_0.1-3    pkgconfig_2.0.1    htmltools_0.3.6   
    -## [34] htmlwidgets_1.2    rlang_0.2.2        readxl_1.1.0      
    -## [37] htmldeps_0.1.1     rstudioapi_0.8     visNetwork_2.0.4  
    -## [40] bindr_0.1.1        jsonlite_1.5       tensorflow_1.9    
    -## [43] rgexf_0.15.3       magrittr_1.5       Matrix_1.2-14     
    -## [46] Rcpp_0.12.18       munsell_0.5.0      reticulate_1.10   
    -## [49] viridis_0.5.1      stringi_1.2.4      whisker_0.3-2     
    -## [52] yaml_2.2.0         MASS_7.3-50        plyr_1.8.4        
    -## [55] grid_3.5.1         parallel_3.5.1     listenv_0.7.0     
    -## [58] crayon_1.3.4       lattice_0.20-35    haven_1.1.2       
    -## [61] hms_0.4.2          knitr_1.20         pillar_1.3.0      
    -## [64] igraph_1.2.2       reshape2_1.4.3     codetools_0.2-15  
    -## [67] XML_3.98-1.16      glue_1.3.0         evaluate_0.11     
    -## [70] downloader_0.4     modelr_0.1.2       cellranger_1.1.0  
    -## [73] gtable_0.2.0       future_1.9.0       assertthat_0.2.0  
    -## [76] broom_0.5.0        coda_0.19-1        roxygen2_6.1.0    
    -## [79] viridisLite_0.3.0  memoise_1.1.0      Rook_1.1-1        
    -## [82] DiagrammeR_1.0.0   globals_0.12.2     brew_1.0-6
    +## [1] fs_1.5.1 lubridate_1.8.0 progress_1.2.2 httr_1.4.2 +## [5] rprojroot_2.0.2 tools_4.1.2 backports_1.4.0 bslib_0.3.1 +## [9] utf8_1.2.2 R6_2.5.1 DBI_1.1.1 colorspace_2.0-2 +## [13] withr_2.4.3 tidyselect_1.1.1 prettyunits_1.1.1 processx_3.5.2 +## [17] compiler_4.1.2 cli_3.1.0 rvest_1.0.2 xml2_1.3.3 +## [21] desc_1.4.0 labeling_0.4.2 sass_0.4.0 scales_1.1.1 +## [25] ggridges_0.5.3 callr_3.7.0 tfruns_1.5.0 pkgdown_1.1.0.9000 +## [29] digest_0.6.29 rmarkdown_2.11 base64enc_0.1-3 pkgconfig_2.0.3 +## [33] htmltools_0.5.2 parallelly_1.29.0 highr_0.9 dbplyr_2.1.1 +## [37] fastmap_1.1.0 rlang_0.4.12 readxl_1.3.1 rstudioapi_0.13 +## [41] farver_2.1.0 jquerylib_0.1.4 generics_0.1.1 jsonlite_1.7.2 +## [45] tensorflow_2.7.0 magrittr_2.0.1 Matrix_1.3-4 Rcpp_1.0.7 +## [49] munsell_0.5.0 fansi_0.5.0 abind_1.4-5 reticulate_1.22 +## [53] lifecycle_1.0.1 stringi_1.7.6 whisker_0.4 yaml_2.2.1 +## [57] MASS_7.3-54 plyr_1.8.6 grid_4.1.2 parallel_4.1.2 +## [61] listenv_0.8.0 crayon_1.4.2 lattice_0.20-45 haven_2.4.3 +## [65] hms_1.1.1 knitr_1.36 ps_1.6.0 pillar_1.6.4 +## [69] codetools_0.2-18 reprex_2.0.1 glue_1.5.1 evaluate_0.14 +## [73] modelr_0.1.8 png_0.1-7 vctrs_0.3.8 tzdb_0.2.0 +## [77] cellranger_1.1.0 gtable_0.3.0 future_1.23.0 assertthat_0.2.1 +## [81] cachem_1.0.6 xfun_0.28 broom_0.7.10 coda_0.19-4 +## [85] roxygen2_7.1.2 memoise_2.0.1 globals_0.14.0 ellipsis_0.3.2 +## [89] here_1.0.1
    diff --git a/docs/articles/analyses/eight_schools_files/figure-html/schools-edward2-1.png b/docs/articles/analyses/eight_schools_files/figure-html/schools-edward2-1.png index b0600d59..71741125 100644 Binary files a/docs/articles/analyses/eight_schools_files/figure-html/schools-edward2-1.png and b/docs/articles/analyses/eight_schools_files/figure-html/schools-edward2-1.png differ diff --git a/docs/articles/analyses/eight_schools_files/figure-html/unnamed-chunk-13-1.png b/docs/articles/analyses/eight_schools_files/figure-html/unnamed-chunk-13-1.png index 68bf4b1d..6cd1f87b 100644 Binary files a/docs/articles/analyses/eight_schools_files/figure-html/unnamed-chunk-13-1.png and b/docs/articles/analyses/eight_schools_files/figure-html/unnamed-chunk-13-1.png differ diff --git a/docs/articles/analyses/eight_schools_files/figure-html/unnamed-chunk-14-1.png b/docs/articles/analyses/eight_schools_files/figure-html/unnamed-chunk-14-1.png index a54be8ad..4cf41555 100644 Binary files a/docs/articles/analyses/eight_schools_files/figure-html/unnamed-chunk-14-1.png and b/docs/articles/analyses/eight_schools_files/figure-html/unnamed-chunk-14-1.png differ diff --git a/docs/articles/analyses/eight_schools_files/figure-html/unnamed-chunk-15-1.png b/docs/articles/analyses/eight_schools_files/figure-html/unnamed-chunk-15-1.png index 88fac6c7..af8be3c1 100644 Binary files a/docs/articles/analyses/eight_schools_files/figure-html/unnamed-chunk-15-1.png and b/docs/articles/analyses/eight_schools_files/figure-html/unnamed-chunk-15-1.png differ diff --git a/docs/articles/analyses/eight_schools_files/figure-html/unnamed-chunk-16-1.png b/docs/articles/analyses/eight_schools_files/figure-html/unnamed-chunk-16-1.png index 4c65709d..71721994 100644 Binary files a/docs/articles/analyses/eight_schools_files/figure-html/unnamed-chunk-16-1.png and b/docs/articles/analyses/eight_schools_files/figure-html/unnamed-chunk-16-1.png differ diff --git a/docs/articles/analyses/eight_schools_files/figure-html/unnamed-chunk-2-1.png b/docs/articles/analyses/eight_schools_files/figure-html/unnamed-chunk-2-1.png index 00574ac0..d5d103eb 100644 Binary files a/docs/articles/analyses/eight_schools_files/figure-html/unnamed-chunk-2-1.png and b/docs/articles/analyses/eight_schools_files/figure-html/unnamed-chunk-2-1.png differ diff --git a/docs/articles/analyses/eight_schools_files/figure-html/unnamed-chunk-3-1.png b/docs/articles/analyses/eight_schools_files/figure-html/unnamed-chunk-3-1.png index 4dd61a91..61d9ec47 100644 Binary files a/docs/articles/analyses/eight_schools_files/figure-html/unnamed-chunk-3-1.png and b/docs/articles/analyses/eight_schools_files/figure-html/unnamed-chunk-3-1.png differ diff --git a/docs/articles/analyses/eight_schools_files/grViz-binding-1.0.6.1/grViz.js b/docs/articles/analyses/eight_schools_files/grViz-binding-1.0.6.1/grViz.js new file mode 100644 index 00000000..ba92a833 --- /dev/null +++ b/docs/articles/analyses/eight_schools_files/grViz-binding-1.0.6.1/grViz.js @@ -0,0 +1,91 @@ +HTMLWidgets.widget({ + + name: 'grViz', + + type: 'output', + + initialize: function(el, width, height) { + + return { + // TODO: add instance fields as required + }; + }, + + renderValue: function(el, x, instance) { + // Use this to sort of make our diagram responsive + // or at a minimum fit within the bounds set by htmlwidgets + // for the parent container + function makeResponsive(el){ + var svg = el.getElementsByTagName("svg")[0]; + if (svg) { + if (svg.width) {svg.removeAttribute("width")} + if (svg.height) {svg.removeAttribute("height")} + svg.style.width = "100%"; + svg.style.height = "100%"; + } + } + + if (x.diagram !== "") { + + if (typeof x.config === "undefined"){ + x.config = {}; + x.config.engine = "dot"; + x.config.options = {}; + } + + try { + + el.innerHTML = Viz(x.diagram, format="svg", engine=x.config.engine, options=x.config.options); + + makeResponsive(el); + + if (HTMLWidgets.shinyMode) { + // Get widget id + var id = el.id; + + $("#" + id + " .node").click(function(e) { + // Get node id + var nodeid = e.currentTarget.id; + // Get node text object and make an array + var node_texts = $("#" + nodeid + " text"); + //var node_path = $("#" + nodeid + " path")[0]; + var text_array = node_texts.map(function() {return $(this).text(); }).toArray(); + // Build return object *obj* with node-id, node text values and node fill + var obj = { + id: nodeid, + //fill: node_path.attributes.fill.nodeValue, + //outerHMTL: node_path.outerHTML, + nodeValues: text_array + }; + // Send *obj* to Shiny's inputs (input$[id]+_click e.g.: input$vtree_click)) + Shiny.setInputValue(id + "_click", obj, {priority: "event"}); + }); + } + + // set up a container for tasks to perform after completion + // one example would be add callbacks for event handling + // styling + if (typeof x.tasks !== "undefined") { + if ((typeof x.tasks.length === "undefined") || + (typeof x.tasks === "function")) { + // handle a function not enclosed in array + // should be able to remove once using jsonlite + x.tasks = [x.tasks]; + } + x.tasks.map(function(t){ + // for each tasks add it to the mermaid.tasks with el + t.call(el); + }); + } + } catch(e){ + var p = document.createElement("pre"); + p.innerText = e; + el.appendChild(p); + } + } + + }, + + resize: function(el, width, height, instance) { + } +}); diff --git a/docs/articles/analyses/eight_schools_files/header-attrs-2.11/header-attrs.js b/docs/articles/analyses/eight_schools_files/header-attrs-2.11/header-attrs.js new file mode 100644 index 00000000..dd57d92e --- /dev/null +++ b/docs/articles/analyses/eight_schools_files/header-attrs-2.11/header-attrs.js @@ -0,0 +1,12 @@ +// Pandoc 2.9 adds attributes on both header and div. We remove the former (to +// be compatible with the behavior of Pandoc < 2.8). +document.addEventListener('DOMContentLoaded', function(e) { + var hs = document.querySelectorAll("div.section[class*='level'] > :first-child"); + var i, h, a; + for (i = 0; i < hs.length; i++) { + h = hs[i]; + if (!/^h[1-6]$/i.test(h.tagName)) continue; // it should be a header h1-h6 + a = h.attributes; + while (a.length > 0) h.removeAttribute(a[0].name); + } +}); diff --git a/docs/articles/analyses/eight_schools_files/htmlwidgets-1.5.4/htmlwidgets.js b/docs/articles/analyses/eight_schools_files/htmlwidgets-1.5.4/htmlwidgets.js new file mode 100644 index 00000000..da8b2367 --- /dev/null +++ b/docs/articles/analyses/eight_schools_files/htmlwidgets-1.5.4/htmlwidgets.js @@ -0,0 +1,903 @@ +(function() { + // If window.HTMLWidgets is already defined, then use it; otherwise create a + // new object. This allows preceding code to set options that affect the + // initialization process (though none currently exist). + window.HTMLWidgets = window.HTMLWidgets || {}; + + // See if we're running in a viewer pane. If not, we're in a web browser. + var viewerMode = window.HTMLWidgets.viewerMode = + /\bviewer_pane=1\b/.test(window.location); + + // See if we're running in Shiny mode. If not, it's a static document. + // Note that static widgets can appear in both Shiny and static modes, but + // obviously, Shiny widgets can only appear in Shiny apps/documents. + var shinyMode = window.HTMLWidgets.shinyMode = + typeof(window.Shiny) !== "undefined" && !!window.Shiny.outputBindings; + + // We can't count on jQuery being available, so we implement our own + // version if necessary. + function querySelectorAll(scope, selector) { + if (typeof(jQuery) !== "undefined" && scope instanceof jQuery) { + return scope.find(selector); + } + if (scope.querySelectorAll) { + return scope.querySelectorAll(selector); + } + } + + function asArray(value) { + if (value === null) + return []; + if ($.isArray(value)) + return value; + return [value]; + } + + // Implement jQuery's extend + function extend(target /*, ... */) { + if (arguments.length == 1) { + return target; + } + for (var i = 1; i < arguments.length; i++) { + var source = arguments[i]; + for (var prop in source) { + if (source.hasOwnProperty(prop)) { + target[prop] = source[prop]; + } + } + } + return target; + } + + // IE8 doesn't support Array.forEach. + function forEach(values, callback, thisArg) { + if (values.forEach) { + values.forEach(callback, thisArg); + } else { + for (var i = 0; i < values.length; i++) { + callback.call(thisArg, values[i], i, values); + } + } + } + + // Replaces the specified method with the return value of funcSource. + // + // Note that funcSource should not BE the new method, it should be a function + // that RETURNS the new method. funcSource receives a single argument that is + // the overridden method, it can be called from the new method. The overridden + // method can be called like a regular function, it has the target permanently + // bound to it so "this" will work correctly. + function overrideMethod(target, methodName, funcSource) { + var superFunc = target[methodName] || function() {}; + var superFuncBound = function() { + return superFunc.apply(target, arguments); + }; + target[methodName] = funcSource(superFuncBound); + } + + // Add a method to delegator that, when invoked, calls + // delegatee.methodName. If there is no such method on + // the delegatee, but there was one on delegator before + // delegateMethod was called, then the original version + // is invoked instead. + // For example: + // + // var a = { + // method1: function() { console.log('a1'); } + // method2: function() { console.log('a2'); } + // }; + // var b = { + // method1: function() { console.log('b1'); } + // }; + // delegateMethod(a, b, "method1"); + // delegateMethod(a, b, "method2"); + // a.method1(); + // a.method2(); + // + // The output would be "b1", "a2". + function delegateMethod(delegator, delegatee, methodName) { + var inherited = delegator[methodName]; + delegator[methodName] = function() { + var target = delegatee; + var method = delegatee[methodName]; + + // The method doesn't exist on the delegatee. Instead, + // call the method on the delegator, if it exists. + if (!method) { + target = delegator; + method = inherited; + } + + if (method) { + return method.apply(target, arguments); + } + }; + } + + // Implement a vague facsimilie of jQuery's data method + function elementData(el, name, value) { + if (arguments.length == 2) { + return el["htmlwidget_data_" + name]; + } else if (arguments.length == 3) { + el["htmlwidget_data_" + name] = value; + return el; + } else { + throw new Error("Wrong number of arguments for elementData: " + + arguments.length); + } + } + + // http://stackoverflow.com/questions/3446170/escape-string-for-use-in-javascript-regex + function escapeRegExp(str) { + return str.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&"); + } + + function hasClass(el, className) { + var re = new RegExp("\\b" + escapeRegExp(className) + "\\b"); + return re.test(el.className); + } + + // elements - array (or array-like object) of HTML elements + // className - class name to test for + // include - if true, only return elements with given className; + // if false, only return elements *without* given className + function filterByClass(elements, className, include) { + var results = []; + for (var i = 0; i < elements.length; i++) { + if (hasClass(elements[i], className) == include) + results.push(elements[i]); + } + return results; + } + + function on(obj, eventName, func) { + if (obj.addEventListener) { + obj.addEventListener(eventName, func, false); + } else if (obj.attachEvent) { + obj.attachEvent(eventName, func); + } + } + + function off(obj, eventName, func) { + if (obj.removeEventListener) + obj.removeEventListener(eventName, func, false); + else if (obj.detachEvent) { + obj.detachEvent(eventName, func); + } + } + + // Translate array of values to top/right/bottom/left, as usual with + // the "padding" CSS property + // https://developer.mozilla.org/en-US/docs/Web/CSS/padding + function unpackPadding(value) { + if (typeof(value) === "number") + value = [value]; + if (value.length === 1) { + return {top: value[0], right: value[0], bottom: value[0], left: value[0]}; + } + if (value.length === 2) { + return {top: value[0], right: value[1], bottom: value[0], left: value[1]}; + } + if (value.length === 3) { + return {top: value[0], right: value[1], bottom: value[2], left: value[1]}; + } + if (value.length === 4) { + return {top: value[0], right: value[1], bottom: value[2], left: value[3]}; + } + } + + // Convert an unpacked padding object to a CSS value + function paddingToCss(paddingObj) { + return paddingObj.top + "px " + paddingObj.right + "px " + paddingObj.bottom + "px " + paddingObj.left + "px"; + } + + // Makes a number suitable for CSS + function px(x) { + if (typeof(x) === "number") + return x + "px"; + else + return x; + } + + // Retrieves runtime widget sizing information for an element. + // The return value is either null, or an object with fill, padding, + // defaultWidth, defaultHeight fields. + function sizingPolicy(el) { + var sizingEl = document.querySelector("script[data-for='" + el.id + "'][type='application/htmlwidget-sizing']"); + if (!sizingEl) + return null; + var sp = JSON.parse(sizingEl.textContent || sizingEl.text || "{}"); + if (viewerMode) { + return sp.viewer; + } else { + return sp.browser; + } + } + + // @param tasks Array of strings (or falsy value, in which case no-op). + // Each element must be a valid JavaScript expression that yields a + // function. Or, can be an array of objects with "code" and "data" + // properties; in this case, the "code" property should be a string + // of JS that's an expr that yields a function, and "data" should be + // an object that will be added as an additional argument when that + // function is called. + // @param target The object that will be "this" for each function + // execution. + // @param args Array of arguments to be passed to the functions. (The + // same arguments will be passed to all functions.) + function evalAndRun(tasks, target, args) { + if (tasks) { + forEach(tasks, function(task) { + var theseArgs = args; + if (typeof(task) === "object") { + theseArgs = theseArgs.concat([task.data]); + task = task.code; + } + var taskFunc = tryEval(task); + if (typeof(taskFunc) !== "function") { + throw new Error("Task must be a function! Source:\n" + task); + } + taskFunc.apply(target, theseArgs); + }); + } + } + + // Attempt eval() both with and without enclosing in parentheses. + // Note that enclosing coerces a function declaration into + // an expression that eval() can parse + // (otherwise, a SyntaxError is thrown) + function tryEval(code) { + var result = null; + try { + result = eval("(" + code + ")"); + } catch(error) { + if (!(error instanceof SyntaxError)) { + throw error; + } + try { + result = eval(code); + } catch(e) { + if (e instanceof SyntaxError) { + throw error; + } else { + throw e; + } + } + } + return result; + } + + function initSizing(el) { + var sizing = sizingPolicy(el); + if (!sizing) + return; + + var cel = document.getElementById("htmlwidget_container"); + if (!cel) + return; + + if (typeof(sizing.padding) !== "undefined") { + document.body.style.margin = "0"; + document.body.style.padding = paddingToCss(unpackPadding(sizing.padding)); + } + + if (sizing.fill) { + document.body.style.overflow = "hidden"; + document.body.style.width = "100%"; + document.body.style.height = "100%"; + document.documentElement.style.width = "100%"; + document.documentElement.style.height = "100%"; + if (cel) { + cel.style.position = "absolute"; + var pad = unpackPadding(sizing.padding); + cel.style.top = pad.top + "px"; + cel.style.right = pad.right + "px"; + cel.style.bottom = pad.bottom + "px"; + cel.style.left = pad.left + "px"; + el.style.width = "100%"; + el.style.height = "100%"; + } + + return { + getWidth: function() { return cel.offsetWidth; }, + getHeight: function() { return cel.offsetHeight; } + }; + + } else { + el.style.width = px(sizing.width); + el.style.height = px(sizing.height); + + return { + getWidth: function() { return el.offsetWidth; }, + getHeight: function() { return el.offsetHeight; } + }; + } + } + + // Default implementations for methods + var defaults = { + find: function(scope) { + return querySelectorAll(scope, "." + this.name); + }, + renderError: function(el, err) { + var $el = $(el); + + this.clearError(el); + + // Add all these error classes, as Shiny does + var errClass = "shiny-output-error"; + if (err.type !== null) { + // use the classes of the error condition as CSS class names + errClass = errClass + " " + $.map(asArray(err.type), function(type) { + return errClass + "-" + type; + }).join(" "); + } + errClass = errClass + " htmlwidgets-error"; + + // Is el inline or block? If inline or inline-block, just display:none it + // and add an inline error. + var display = $el.css("display"); + $el.data("restore-display-mode", display); + + if (display === "inline" || display === "inline-block") { + $el.hide(); + if (err.message !== "") { + var errorSpan = $("").addClass(errClass); + errorSpan.text(err.message); + $el.after(errorSpan); + } + } else if (display === "block") { + // If block, add an error just after the el, set visibility:none on the + // el, and position the error to be on top of the el. + // Mark it with a unique ID and CSS class so we can remove it later. + $el.css("visibility", "hidden"); + if (err.message !== "") { + var errorDiv = $("
    ").addClass(errClass).css("position", "absolute") + .css("top", el.offsetTop) + .css("left", el.offsetLeft) + // setting width can push out the page size, forcing otherwise + // unnecessary scrollbars to appear and making it impossible for + // the element to shrink; so use max-width instead + .css("maxWidth", el.offsetWidth) + .css("height", el.offsetHeight); + errorDiv.text(err.message); + $el.after(errorDiv); + + // Really dumb way to keep the size/position of the error in sync with + // the parent element as the window is resized or whatever. + var intId = setInterval(function() { + if (!errorDiv[0].parentElement) { + clearInterval(intId); + return; + } + errorDiv + .css("top", el.offsetTop) + .css("left", el.offsetLeft) + .css("maxWidth", el.offsetWidth) + .css("height", el.offsetHeight); + }, 500); + } + } + }, + clearError: function(el) { + var $el = $(el); + var display = $el.data("restore-display-mode"); + $el.data("restore-display-mode", null); + + if (display === "inline" || display === "inline-block") { + if (display) + $el.css("display", display); + $(el.nextSibling).filter(".htmlwidgets-error").remove(); + } else if (display === "block"){ + $el.css("visibility", "inherit"); + $(el.nextSibling).filter(".htmlwidgets-error").remove(); + } + }, + sizing: {} + }; + + // Called by widget bindings to register a new type of widget. The definition + // object can contain the following properties: + // - name (required) - A string indicating the binding name, which will be + // used by default as the CSS classname to look for. + // - initialize (optional) - A function(el) that will be called once per + // widget element; if a value is returned, it will be passed as the third + // value to renderValue. + // - renderValue (required) - A function(el, data, initValue) that will be + // called with data. Static contexts will cause this to be called once per + // element; Shiny apps will cause this to be called multiple times per + // element, as the data changes. + window.HTMLWidgets.widget = function(definition) { + if (!definition.name) { + throw new Error("Widget must have a name"); + } + if (!definition.type) { + throw new Error("Widget must have a type"); + } + // Currently we only support output widgets + if (definition.type !== "output") { + throw new Error("Unrecognized widget type '" + definition.type + "'"); + } + // TODO: Verify that .name is a valid CSS classname + + // Support new-style instance-bound definitions. Old-style class-bound + // definitions have one widget "object" per widget per type/class of + // widget; the renderValue and resize methods on such widget objects + // take el and instance arguments, because the widget object can't + // store them. New-style instance-bound definitions have one widget + // object per widget instance; the definition that's passed in doesn't + // provide renderValue or resize methods at all, just the single method + // factory(el, width, height) + // which returns an object that has renderValue(x) and resize(w, h). + // This enables a far more natural programming style for the widget + // author, who can store per-instance state using either OO-style + // instance fields or functional-style closure variables (I guess this + // is in contrast to what can only be called C-style pseudo-OO which is + // what we required before). + if (definition.factory) { + definition = createLegacyDefinitionAdapter(definition); + } + + if (!definition.renderValue) { + throw new Error("Widget must have a renderValue function"); + } + + // For static rendering (non-Shiny), use a simple widget registration + // scheme. We also use this scheme for Shiny apps/documents that also + // contain static widgets. + window.HTMLWidgets.widgets = window.HTMLWidgets.widgets || []; + // Merge defaults into the definition; don't mutate the original definition. + var staticBinding = extend({}, defaults, definition); + overrideMethod(staticBinding, "find", function(superfunc) { + return function(scope) { + var results = superfunc(scope); + // Filter out Shiny outputs, we only want the static kind + return filterByClass(results, "html-widget-output", false); + }; + }); + window.HTMLWidgets.widgets.push(staticBinding); + + if (shinyMode) { + // Shiny is running. Register the definition with an output binding. + // The definition itself will not be the output binding, instead + // we will make an output binding object that delegates to the + // definition. This is because we foolishly used the same method + // name (renderValue) for htmlwidgets definition and Shiny bindings + // but they actually have quite different semantics (the Shiny + // bindings receive data that includes lots of metadata that it + // strips off before calling htmlwidgets renderValue). We can't + // just ignore the difference because in some widgets it's helpful + // to call this.renderValue() from inside of resize(), and if + // we're not delegating, then that call will go to the Shiny + // version instead of the htmlwidgets version. + + // Merge defaults with definition, without mutating either. + var bindingDef = extend({}, defaults, definition); + + // This object will be our actual Shiny binding. + var shinyBinding = new Shiny.OutputBinding(); + + // With a few exceptions, we'll want to simply use the bindingDef's + // version of methods if they are available, otherwise fall back to + // Shiny's defaults. NOTE: If Shiny's output bindings gain additional + // methods in the future, and we want them to be overrideable by + // HTMLWidget binding definitions, then we'll need to add them to this + // list. + delegateMethod(shinyBinding, bindingDef, "getId"); + delegateMethod(shinyBinding, bindingDef, "onValueChange"); + delegateMethod(shinyBinding, bindingDef, "onValueError"); + delegateMethod(shinyBinding, bindingDef, "renderError"); + delegateMethod(shinyBinding, bindingDef, "clearError"); + delegateMethod(shinyBinding, bindingDef, "showProgress"); + + // The find, renderValue, and resize are handled differently, because we + // want to actually decorate the behavior of the bindingDef methods. + + shinyBinding.find = function(scope) { + var results = bindingDef.find(scope); + + // Only return elements that are Shiny outputs, not static ones + var dynamicResults = results.filter(".html-widget-output"); + + // It's possible that whatever caused Shiny to think there might be + // new dynamic outputs, also caused there to be new static outputs. + // Since there might be lots of different htmlwidgets bindings, we + // schedule execution for later--no need to staticRender multiple + // times. + if (results.length !== dynamicResults.length) + scheduleStaticRender(); + + return dynamicResults; + }; + + // Wrap renderValue to handle initialization, which unfortunately isn't + // supported natively by Shiny at the time of this writing. + + shinyBinding.renderValue = function(el, data) { + Shiny.renderDependencies(data.deps); + // Resolve strings marked as javascript literals to objects + if (!(data.evals instanceof Array)) data.evals = [data.evals]; + for (var i = 0; data.evals && i < data.evals.length; i++) { + window.HTMLWidgets.evaluateStringMember(data.x, data.evals[i]); + } + if (!bindingDef.renderOnNullValue) { + if (data.x === null) { + el.style.visibility = "hidden"; + return; + } else { + el.style.visibility = "inherit"; + } + } + if (!elementData(el, "initialized")) { + initSizing(el); + + elementData(el, "initialized", true); + if (bindingDef.initialize) { + var result = bindingDef.initialize(el, el.offsetWidth, + el.offsetHeight); + elementData(el, "init_result", result); + } + } + bindingDef.renderValue(el, data.x, elementData(el, "init_result")); + evalAndRun(data.jsHooks.render, elementData(el, "init_result"), [el, data.x]); + }; + + // Only override resize if bindingDef implements it + if (bindingDef.resize) { + shinyBinding.resize = function(el, width, height) { + // Shiny can call resize before initialize/renderValue have been + // called, which doesn't make sense for widgets. + if (elementData(el, "initialized")) { + bindingDef.resize(el, width, height, elementData(el, "init_result")); + } + }; + } + + Shiny.outputBindings.register(shinyBinding, bindingDef.name); + } + }; + + var scheduleStaticRenderTimerId = null; + function scheduleStaticRender() { + if (!scheduleStaticRenderTimerId) { + scheduleStaticRenderTimerId = setTimeout(function() { + scheduleStaticRenderTimerId = null; + window.HTMLWidgets.staticRender(); + }, 1); + } + } + + // Render static widgets after the document finishes loading + // Statically render all elements that are of this widget's class + window.HTMLWidgets.staticRender = function() { + var bindings = window.HTMLWidgets.widgets || []; + forEach(bindings, function(binding) { + var matches = binding.find(document.documentElement); + forEach(matches, function(el) { + var sizeObj = initSizing(el, binding); + + if (hasClass(el, "html-widget-static-bound")) + return; + el.className = el.className + " html-widget-static-bound"; + + var initResult; + if (binding.initialize) { + initResult = binding.initialize(el, + sizeObj ? sizeObj.getWidth() : el.offsetWidth, + sizeObj ? sizeObj.getHeight() : el.offsetHeight + ); + elementData(el, "init_result", initResult); + } + + if (binding.resize) { + var lastSize = { + w: sizeObj ? sizeObj.getWidth() : el.offsetWidth, + h: sizeObj ? sizeObj.getHeight() : el.offsetHeight + }; + var resizeHandler = function(e) { + var size = { + w: sizeObj ? sizeObj.getWidth() : el.offsetWidth, + h: sizeObj ? sizeObj.getHeight() : el.offsetHeight + }; + if (size.w === 0 && size.h === 0) + return; + if (size.w === lastSize.w && size.h === lastSize.h) + return; + lastSize = size; + binding.resize(el, size.w, size.h, initResult); + }; + + on(window, "resize", resizeHandler); + + // This is needed for cases where we're running in a Shiny + // app, but the widget itself is not a Shiny output, but + // rather a simple static widget. One example of this is + // an rmarkdown document that has runtime:shiny and widget + // that isn't in a render function. Shiny only knows to + // call resize handlers for Shiny outputs, not for static + // widgets, so we do it ourselves. + if (window.jQuery) { + window.jQuery(document).on( + "shown.htmlwidgets shown.bs.tab.htmlwidgets shown.bs.collapse.htmlwidgets", + resizeHandler + ); + window.jQuery(document).on( + "hidden.htmlwidgets hidden.bs.tab.htmlwidgets hidden.bs.collapse.htmlwidgets", + resizeHandler + ); + } + + // This is needed for the specific case of ioslides, which + // flips slides between display:none and display:block. + // Ideally we would not have to have ioslide-specific code + // here, but rather have ioslides raise a generic event, + // but the rmarkdown package just went to CRAN so the + // window to getting that fixed may be long. + if (window.addEventListener) { + // It's OK to limit this to window.addEventListener + // browsers because ioslides itself only supports + // such browsers. + on(document, "slideenter", resizeHandler); + on(document, "slideleave", resizeHandler); + } + } + + var scriptData = document.querySelector("script[data-for='" + el.id + "'][type='application/json']"); + if (scriptData) { + var data = JSON.parse(scriptData.textContent || scriptData.text); + // Resolve strings marked as javascript literals to objects + if (!(data.evals instanceof Array)) data.evals = [data.evals]; + for (var k = 0; data.evals && k < data.evals.length; k++) { + window.HTMLWidgets.evaluateStringMember(data.x, data.evals[k]); + } + binding.renderValue(el, data.x, initResult); + evalAndRun(data.jsHooks.render, initResult, [el, data.x]); + } + }); + }); + + invokePostRenderHandlers(); + } + + + function has_jQuery3() { + if (!window.jQuery) { + return false; + } + var $version = window.jQuery.fn.jquery; + var $major_version = parseInt($version.split(".")[0]); + return $major_version >= 3; + } + + /* + / Shiny 1.4 bumped jQuery from 1.x to 3.x which means jQuery's + / on-ready handler (i.e., $(fn)) is now asyncronous (i.e., it now + / really means $(setTimeout(fn)). + / https://jquery.com/upgrade-guide/3.0/#breaking-change-document-ready-handlers-are-now-asynchronous + / + / Since Shiny uses $() to schedule initShiny, shiny>=1.4 calls initShiny + / one tick later than it did before, which means staticRender() is + / called renderValue() earlier than (advanced) widget authors might be expecting. + / https://github.com/rstudio/shiny/issues/2630 + / + / For a concrete example, leaflet has some methods (e.g., updateBounds) + / which reference Shiny methods registered in initShiny (e.g., setInputValue). + / Since leaflet is privy to this life-cycle, it knows to use setTimeout() to + / delay execution of those methods (until Shiny methods are ready) + / https://github.com/rstudio/leaflet/blob/18ec981/javascript/src/index.js#L266-L268 + / + / Ideally widget authors wouldn't need to use this setTimeout() hack that + / leaflet uses to call Shiny methods on a staticRender(). In the long run, + / the logic initShiny should be broken up so that method registration happens + / right away, but binding happens later. + */ + function maybeStaticRenderLater() { + if (shinyMode && has_jQuery3()) { + window.jQuery(window.HTMLWidgets.staticRender); + } else { + window.HTMLWidgets.staticRender(); + } + } + + if (document.addEventListener) { + document.addEventListener("DOMContentLoaded", function() { + document.removeEventListener("DOMContentLoaded", arguments.callee, false); + maybeStaticRenderLater(); + }, false); + } else if (document.attachEvent) { + document.attachEvent("onreadystatechange", function() { + if (document.readyState === "complete") { + document.detachEvent("onreadystatechange", arguments.callee); + maybeStaticRenderLater(); + } + }); + } + + + window.HTMLWidgets.getAttachmentUrl = function(depname, key) { + // If no key, default to the first item + if (typeof(key) === "undefined") + key = 1; + + var link = document.getElementById(depname + "-" + key + "-attachment"); + if (!link) { + throw new Error("Attachment " + depname + "/" + key + " not found in document"); + } + return link.getAttribute("href"); + }; + + window.HTMLWidgets.dataframeToD3 = function(df) { + var names = []; + var length; + for (var name in df) { + if (df.hasOwnProperty(name)) + names.push(name); + if (typeof(df[name]) !== "object" || typeof(df[name].length) === "undefined") { + throw new Error("All fields must be arrays"); + } else if (typeof(length) !== "undefined" && length !== df[name].length) { + throw new Error("All fields must be arrays of the same length"); + } + length = df[name].length; + } + var results = []; + var item; + for (var row = 0; row < length; row++) { + item = {}; + for (var col = 0; col < names.length; col++) { + item[names[col]] = df[names[col]][row]; + } + results.push(item); + } + return results; + }; + + window.HTMLWidgets.transposeArray2D = function(array) { + if (array.length === 0) return array; + var newArray = array[0].map(function(col, i) { + return array.map(function(row) { + return row[i] + }) + }); + return newArray; + }; + // Split value at splitChar, but allow splitChar to be escaped + // using escapeChar. Any other characters escaped by escapeChar + // will be included as usual (including escapeChar itself). + function splitWithEscape(value, splitChar, escapeChar) { + var results = []; + var escapeMode = false; + var currentResult = ""; + for (var pos = 0; pos < value.length; pos++) { + if (!escapeMode) { + if (value[pos] === splitChar) { + results.push(currentResult); + currentResult = ""; + } else if (value[pos] === escapeChar) { + escapeMode = true; + } else { + currentResult += value[pos]; + } + } else { + currentResult += value[pos]; + escapeMode = false; + } + } + if (currentResult !== "") { + results.push(currentResult); + } + return results; + } + // Function authored by Yihui/JJ Allaire + window.HTMLWidgets.evaluateStringMember = function(o, member) { + var parts = splitWithEscape(member, '.', '\\'); + for (var i = 0, l = parts.length; i < l; i++) { + var part = parts[i]; + // part may be a character or 'numeric' member name + if (o !== null && typeof o === "object" && part in o) { + if (i == (l - 1)) { // if we are at the end of the line then evalulate + if (typeof o[part] === "string") + o[part] = tryEval(o[part]); + } else { // otherwise continue to next embedded object + o = o[part]; + } + } + } + }; + + // Retrieve the HTMLWidget instance (i.e. the return value of an + // HTMLWidget binding's initialize() or factory() function) + // associated with an element, or null if none. + window.HTMLWidgets.getInstance = function(el) { + return elementData(el, "init_result"); + }; + + // Finds the first element in the scope that matches the selector, + // and returns the HTMLWidget instance (i.e. the return value of + // an HTMLWidget binding's initialize() or factory() function) + // associated with that element, if any. If no element matches the + // selector, or the first matching element has no HTMLWidget + // instance associated with it, then null is returned. + // + // The scope argument is optional, and defaults to window.document. + window.HTMLWidgets.find = function(scope, selector) { + if (arguments.length == 1) { + selector = scope; + scope = document; + } + + var el = scope.querySelector(selector); + if (el === null) { + return null; + } else { + return window.HTMLWidgets.getInstance(el); + } + }; + + // Finds all elements in the scope that match the selector, and + // returns the HTMLWidget instances (i.e. the return values of + // an HTMLWidget binding's initialize() or factory() function) + // associated with the elements, in an array. If elements that + // match the selector don't have an associated HTMLWidget + // instance, the returned array will contain nulls. + // + // The scope argument is optional, and defaults to window.document. + window.HTMLWidgets.findAll = function(scope, selector) { + if (arguments.length == 1) { + selector = scope; + scope = document; + } + + var nodes = scope.querySelectorAll(selector); + var results = []; + for (var i = 0; i < nodes.length; i++) { + results.push(window.HTMLWidgets.getInstance(nodes[i])); + } + return results; + }; + + var postRenderHandlers = []; + function invokePostRenderHandlers() { + while (postRenderHandlers.length) { + var handler = postRenderHandlers.shift(); + if (handler) { + handler(); + } + } + } + + // Register the given callback function to be invoked after the + // next time static widgets are rendered. + window.HTMLWidgets.addPostRenderHandler = function(callback) { + postRenderHandlers.push(callback); + }; + + // Takes a new-style instance-bound definition, and returns an + // old-style class-bound definition. This saves us from having + // to rewrite all the logic in this file to accomodate both + // types of definitions. + function createLegacyDefinitionAdapter(defn) { + var result = { + name: defn.name, + type: defn.type, + initialize: function(el, width, height) { + return defn.factory(el, width, height); + }, + renderValue: function(el, x, instance) { + return instance.renderValue(x); + }, + resize: function(el, width, height, instance) { + return instance.resize(width, height); + } + }; + + if (defn.find) + result.find = defn.find; + if (defn.renderError) + result.renderError = defn.renderError; + if (defn.clearError) + result.clearError = defn.clearError; + + return result; + } +})(); + diff --git a/docs/articles/analyses/eight_schools_files/viz-1.8.2/viz.js b/docs/articles/analyses/eight_schools_files/viz-1.8.2/viz.js new file mode 100644 index 00000000..be9f3323 --- /dev/null +++ b/docs/articles/analyses/eight_schools_files/viz-1.8.2/viz.js @@ -0,0 +1,206 @@ +/* +Viz.js 1.8.2 (Graphviz 2.40.1, Expat 2.2.5, Emscripten 1.37.33) +Copyright (c) 2014-2018 Michael Daines +Licensed under MIT license + +This distribution contains other software in object code form: + +Graphviz +Licensed under Eclipse Public License - v 1.0 +http://www.graphviz.org + +Expat +Copyright (c) 1998, 1999, 2000 Thai Open Source Software Center Ltd and Clark Cooper +Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006 Expat maintainers. +Licensed under MIT license +http://www.libexpat.org + +zlib +Copyright (C) 1995-2013 Jean-loup Gailly and Mark Adler +http://www.zlib.net/zlib_license.html +*/ +(function(global) { +var Module = function(Module) { + Module = Module || {}; +var Module=typeof Module!=="undefined"?Module:{};var moduleOverrides={};var key;for(key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}Module["arguments"]=[];Module["thisProgram"]="./this.program";Module["quit"]=(function(status,toThrow){throw toThrow});Module["preRun"]=[];Module["postRun"]=[];var ENVIRONMENT_IS_WEB=false;var ENVIRONMENT_IS_WORKER=false;var ENVIRONMENT_IS_NODE=false;var ENVIRONMENT_IS_SHELL=false;if(Module["ENVIRONMENT"]){if(Module["ENVIRONMENT"]==="WEB"){ENVIRONMENT_IS_WEB=true}else if(Module["ENVIRONMENT"]==="WORKER"){ENVIRONMENT_IS_WORKER=true}else if(Module["ENVIRONMENT"]==="NODE"){ENVIRONMENT_IS_NODE=true}else if(Module["ENVIRONMENT"]==="SHELL"){ENVIRONMENT_IS_SHELL=true}else{throw new Error("Module['ENVIRONMENT'] value is not valid. must be one of: WEB|WORKER|NODE|SHELL.")}}else{ENVIRONMENT_IS_WEB=typeof window==="object";ENVIRONMENT_IS_WORKER=typeof importScripts==="function";ENVIRONMENT_IS_NODE=typeof process==="object"&&typeof require==="function"&&!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_WORKER;ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER}if(ENVIRONMENT_IS_NODE){var nodeFS;var nodePath;Module["read"]=function shell_read(filename,binary){var ret;ret=tryParseAsDataURI(filename);if(!ret){if(!nodeFS)nodeFS=require("fs");if(!nodePath)nodePath=require("path");filename=nodePath["normalize"](filename);ret=nodeFS["readFileSync"](filename)}return binary?ret:ret.toString()};Module["readBinary"]=function readBinary(filename){var ret=Module["read"](filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}assert(ret.buffer);return ret};if(process["argv"].length>1){Module["thisProgram"]=process["argv"][1].replace(/\\/g,"/")}Module["arguments"]=process["argv"].slice(2);if(typeof module!=="undefined"){module["exports"]=Module}process["on"]("uncaughtException",(function(ex){if(!(ex instanceof ExitStatus)){throw ex}}));process["on"]("unhandledRejection",(function(reason,p){process["exit"](1)}));Module["inspect"]=(function(){return"[Emscripten Module object]"})}else if(ENVIRONMENT_IS_SHELL){if(typeof read!="undefined"){Module["read"]=function shell_read(f){var data=tryParseAsDataURI(f);if(data){return intArrayToString(data)}return read(f)}}Module["readBinary"]=function readBinary(f){var data;data=tryParseAsDataURI(f);if(data){return data}if(typeof readbuffer==="function"){return new Uint8Array(readbuffer(f))}data=read(f,"binary");assert(typeof data==="object");return data};if(typeof scriptArgs!="undefined"){Module["arguments"]=scriptArgs}else if(typeof arguments!="undefined"){Module["arguments"]=arguments}if(typeof quit==="function"){Module["quit"]=(function(status,toThrow){quit(status)})}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){Module["read"]=function shell_read(url){try{var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText}catch(err){var data=tryParseAsDataURI(url);if(data){return intArrayToString(data)}throw err}};if(ENVIRONMENT_IS_WORKER){Module["readBinary"]=function readBinary(url){try{var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}catch(err){var data=tryParseAsDataURI(url);if(data){return data}throw err}}}Module["readAsync"]=function readAsync(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function xhr_onload(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}var data=tryParseAsDataURI(url);if(data){onload(data.buffer);return}onerror()};xhr.onerror=onerror;xhr.send(null)};if(typeof arguments!="undefined"){Module["arguments"]=arguments}Module["setWindowTitle"]=(function(title){document.title=title})}Module["print"]=typeof console!=="undefined"?console.log:typeof print!=="undefined"?print:null;Module["printErr"]=typeof printErr!=="undefined"?printErr:typeof console!=="undefined"&&console.warn||Module["print"];Module.print=Module["print"];Module.printErr=Module["printErr"];for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=undefined;var STACK_ALIGN=16;function staticAlloc(size){assert(!staticSealed);var ret=STATICTOP;STATICTOP=STATICTOP+size+15&-16;return ret}function dynamicAlloc(size){assert(DYNAMICTOP_PTR);var ret=HEAP32[DYNAMICTOP_PTR>>2];var end=ret+size+15&-16;HEAP32[DYNAMICTOP_PTR>>2]=end;if(end>=TOTAL_MEMORY){var success=enlargeMemory();if(!success){HEAP32[DYNAMICTOP_PTR>>2]=ret;return 0}}return ret}function alignMemory(size,factor){if(!factor)factor=STACK_ALIGN;var ret=size=Math.ceil(size/factor)*factor;return ret}function getNativeTypeSize(type){switch(type){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:{if(type[type.length-1]==="*"){return 4}else if(type[0]==="i"){var bits=parseInt(type.substr(1));assert(bits%8===0);return bits/8}else{return 0}}}}function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;Module.printErr(text)}}var functionPointers=new Array(0);var funcWrappers={};function dynCall(sig,ptr,args){if(args&&args.length){return Module["dynCall_"+sig].apply(null,[ptr].concat(args))}else{return Module["dynCall_"+sig].call(null,ptr)}}var GLOBAL_BASE=8;var ABORT=0;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}function getCFunc(ident){var func=Module["_"+ident];assert(func,"Cannot call unknown function "+ident+", make sure it is exported");return func}var JSfuncs={"stackSave":(function(){stackSave()}),"stackRestore":(function(){stackRestore()}),"arrayToC":(function(arr){var ret=stackAlloc(arr.length);writeArrayToMemory(arr,ret);return ret}),"stringToC":(function(str){var ret=0;if(str!==null&&str!==undefined&&str!==0){var len=(str.length<<2)+1;ret=stackAlloc(len);stringToUTF8(str,ret,len)}return ret})};var toC={"string":JSfuncs["stringToC"],"array":JSfuncs["arrayToC"]};function ccall(ident,returnType,argTypes,args,opts){var func=getCFunc(ident);var cArgs=[];var stack=0;if(args){for(var i=0;i>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math_abs(tempDouble)>=+1?tempDouble>+0?(Math_min(+Math_floor(tempDouble/+4294967296),+4294967295)|0)>>>0:~~+Math_ceil((tempDouble- +(~~tempDouble>>>0))/+4294967296)>>>0:0)],HEAP32[ptr>>2]=tempI64[0],HEAP32[ptr+4>>2]=tempI64[1];break;case"float":HEAPF32[ptr>>2]=value;break;case"double":HEAPF64[ptr>>3]=value;break;default:abort("invalid type for setValue: "+type)}}var ALLOC_STATIC=2;var ALLOC_NONE=4;function allocate(slab,types,allocator,ptr){var zeroinit,size;if(typeof slab==="number"){zeroinit=true;size=slab}else{zeroinit=false;size=slab.length}var singleType=typeof types==="string"?types:null;var ret;if(allocator==ALLOC_NONE){ret=ptr}else{ret=[typeof _malloc==="function"?_malloc:staticAlloc,stackAlloc,staticAlloc,dynamicAlloc][allocator===undefined?ALLOC_STATIC:allocator](Math.max(size,singleType?1:types.length))}if(zeroinit){var stop;ptr=ret;assert((ret&3)==0);stop=ret+(size&~3);for(;ptr>2]=0}stop=ret+size;while(ptr>0]=0}return ret}if(singleType==="i8"){if(slab.subarray||slab.slice){HEAPU8.set(slab,ret)}else{HEAPU8.set(new Uint8Array(slab),ret)}return ret}var i=0,type,typeSize,previousType;while(i>0];hasUtf|=t;if(t==0&&!length)break;i++;if(length&&i==length)break}if(!length)length=i;var ret="";if(hasUtf<128){var MAX_CHUNK=1024;var curr;while(length>0){curr=String.fromCharCode.apply(String,HEAPU8.subarray(ptr,ptr+Math.min(length,MAX_CHUNK)));ret=ret?ret+curr:curr;ptr+=MAX_CHUNK;length-=MAX_CHUNK}return ret}return UTF8ToString(ptr)}var UTF8Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf8"):undefined;function UTF8ArrayToString(u8Array,idx){var endPtr=idx;while(u8Array[endPtr])++endPtr;if(endPtr-idx>16&&u8Array.subarray&&UTF8Decoder){return UTF8Decoder.decode(u8Array.subarray(idx,endPtr))}else{var u0,u1,u2,u3,u4,u5;var str="";while(1){u0=u8Array[idx++];if(!u0)return str;if(!(u0&128)){str+=String.fromCharCode(u0);continue}u1=u8Array[idx++]&63;if((u0&224)==192){str+=String.fromCharCode((u0&31)<<6|u1);continue}u2=u8Array[idx++]&63;if((u0&240)==224){u0=(u0&15)<<12|u1<<6|u2}else{u3=u8Array[idx++]&63;if((u0&248)==240){u0=(u0&7)<<18|u1<<12|u2<<6|u3}else{u4=u8Array[idx++]&63;if((u0&252)==248){u0=(u0&3)<<24|u1<<18|u2<<12|u3<<6|u4}else{u5=u8Array[idx++]&63;u0=(u0&1)<<30|u1<<24|u2<<18|u3<<12|u4<<6|u5}}}if(u0<65536){str+=String.fromCharCode(u0)}else{var ch=u0-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023)}}}}function UTF8ToString(ptr){return UTF8ArrayToString(HEAPU8,ptr)}function stringToUTF8Array(str,outU8Array,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127){if(outIdx>=endIdx)break;outU8Array[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;outU8Array[outIdx++]=192|u>>6;outU8Array[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;outU8Array[outIdx++]=224|u>>12;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else if(u<=2097151){if(outIdx+3>=endIdx)break;outU8Array[outIdx++]=240|u>>18;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else if(u<=67108863){if(outIdx+4>=endIdx)break;outU8Array[outIdx++]=248|u>>24;outU8Array[outIdx++]=128|u>>18&63;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else{if(outIdx+5>=endIdx)break;outU8Array[outIdx++]=252|u>>30;outU8Array[outIdx++]=128|u>>24&63;outU8Array[outIdx++]=128|u>>18&63;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}}outU8Array[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127){++len}else if(u<=2047){len+=2}else if(u<=65535){len+=3}else if(u<=2097151){len+=4}else if(u<=67108863){len+=5}else{len+=6}}return len}var UTF16Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf-16le"):undefined;function allocateUTF8(str){var size=lengthBytesUTF8(str)+1;var ret=_malloc(size);if(ret)stringToUTF8Array(str,HEAP8,ret,size);return ret}function demangle(func){return func}function demangleAll(text){var regex=/__Z[\w\d_]+/g;return text.replace(regex,(function(x){var y=demangle(x);return x===y?x:x+" ["+y+"]"}))}function jsStackTrace(){var err=new Error;if(!err.stack){try{throw new Error(0)}catch(e){err=e}if(!err.stack){return"(no stack trace available)"}}return err.stack.toString()}function stackTrace(){var js=jsStackTrace();if(Module["extraStackTrace"])js+="\n"+Module["extraStackTrace"]();return demangleAll(js)}var PAGE_SIZE=16384;var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferViews(){Module["HEAP8"]=HEAP8=new Int8Array(buffer);Module["HEAP16"]=HEAP16=new Int16Array(buffer);Module["HEAP32"]=HEAP32=new Int32Array(buffer);Module["HEAPU8"]=HEAPU8=new Uint8Array(buffer);Module["HEAPU16"]=HEAPU16=new Uint16Array(buffer);Module["HEAPU32"]=HEAPU32=new Uint32Array(buffer);Module["HEAPF32"]=HEAPF32=new Float32Array(buffer);Module["HEAPF64"]=HEAPF64=new Float64Array(buffer)}var STATIC_BASE,STATICTOP,staticSealed;var STACK_BASE,STACKTOP,STACK_MAX;var DYNAMIC_BASE,DYNAMICTOP_PTR;STATIC_BASE=STATICTOP=STACK_BASE=STACKTOP=STACK_MAX=DYNAMIC_BASE=DYNAMICTOP_PTR=0;staticSealed=false;function abortOnCannotGrowMemory(){abort("Cannot enlarge memory arrays. Either (1) compile with -s TOTAL_MEMORY=X with X higher than the current value "+TOTAL_MEMORY+", (2) compile with -s ALLOW_MEMORY_GROWTH=1 which allows increasing the size at runtime but prevents some optimizations, (3) set Module.TOTAL_MEMORY to a higher value before the program runs, or (4) if you want malloc to return NULL (0) instead of this abort, compile with -s ABORTING_MALLOC=0 ")}function enlargeMemory(){abortOnCannotGrowMemory()}var TOTAL_STACK=Module["TOTAL_STACK"]||5242880;var TOTAL_MEMORY=Module["TOTAL_MEMORY"]||134217728;if(TOTAL_MEMORY0){var callback=callbacks.shift();if(typeof callback=="function"){callback();continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){Module["dynCall_v"](func)}else{Module["dynCall_vi"](func,callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function ensureInitRuntime(){if(runtimeInitialized)return;runtimeInitialized=true;callRuntimeCallbacks(__ATINIT__)}function preMain(){callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){callRuntimeCallbacks(__ATEXIT__);runtimeExited=true}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}function writeArrayToMemory(array,buffer){HEAP8.set(array,buffer)}function writeAsciiToMemory(str,buffer,dontAddNull){for(var i=0;i>0]=str.charCodeAt(i)}if(!dontAddNull)HEAP8[buffer>>0]=0}if(!Math["imul"]||Math["imul"](4294967295,5)!==-5)Math["imul"]=function imul(a,b){var ah=a>>>16;var al=a&65535;var bh=b>>>16;var bl=b&65535;return al*bl+(ah*bl+al*bh<<16)|0};Math.imul=Math["imul"];if(!Math["clz32"])Math["clz32"]=(function(x){x=x>>>0;for(var i=0;i<32;i++){if(x&1<<31-i)return i}return 32});Math.clz32=Math["clz32"];if(!Math["trunc"])Math["trunc"]=(function(x){return x<0?Math.ceil(x):Math.floor(x)});Math.trunc=Math["trunc"];var Math_abs=Math.abs;var Math_cos=Math.cos;var Math_sin=Math.sin;var Math_tan=Math.tan;var Math_acos=Math.acos;var Math_asin=Math.asin;var Math_atan=Math.atan;var Math_atan2=Math.atan2;var Math_exp=Math.exp;var Math_log=Math.log;var Math_sqrt=Math.sqrt;var Math_ceil=Math.ceil;var Math_floor=Math.floor;var Math_pow=Math.pow;var Math_imul=Math.imul;var Math_fround=Math.fround;var Math_round=Math.round;var Math_min=Math.min;var Math_max=Math.max;var Math_clz32=Math.clz32;var Math_trunc=Math.trunc;var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function getUniqueRunDependency(id){return id}function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};var memoryInitializer=null;var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return String.prototype.startsWith?filename.startsWith(dataURIPrefix):filename.indexOf(dataURIPrefix)===0}var ASM_CONSTS=[(function($0,$1){var path=Pointer_stringify($0);var data=Pointer_stringify($1);FS.createPath("/",PATH.dirname(path));FS.writeFile(PATH.join("/",path),data)})];function _emscripten_asm_const_iii(code,a0,a1){return ASM_CONSTS[code](a0,a1)}STATIC_BASE=GLOBAL_BASE;STATICTOP=STATIC_BASE+197232;__ATINIT__.push();memoryInitializer="data:application/octet-stream;base64,AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/ACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAIMEAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABSQAAAAAAAAFJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFJAAAAAAAAAUkAAIMEAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABSQAAAAAAAAFJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFJAAAAAAAAAUkACEAAAAAAAAAAAAAAAABBAoC8AAAgAAAABAAAAAAAAAAIQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICWQAAAAAAAgJZABJDDAAAAAAAAAAAAAAAQQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWEAAAAAAAABYQAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABYQAAAAAAAAFhAAAAAAAAAAAAAAAAAAAAQQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUkAAAAAAAABSQAAgAwIAAAAAAAAAAAAAEEAAAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAABCQAAAAAAAAEJAAAAAAAAgg0AAAAAAAMCIQAAAAAAAAFJAAAAAAAAAUkAAAAAAAAAAAAAAAAAAAEJAAAAAAAAAQkAAAAAAACCDQAAAAAAAwIhAAAAAAAAAUkAAAAAAAABSQACwwQAAAAAAAAAAAAAAEEBANgAAkwAAAAEAAAAAAAAAQAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFJAAAAAAAAAUkAAEAACAAAAAAAAAAAAABBAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABYQAAAAAAAAFhAALDBAAAAAAAAAAAAAAAAABw6AAAQAAAAAQAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWEAAAAAAAABYQEAgPgMAAAAAAAAAAAAAEEAkOwAAegAAAAEAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFJAAAAAAAAAUkAAAAAAAAAAAAAAAAAAABBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABSQAAAAAAAAFJA////////73/////////vf////////+//////////7/8AAAAAAAD4PzMzMzMzM9M/PAAAAAAAAACamZmZmZmpPwEAAAAAAAAAAQAAAAAAAAAAAAAAAADwPwEAAAAAAAAAAgAAAAAAAAAAAAAAAADwPwIAAAAAAAAAAwAAAAAAAAAAAAAAAADgPwMAAAAAAAAABAAAAAAAAAAAAAAAAADwPwQAAAAAAAAABQAAAAAAAAAzMzMzMzPzPwUAAAAAAAAABgAAAAAAAACamZmZmZnpPwYAAAAAAAAABwAAAAAAAAAAAAAAAADwPwcAAAAAAAAACAAAAAAAAAAAAAAAAADgPwgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAAAAAAAAMzMzMzMz078AAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAEAAAAAAAAAAAAAAAAgEZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAEAAAAAAAAAAAAAAAAAAAAmpmZmZmZ2b8AAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAzMzMzMzPjPwAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAAAAAAAAAAAAexSuR+F65L8AAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAEAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAEAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAAEAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAEAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAEAAAATAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABr4VQAAAQAAAAEAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAIAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAAAAAAAAAAAAAAgGZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAEAAAAAAAAAAAAAAAAgGZAmpmZmZmZ2b8AAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAAAAAAAAgGZAexSuR+F65L8AAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAEAAAAEAAAAAAAAAAAAAAAAgEZAAAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAQAAAAEAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAQAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAEAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAEAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAAAAAEAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAEAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkAAAAAAAAAAAEAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABEAAAAAAAAAAAEAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABIAAAAAAAAAAAEAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABMAAAAAAAAAAAEAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAEAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABUAAAAAAAAAAAEAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAEAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsAAAAAAAAAAAEAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAEAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0AAAAAAAAAAAEAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4AAAAAAAAAAAEAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8AAAAAAAAAAAEAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAEAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABYAAAAAAAAAAAEAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAEAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABcAAAAAAAAAAAEAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABkAAAAAAAAAAAEAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwVQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAAAAQAAAAAAAAAAAAAAAAAAANA/AAAAAAAA0D8AAAAAAADQPwAAAAAAANA/AAAAAAAA0D8AAAAAAADQPwAAAAAAANA/AAAAAAAA0D8AAAAAAADQPwAAAAAAANA/AAAAAAAA0D8AAAAAAADQPwAAAAAAANA/AAAAAAAA0D8AAAAAAADQPwAAAAAAANA/AAAAAAAA0D8AAAAAAADQPwAAAAAAANA/AAAAAAAA0D8AAAAAAADQPwAAAAAAANA/AAAAAAAA0D8AAAAAAADQPwAAAAAAANA/AAAAAAAA0D8AAAAAAADQPwAAAAAAANA/AAAAAAAA0D8AAAAAAADQPwAAAAAAANA/AAAAAAAA0D8AAAAAAADQP1ioNc07TtU/JXUCmggb2j8AAAAAAADgPwAAAAAAAOA/LNSa5h2n6j9q3nGKjuToP1ioNc07TtU/WKg1zTtO1T9YqDXNO07VPwAAAAAAAOA/XdxGA3gL4j8AAAAAAADQP1ioNc07TtU/AAAAAAAA0D/TvOMUHcnRPwAAAAAAAOA/AAAAAAAA4D8AAAAAAADgPwAAAAAAAOA/AAAAAAAA4D8AAAAAAADgPwAAAAAAAOA/AAAAAAAA4D8AAAAAAADgPwAAAAAAAOA/07zjFB3J0T/TvOMUHcnRP13cRgN4C+I/XdxGA3gL4j9d3EYDeAviPw1xrIvbaNw/ZF3cRgN47T/Sb18HzhnnPxB6Nqs+V+U/EHo2qz5X5T/Sb18HzhnnP3gLJCh+jOM/tRX7y+7J4T/Sb18HzhnnP9JvXwfOGec/WKg1zTtO1T+IhVrTvOPYP9JvXwfOGec/eAskKH6M4z/EQq1p3nHsP9JvXwfOGec/0m9fB84Z5z+1FfvL7snhP9JvXwfOGec/EHo2qz5X5T+1FfvL7snhP3gLJCh+jOM/0m9fB84Z5z/Sb18HzhnnP4Y41sVtNO4/0m9fB84Z5z/Sb18HzhnnP3gLJCh+jOM/WKg1zTtO1T/TvOMUHcnRP1ioNc07TtU/pgpGJXUC3j8AAAAAAADgP1ioNc07TtU/DXGsi9to3D8AAAAAAADgPw1xrIvbaNw/AAAAAAAA4D8NcayL22jcP1ioNc07TtU/AAAAAAAA4D8AAAAAAADgP9O84xQdydE/07zjFB3J0T8AAAAAAADgP9O84xQdydE/at5xio7k6D8AAAAAAADgPwAAAAAAAOA/AAAAAAAA4D8AAAAAAADgP1ioNc07TtU/iIVa07zj2D/TvOMUHcnRPwAAAAAAAOA/AAAAAAAA4D/Sb18HzhnnPwAAAAAAAOA/AAAAAAAA4D8NcayL22jcP/RsVn2utt4/ETY8vVKWyT/0bFZ9rrbePzsBTYQNT+E/AAAAAAAA0D8AAAAAAADQPwAAAAAAANA/AAAAAAAA0D8AAAAAAADQPwAAAAAAANA/AAAAAAAA0D8AAAAAAADQPwAAAAAAANA/AAAAAAAA0D8AAAAAAADQPwAAAAAAANA/AAAAAAAA0D8AAAAAAADQPwAAAAAAANA/AAAAAAAA0D8AAAAAAADQPwAAAAAAANA/AAAAAAAA0D8AAAAAAADQPwAAAAAAANA/AAAAAAAA0D8AAAAAAADQPwAAAAAAANA/AAAAAAAA0D8AAAAAAADQPwAAAAAAANA/AAAAAAAA0D8AAAAAAADQPwAAAAAAANA/AAAAAAAA0D8AAAAAAADQPwAAAAAAANA/AAAAAAAA0D9YqDXNO07VPwAAAAAAAOA/AAAAAAAA4D8+6Nms+lzFPwAAAAAAAOA/AAAAAAAA4D8AAAAAAADgPwAAAAAAAOA/gnNGlPYGxz8NcayL22jcPwAAAAAAAOA/WKg1zTtO1T9YqDXNO07VP7UV+8vuyeE/tRX7y+7J4T8AAAAAAADQPwAAAAAAAOA/AAAAAAAA4D8AAAAAAADgPwAAAAAAANA/AAAAAAAA0D8H8BZIUPzcP6K0N/jCZNY/WKg1zTtO1T8NcayL22jcPw1xrIvbaNw/AAAAAAAA4D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA0D8NcayL22jcPwAAAAAAANA/WKg1zTtO1T9YqDXNO07VP1ioNc07TtU/WKg1zTtO1T9YqDXNO07VP1ioNc07TtU/WKg1zTtO1T9YqDXNO07VPwAAAAAAANA/WKg1zTtO1T9YqDXNO07VPwAAAAAAANA/WKg1zTtO1T9YqDXNO07VP1ioNc07TtU/AAAAAAAA8D8AAAAAAADQPwAAAAAAANA/AAAAAAAA0D8AAAAAAADQPwAAAAAAANA/AAAAAAAA0D8AAAAAAADQPwAAAAAAANA/AAAAAAAA0D8AAAAAAADQPwAAAAAAANA/AAAAAAAA0D8AAAAAAADQPwAAAAAAANA/AAAAAAAA0D8AAAAAAADQP8RCrWnecew/AAAAAAAA0D9/2T15WKjRPwAAAAAAANA/AAAAAAAA0D8AAAAAAADQPwAAAAAAANA/eAskKH6M4z/Sb18HzhnnP8RCrWnecew/E/JBz2bV0z8AAAAAAADQPwAAAAAAANA/AAAAAAAA0D8AAAAAAADQPwAAAAAAANA/EHo2qz5X5T8AAAAAAADQPwAAAAAAANA/AAAAAAAA0D/TvOMUHcnRPwAAAAAAANA/AAAAAAAA0D/TvOMUHcnRPwAAAAAAAOA/0m9fB84Z5z8AAAAAAADgPwAAAAAAANA/AAAAAAAA0D8AAAAAAADQPwAAAAAAANA/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z/TvOMUHcnRP9O84xQdydE/07zjFB3J0T/TvOMUHcnRP9O84xQdydE/07zjFB3J0T/TvOMUHcnRP9O84xQdydE/07zjFB3J0T/TvOMUHcnRP9O84xQdydE/07zjFB3J0T/TvOMUHcnRP9O84xQdydE/07zjFB3J0T/TvOMUHcnRP9O84xQdydE/07zjFB3J0T/TvOMUHcnRP9O84xQdydE/07zjFB3J0T/TvOMUHcnRP9O84xQdydE/07zjFB3J0T/TvOMUHcnRP9O84xQdydE/07zjFB3J0T/TvOMUHcnRP9O84xQdydE/07zjFB3J0T/TvOMUHcnRP9O84xQdydE/07zjFB3J0T/TvOMUHcnRP/RsVn2uttY/tRX7y+7J4T+1FfvL7snhP8RCrWnecew/EHo2qz5X5T/129eBc0bMP1ioNc07TtU/WKg1zTtO1T+IhVrTvOPYPwFNhA1Pr+I/07zjFB3J0T9YqDXNO07VP9O84xQdydE/07zjFB3J0T+1FfvL7snhP7UV+8vuyeE/tRX7y+7J4T+1FfvL7snhP7UV+8vuyeE/tRX7y+7J4T+1FfvL7snhP7UV+8vuyeE/tRX7y+7J4T+1FfvL7snhP9O84xQdydE/07zjFB3J0T8BTYQNT6/iPwFNhA1Pr+I/AU2EDU+v4j+1FfvL7snhP8xdS8gHPfA/EHo2qz5X5T8QejarPlflP9JvXwfOGec/0m9fB84Z5z8QejarPlflP3gLJCh+jOM/at5xio7k6D/Sb18HzhnnP9O84xQdydE/AAAAAAAA4D8QejarPlflP7UV+8vuyeE/LNSa5h2n6j/Sb18HzhnnP2recYqO5Og/EHo2qz5X5T9q3nGKjuToP9JvXwfOGec/EHo2qz5X5T94CyQofozjP9JvXwfOGec/EHo2qz5X5T+GONbFbTTuPxB6Nqs+V+U/EHo2qz5X5T94CyQofozjP9O84xQdydE/07zjFB3J0T/TvOMUHcnRP6YKRiV1At4/tRX7y+7J4T9Iv30dOGfMP7UV+8vuyeE/tRX7y+7J4T8AAAAAAADgP7UV+8vuyeE/tRX7y+7J4T/TvOMUHcnRP7UV+8vuyeE/tRX7y+7J4T9Iv30dOGfMP0i/fR04Z8w/AAAAAAAA4D9Iv30dOGfMPyzUmuYdp+o/tRX7y+7J4T+1FfvL7snhP7UV+8vuyeE/tRX7y+7J4T9YqDXNO07VPwAAAAAAAOA/07zjFB3J0T+1FfvL7snhPwAAAAAAAOA/0m9fB84Z5z8AAAAAAADgPwAAAAAAAOA/AAAAAAAA4D8Cmggbnl7VP+C+DpwzotA/ApoIG55e1T8BTYQNT6/iP9O84xQdydE/07zjFB3J0T/TvOMUHcnRP9O84xQdydE/07zjFB3J0T/TvOMUHcnRP9O84xQdydE/07zjFB3J0T/TvOMUHcnRP9O84xQdydE/07zjFB3J0T/TvOMUHcnRP9O84xQdydE/07zjFB3J0T/TvOMUHcnRP9O84xQdydE/07zjFB3J0T/TvOMUHcnRP9O84xQdydE/07zjFB3J0T/TvOMUHcnRP9O84xQdydE/07zjFB3J0T/TvOMUHcnRP9O84xQdydE/07zjFB3J0T/TvOMUHcnRP9O84xQdydE/07zjFB3J0T/TvOMUHcnRP9O84xQdydE/07zjFB3J0T/TvOMUHcnRP9O84xQdydE/WKg1zTtO1T+1FfvL7snhP7UV+8vuyeE/PujZrPpcxT+1FfvL7snhP7UV+8vuyeE/tRX7y+7J4T+1FfvL7snhPx04Z0Rpb8g/WKg1zTtO1T+1FfvL7snhP1ioNc07TtU/WKg1zTtO1T8AAAAAAADgPwAAAAAAAOA/07zjFB3J0T+1FfvL7snhP7UV+8vuyeE/tRX7y+7J4T/TvOMUHcnRP9O84xQdydE/5x2n6Egu4T+itDf4wmTWP0i/fR04Z8w/WKg1zTtO1T9YqDXNO07VP7UV+8vuyeE/AAAAAAAA8D8AAAAAAADwP9O84xQdydE/eAskKH6M4z/TvOMUHcnRP1ioNc07TtU/WKg1zTtO1T9YqDXNO07VP1ioNc07TtU/WKg1zTtO1T9YqDXNO07VP1ioNc07TtU/WKg1zTtO1T/TvOMUHcnRP1ioNc07TtU/WKg1zTtO1T/TvOMUHcnRP1ioNc07TtU/WKg1zTtO1T9YqDXNO07VPwAAAAAAAPA/07zjFB3J0T/TvOMUHcnRP9O84xQdydE/07zjFB3J0T/TvOMUHcnRP9O84xQdydE/07zjFB3J0T/TvOMUHcnRP9O84xQdydE/07zjFB3J0T/TvOMUHcnRP9O84xQdydE/07zjFB3J0T/TvOMUHcnRP9O84xQdydE/07zjFB3J0T8AAAAAAADwP9O84xQdydE/6pWyDHGs1z/TvOMUHcnRP9O84xQdydE/07zjFB3J0T/TvOMUHcnRP7UV+8vuyeE/at5xio7k6D8AAAAAAADwP5jdk4eFWtc/07zjFB3J0T/TvOMUHcnRP9O84xQdydE/07zjFB3J0T/TvOMUHcnRP8RCrWnecew/07zjFB3J0T/TvOMUHcnRP9O84xQdydE/07zjFB3J0T/TvOMUHcnRP9O84xQdydE/SL99HThnzD94CyQofozjP4Y41sVtNO4/eAskKH6M4z/TvOMUHcnRP9O84xQdydE/07zjFB3J0T/TvOMUHcnRP1GgT+RJ0g5AtMh2vp86NcA6It+l1CXVv/OCPkeaLoo/n+V5cHfW+b9+/RAbLJzmP5bs2AjE68w/zc6idyrg0D+w479AECDtv62h1F5E29g/O6F85lGWdj/TbnD5eoR7P4HMzqJ3KuS/0a3X9KCgyD9q3zcZsD+EP77KkBle/4Q/HJYGflTDxL+lSSno9uIjQKnZA63AkME/CMSQQZNpiT/6RJ4kXTPQvwHwmTYtwl4/DZx9L8+Ulz+JtfgUAOOJP+WpWEY0y7G/jwDJz6Fnpr9ctcb7zLSIP02kj1Q6s5A/5scEoWHWoL/HaWccE/eCvyp/a+UtcFy/5FdiVAiadT/R8YdVcgS3P5XUCWgiPDPAZCMQr+t3EMCnIarwZ3jHP9r/AGvVrsE/TihEwCFU97+qSIWxhSD1P51oVyHlJ/Y/TS7GwDqOzT9Zayi1F9HcvwM/qmG/J8w/pkdTPZl/2j+2gTtQpzyuP1FM3gAz37m/9XaV/9oLpj/UpTW8D/aUPx+tILws3JA/KCzxgLLJI0AjWuFMAoq3P0ijZVGWKX8/u7SG98Gekz8XqHtTR32gvyErruBtlIs/M3PchNYetb+geISJ9fyPP2k1JO6x9JG/uM0zel6/aj+SPq2iPzTNv36w58ZPPpi/ByObUC3HpD8+GMJ7WLmRvy18fa1LjcY/AAAAQPsh+T8AAAAALUR0PgAAAICYRvg8AAAAYFHMeDsAAACAgxvwOQAAAEAgJXo4AAAAgCKC4zYAAAAAHfNpNQAAAAAAAPC/vAQBAOgqAAADAAAAEC0AAAMAAADoLwAAAwAAALAwAAADAAAAADIAAAMAAAB4NQAAAwAAALQ4AAADAAAAxC4AAAMAAAB8OQAAAwAAAIQ6AAADAAAAED8AAAMAAAA0PQAAAAAAANQsAAAAAAAAwC8AAAAAAAAQMAAAAAAAANgxAAAAAAAAKDIAAAAAAACMOAAAAAAAAGAuAAAAAAAAVDkAAAAAAABcOgAAAAAAAOg+AAAAAAAADD0AAAQAAAA4PwAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAACAAAAAQAAAAEAAAADAAAAAAAAAAAAAAAI2QIAGNkCACjZAgA42QIASNkCAFjZAgBo2QIAeNkCABjZAgAY2QIAWNkCAFjZAgAfAAAAPwAAAH8AAAAAAAAAooUBAAEAAACoKwAAaAAAAAQAAADVCAEAAQAAACAsAACIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAUBAAEAAAAAAAAA4AAAAAAAAAB4BQEAAQAAAAAAAADgAAAAAQAAAH8FAQABAAAAAAAAAKgAAAACAAAAiQUBAAEAAAAAAAAA4AAAAAMAAACTBQEAAQAAAAAAAADgAAAABAAAAKEFAQABAAAAAAAAAOAAAAAFAAAAqwUBAAEAAAAAAAAA4AAAAAYAAAC4BQEAAQAAAAAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAA/////wAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA2ggBAAEAAADELQAAGAEAAAEAAADfCAEAAQAAAMQtAAAYAQAAAgAAAOUIAQABAAAAxC0AABgBAAADAAAA7ggBAAEAAADELQAAGAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPgIAQABAAAAAAAAAHABAAABAAAAAgkBAAEAAAAAAAAAcAEAAAIAAAANCQEAAQAAAAAAAAA4AQAAAwAAABsJAQABAAAAAAAAADgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAkAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACwAAAAwAAAANAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAQAAAAYAAAACAAAAAgAAAAcAAAACAAAAAAAAAGIYAgBnAQIA+AICADgJAgAvEAIAbhQCAO4XAgD/FwIAAAAAAGIJAQABAAAAKC8AAKgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABmCQEAAQAAAAAAAADIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAbgkBAAEAAAA4MAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAKYKAQABAAAAAAAAACACAAACAAAAsAoBAAEAAAAAAAAAWAIAAAAAAAC5CgEAAQAAAAAAAABYAgAAAwAAAMIKAQABAAAAAAAAAFgCAAAAAAAAzAoBAAEAAAAAAAAAIAIAAAMAAADYCgEAAQAAAAAAAAAgAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABEAAAASAAAAAAAAAAAAAAATAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAVAAAAFgAAABcAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAMAAAAJAAAAAwAAAAMAAAAKAAAABAAAAAAAAABiGAIAZwECADgJAgD4AgIAbhQCAC8QAgD/FwIA7hcCAAAAAAAAAAAAlQwBAP////88MQAAkAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJgMAQD/////AAAAALACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACojQEAAQAAAFAyAADoAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAGQAAABoAAAAAAAAABAAAAAAAAAAbAAAAHAAAAB0AAAAeAAAAAAAAAAAAAAAAAAAAAAAAAB8AAAAgAAAAIQAAACIAAAACAAAAAAAAAAAAAAAAAAAACwAAAAAAAAAMAAAABQAAAAQAAAANAAAABQAAAAMAAACVEAEAoxABALkQAQDz+QIAxxABANYQAQDbEAEA+RABAPP5AgALEQEAOxEBAPP5AgBZEQEAgREBAI8RAQC+EQEA8hEBAAMSAQAoEgEASxIBAFESAQBtEgEAihIBAKUSAQDGEgEA4BIBAAITAQAhEwEARxMBAF8TAQB/EwEAnBMBAMATAQDMEwEA8/kCANcTAQD9EwEAIRQBAEcUAQDz+QIAfRQBAJUUAQCiFAEA0RQBAMwTAQDz+QIA3hQBAOcUAQAIFQEAQxUBAI4VAQDiFQEABBYBABkWAQAwFgEARhYBAF4WAQDz+QIAdBYBAI8WAQCzFgEA1xYBAPwWAQDz+QIAHRcBADcXAQBJFwEAVhcBAGMXAQB3FwEAhhcBAI4XAQCjFwEAsRcBAO8XAQD6FwEAzBMBAPP5AgAAGAEADBgBABsYAQBLEgEA8/kCAC4YAQBXGAEAdRgBAIUYAQCWGAEAnRgBAKwYAQC8GAEAABkBAAcZAQBLEgEA8/kCABEZAQA9GQEASBkBAFEZAQBaGQEAaxkBAHwZAQCQGQEAzBMBAPP5AgCcGQEArBkBALoZAQDIGQEA1RkBAOIZAQD4GQEAARoBABAaAQAdGgEALhoBAMwTAQDz+QIAORoBAFgaAQDz+QIAahoBAHkaAQCpGgEAsxoBAMAaAQDNGgEA2hoBAOcaAQDqGgEA8/kCAO4aAQDz+QIAERsBAEIbAQBxGwEAiBsBAKMbAQC+GwEAzBMBAPP5AgDaGwEA8/kCAAIcAQAOHAEAIRwBADQcAQBJHAEAXhwBAGIcAQBLEgEA8/kCAG4cAQDz+QIAfhwBAIwcAQCYHAEApRwBAMUcAQDbHAEA8/kCAO8cAQA4HQEAfh0BAK4dAQDhHQEA6B0BAA8eAQA2HgEA8/kCADseAQAAAAAAAAAAAPBHAQABAAAAAAAAAAgDAAABAAAArx4BAAEAAAAAAAAACAMAAAIAAADpRwEAAQAAAAAAAABAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAjAAAAAAAAACQAAAAlAAAABgAAACYAAAAnAAAAKAAAACkAAAAqAAAAAAAAAAAAAAAAAAAAAAAAACsAAAAsAAAALQAAAC4AAAAEAAAALwAAAAAAAAAAAAAADgAAAAAAAAAPAAAABwAAAAUAAAAQAAAABgAAAAAAAAB/AAIAiQACAHkxAQDOAAIACQECACsBAgAxAQIAYhgCAFgBAgBnAQIAhAECAI8BAgCxAQIA5wECAB0CAgBYAgIAjgICALACAgC/AgIA8AICAPgCAgA/JQEASCUBABUDAgBRJQEAXwMCAFolAQBpAwIAYyUBAHMDAgDCAwIA/QMCAG8lAQA4BAIAQwQCAIgEAgCWBAIA4AQCAO4EAgD8BAIABwUCADgFAgB4BQIAgAUCAIgFAgDDBQIA+QUCAAUGAgB+MQEAEQYCABsGAgAmBgIAQwYCAHkGAgA4CQIAWgkCAGYJAgAlDAIAVgwCAIIMAgC4DAIAxQwCAOcMAgAJDQIAEg0CAFwNAgBmDQIAqw0CAOENAgDsDQIAcQ4CAIYOAgB3JQEAkA4CAJoOAgDQDgIAEA8CAB4PAgByDwIAgQ8CAJAPAgDfDwIAhjEBAB8QAgApEAIALxACAFsQAgCCEAIAkxACAJ4QAgDjEAIAKBECADcRAgBHEQIAWRECAGkRAgB5EQIAhhECAJARAgDGEQIAzxECAA8SAgAiEgIAizEBACoSAgBgEgIAhxICAL0SAgDkEgIA8hICACgTAgByEwIAvBMCAMcTAgD9EwIAAhQCAB8UAgA8FAIARxQCAG4UAgCGFAIAvBQCAPIUAgD+FAIAJRUCADAVAgBhFQIAkhUCAHg8AQC5FQIA5RUCABsWAgBRFgIAWxYCAHgWAgC4FgIA7hYCAJExAQAGFwIAMhcCAFkXAgCPFwIAzBcCAO4XAgD0FwIA/xcCACYYAgAAAAAAq40BAAEAAADINQAAeAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMdIAQABAAAAAAAAAJgDAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAMQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMgAAAAAAAAAzAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARAAAAAAAAABIAAAAIAAAABgAAABMAAAAHAAAAAAAAAAAAAACtJgEAAQAAANw4AADQAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsCYBAAEAAAAAAAAA8AMAAAAAAAAAAAAAAAAAAAAAAAAAAAAANAAAAAAAAAA1AAAANgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAADcAAAAAAAAAAAAAABQAAAAAAAAAFQAAAAkAAAAHAAAAFgAAAAgAAAAAAAAAeTEBAGIYAgBnAQIAfjEBAHkGAgA4CQIAhjEBAFsQAgAPEgIAizEBAEcUAgBuFAIAeDwBAJExAQDuFwIA/xcCAAAAAACWMQEAAQAAAKQ5AAAoBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAmjEBAAEAAAAAAAAASAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAA5AAAAOgAAAAoAAAA7AAAAPAAAAD0AAAA+AAAAPwAAAAAAAAAAAAAAAAAAAAAAAABAAAAAQQAAAEIAAABDAAAAAAAAAAAAAAAAAAAAAAAAABcAAAAAAAAAGAAAAAsAAAAIAAAAGQAAAAkAAAAAAAAAzgACAA47AQBiGAIAZwECAIQBAgAZOwEAHzsBACo7AQAxOwEAjwECAOcBAgA5OwEAPzsBAEo7AQCOAgIAsAICAPgCAgBROwEAXwMCAHMDAgD9AwIAWzsBAIgEAgCWBAIA4AQCAGY7AQDuBAIAbjsBAHc7AQCFOwEAjzsBAMMFAgCYOwEABQYCACYGAgBDBgIAnjsBAIoGAgC1BgIA3gYCAAEHAgAqBwIATQcCAHYHAgCZBwIAwgcCAOUHAgAOCAIAMQgCAFoIAgB9CAIApggCAMkIAgDyCAIAFQkCADgJAgClOwEAWgkCALE7AQCCDAIA5wwCAKsNAgC+OwEAkA8CAMs7AQAfEAIALxACANU7AQBbEAIAghACAJMQAgDkOwEA9jsBAJ4QAgAoEQIANxECAEcRAgBZEQIAaRECAAY8AQARPAEAHDwBAHkRAgAPEgIAFBICACE8AQAqPAEAMzwBAEM8AQBKPAEAYBICAIcSAgC9EgIA8hICAAIUAgAfFAIAUjwBAG4UAgBZPAEA/hQCAGI8AQAwFQIAajwBAJIVAgB4PAEAuRUCAOUVAgB/PAEAeBYCALgWAgCJPAEA7hYCAAYXAgBZFwIAkzwBAKE8AQCPFwIAlhcCAMwXAgDuFwIA/xcCACYYAgAAAAAAszwBAAEAAACsOgAAgAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALc8AQABAAAAAAAAAKAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARAAAAEUAAAAAAAAAAAAAAEYAAABHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaAAAAAAAAABsAAAAMAAAACQAAABwAAAAKAAAAAAAAAEFCAACwoQEAQUkAAIqhAQBBUgAAXaEBAEFYAADFoQEAQiAAAAGkAQBCSQAAEqQBAENCAABKogEAQ08AADiiAQBDWAAAV6IBAEggAAB7ogEASEIAAIWiAQBISQAAEaMBAEhYAACUogEASGIAAMWiAQBIaQAA+KIBAEhyAACqogEASHgAANuiAQBJIAAAI6QBAEtCAADcoQEAS0kAACSiAQBLUgAAEKIBAEtYAAD9oQEATkIAACOjAQBOSQAAaqMBAE5SAACCowEATlgAAE6jAQBQQQAA46MBAFBCAACfowEAUEkAANOjAQBQWAAAv6MBAFIgAADapQEAUyAAAPKjAQBaRAAAYKQBAAAAAAAAAAAAAQAAAAAAAABdRwEA/////1w9AADYBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYUcBAP////8AAAAA+AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwAAAGlHAQABAAAAIEMAAAAAAAAQAAAAcUcBAAEAAAAgQwAAAAAAABEAAAB5RwEAAQAAACBDAAAAAAAAEQAAAIJHAQABAAAAIEMAAAAAAAARAAAAikcBAAEAAAAgQwAAAAAAABMAAACSRwEAAQAAACRDAAAAAAAAFAAAAJpHAQABAAAAJEMAAAAAAAAVAAAAokcBAAEAAAAkQwAAAAAAABUAAACrRwEAAQAAACRDAAAAAAAAFQAAALNHAQABAAAAJEMAAAAAAAAWAAAAu0cBAAEAAAAoQwAAAAAAABcAAADERwEAAQAAAChDAAAAAAAAGAAAAM1HAQABAAAAKEMAAAAAAAAYAAAA10cBAAEAAAAoQwAAAAAAABgAAADgRwEAAQAAAChDAAAAAAAAGQAAAOlHAQABAAAALEMAAAAAAAAZAAAA8EcBAAEAAAAsQwAAAAAAABoAAAD2RwEAAQAAADBDAAAAAAAACgAAAP9HAQABAAAANEMAAAAAAAALAAAAB0gBAAEAAAA0QwAAAAAAAAwAAAAPSAEAAQAAADRDAAAAAAAADAAAABhIAQABAAAANEMAAAAAAAAMAAAAIEgBAAEAAAA0QwAAAAAAAA4AAAAoSAEAAQAAADRDAAAAAAAADgAAAC9IAQABAAAANEMAAAAAAAANAAAAN0gBAAEAAAA0QwAAAAAAAAUAAAA/SAEAAQAAADRDAAAAAAAABgAAAEdIAQABAAAANEMAAAAAAAAHAAAAT0gBAAEAAAA0QwAAAAAAAAcAAABYSAEAAQAAADRDAAAAAAAABwAAAGBIAQABAAAANEMAAAAAAAAJAAAAaEgBAAEAAAA0QwAAAAAAAAkAAABvSAEAAQAAADRDAAAAAAAACAAAAHdIAQABAAAANEMAAAAAAAAAAAAAf0gBAAEAAAA4QwAAAAAAAAEAAACISAEAAQAAADhDAAAAAAAAAgAAAJFIAQABAAAAOEMAAAAAAAACAAAAm0gBAAEAAAA4QwAAAAAAAAIAAACkSAEAAQAAADhDAAAAAAAABAAAAK1IAQABAAAAOEMAAAAAAAAEAAAAtUgBAAEAAAA4QwAAAAAAAAMAAAC+SAEAAQAAADhDAAAAAAAAEgAAAMdIAQABAAAAIEMAAAAAAAAbAAAAz0gBAAEAAAA8QwAAAAAAABwAAADXSAEAAQAAADxDAAAAAAAAHQAAAN9IAQABAAAAPEMAAAAAAAAdAAAA6EgBAAEAAAA8QwAAAAAAAB0AAADwSAEAAQAAADxDAAAAAAAAHgAAAPhIAQABAAAAQEMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0AAAAOAAAADwAAABAAAAARAAAAEgAAABMAAAAUAAAAFQAAAGNMAQBMQwAAAQAAAGhDAAAAAAAAAAAAAEgAAABJAAAAAQAAAAAAAACihQEAAAAAAFxDAABkQwAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAgAAAAAAAAABAAAAAQAAAAEAAAABAAAAAgAAAAIAAAABAAAAAgAAAAQAAAAYAQAAMAEAALAAAACIVAEAjVQBAJFUAQCYVAEAnFQBAAAAAAABAAAAAgAAAAMAAAAEAAAABQAAAAAAAAAdAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAfAAAAAAAAAAAAAACRWQEAKEQAAAEAAACARAAAAAAAAAAAAABKAAAASwAAAEwAAABNAAAATgAAAE8AAABQAAAAUQAAAFIAAABTAAAAVAAAAEsAAABVAAAASwAAAFYAAABXAAAAWAAAAFkAAAAAAAAAnlkBAAAAAAA4RAAAKNsCAAEAAACkWQEAAAAAAEBEAAAo2wIAAgAAAKhZAQAAAAAASEQAACjbAgADAAAArVkBAAAAAABQRAAAKNsCAAQAAACzWQEAAAAAAFhEAAAo2wIABQAAALlZAQAAAAAAcEQAACjbAgAGAAAAw1kBAAAAAAB4RAAAKNsCAAcAAADJWQEAAAAAAGBEAAAo2wIABwAAAM1ZAQAAAAAAYEQAACjbAgAHAAAA0lkBAAAAAABoRAAAKNsCAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAADAAAAAAAAAAAQAAACAAAAABAAAAAAAAAAAAAAAAAAAAAwAAAAQAAAAAAAAAPGcBAFRnAQBzZwEAkGcBAK9nAQC2ZwEAv2cBADxnAQBBZwEASGcBAE1nAQDeZgEA8GYBAP5mAQAMZwEAGmcBACFnAQAwZwEAPGcBAAAAAADz+QIAAAAAAB0SAgABAAAA+GkBAAcAAAC8aQEAAwAAAMYlAgAFAAAAAGoBAA8AAACQjQEACAAAAJCNAQAQAAAACGoBAAQAAAAIagEAEQAAAA1qAQAFAAAADWoBAAIAAAATagEABgAAABpqAQAEAAAAJmoBAAcAAAAuagEABwAAAD5qAQAFAAAARGoBAAgAAABbagEACAAAAERqAQAJAAAAZGoBAAcAAABsagEACgAAAIZqAQAHAAAAjmoBAAsAAACoagEABgAAAK9qAQAMAAAAzWoBAAkAAACvagEADQAAANdqAQAIAAAA4GoBAA4AAAABawEACAAAAAprAQASAAAAK2sBAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAEAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAIAAAADAAAAAIAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAgAAAAEAAAAAAAAAAMAAAAhAAAABAAAAAAAAAAAAAAAAAAAAAgAAAAEAAAAAAAAAAQAAAAiAAAABQAAAAAAAAAAAAAAAAAAAAUAAABAAAAAiEcAAJhHAAAGAAAABAAAAKRHAAAGAAAACAAAAAYAAAAEAAAArEcAAAAEAAAIAAAA/////wAAAAAAAAAAIwAAAAAAAAAAAAAAAAAAAAAAAAA1AAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAGAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAD/////AAAAAAAAAAAGAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAIAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAD/////AAAAAAAAAAAIAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAJAAAAAAAAAAcAAAAAAAAACQAAAAsAAAAIAAAACgAAADBJAAC0SAAAGEkAAAEAAAABAAAACgAAABYAAAALAAAAWgAAACQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAABwAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAA0AAAAAAAAABwAAAAAAAAAHAAAAAgAAAAUAAAAIAAAAAAAAAAAAAAAGAAAAAwAAAA4AAAALAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAADwAAAAAAAAAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAlAAAAEAAAAAAAAAAHAAAAAAAAAAgAAAAIAAAAAAAAAAAAAAAmAAAAAAAAAAAAAAAAAAAAAAAAABAAAAD/////AAAAAAAAAAAnAAAAAAAAAAAAAAAHAAAAAAAAAAEAAAAAAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAACAAAAAwAAAAEAAAABAAAAAgAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAIAAAABAAAABAAAAAUAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAAGAAAAAQAAAAEAAAAHAAAACAAAAAkAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAAAQAAAAEAAAALAAAAAQAAAAwAAAABAAAADQAAAA4AAAAPAAAAEAAAABEAAAASAAAAEwAAABQAAAAVAAAAFgAAABMAAAATAAAAEwAAABMAAAAXAAAAGAAAABkAAAATAAAAGgAAABsAAAAcAAAAHQAAABMAAAATAAAAEwAAABMAAAATAAAAAQAAAB4AAAABAAAAAQAAABMAAAABAAAAHwAAACAAAAAhAAAAIgAAACMAAAATAAAAJAAAACUAAAAmAAAAEwAAABMAAAATAAAAEwAAACcAAAAoAAAAKQAAABMAAAAqAAAAKwAAACwAAAAtAAAAEwAAABMAAAATAAAAEwAAABMAAAABAAAAAQAAAAEAAAABAAAAAQAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAALgAAABMAAAATAAAAEwAAAC8AAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAADAAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAAAAAAAEAAAABAAAAAgAAAAMAAAABAAAABAAAAAEAAAAFAAAAAQAAAAYAAAAHAAAABwAAAAEAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAAAwAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAIAAAAB5swEAWrMBACB8AQCGswEAfrMBAIyzAQAAAAAAJoABAC+AAQA2gAEARIABAHqyAQCiswEAS4ABAFKAAQABAAAACAAAAP////8AAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAA8IEBAAgAAAADAAAA+YEBAP2BAQALAAAABgAAAKiNAQAJggEAAgAAAAEAAAAMggEAEIIBAAQAAAACAAAAFYIBABmCAQAEAAAABAAAAB6CAQAjggEABQAAAAUAAAApggEALYIBAAQAAAAHAAAAMoIBADaCAQAFAAAACQAAADyCAQBAggEABAAAAAoAAABFggEASoIBAAQAAAAMAAAAT4IBAOKGAQAAAAAAAQAAAOqGAQABAAAAAAAAAHWyAQABAAAAAQAAAB0SAgAAAAAAAAAAAAAAAAAAAAAAAAAAAMuFAQAxAAAAAAAAAAAAAACjrQEAEAAAAEUeAgCAAAAAxIUBAEAAAAAOoAEAEAAAAMaFAQBAAAAAAAAAAAAAAACShQEAAQAAAJmFAQACAAAAnoUBAAMAAADMpgEABAAAADCdAQAFAAAAooUBAAYAAAAdEgIACAAAAKaFAQAhAAAAqoUBACIAAACuhQEAIgAAALKFAQABAAAAt4UBAAcAAAC9hQEAJwAAAAAAAAAAAAAAAQAAAAAAAAAAAAAA/////wAAAAApAAAAAAAAAAAAAAAAAAAAAAAAAP2KAQAEiwEAAAAAAKWNAQCojQEAq40BAAAAAAAAAAAAAQAAAAIAAAD/////aI0BAG6NAQAdEgIAAAAAAGQAAABlAAAAZgAAAGQAAAAIAAAACAAAAAAAAAAAAAAAKgAAABEAAAAAAAAAAAAAAAAAAAAIAAAACAAAAAAAAAAJAAAAKwAAABEAAAAAAAAAAAAAAAAAAAAIAAAA/////wAAAAAAAAAALAAAAAAAAAAAAAAAAAAAAAAAAADMpgEAYFUAAIAGAAAAAAAA+ZwBAGBVAACwBgAAAAAAANKlAQBgVQAA4AYAAAAAAAABnQEAYFUAAOAGAAAAAAAABp0BAGBVAAAQBwAAAAAAAA2dAQB4VQAAEAcAAAAAAAATnQEAYFUAAEAHAAAAAAAAF50BAGBVAABwBwAAAAAAAB0SAgBgVQAAoAcAAAAAAAAgnQEAYFUAAKAHAAAAAAAAKp0BAGBVAABQBgAAAAAAADCdAQBgVQAA0AcAAAAAAAA4nQEAYFUAAAAIAAAAAAAAQp0BAGBVAAAwCAAAAAAAAFCdAQBgVQAAYAgAAAAAAABWnQEAYFUAAJAIAAAAAAAAX50BAGBVAADACAAAAAAAAGedAQBgVQAA8AgAAAAAAABwnQEAYFUAACAJAAAAAAAAeJ0BAGBVAABQCQAAAAAAAH2dAQBgVQAAgAkAAAAAAACBnQEAYFUAALAJAAAAAAAAiJ0BAGBVAADgCQAAAAAAAI6dAQBgVQAAEAoAAAAAAACYnQEAkFUAAEAKAAAAAAAAoZ0BAGBVAACABgAAAAAAAKadAQBgVQAAgAYAAAAAAACwnQEAYFUAAHAKAAAAAAAAt50BAGBVAACgCgAAAAAAAMSdAQBgVQAA0AoAAAAAAADSnQEAYFUAAAALAAAAAAAA4J0BAGBVAAAwCwAAAAAAAOydAQBgVQAAYAsAAAAAAAD5nQEAYFUAAJALAAAAAAAAAp4BAGBVAADACwAAAAAAAAyeAQBgVQAA8AsAAAAAAAAVngEAYFUAACAMAAAAAAAAHZ4BAGBVAABQDAAAAAAAACWeAQBgVQAAgAwAAAAAAAAungEAYFUAALAMAAAAAAAAMp4BAGBVAADgDAAAAAAAAD2eAQBgVQAAEA0AAAAAAABBngEAYFUAAEANAAAAAAAAS54BAGBVAABwDQAAAAAAAFSeAQBgVQAAoA0AAAAAAABcngEAYFUAANANAAAAAAAAaZ4BAGBVAAAADgAAAAAAAHWeAQBgVQAAMA4AAAAAAACAngEAYFUAAGAOAAAAAAAAkJ4BAGBVAACQDgAAAAAAAJ6eAQBgVQAAwA4AAAAAAACtngEAYFUAAPAOAAAAAAAAt54BAGBVAAAgDwAAAAAAAMCeAQBgVQAAUA8AAAAAAADKngEAYFUAAIAPAAAAAAAA1J4BAGBVAACwDwAAAAAAANueAQBgVQAA4A8AAAAAAADingEAYFUAABAQAAAAAAAA7J4BAKhVAAAAAAAAAAAAAPOeAQCoVQAAAAAAAAAAAADVnAEAwFUAAAAAAAAAAAAA+54BANhVAABAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAABbAAAAXAAAABcAAAAEAAAAAgAAAAwAAABdAAAAXAAAABcAAAAFAAAAAAAAAA0AAABbAAAAXAAAABcAAAAEAAAAAgAAAAwAAABeAAAAXwAAABgAAAAGAAAAAwAAAA4AAABgAAAAYQAAABcAAAAHAAAAAAAAAA8AAABbAAAAXAAAABcAAAAIAAAAAgAAAAwAAAAQAAAAEQAAABIAAAATAAAA/Z8BAASgAQAAAAAADKABAA6gAQB/HgIAEKABAAwAAAAEAAAABgAAAAIAAAADAAAAAQAAAAkAAAAIAAAACwAAAAwAAAANAAAADgAAAA8AAAAQAAAAEQAAABIAAAAVAAAAFgAAABcAAAAYAAAAGQAAABoAAAAbAAAAHAAAAB8AAAAgAAAAIQAAACIAAAAjAAAAJAAAACUAAAAmAAAAKQAAACoAAAArAAAALAAAAC0AAAAuAAAALwAAADAAAAAzAAAANAAAADUAAAA2AAAANwAAADgAAAA5AAAAOgAAAD0AAAA+AAAAPwAAAEAAAABBAAAAQgAAAEMAAABEAAAARwAAAEgAAABJAAAASgAAAEsAAABMAAAATQAAAE4AAABRAAAAUgAAAFMAAABUAAAAVQAAAFYAAABXAAAAWAAAAF2hAQBtoQEAeqEBAAAAAAAAAAAABAAAAH+hAQAAAAAAAAAAAIqhAQBtoQEAeqEBAAAAAAChoQEABQAAAH+hAQAAAAAAqaEBALChAQBtoQEAwKEBAAAAAAAAAAAABgAAAH+hAQDrsQEAAAAAAMWhAQBtoQEAwKEBAAAAAAChoQEABwAAAH+hAQDrsQEAqaEBANyhAQDpoQEAwKEBAAAAAAAAAAAACgAAAPehAQDrsQEAAAAAAP2hAQDpoQEAwKEBAAAAAACpoQEACwAAAPehAQDrsQEAqaEBABCiAQDpoQEAHqIBAAAAAAAAAAAACAAAAPehAQAAAAAAAAAAACSiAQDpoQEAHqIBAAAAAACpoQEACQAAAPehAQAAAAAAqaEBADiiAQA4ogEAAAAAAAAAAAAAAAAADAAAAECiAQAAAAAAAAAAAEqiAQA4ogEA67EBAAAAAAAAAAAADgAAAECiAQDrsQEAAAAAAFeiAQA4ogEA67EBAAAAAAChoQEADwAAAECiAQDrsQEAqaEBAGuiAQA4ogEAAAAAAAAAAAChoQEADQAAAECiAQAAAAAAqaEBAHuiAQB7ogEAAAAAAAAAAAAAAAAAEAAAAH+hAQAAAAAAAAAAAIWiAQB7ogEA67EBAAAAAAAAAAAAEgAAAH+hAQDrsQEAAAAAAJSiAQB7ogEA67EBAAAAAAChoQEAEwAAAH+hAQDrsQEAqaEBAKqiAQB7ogEAAAAAALuiAQAAAAAAFAAAAH+hAQAAAAAAAAAAAMWiAQB7ogEA67EBALuiAQAAAAAAFgAAAH+hAQDrsQEAAAAAANuiAQB7ogEA67EBALuiAQChoQEAFwAAAH+hAQDrsQEAqaEBAPiiAQB7ogEAAAAAALuiAQChoQEAFQAAAH+hAQAAAAAAqaEBABGjAQB7ogEAAAAAAAAAAAChoQEAEQAAAH+hAQAAAAAAqaEBACOjAQA5owEA67EBAAAAAAAAAAAAGgAAAPehAQDrsQEAAAAAAE6jAQA5owEA67EBAAAAAACpoQEAGwAAAPehAQDrsQEAqaEBAGqjAQA5owEAAAAAAAAAAACpoQEAGQAAAPehAQAAAAAAqaEBAIKjAQA5owEAmaMBAAAAAAAAAAAAGAAAAPehAQAAAAAAAAAAAJ+jAQCtowEA67EBAAAAAAAAAAAAHgAAAPehAQDrsQEAAAAAAL+jAQCtowEA67EBAAAAAACpoQEAHwAAAPehAQDrsQEAqaEBANOjAQCtowEAAAAAAAAAAACpoQEAHQAAAPehAQAAAAAAqaEBAOOjAQCtowEAmaMBAAAAAAAAAAAAHAAAAPehAQAAAAAAAAAAAPKjAQDyowEAAAAAAAAAAAAAAAAAIAAAAPmjAQAAAAAAAAAAAAGkAQAMpAEA67EBAAAAAAAAAAAAAgAAAPehAQDrsQEAAAAAABKkAQAMpAEA67EBAAAAAACpoQEAAwAAAPehAQDrsQEAqaEBACOkAQAMpAEAAAAAAAAAAACpoQEAAQAAAPehAQAAAAAAqaEBANqlAQAMpAEAAAAAAAAAAAAAAAAAAAAAAPehAQAAAAAAAAAAADCkAQBKpAEAWaQBAAAAAACpoQEAIQAAAPehAQAAAAAAqaEBAGCkAQBtpAEAAAAAAAAAAAAAAAAAIgAAAPmjAQAAAAAAAAAAAAgAAAAEAAAAAAAAAAoAAAAtAAAAEgAAAAAAAAAAAAAAAAAAAAgAAAD/////AAAAAAAAAAAuAAAAAAAAAAAAAAAAAAAAAAAAAAmnAQDGAAAAD6cBAMEAAAAWpwEAwgAAABynAQDAAAAAI6cBAJEDAAAppwEAxQAAAC+nAQDDAAAANqcBAMQAAAA7pwEAkgMAAECnAQDHAAAAR6cBAKcDAABLpwEAISAAAFKnAQCUAwAAWKcBANAAAABcpwEAyQAAAGOnAQDKAAAAaacBAMgAAABwpwEAlQMAAHinAQCXAwAAfKcBAMsAAACBpwEAkwMAAIenAQDNAAAAjqcBAM4AAACUpwEAzAAAAJunAQCZAwAAoKcBAM8AAAClpwEAmgMAAKunAQCbAwAAsqcBAJwDAAC1pwEA0QAAALynAQCdAwAAv6cBAFIBAADFpwEA0wAAAMynAQDUAAAA0qcBANIAAADZpwEAqQMAAN+nAQCfAwAA56cBANgAAADupwEA1QAAAPWnAQDWAAAA+qcBAKYDAAD+pwEAoAMAAAGoAQAzIAAAB6gBAKgDAAALqAEAoQMAAA+oAQBgAQAAFqgBAKMDAAAcqAEA3gAAACKoAQCkAwAAJqgBAJgDAAAsqAEA2gAAADOoAQDbAAAAOagBANkAAABAqAEApQMAAEioAQDcAAAATagBAJ4DAABQqAEA3QAAAFeoAQB4AQAAXKgBAJYDAABhqAEA4QAAAGioAQDiAAAAbqgBALQAAAB0qAEA5gAAAHqoAQDgAAAAgagBADUhAACJqAEAsQMAAI+oAQAmAAAAk6gBACciAACXqAEAICIAAJuoAQDlAAAAoagBAEgiAACnqAEA4wAAAK6oAQDkAAAAs6gBAB4gAAC5qAEAsgMAAL6oAQCmAAAAxagBACIgAADKqAEAKSIAAM6oAQDnAAAA1agBALgAAADbqAEAogAAAOCoAQDHAwAA5KgBAMYCAADpqAEAYyYAAO+oAQBFIgAA9KgBAKkAAAD5qAEAtSEAAP+oAQAqIgAAA6kBAKQAAAAKqQEA0yEAAA+pAQAgIAAAFqkBAJMhAAAbqQEAsAAAAB+pAQC0AwAAJakBAGYmAAArqQEA9wAAADKpAQDpAAAAOakBAOoAAAA/qQEA6AAAAEapAQAFIgAATKkBAAMgAABRqQEAAiAAAFapAQC1AwAAXqkBAGEiAABkqQEAtwMAAGipAQDwAAAAbKkBAOsAAABxqQEArCAAAHapAQADIgAAfKkBAJIBAACBqQEAACIAAIipAQC9AAAAj6kBALwAAACWqQEAvgAAAJ2pAQBEIAAAo6kBALMDAACpqQEAZSIAAKypAQA+AAAAr6kBANQhAAC0qQEAlCEAALmpAQBlJgAAwKkBACYgAADHqQEA7QAAAM6pAQDuAAAA1KkBAKEAAADaqQEA7AAAAOGpAQARIQAA56kBAB4iAADtqQEAKyIAAPGpAQC5AwAA9qkBAL8AAAD9qQEACCIAAAKqAQDvAAAAB6oBALoDAAANqgEA0CEAABKqAQC7AwAAGaoBACkjAAAeqgEAqwAAACSqAQCQIQAAKaoBAAgjAAAvqgEAHCAAADWqAQBkIgAAOKoBAAojAAA/qgEAFyIAAEaqAQDKJQAASqoBAA4gAABOqgEAOSAAAFWqAQAYIAAAW6oBADwAAABeqgEArwAAAGOqAQAUIAAAaaoBALUAAABvqgEAtwAAAEazAQASIgAAdqoBALwDAAB5qgEAByIAAH+qAQCgAAAAhKoBABMgAACKqgEAYCIAAI2qAQALIgAAkKoBAKwAAACUqgEACSIAAJqqAQCEIgAAn6oBAPEAAACmqgEAvQMAAKmqAQDzAAAAsKoBAPQAAAC2qgEAUwEAALyqAQDyAAAAw6oBAD4gAADJqgEAyQMAAM+qAQC/AwAA16oBAJUiAADdqgEAKCIAAOCqAQCqAAAA5aoBALoAAADqqgEA+AAAAPGqAQD1AAAA+KoBAJciAAD/qgEA9gAAAASrAQC2AAAACasBAAIiAAAOqwEAMCAAABWrAQClIgAAGqsBAMYDAAAeqwEAwAMAACGrAQDWAwAAJasBALEAAAAsqwEAowAAADKrAQAyIAAAOKsBAA8iAAA9qwEAHSIAAEKrAQDIAwAARqsBACIAAABLqwEA0iEAAFCrAQAaIgAAVqsBACojAABbqwEAuwAAAGGrAQCSIQAAZqsBAAkjAABsqwEAHSAAAHKrAQAcIQAAd6sBAK4AAAB7qwEACyMAAIKrAQDBAwAAhqsBAA8gAACKqwEAOiAAAJGrAQAZIAAAl6sBABogAACdqwEAYQEAAKSrAQDFIgAAqasBAKcAAACuqwEArQAAALKrAQDDAwAAuKsBAMIDAAC/qwEAPCIAAMOrAQBgJgAAyqsBAIIiAADOqwEAhiIAANOrAQARIgAA16sBAIMiAADbqwEAuQAAAOCrAQCyAAAA5asBALMAAADqqwEAhyIAAO+rAQDfAAAA9asBAMQDAAD5qwEANCIAAACsAQC4AwAABqwBANEDAAAPrAEACSAAABasAQD+AAAAHKwBANwCAAAirAEA1wAAACisAQAiIQAALqwBANEhAAAzrAEA+gAAADqsAQCRIQAAP6wBAPsAAABFrAEA+QAAAEysAQCoAAAAUKwBANIDAABWrAEAxQMAAF6sAQD8AAAAY6wBABghAABqrAEAvgMAAG2sAQD9AAAAdKwBAKUAAAB4rAEA/wAAAH2sAQC2AwAAgqwBAA0gAACGrAEADCAAAAcAAAAIAAAAAQEAAAgAAAAIAAAAAAAAAAAAAAAvAAAAEwAAAAAAAAAAAAAAAAAAAAgAAAAQAAAAAAAAAAAAAAAwAAAAFAAAAAAAAAAAAAAAAAAAAAazAQAJAAAACLMBAAoAAAANswEACgAAABWzAQALAAAAG7MBAAsAAAAkswEADAAAACezAQAMAAAALbMBAA0AAAAyswEADQAAADqzAQAOAAAAP7MBAA4AAABGswEADwAAAEyzAQAPAAAAWLMBABAAAABiAAAAMQAAADIAAAAUAAAAMwAAAGMAAAA0AAAAFQAAADUAAAAIAAAABAAAAP////8AAAAAAAAAABUAAAAAAAAAAAAAAAAAAACjtAEAVV3Jf8l//wCutAEAuy3Uvq7U/wC5tAEAFHf9/cCG/wDEtAEAVV3Jf8l//wDPtAEAuy3Uvq7U/wDatAEAFHf9/cCG/wDltAEAKmb///+Z/wDwtAEAVV3Jf8l//wD7tAEAuy3Uvq7U/wAGtQEAFHf9/cCG/wARtQEAKmb///+Z/wActQEAl62wOGyw/wAntQEAVV3Jf8l//wAytQEAuy3Uvq7U/wA9tQEAFHf9/cCG/wBItQEAKmb///+Z/wBTtQEAl62wOGyw/wBetQEA6Pzw8AJ//wBptQEAVV3Jf8l//wB0tQEAuy3Uvq7U/wB/tQEAFHf9/cCG/wCKtQEAKmb///+Z/wCVtQEAl62wOGyw/wCgtQEA6Pzw8AJ//wCrtQEAEeC/v1sX/wC2tQEAVV3Jf8l//wDBtQEAuy3Uvq7U/wDMtQEAFHf9/cCG/wDXtQEAKmb///+Z/wDitQEAl62wOGyw/wDttQEA6Pzw8AJ//wD4tQEAEeC/v1sX/wADtgEAAABmZmZm/wAOtgEAkxn33uv3/wAYtgEAjkvhnsrh/wAitgEAkby9MYK9/wAstgEAnxD/7/P//wA2tgEAjy7nvdfn/wBAtgEAj3/Wa67W/wBKtgEAk9C1IXG1/wBUtgEAnxD/7/P//wBetgEAjy7nvdfn/wBotgEAj3/Wa67W/wBytgEAkby9MYK9/wB8tgEAlfGcCFGc/wCGtgEAnxD/7/P//wCQtgEAlCvvxtvv/wCatgEAjkvhnsrh/wCktgEAj3/Wa67W/wCutgEAkby9MYK9/wC4tgEAlfGcCFGc/wDCtgEAnxD/7/P//wDMtgEAlCvvxtvv/wDWtgEAjkvhnsrh/wDgtgEAj3/Wa67W/wDqtgEAkKnGQpLG/wD0tgEAk9C1IXG1/wD+tgEAl/GUCEWU/wAItwEAlAj/9/v//wAStwEAkxn33uv3/wActwEAlCvvxtvv/wAmtwEAjkvhnsrh/wAwtwEAj3/Wa67W/wA6twEAkKnGQpLG/wBEtwEAk9C1IXG1/wBOtwEAl/GUCEWU/wBYtwEAlAj/9/v//wBitwEAkxn33uv3/wBstwEAlCvvxtvv/wB2twEAjkvhnsrh/wCAtwEAj3/Wa67W/wCKtwEAkKnGQpLG/wCUtwEAk9C1IXG1/wCetwEAlfGcCFGc/wCotwEAmOtrCDBr/wCytwEAF+9UVDAF/wC8twEAd/88ADww/wDHtwEAF+yMjFEK/wDRtwEAGMK/v4Et/wDbtwEAHXDf38J9/wDltwEAHjT29ujD/wDvtwEAeSbqx+rl/wD5twEAeF/NgM3B/wADuAEAfKWXNZeP/wANuAEAfPxmAWZe/wAXuAEAF+9UVDAF/wAhuAEAfPxmAWZe/wAsuAEAd/88ADww/wA3uAEAF+yMjFEK/wBBuAEAGMK/v4Et/wBLuAEAHXDf38J9/wBVuAEAHjT29ujD/wBfuAEAAAD19fX1/wBpuAEAeSbqx+rl/wBzuAEAeF/NgM3B/wB9uAEAfKWXNZeP/wCHuAEAHIfY2LNl/wCQuAEAAAD19fX1/wCZuAEAe3+0WrSs/wCiuAEAFdempmEa/wCruAEAHXDf38J9/wC0uAEAeF/NgM3B/wC9uAEAef2FAYVx/wDGuAEAFdempmEa/wDPuAEAHXDf38J9/wDYuAEAAAD19fX1/wDhuAEAeF/NgM3B/wDquAEAef2FAYVx/wDzuAEAF+yMjFEK/wD8uAEAHIfY2LNl/wAFuQEAHjT29ujD/wAOuQEAeSbqx+rl/wAXuQEAe3+0WrSs/wAguQEAfPxmAWZe/wApuQEAF+yMjFEK/wAyuQEAHIfY2LNl/wA7uQEAHjT29ujD/wBEuQEAAAD19fX1/wBNuQEAeSbqx+rl/wBWuQEAe3+0WrSs/wBfuQEAfPxmAWZe/wBouQEAF+yMjFEK/wBxuQEAGMK/v4Et/wB6uQEAHXDf38J9/wCDuQEAHjT29ujD/wCMuQEAeSbqx+rl/wCVuQEAeF/NgM3B/wCeuQEAfKWXNZeP/wCnuQEAfPxmAWZe/wCwuQEAF+yMjFEK/wC5uQEAGMK/v4Et/wDCuQEAHXDf38J9/wDLuQEAHjT29ujD/wDUuQEAAAD19fX1/wDduQEAeSbqx+rl/wDmuQEAeF/NgM3B/wDvuQEAfKWXNZeP/wD4uQEAfPxmAWZe/wABugEAhxT55fX5/wAKugEAdUrYmdjJ/wATugEAZ7miLKJf/wAcugEAiA777fj7/wAlugEAfzbisuLi/wAuugEAcXjCZsKk/wA3ugEAYr6LI4tF/wBAugEAiA777fj7/wBJugEAfzbisuLi/wBSugEAcXjCZsKk/wBbugEAZ7miLKJf/wBkugEAZv9tAG0s/wBtugEAiA777fj7/wB2ugEAdyLszOzm/wB/ugEAdUrYmdjJ/wCIugEAcXjCZsKk/wCRugEAZ7miLKJf/wCaugEAZv9tAG0s/wCjugEAiA777fj7/wCsugEAdyLszOzm/wC1ugEAdUrYmdjJ/wC+ugEAcXjCZsKk/wDHugEAaZ+uQa52/wDQugEAYr6LI4tF/wDZugEAZv9YAFgk/wDiugEAhgb99/z9/wDrugEAhxT55fX5/wD0ugEAdyLszOzm/wD9ugEAdUrYmdjJ/wAGuwEAcXjCZsKk/wAPuwEAaZ+uQa52/wAYuwEAYr6LI4tF/wAhuwEAZv9YAFgk/wAquwEAhgb99/z9/wAzuwEAhxT55fX5/wA8uwEAdyLszOzm/wBFuwEAdUrYmdjJ/wBOuwEAcXjCZsKk/wBXuwEAaZ+uQa52/wBguwEAYr6LI4tF/wBpuwEAZv9tAG0s/wByuwEAZf9EAEQb/wB7uwEAkBT04Oz0/wCEuwEAlEbanrza/wCNuwEAxHuniFan/wCWuwEAiA777fj7/wCfuwEAkjXjs83j/wCouwEAokrGjJbG/wCxuwEAypWdiEGd/wC6uwEAiA777fj7/wDDuwEAkjXjs83j/wDMuwEAokrGjJbG/wDVuwEAxHuniFan/wDeuwEA1uGBgQ98/wDnuwEAiA777fj7/wDwuwEAlCvmv9Pm/wD5uwEAlEbanrza/wACvAEAokrGjJbG/wALvAEAxHuniFan/wAUvAEA1uGBgQ98/wAdvAEAiA777fj7/wAmvAEAlCvmv9Pm/wAvvAEAlEbanrza/wA4vAEAokrGjJbG/wBBvAEAvmSxjGux/wBKvAEAypWdiEGd/wBTvAEA1fxubgFr/wBcvAEAhgb99/z9/wBlvAEAkBT04Oz0/wBuvAEAlCvmv9Pm/wB3vAEAlEbanrza/wCAvAEAokrGjJbG/wCJvAEAvmSxjGux/wCSvAEAypWdiEGd/wCbvAEA1fxubgFr/wCkvAEAhgb99/z9/wCtvAEAkBT04Oz0/wC2vAEAlCvmv9Pm/wC/vAEAlEbanrza/wDIvAEAokrGjJbG/wDRvAEAvmSxjGux/wDavAEAypWdiEGd/wDjvAEA1uGBgQ98/wDsvAEA1f9NTQBL/wD1vAEActOeG553/wD/vAEAEvzZ2V8C/wAJvQEArV+zdXCz/wATvQEActOeG553/wAdvQEAEvzZ2V8C/wAnvQEArV+zdXCz/wAxvQEA6dHn5ymK/wA7vQEActOeG553/wBFvQEAEvzZ2V8C/wBPvQEArV+zdXCz/wBZvQEA6dHn5ymK/wBjvQEAPtCmZqYe/wBtvQEActOeG553/wB3vQEAEvzZ2V8C/wCBvQEArV+zdXCz/wCLvQEA6dHn5ymK/wCVvQEAPtCmZqYe/wCfvQEAH/zm5qsC/wCpvQEActOeG553/wCzvQEAEvzZ2V8C/wC9vQEArV+zdXCz/wDHvQEA6dHn5ymK/wDRvQEAPtCmZqYe/wDbvQEAH/zm5qsC/wDlvQEAG9KmpnYd/wDvvQEActOeG553/wD5vQEAEvzZ2V8C/wADvgEArV+zdXCz/wANvgEA6dHn5ymK/wAXvgEAPtCmZqYe/wAhvgEAH/zm5qsC/wArvgEAG9KmpnYd/wA1vgEAAABmZmZm/wA/vgEATBnz4PPb/wBIvgEAXz3dqN21/wBRvgEAjKrKQ6LK/wBavgEAQRH58Pno/wBjvgEAVy7kuuS8/wBsvgEAe2XMe8zE/wB1vgEAjcW+K4y+/wB+vgEAQRH58Pno/wCHvgEAVy7kuuS8/wCQvgEAe2XMe8zE/wCZvgEAjKrKQ6LK/wCivgEAkfOsCGis/wCrvgEAQRH58Pno/wC0vgEATSnrzOvF/wC9vgEAXz3dqN21/wDGvgEAe2XMe8zE/wDPvgEAjKrKQ6LK/wDYvgEAkfOsCGis/wDhvgEAQRH58Pno/wDqvgEATSnrzOvF/wDzvgEAXz3dqN21/wD8vgEAe2XMe8zE/wAFvwEAiaDTTrPT/wAOvwEAjcW+K4y+/wAXvwEAk/KeCFie/wAgvwEAPAz89/zw/wApvwEATBnz4PPb/wAyvwEATSnrzOvF/wA7vwEAXz3dqN21/wBEvwEAe2XMe8zE/wBNvwEAiaDTTrPT/wBWvwEAjcW+K4y+/wBfvwEAk/KeCFie/wBovwEAPAz89/zw/wBxvwEATBnz4PPb/wB6vwEATSnrzOvF/wCDvwEAXz3dqN21/wCMvwEAe2XMe8zE/wCVvwEAiaDTTrPT/wCevwEAjcW+K4y+/wCnvwEAkfOsCGis/wCwvwEAlu+BCECB/wC5vwEAShX15fXg/wDEvwEAUEjZodmb/wDPvwEAYrKjMaNU/wDavwEASQ/47fjp/wDlvwEATjbkuuSz/wDwvwEAVmjEdMR2/wD7vwEAYr6LI4tF/wAGwAEASQ/47fjp/wARwAEATjbkuuSz/wAcwAEAVmjEdMR2/wAnwAEAYrKjMaNU/wAywAEAZv9tAG0s/wA9wAEASQ/47fjp/wBIwAEATSzpx+nA/wBTwAEAUEjZodmb/wBewAEAVmjEdMR2/wBpwAEAYrKjMaNU/wB0wAEAZv9tAG0s/wB/wAEASQ/47fjp/wCKwAEATSzpx+nA/wCVwAEAUEjZodmb/wCgwAEAVmjEdMR2/wCrwAEAYJ6rQatd/wC2wAEAYr6LI4tF/wDBwAEAbP9aAFoy/wDMwAEASAf89/z1/wDXwAEAShX15fXg/wDiwAEATSzpx+nA/wDtwAEAUEjZodmb/wD4wAEAVmjEdMR2/wADwQEAYJ6rQatd/wAOwQEAYr6LI4tF/wAZwQEAbP9aAFoy/wAkwQEASAf89/z1/wAvwQEAShX15fXg/wA6wQEATSzpx+nA/wBFwQEAUEjZodmb/wBQwQEAVmjEdMR2/wBbwQEAYJ6rQatd/wBmwQEAYr6LI4tF/wBxwQEAZv9tAG0s/wB8wQEAZf9EAEQb/wCHwQEAAADw8PDw/wCRwQEAAAC9vb29/wCbwQEAAABjY2Nj/wClwQEAAAD39/f3/wCvwQEAAADMzMzM/wC5wQEAAACWlpaW/wDDwQEAAABSUlJS/wDNwQEAAAD39/f3/wDXwQEAAADMzMzM/wDhwQEAAACWlpaW/wDrwQEAAABjY2Nj/wD1wQEAAAAlJSUl/wD/wQEAAAD39/f3/wAJwgEAAADZ2dnZ/wATwgEAAAC9vb29/wAdwgEAAACWlpaW/wAnwgEAAABjY2Nj/wAxwgEAAAAlJSUl/wA7wgEAAAD39/f3/wBFwgEAAADZ2dnZ/wBPwgEAAAC9vb29/wBZwgEAAACWlpaW/wBjwgEAAABzc3Nz/wBtwgEAAABSUlJS/wB3wgEAAAAlJSUl/wCBwgEAAAD//////wCLwgEAAADw8PDw/wCVwgEAAADZ2dnZ/wCfwgEAAAC9vb29/wCpwgEAAACWlpaW/wCzwgEAAABzc3Nz/wC9wgEAAABSUlJS/wDHwgEAAAAlJSUl/wDRwgEAAAD//////wDbwgEAAADw8PDw/wDlwgEAAADZ2dnZ/wDvwgEAAAC9vb29/wD5wgEAAACWlpaW/wADwwEAAABzc3Nz/wANwwEAAABSUlJS/wAXwwEAAAAlJSUl/wAhwwEAAAAAAAAA/wArwwEAFTD+/ubO/wA3wwEAE5P9/a5r/wBDwwEADvDm5lUN/wBPwwEAEyD+/u3e/wBbwwEAFHj9/b6F/wBnwwEAEcL9/Y08/wBzwwEADf3Z2UcB/wB/wwEAEyD+/u3e/wCLwwEAFHj9/b6F/wCXwwEAEcL9/Y08/wCjwwEADvDm5lUN/wCvwwEADfqmpjYD/wC7wwEAEyD+/u3e/wDHwwEAFVv9/dCi/wDTwwEAE5P9/a5r/wDfwwEAEcL9/Y08/wDrwwEADvDm5lUN/wD3wwEADfqmpjYD/wADxAEAEyD+/u3e/wAPxAEAFVv9/dCi/wAbxAEAE5P9/a5r/wAnxAEAEcL9/Y08/wAzxAEAEOrx8WkT/wA/xAEADf3Z2UgB/wBLxAEADPeMjC0E/wBXxAEAFRT///Xr/wBjxAEAFTD+/ubO/wBvxAEAFVv9/dCi/wB7xAEAE5P9/a5r/wCHxAEAEcL9/Y08/wCTxAEAEOrx8WkT/wCfxAEADf3Z2UgB/wCrxAEADPeMjC0E/wC3xAEAFRT///Xr/wDDxAEAFTD+/ubO/wDPxAEAFVv9/dCi/wDbxAEAE5P9/a5r/wDnxAEAEcL9/Y08/wDzxAEAEOrx8WkT/wD/xAEADf3Z2UgB/wALxQEADfqmpjYD/wAXxQEADPZ/fycE/wAjxQEAGTb+/ujI/wAsxQEAE3n9/buE/wA1xQEABcXj40oz/wA+xQEAGiX+/vDZ/wBHxQEAGHP9/cyK/wBQxQEADaT8/I1Z/wBZxQEAA9rX1zAf/wBixQEAGiX+/vDZ/wBrxQEAGHP9/cyK/wB0xQEADaT8/I1Z/wB9xQEABcXj40oz/wCGxQEAAP+zswAA/wCPxQEAGiX+/vDZ/wCYxQEAGF/9/dSe/wChxQEAE3n9/buE/wCqxQEADaT8/I1Z/wCzxQEABcXj40oz/wC8xQEAAP+zswAA/wDFxQEAGiX+/vDZ/wDOxQEAGF/9/dSe/wDXxQEAE3n9/buE/wDgxQEADaT8/I1Z/wDpxQEAB7Lv72VI/wDyxQEAA9rX1zAf/wD7xQEAAP+ZmQAA/wAExgEAGBL///fs/wANxgEAGTb+/ujI/wAWxgEAGF/9/dSe/wAfxgEAE3n9/buE/wAoxgEADaT8/I1Z/wAxxgEAB7Lv72VI/wA6xgEAA9rX1zAf/wBDxgEAAP+ZmQAA/wBMxgEAGBL///fs/wBVxgEAGTb+/ujI/wBexgEAGF/9/dSe/wBnxgEAE3n9/buE/wBwxgEADaT8/I1Z/wB5xgEAB7Lv72VI/wCCxgEAA9rX1zAf/wCLxgEAAP+zswAA/wCUxgEAAP9/fwAA/wCdxgEAjkTjps7j/wCpxgEAvpmaaj2a/wC2xgEAkNO0H3i0/wDCxgEAQWHfst+K/wDOxgEAUrigM6As/wDaxgEAAGP7+5qZ/wDmxgEA/uHj4xoc/wDyxgEAF4/9/b9v/wD+xgEAFf///38A/wAKxwEAxirWyrLW/wAWxwEAjkTjps7j/wAixwEAvpmaaj2a/wAvxwEAKmb///+Z/wA8xwEAkNO0H3i0/wBIxwEAQWHfst+K/wBUxwEAUrigM6As/wBgxwEAAGP7+5qZ/wBsxwEA/uHj4xoc/wB4xwEAF4/9/b9v/wCExwEAFf///38A/wCQxwEAxirWyrLW/wCcxwEAjkTjps7j/wCoxwEAvpmaaj2a/wC1xwEAKmb///+Z/wDCxwEAD8WxsVko/wDPxwEAkNO0H3i0/wDbxwEAQWHfst+K/wDnxwEAUrigM6As/wDzxwEAAGP7+5qZ/wD/xwEA/uHj4xoc/wALyAEAF4/9/b9v/wAXyAEAFf///38A/wAjyAEAxirWyrLW/wAvyAEAjkTjps7j/wA6yAEAkNO0H3i0/wBFyAEAQWHfst+K/wBQyAEAjkTjps7j/wBbyAEAkNO0H3i0/wBmyAEAQWHfst+K/wBxyAEAUrigM6As/wB8yAEAjkTjps7j/wCHyAEAkNO0H3i0/wCSyAEAQWHfst+K/wCdyAEAUrigM6As/wCoyAEAAGP7+5qZ/wCzyAEAjkTjps7j/wC+yAEAkNO0H3i0/wDJyAEAQWHfst+K/wDUyAEAUrigM6As/wDfyAEAAGP7+5qZ/wDqyAEA/uHj4xoc/wD1yAEAjkTjps7j/wAAyQEAkNO0H3i0/wALyQEAQWHfst+K/wAWyQEAUrigM6As/wAhyQEAAGP7+5qZ/wAsyQEA/uHj4xoc/wA3yQEAF4/9/b9v/wBCyQEAjkTjps7j/wBNyQEAkNO0H3i0/wBYyQEAQWHfst+K/wBjyQEAUrigM6As/wBuyQEAAGP7+5qZ/wB5yQEA/uHj4xoc/wCEyQEAF4/9/b9v/wCPyQEAFf///38A/wCayQEAjkTjps7j/wClyQEAkNO0H3i0/wCwyQEAQWHfst+K/wC7yQEAUrigM6As/wDGyQEAAGP7+5qZ/wDRyQEA/uHj4xoc/wDcyQEAF4/9/b9v/wDnyQEAFf///38A/wDyyQEAxirWyrLW/wD9yQEAA077+7Su/wAJygEAkjXjs83j/wAVygEATSnrzOvF/wAhygEAA077+7Su/wAtygEAkjXjs83j/wA5ygEATSnrzOvF/wBFygEAyhvk3svk/wBRygEAA077+7Su/wBdygEAkjXjs83j/wBpygEATSnrzOvF/wB1ygEAyhvk3svk/wCBygEAGFj+/tmm/wCNygEAA077+7Su/wCZygEAkjXjs83j/wClygEATSnrzOvF/wCxygEAyhvk3svk/wC9ygEAGFj+/tmm/wDJygEAKjL////M/wDVygEAA077+7Su/wDhygEAkjXjs83j/wDtygEATSnrzOvF/wD5ygEAyhvk3svk/wAFywEAGFj+/tmm/wARywEAKjL////M/wAdywEAHCzl5di9/wApywEAA077+7Su/wA1ywEAkjXjs83j/wBBywEATSnrzOvF/wBNywEAyhvk3svk/wBZywEAGFj+/tmm/wBlywEAKjL////M/wBxywEAHCzl5di9/wB9ywEA6SP9/drs/wCJywEAA077+7Su/wCVywEAkjXjs83j/wChywEATSnrzOvF/wCtywEAyhvk3svk/wC5ywEAGFj+/tmm/wDFywEAKjL////M/wDRywEAHCzl5di9/wDdywEA6SP9/drs/wDpywEAAADy8vLy/wD1ywEAbDXis+LN/wABzAEAEVH9/c2s/wANzAEAmx/oy9Xo/wAZzAEAbDXis+LN/wAlzAEAEVH9/c2s/wAxzAEAmx/oy9Xo/wA9zAEA5Cv09Mrk/wBJzAEAbDXis+LN/wBVzAEAEVH9/c2s/wBhzAEAmx/oy9Xo/wBtzAEA5Cv09Mrk/wB5zAEAOC315vXJ/wCFzAEAbDXis+LN/wCRzAEAEVH9/c2s/wCdzAEAmx/oy9Xo/wCpzAEA5Cv09Mrk/wC1zAEAOC315vXJ/wDBzAEAI1H///Ku/wDNzAEAbDXis+LN/wDZzAEAEVH9/c2s/wDlzAEAmx/oy9Xo/wDxzAEA5Cv09Mrk/wD9zAEAOC315vXJ/wAJzQEAI1H///Ku/wAVzQEAGSfx8eLM/wAhzQEAbDXis+LN/wAtzQEAEVH9/c2s/wA5zQEAmx/oy9Xo/wBFzQEA5Cv09Mrk/wBRzQEAOC315vXJ/wBdzQEAI1H///Ku/wBpzQEAGSfx8eLM/wB1zQEAAADMzMzM/wCBzQEA5v2OjgFS/wCLzQEATb9kJ2QZ/wCWzQEA5tzFxRt9/wCgzQEA6Hbe3neu/wCqzQEA5T7x8bba/wC0zQEA6R39/eDv/wC+zQEAOyb15vXQ/wDIzQEAPWfhuOGG/wDSzQEAP6a8f7xB/wDczQEARMWSTZIh/wDmzQEA5v2OjgFS/wDwzQEARMWSTZIh/wD7zQEATb9kJ2QZ/wAGzgEA5tzFxRt9/wAQzgEA6Hbe3neu/wAazgEA5T7x8bba/wAkzgEA6R39/eDv/wAuzgEAAAD39/f3/wA4zgEAOyb15vXQ/wBCzgEAPWfhuOGG/wBMzgEAP6a8f7xB/wBWzgEA50zp6aPJ/wBfzgEAAAD39/f3/wBozgEAP4HXoddq/wBxzgEA5NzQ0ByL/wB6zgEA5T7x8bba/wCDzgEAPWfhuOGG/wCMzgEASMasTawm/wCVzgEA5NzQ0ByL/wCezgEA5T7x8bba/wCnzgEAAAD39/f3/wCwzgEAPWfhuOGG/wC5zgEASMasTawm/wDCzgEA5tzFxRt9/wDLzgEA50zp6aPJ/wDUzgEA6R39/eDv/wDdzgEAOyb15vXQ/wDmzgEAP4HXoddq/wDvzgEARMWSTZIh/wD4zgEA5tzFxRt9/wABzwEA50zp6aPJ/wAKzwEA6R39/eDv/wATzwEAAAD39/f3/wAczwEAOyb15vXQ/wAlzwEAP4HXoddq/wAuzwEARMWSTZIh/wA3zwEA5tzFxRt9/wBAzwEA6Hbe3neu/wBJzwEA5T7x8bba/wBSzwEA6R39/eDv/wBbzwEAOyb15vXQ/wBkzwEAPWfhuOGG/wBtzwEAP6a8f7xB/wB2zwEARMWSTZIh/wB/zwEA5tzFxRt9/wCIzwEA6Hbe3neu/wCRzwEA5T7x8bba/wCazwEA6R39/eDv/wCjzwEAAAD39/f3/wCszwEAOyb15vXQ/wC1zwEAPWfhuOGG/wC+zwEAP6a8f7xB/wDHzwEARMWSTZIh/wDQzwEAzv9LQABL/wDazwEAZf9EAEQb/wDlzwEAzq2DdiqD/wDvzwEAx1ermXCr/wD5zwEAxzPPwqXP/wAD0AEA0hXo59To/wAN0AEATB7w2fDT/wAX0AEAUETbptug/wAh0AEAWHuuWq5h/wAr0AEAYcV4G3g3/wA10AEAzv9LQABL/wA/0AEAYcV4G3g3/wBK0AEAZf9EAEQb/wBV0AEAzq2DdiqD/wBf0AEAx1ermXCr/wBp0AEAxzPPwqXP/wBz0AEA0hXo59To/wB90AEAAAD39/f3/wCH0AEATB7w2fDT/wCR0AEAUETbptug/wCb0AEAWHuuWq5h/wCl0AEAxEbDr43D/wCu0AEAAAD39/f3/wC30AEAUlq/f797/wDA0AEAyaiUezKU/wDJ0AEAxzPPwqXP/wDS0AEAUETbptug/wDb0AEAZv+IAIg3/wDk0AEAyaiUezKU/wDt0AEAxzPPwqXP/wD20AEAAAD39/f3/wD/0AEAUETbptug/wAI0QEAZv+IAIg3/wAR0QEAzq2DdiqD/wAa0QEAxEbDr43D/wAj0QEA0hXo59To/wAs0QEATB7w2fDT/wA10QEAUlq/f797/wA+0QEAYcV4G3g3/wBH0QEAzq2DdiqD/wBQ0QEAxEbDr43D/wBZ0QEA0hXo59To/wBi0QEAAAD39/f3/wBr0QEATB7w2fDT/wB00QEAUlq/f797/wB90QEAYcV4G3g3/wCG0QEAzq2DdiqD/wCP0QEAx1ermXCr/wCY0QEAxzPPwqXP/wCh0QEA0hXo59To/wCq0QEATB7w2fDT/wCz0QEAUETbptug/wC80QEAWHuuWq5h/wDF0QEAYcV4G3g3/wDO0QEAzq2DdiqD/wDX0QEAx1ermXCr/wDg0QEAxzPPwqXP/wDp0QEA0hXo59To/wDy0QEAAAD39/f3/wD70QEATB7w2fDT/wAE0gEAUETbptug/wAN0gEAWHuuWq5h/wAW0gEAYcV4G3g3/wAf0gEAvQvy7Ofy/wAo0gEAlz3bpr3b/wAx0gEAjcW+K4y+/wA60gEAuQj28e72/wBD0gEAmyjhvcnh/wBM0gEAkXDPdKnP/wBV0gEAj/ewBXCw/wBe0gEAuQj28e72/wBn0gEAmyjhvcnh/wBw0gEAkXDPdKnP/wB50gEAjcW+K4y+/wCC0gEAj/eNBFqN/wCL0gEAuQj28e72/wCU0gEAqBjm0NHm/wCd0gEAlz3bpr3b/wCm0gEAkXDPdKnP/wCv0gEAjcW+K4y+/wC40gEAj/eNBFqN/wDB0gEAuQj28e72/wDK0gEAqBjm0NHm/wDT0gEAlz3bpr3b/wDc0gEAkXDPdKnP/wDl0gEAjrfANpDA/wDu0gEAj/ewBXCw/wD30gEAj/h7A057/wAA0wEA6Qj///f7/wAJ0wEAvQvy7Ofy/wAS0wEAqBjm0NHm/wAb0wEAlz3bpr3b/wAk0wEAkXDPdKnP/wAt0wEAjrfANpDA/wA20wEAj/ewBXCw/wA/0wEAj/h7A057/wBI0wEA6Qj///f7/wBR0wEAvQvy7Ofy/wBa0wEAqBjm0NHm/wBj0wEAlz3bpr3b/wBs0wEAkXDPdKnP/wB10wEAjrfANpDA/wB+0wEAj/ewBXCw/wCH0wEAj/eNBFqN/wCQ0wEAj/lYAjhY/wCZ0wEAyA7w7OLw/wCk0wEAlz3bpr3b/wCv0wEAgtCZHJCZ/wC60wEAzwj39u/3/wDF0wEAmyjhvcnh/wDQ0wEAj4DPZ6nP/wDb0wEAgvuKAoGK/wDm0wEAzwj39u/3/wDx0wEAmyjhvcnh/wD80wEAj4DPZ6nP/wAH1AEAgtCZHJCZ/wAS1AEAd/xsAWxZ/wAd1AEAzwj39u/3/wAo1AEAqBjm0NHm/wAz1AEAlz3bpr3b/wA+1AEAj4DPZ6nP/wBJ1AEAgtCZHJCZ/wBU1AEAd/xsAWxZ/wBf1AEAzwj39u/3/wBq1AEAqBjm0NHm/wB11AEAlz3bpr3b/wCA1AEAj4DPZ6nP/wCL1AEAjrfANpDA/wCW1AEAgvuKAoGK/wCh1AEAdvxkAWRQ/wCs1AEA6Qj///f7/wC31AEAyA7w7OLw/wDC1AEAqBjm0NHm/wDN1AEAlz3bpr3b/wDY1AEAj4DPZ6nP/wDj1AEAjrfANpDA/wDu1AEAgvuKAoGK/wD51AEAdvxkAWRQ/wAE1QEA6Qj///f7/wAP1QEAyA7w7OLw/wAa1QEAqBjm0NHm/wAl1QEAlz3bpr3b/wAw1QEAj4DPZ6nP/wA71QEAjrfANpDA/wBG1QEAgvuKAoGK/wBR1QEAd/xsAWxZ/wBc1QEAdftGAUY2/wBn1QEAEu5/fzsI/wBx1QEAw/9LLQBL/wB81QEAFPazs1gG/wCG1QEAFujg4IIU/wCQ1QEAF5v9/bhj/wCa1QEAGEj+/uC2/wCk1QEApRTr2Nrr/wCu1QEAsS/SsqvS/wC41QEAs1SsgHOs/wDC1QEAvbWIVCeI/wDM1QEAEu5/fzsI/wDW1QEAvbWIVCeI/wDh1QEAw/9LLQBL/wDs1QEAFPazs1gG/wD21QEAFujg4IIU/wAA1gEAF5v9/bhj/wAK1gEAGEj+/uC2/wAU1gEAAAD39/f3/wAe1gEApRTr2Nrr/wAo1gEAsS/SsqvS/wAy1gEAs1SsgHOs/wA81gEAF7vx8aNA/wBF1gEAAAD39/f3/wBO1gEAskXDmY7D/wBX1gEAEf3m5mEB/wBg1gEAF5v9/bhj/wBp1gEAsS/SsqvS/wBy1gEAuZuZXjyZ/wB71gEAEf3m5mEB/wCE1gEAF5v9/bhj/wCN1gEAAAD39/f3/wCW1gEAsS/SsqvS/wCf1gEAuZuZXjyZ/wCo1gEAFPazs1gG/wCx1gEAF7vx8aNA/wC61gEAGEj+/uC2/wDD1gEApRTr2Nrr/wDM1gEAskXDmY7D/wDV1gEAvbWIVCeI/wDe1gEAFPazs1gG/wDn1gEAF7vx8aNA/wDw1gEAGEj+/uC2/wD51gEAAAD39/f3/wAC1wEApRTr2Nrr/wAL1wEAskXDmY7D/wAU1wEAvbWIVCeI/wAd1wEAFPazs1gG/wAm1wEAFujg4IIU/wAv1wEAF5v9/bhj/wA41wEAGEj+/uC2/wBB1wEApRTr2Nrr/wBK1wEAsS/SsqvS/wBT1wEAs1SsgHOs/wBc1wEAvbWIVCeI/wBl1wEAFPazs1gG/wBu1wEAFujg4IIU/wB31wEAF5v9/bhj/wCA1wEAGEj+/uC2/wCJ1wEAAAD39/f3/wCS1wEApRTr2Nrr/wCb1wEAsS/SsqvS/wCk1wEAs1SsgHOs/wCt1wEAvbWIVCeI/wC21wEAvA7v5+Hv/wC/1wEA1kPJyZTH/wDI1wEA6t7d3Rx3/wDR1wEAuQj28e72/wDa1wEA0ynY17XY/wDj1wEA5Ivf32Ww/wDs1wEA7+jOzhJW/wD11wEAuQj28e72/wD+1wEA0ynY17XY/wAH2AEA5Ivf32Ww/wAQ2AEA6t7d3Rx3/wAZ2AEA7P+YmABD/wAi2AEAuQj28e72/wAr2AEAzCba1Lna/wA02AEA1kPJyZTH/wA92AEA5Ivf32Ww/wBG2AEA6t7d3Rx3/wBP2AEA7P+YmABD/wBY2AEAuQj28e72/wBh2AEAzCba1Lna/wBq2AEA1kPJyZTH/wBz2AEA5Ivf32Ww/wB82AEA6dHn5ymK/wCF2AEA7+jOzhJW/wCO2AEA7P+RkQA//wCX2AEAwwX59/T5/wCg2AEAvA7v5+Hv/wCp2AEAzCba1Lna/wCy2AEA1kPJyZTH/wC72AEA5Ivf32Ww/wDE2AEA6dHn5ymK/wDN2AEA7+jOzhJW/wDW2AEA7P+RkQA//wDf2AEAwwX59/T5/wDo2AEAvA7v5+Hv/wDx2AEAzCba1Lna/wD62AEA1kPJyZTH/wAD2QEA5Ivf32Ww/wAM2QEA6dHn5ymK/wAV2QEA7+jOzhJW/wAe2QEA7P+YmABD/wAn2QEA8v9nZwAf/wAw2QEAtAj17+31/wA82QEAqCXcvL3c/wBI2QEAsGSxdWux/wBU2QEAtgf38vD3/wBg2QEArRziy8ni/wBs2QEArTrInprI/wB42QEAtoCjalGj/wCE2QEAtgf38vD3/wCQ2QEArRziy8ni/wCc2QEArTrInprI/wCo2QEAsGSxdWux/wC02QEAvLmPVCeP/wDA2QEAtgf38vD3/wDM2QEAqhLr2trr/wDY2QEAqCXcvL3c/wDk2QEArTrInprI/wDw2QEAsGSxdWux/wD82QEAvLmPVCeP/wAI2gEAtgf38vD3/wAU2gEAqhLr2trr/wAg2gEAqCXcvL3c/wAs2gEArTrInprI/wA42gEArFO6gH26/wBE2gEAtoCjalGj/wBQ2gEAvtiGShSG/wBc2gEAvwL9/Pv9/wBo2gEAtAj17+31/wB02gEAqhLr2trr/wCA2gEAqCXcvL3c/wCM2gEArTrInprI/wCY2gEArFO6gH26/wCk2gEAtoCjalGj/wCw2gEAvtiGShSG/wC82gEAvwL9/Pv9/wDI2gEAtAj17+31/wDU2gEAqhLr2trr/wDg2gEAqCXcvL3c/wDs2gEArTrInprI/wD42gEArFO6gH26/wAE2wEAtoCjalGj/wAQ2wEAvLmPVCeP/wAc2wEAv/99PwB9/wAo2wEA8v9nZwAf/wAy2wEAlvFhBTBh/wA92wEA+dyyshgr/wBH2wEABaPW1mBN/wBR2wEADXf09KWC/wBb2wEADzb9/dvH/wBl2wEAjiDw0eXw/wBv2wEAjVfeksXe/wB52wEAj6fDQ5PD/wCD2wEAlM6sIWas/wCN2wEA8v9nZwAf/wCX2wEAlM6sIWas/wCi2wEAlvFhBTBh/wCt2wEA+dyyshgr/wC32wEABaPW1mBN/wDB2wEADXf09KWC/wDL2wEADzb9/dvH/wDV2wEAAAD39/f3/wDf2wEAjiDw0eXw/wDp2wEAjVfeksXe/wDz2wEAj6fDQ5PD/wD92wEADJbv74pi/wAG3AEAAAD39/f3/wAP3AEAj4DPZ6nP/wAY3AEA+P/KygAg/wAh3AEADXf09KWC/wAq3AEAjVfeksXe/wAz3AEAj/ewBXGw/wA83AEA+P/KygAg/wBF3AEADXf09KWC/wBO3AEAAAD39/f3/wBX3AEAjVfeksXe/wBg3AEAj/ewBXGw/wBp3AEA+dyyshgr/wBy3AEADJbv74pi/wB73AEADzb9/dvH/wCE3AEAjiDw0eXw/wCN3AEAj4DPZ6nP/wCW3AEAlM6sIWas/wCf3AEA+dyyshgr/wCo3AEADJbv74pi/wCx3AEADzb9/dvH/wC63AEAAAD39/f3/wDD3AEAjiDw0eXw/wDM3AEAj4DPZ6nP/wDV3AEAlM6sIWas/wDe3AEA+dyyshgr/wDn3AEABaPW1mBN/wDw3AEADXf09KWC/wD53AEADzb9/dvH/wAC3QEAjiDw0eXw/wAL3QEAjVfeksXe/wAU3QEAj6fDQ5PD/wAd3QEAlM6sIWas/wAm3QEA+dyyshgr/wAv3QEABaPW1mBN/wA43QEADXf09KWC/wBB3QEADzb9/dvH/wBK3QEAAAD39/f3/wBT3QEAjiDw0eXw/wBc3QEAjVfeksXe/wBl3QEAj6fDQ5PD/wBu3QEAlM6sIWas/wB33QEA8v9nZwAf/wCB3QEAAAAaGhoa/wCM3QEA+dyyshgr/wCW3QEABaPW1mBN/wCg3QEADXf09KWC/wCq3QEADzb9/dvH/wC03QEAAADg4ODg/wC+3QEAAAC6urq6/wDI3QEAAACHh4eH/wDS3QEAAABNTU1N/wDc3QEA8v9nZwAf/wDm3QEAAABNTU1N/wDx3QEAAAAaGhoa/wD83QEA+dyyshgr/wAG3gEABaPW1mBN/wAQ3gEADXf09KWC/wAa3gEADzb9/dvH/wAk3gEAAAD//////wAu3gEAAADg4ODg/wA43gEAAAC6urq6/wBC3gEAAACHh4eH/wBM3gEADJbv74pi/wBV3gEAAAD//////wBe3gEAAACZmZmZ/wBn3gEA+P/KygAg/wBw3gEADXf09KWC/wB53gEAAAC6urq6/wCC3gEAAABAQEBA/wCL3gEA+P/KygAg/wCU3gEADXf09KWC/wCd3gEAAAD//////wCm3gEAAAC6urq6/wCv3gEAAABAQEBA/wC43gEA+dyyshgr/wDB3gEADJbv74pi/wDK3gEADzb9/dvH/wDT3gEAAADg4ODg/wDc3gEAAACZmZmZ/wDl3gEAAABNTU1N/wDu3gEA+dyyshgr/wD33gEADJbv74pi/wAA3wEADzb9/dvH/wAJ3wEAAAD//////wAS3wEAAADg4ODg/wAb3wEAAACZmZmZ/wAk3wEAAABNTU1N/wAt3wEA+dyyshgr/wA23wEABaPW1mBN/wA/3wEADXf09KWC/wBI3wEADzb9/dvH/wBR3wEAAADg4ODg/wBa3wEAAAC6urq6/wBj3wEAAACHh4eH/wBs3wEAAABNTU1N/wB13wEA+dyyshgr/wB+3wEABaPW1mBN/wCH3wEADXf09KWC/wCQ3wEADzb9/dvH/wCZ3wEAAAD//////wCi3wEAAADg4ODg/wCr3wEAAAC6urq6/wC03wEAAACHh4eH/wC93wEAAABNTU1N/wDG3wEAAyD9/eDd/wDP3wEA9Fz6+p+1/wDY3wEA49zFxRuK/wDh3wEADRz+/uvi/wDq3wEA/Ej7+7S5/wDz3wEA7pP392ih/wD83wEA4P2urgF+/wAF4AEADRz+/uvi/wAO4AEA/Ej7+7S5/wAX4AEA7pP392ih/wAg4AEA49zFxRuK/wAp4AEA1fx6egF3/wAy4AEADRz+/uvi/wA74AEAAzz8/MXA/wBE4AEA9Fz6+p+1/wBN4AEA7pP392ih/wBW4AEA49zFxRuK/wBf4AEA1fx6egF3/wBo4AEADRz+/uvi/wBx4AEAAzz8/MXA/wB64AEA9Fz6+p+1/wCD4AEA7pP392ih/wCM4AEA5sPd3TSX/wCV4AEA4P2urgF+/wCe4AEA1fx6egF3/wCn4AEADgz///fz/wCw4AEAAyD9/eDd/wC54AEAAzz8/MXA/wDC4AEA9Fz6+p+1/wDL4AEA7pP392ih/wDU4AEA5sPd3TSX/wDd4AEA4P2urgF+/wDm4AEA1fx6egF3/wDv4AEADgz///fz/wD44AEAAyD9/eDd/wAB4QEAAzz8/MXA/wAK4QEA9Fz6+p+1/wAT4QEA7pP392ih/wAc4QEA5sPd3TSX/wAl4QEA4P2urgF+/wAu4QEA1fx6egF3/wA34QEAx/9qSQBq/wBA4QEA9f+lpQAm/wBM4QEAp6uVMTaV/wBZ4QEAAtDX1zAn/wBl4QEACrj09G1D/wBx4QEAFJ39/a5h/wB94QEAHm7+/uCQ/wCJ4QEAiBj44PP4/wCV4QEAikPpq9np/wCh4QEAj3HRdK3R/wCt4QEAl520RXW0/wC54QEA9f+lpQAm/wDF4QEAl520RXW0/wDS4QEAp6uVMTaV/wDf4QEAAtDX1zAn/wDr4QEACrj09G1D/wD34QEAFJ39/a5h/wAD4gEAHm7+/uCQ/wAP4gEAKkD///+//wAb4gEAiBj44PP4/wAn4gEAikPpq9np/wAz4gEAj3HRdK3R/wA/4gEADaT8/I1Z/wBK4gEAKkD///+//wBV4gEAj1bbkb/b/wBg4gEA/uHX1xkc/wBr4gEAFJ39/a5h/wB24gEAikPpq9np/wCB4gEAkcG2LHu2/wCM4gEA/uHX1xkc/wCX4gEAFJ39/a5h/wCi4gEAKkD///+//wCt4gEAikPpq9np/wC44gEAkcG2LHu2/wDD4gEAAtDX1zAn/wDO4gEADaT8/I1Z/wDZ4gEAHm7+/uCQ/wDk4gEAiBj44PP4/wDv4gEAj1bbkb/b/wD64gEAl520RXW0/wAF4wEAAtDX1zAn/wAQ4wEADaT8/I1Z/wAb4wEAHm7+/uCQ/wAm4wEAKkD///+//wAx4wEAiBj44PP4/wA84wEAj1bbkb/b/wBH4wEAl520RXW0/wBS4wEAAtDX1zAn/wBd4wEACrj09G1D/wBo4wEAFJ39/a5h/wBz4wEAHm7+/uCQ/wB+4wEAiBj44PP4/wCJ4wEAikPpq9np/wCU4wEAj3HRdK3R/wCf4wEAl520RXW0/wCq4wEAAtDX1zAn/wC14wEACrj09G1D/wDA4wEAFJ39/a5h/wDL4wEAHm7+/uCQ/wDW4wEAKkD///+//wDh4wEAiBj44PP4/wDs4wEAikPpq9np/wD34wEAj3HRdK3R/wAC5AEAl520RXW0/wAN5AEA9f+lpQAm/wAZ5AEAa/9oAGg3/wAm5AEAAtDX1zAn/wAy5AEACrj09G1D/wA+5AEAFJ39/a5h/wBK5AEAH3P+/uCL/wBW5AEAM2rv2e+L/wBi5AEAPoLZptlq/wBu5AEAU3m9Zr1j/wB65AEAZ9OYGphQ/wCG5AEA9f+lpQAm/wCS5AEAZ9OYGphQ/wCf5AEAa/9oAGg3/wCs5AEAAtDX1zAn/wC45AEACrj09G1D/wDE5AEAFJ39/a5h/wDQ5AEAH3P+/uCL/wDc5AEAKkD///+//wDo5AEAM2rv2e+L/wD05AEAPoLZptlq/wAA5QEAU3m9Zr1j/wAM5QEADaT8/I1Z/wAX5QEAKkD///+//wAi5QEAQojPkc9g/wAt5QEA/uHX1xkc/wA45QEAFJ39/a5h/wBD5QEAPoLZptlq/wBO5QEAYtKWGpZB/wBZ5QEA/uHX1xkc/wBk5QEAFJ39/a5h/wBv5QEAKkD///+//wB65QEAPoLZptlq/wCF5QEAYtKWGpZB/wCQ5QEAAtDX1zAn/wCb5QEADaT8/I1Z/wCm5QEAH3P+/uCL/wCx5QEAM2rv2e+L/wC85QEAQojPkc9g/wDH5QEAZ9OYGphQ/wDS5QEAAtDX1zAn/wDd5QEADaT8/I1Z/wDo5QEAH3P+/uCL/wDz5QEAKkD///+//wD+5QEAM2rv2e+L/wAJ5gEAQojPkc9g/wAU5gEAZ9OYGphQ/wAf5gEAAtDX1zAn/wAq5gEACrj09G1D/wA15gEAFJ39/a5h/wBA5gEAH3P+/uCL/wBL5gEAM2rv2e+L/wBW5gEAPoLZptlq/wBh5gEAU3m9Zr1j/wBs5gEAZ9OYGphQ/wB35gEAAtDX1zAn/wCC5gEACrj09G1D/wCN5gEAFJ39/a5h/wCY5gEAH3P+/uCL/wCj5gEAKkD///+//wCu5gEAM2rv2e+L/wC55gEAPoLZptlq/wDE5gEAU3m9Zr1j/wDP5gEAZ9OYGphQ/wDa5gEADSz+/uDS/wDj5gEACYv8/JJy/wDs5gEAAdPe3i0m/wD15gEADSX+/uXZ/wD+5gEAC2z8/K6R/wAH5wEAB7P7+2pK/wAQ5wEA/eDLyxgd/wAZ5wEADSX+/uXZ/wAi5wEAC2z8/K6R/wAr5wEAB7P7+2pK/wA05wEAAdPe3i0m/wA95wEA/eelpQ8V/wBG5wEADSX+/uXZ/wBP5wEADFz8/Luh/wBY5wEACYv8/JJy/wBh5wEAB7P7+2pK/wBq5wEAAdPe3i0m/wBz5wEA/eelpQ8V/wB85wEADSX+/uXZ/wCF5wEADFz8/Luh/wCO5wEACYv8/JJy/wCX5wEAB7P7+2pK/wCg5wEAA9Dv7zss/wCp5wEA/eDLyxgd/wCy5wEA+/+ZmQAN/wC75wEADg////Xw/wDE5wEADSz+/uDS/wDN5wEADFz8/Luh/wDW5wEACYv8/JJy/wDf5wEAB7P7+2pK/wDo5wEAA9Dv7zss/wDx5wEA/eDLyxgd/wD65wEA+/+ZmQAN/wAD6AEADg////Xw/wAM6AEADSz+/uDS/wAV6AEADFz8/Luh/wAe6AEACYv8/JJy/wAn6AEAB7P7+2pK/wAw6AEAA9Dv7zss/wA56AEA/eDLyxgd/wBC6AEA/eelpQ8V/wBL6AEA+f9nZwAN/wBU6AEA/uHk5Boc/wBd6AEAkrK4N364/wBm6AEAU5OvTa9K/wBv6AEA/uHk5Boc/wB46AEAkrK4N364/wCB6AEAU5OvTa9K/wCK6AEAz4SjmE6j/wCT6AEA/uHk5Boc/wCc6AEAkrK4N364/wCl6AEAU5OvTa9K/wCu6AEAz4SjmE6j/wC36AEAFf///38A/wDA6AEA/uHk5Boc/wDJ6AEAkrK4N364/wDS6AEAU5OvTa9K/wDb6AEAz4SjmE6j/wDk6AEAFf///38A/wDt6AEAKsz///8z/wD26AEA/uHk5Boc/wD/6AEAkrK4N364/wAI6QEAU5OvTa9K/wAR6QEAz4SjmE6j/wAa6QEAFf///38A/wAj6QEAKsz///8z/wAs6QEAD8GmplYo/wA16QEA/uHk5Boc/wA+6QEAkrK4N364/wBH6QEAU5OvTa9K/wBQ6QEAz4SjmE6j/wBZ6QEAFf///38A/wBi6QEAKsz///8z/wBr6QEAD8GmplYo/wB06QEA6Hn394G//wB96QEA/uHk5Boc/wCG6QEAkrK4N364/wCP6QEAU5OvTa9K/wCY6QEAz4SjmE6j/wCh6QEAFf///38A/wCq6QEAKsz///8z/wCz6QEAD8GmplYo/wC86QEA6Hn394G//wDF6QEAAACZmZmZ/wDO6QEAcnjCZsKl/wDX6QEAC5v8/I1i/wDg6QEAnE3LjaDL/wDp6QEAcnjCZsKl/wDy6QEAC5v8/I1i/wD76QEAnE3LjaDL/wAE6gEA5Gbn54rD/wAN6gEAcnjCZsKl/wAW6gEAC5v8/I1i/wAf6gEAnE3LjaDL/wAo6gEA5Gbn54rD/wAx6gEAOpvYpthU/wA66gEAcnjCZsKl/wBD6gEAC5v8/I1i/wBM6gEAnE3LjaDL/wBV6gEA5Gbn54rD/wBe6gEAOpvYpthU/wBn6gEAItD//9kv/wBw6gEAcnjCZsKl/wB56gEAC5v8/I1i/wCC6gEAnE3LjaDL/wCL6gEA5Gbn54rD/wCU6gEAOpvYpthU/wCd6gEAItD//9kv/wCm6gEAGVrl5cSU/wCv6gEAcnjCZsKl/wC46gEAC5v8/I1i/wDB6gEAnE3LjaDL/wDK6gEA5Gbn54rD/wDT6gEAOpvYpthU/wDc6gEAItD//9kv/wDl6gEAGVrl5cSU/wDu6gEAAACzs7Oz/wD36gEAeFTTjdPH/wAB6wEA01K9vIC9/wAM6wEAKkz///+z/wAW6wEAryXavrra/wAg6wEABIv7+4By/wAq6wEAkGTTgLHT/wA06wEAFpz9/bRi/wA+6wEAOobes95p/wBI6wEA6S/8/M3l/wBS6wEAAADZ2dnZ/wBc6wEAeFTTjdPH/wBm6wEA01K9vIC9/wBx6wEATSnrzOvF/wB86wEAKkz///+z/wCG6wEAryXavrra/wCQ6wEABIv7+4By/wCa6wEAkGTTgLHT/wCk6wEAFpz9/bRi/wCu6wEAOobes95p/wC46wEA6S/8/M3l/wDC6wEAAADZ2dnZ/wDM6wEAeFTTjdPH/wDW6wEA01K9vIC9/wDh6wEATSnrzOvF/wDs6wEAJZD//+1v/wD36wEAKkz///+z/wAB7AEAryXavrra/wAL7AEABIv7+4By/wAV7AEAkGTTgLHT/wAf7AEAFpz9/bRi/wAp7AEAOobes95p/wAz7AEA6S/8/M3l/wA97AEAAADZ2dnZ/wBH7AEAeFTTjdPH/wBQ7AEAKkz///+z/wBZ7AEAryXavrra/wBi7AEAeFTTjdPH/wBr7AEAKkz///+z/wB07AEAryXavrra/wB97AEABIv7+4By/wCG7AEAeFTTjdPH/wCP7AEAKkz///+z/wCY7AEAryXavrra/wCh7AEABIv7+4By/wCq7AEAkGTTgLHT/wCz7AEAeFTTjdPH/wC87AEAKkz///+z/wDF7AEAryXavrra/wDO7AEABIv7+4By/wDX7AEAkGTTgLHT/wDg7AEAFpz9/bRi/wDp7AEAeFTTjdPH/wDy7AEAKkz///+z/wD77AEAryXavrra/wAE7QEABIv7+4By/wAN7QEAkGTTgLHT/wAW7QEAFpz9/bRi/wAf7QEAOobes95p/wAo7QEAeFTTjdPH/wAx7QEAKkz///+z/wA67QEAryXavrra/wBD7QEABIv7+4By/wBM7QEAkGTTgLHT/wBV7QEAFpz9/bRi/wBe7QEAOobes95p/wBn7QEA6S/8/M3l/wBw7QEAeFTTjdPH/wB57QEAKkz///+z/wCC7QEAryXavrra/wCL7QEABIv7+4By/wCU7QEAkGTTgLHT/wCd7QEAFpz9/bRi/wCm7QEAOobes95p/wCv7QEA6S/8/M3l/wC47QEAAADZ2dnZ/wDB7QEA7f2engFC/wDP7QEAsYKiXk+i/wDe7QEA+rTV1T5P/wDs7QEACrj09G1D/wD67QEAFJ39/a5h/wAI7gEAH3P+/uCL/wAW7gEAMWD15vWY/wAk7gEAT0Hdq92k/wAy7gEAcnjCZsKl/wBA7gEAj7u9Moi9/wBO7gEA7f2engFC/wBc7gEAj7u9Moi9/wBr7gEAsYKiXk+i/wB67gEA+rTV1T5P/wCI7gEACrj09G1D/wCW7gEAFJ39/a5h/wCk7gEAH3P+/uCL/wCy7gEAKkD///+//wDA7gEAMWD15vWY/wDO7gEAT0Hdq92k/wDc7gEAcnjCZsKl/wDq7gEADaT8/I1Z/wD37gEAKkD///+//wAE7wEAUU3VmdWU/wAR7wEA/uHX1xkc/wAe7wEAFJ39/a5h/wAr7wEAT0Hdq92k/wA47wEAj8S6K4O6/wBF7wEA/uHX1xkc/wBS7wEAFJ39/a5h/wBf7wEAKkD///+//wBs7wEAT0Hdq92k/wB57wEAj8S6K4O6/wCG7wEA+rTV1T5P/wCT7wEADaT8/I1Z/wCg7wEAH3P+/uCL/wCt7wEAMWD15vWY/wC67wEAUU3VmdWU/wDH7wEAj7u9Moi9/wDU7wEA+rTV1T5P/wDh7wEADaT8/I1Z/wDu7wEAH3P+/uCL/wD77wEAKkD///+//wAI8AEAMWD15vWY/wAV8AEAUU3VmdWU/wAi8AEAj7u9Moi9/wAv8AEA+rTV1T5P/wA88AEACrj09G1D/wBJ8AEAFJ39/a5h/wBW8AEAH3P+/uCL/wBj8AEAMWD15vWY/wBw8AEAT0Hdq92k/wB98AEAcnjCZsKl/wCK8AEAj7u9Moi9/wCX8AEA+rTV1T5P/wCk8AEACrj09G1D/wCx8AEAFJ39/a5h/wC+8AEAH3P+/uCL/wDL8AEAKkD///+//wDY8AEAMWD15vWY/wDl8AEAT0Hdq92k/wDy8AEAcnjCZsKl/wD/8AEAj7u9Moi9/wAM8QEAkw//8Pj//wAb8QEAGCP6+uvX/wAt8QEAf///AP///wA38QEAcYD/f//U/wBH8QEAfw//8P///wBS8QEAKhr19fXc/wBd8QEAFzr//+TE/wBp8QEAAAAAAAAA/wB08QEAGTH//+vN/wCI8QEAqv//AAD//wCS8QEAwM7iiivi/wCi8QEAAL6lpSoq/wCt8QEAF2Pe3riH/wC88QEAgGegX56g/wDL8QEAP///f/8A/wDb8QEAEdrS0mke/wDq8QEAC6///39Q/wD18QEAmpPtZJXt/wAJ8gEAISL///jc/wAX8gEA9ufc3BQ8/wAk8gEAf///AP///wAu8gEAqv+LAACL/wA88gEAf/+LAIuL/wBK8gEAHu+4uIYL/wBd8gEAAACpqamp/wBr8gEAVf9kAGQA/wB68gEAAACpqamp/wCI8gEAJ269vbdr/wCX8gEA1P+LiwCL/wCo8gEAOo5rVWsv/wC88gEAF////4wA/wDM8gEAxsDMmTLM/wDc8gEAAP+LiwAA/wDp8gEACnnp6ZZ6/wD58gEAVT28j7yP/wAL8wEAr4+LSD2L/wAe8wEAf2dPL09P/wAx8wEAf2dPL09P/wBE8wEAgP/RAM7R/wBX8wEAx//TlADT/wBn8wEA6Ov//xST/wB18wEAiv//AL///wCG8wEAAABpaWlp/wCT8wEAAABpaWlp/wCg8wEAlOH/HpD//wCw8wEAAM6ysiIi/wC/8wEAHA////rw/wDQ8wEAVcCLIosi/wDh8wEA1P///wD//wDu8wEAAADc3Nzc/wD98wEAqgf/+Pj//wAN9AEAI////9cA/wAX9AEAHtna2qUg/wAm9AEAAACAgICA/wAw9AEAVf+AAIAA/wA79AEAO9D/rf8v/wBM9AEAAACAgICA/wBW9AEAVQ//8P/w/wBk9AEA6Zb//2m0/wBx9AEAAIzNzVxc/wCA9AEAwv+CSwCC/wCM9AEAKg/////w/wCX9AEAJmrw8OaM/wCi9AEAqhT65ub6/wCw9AEA8A////D1/wDD9AEAQP/8fPwA/wDS9AEAJjH///rN/wDk9AEAiT/mrdjm/wDz9AEAAHfw8ICA/wAD9QEAfx//4P///wAS9QEAKij6+vrS/wAs9QEAAADT09PT/wA79QEAVWTukO6Q/wBL9QEAAADT09PT/wBa9QEA+En//7bB/wBp9QEADIT//6B6/wB69QEAfdGyILKq/wCN9QEAj3X6h876/wCf9QEAlDiZd4iZ/wCz9QEAlDiZd4iZ/wDH9QEAlzTesMTe/wDb9QEAKh/////g/wDs9QEAVf//AP8A/wD29QEAVcDNMs0y/wAF9gEAFRT6+vDm/wAQ9gEA1P///wD//wAd9gEAAP+AgAAA/wAp9gEAcYDNZs2q/wA/9gEAqv/NAADN/wBP9gEAzJjTulXT/wBh9gEAt3zbk3Db/wBz9gEAZ6mzPLNx/wCH9gEAsI/ue2ju/wCc9gEAb//6APqa/wCz9gEAfafRSNHM/wDI9gEA5OTHxxWF/wDd9gEAqsZwGRlw/wDv9gEAagn/9f/6/wD+9gEABB7//+Th/wAN9wEAGkn//+S1/wAb9wEAGVH//96t/wAs9wEAqv+AAACA/wA29wEAGxf9/fXm/wBD9wEAKv+AgIAA/wBO9wEAOMCOa44j/wBd9wEAG////6UA/wBp9wEAC////0UA/wB49wEA1nva2nDW/wCE9wEAJkju7uiq/wCX9wEAVWT7mPuY/wCm9wEAf0Pur+7u/wC59wEA8Xzb23CT/wDM9wEAGin//+/V/wDc9wEAFEb//9q5/wDr9wEAFLDNzYU//wD19wEA9z///8DL/wD/9wEA1Ebd3aDd/wAJ+AEAhDvmsODm/wAZ+AEA1P+AgACA/wAl+AEAAP///wAA/wAu+AEAAD28vI+P/wA9+AEAn7XhQWnh/wBM+AEAEdyLi0UT/wBd+AEABIr6+oBy/wBp+AEAE5r09KRg/wB5+AEAZ6qLLotX/wCH+AEAERD///Xu/wCV+AEADbegoFIt/wCh+AEAAADAwMDA/wCt+AEAi2zrh87r/wC6+AEAr4/NalrN/wDJ+AEAlDiQcICQ/wDY+AEAlDiQcICQ/wDn+AEAAAX///r6/wDx+AEAav//AP9//wAC+QEAkpu0RoK0/wAR+QEAGFTS0rSM/wAa+QEAf/+AAICA/wAk+QEA1B3Y2L/Y/wAx+QEABrj//2NH/wA9+QEAe7bgQODQ/wBM+QEA1HPu7oLu/wBY+QEAG0T19d6z/wBj+QEAAAD//////wBu+QEAAAD19fX1/wB++QEAKv////8A/wCK+QEAOMDNms0y/wCb+QEALUP89/y5/wCk+QEARFvdrd2O/wCt+QEAYrKjMaNU/wC2+QEAKjL////M/wC/+QEAPlXmwuaZ/wDI+QEAVWTGeMZ5/wDR+QEAY7uEI4RD/wDa+QEAKjL////M/wDj+QEAPlXmwuaZ/wDs+QEAVWTGeMZ5/wD1+QEAYrKjMaNU/wD++QEAa/9oAGg3/wAH+gEAKjL////M/wAQ+gEAN1Hw2fCj/wAZ+gEARFvdrd2O/wAi+gEAVWTGeMZ5/wAr+gEAYrKjMaNU/wA0+gEAa/9oAGg3/wA9+gEAKjL////M/wBG+gEAN1Hw2fCj/wBP+gEARFvdrd2O/wBY+gEAVWTGeMZ5/wBh+gEAYJ6rQatd/wBq+gEAY7uEI4RD/wBz+gEAbP9aAFoy/wB8+gEAKhn////l/wCF+gEALUP89/y5/wCO+gEAN1Hw2fCj/wCX+gEARFvdrd2O/wCg+gEAVWTGeMZ5/wCp+gEAYJ6rQatd/wCy+gEAY7uEI4RD/wC7+gEAbP9aAFoy/wDE+gEAKhn////l/wDN+gEALUP89/y5/wDW+gEAN1Hw2fCj/wDf+gEARFvdrd2O/wDo+gEAVWTGeMZ5/wDx+gEAYJ6rQatd/wD6+gEAY7uEI4RD/wAD+wEAa/9oAGg3/wAM+wEAbv9FAEUp/wAV+wEAMUn47fix/wAg+wEAdWHNf827/wAr+wEAkMK4LH+4/wA2+wEAKjL////M/wBB+wEAY0Laodq0/wBM+wEAhKrEQbbE/wBX+wEAlsuoIl6o/wBi+wEAKjL////M/wBt+wEAY0Laodq0/wB4+wEAhKrEQbbE/wCD+wEAkMK4LH+4/wCO+wEApL+UJTSU/wCZ+wEAKjL////M/wCk+wEARTrpx+m0/wCv+wEAdWHNf827/wC6+wEAhKrEQbbE/wDF+wEAkMK4LH+4/wDQ+wEApL+UJTSU/wDb+wEAKjL////M/wDm+wEARTrpx+m0/wDx+wEAdWHNf827/wD8+wEAhKrEQbbE/wAH/AEAi9jAHZHA/wAS/AEAlsuoIl6o/wAd/AEAnueEDCyE/wAo/AEAKib////Z/wAz/AEAMUn47fix/wA+/AEARTrpx+m0/wBJ/AEAdWHNf827/wBU/AEAhKrEQbbE/wBf/AEAi9jAHZHA/wBq/AEAlsuoIl6o/wB1/AEAnueEDCyE/wCA/AEAKib////Z/wCL/AEAMUn47fix/wCW/AEARTrpx+m0/wCh/AEAdWHNf827/wCs/AEAhKrEQbbE/wC3/AEAi9jAHZHA/wDC/AEAlsuoIl6o/wDN/AEApL+UJTSU/wDY/AEAnudYCB1Y/wDj/AEAJUL///e8/wDu/AEAHK/+/sRP/wD5/AEAEO7Z2V8O/wAE/QEAKir////U/wAP/QEAHHD+/tmO/wAa/QEAFtX+/pkp/wAl/QEAD/zMzEwC/wAw/QEAKir////U/wA7/QEAHHD+/tmO/wBG/QEAFtX+/pkp/wBR/QEAEO7Z2V8O/wBc/QEADfiZmTQE/wBn/QEAKir////U/wBy/QEAH23+/uOR/wB9/QEAHK/+/sRP/wCI/QEAFtX+/pkp/wCT/QEAEO7Z2V8O/wCe/QEADfiZmTQE/wCp/QEAKir////U/wC0/QEAH23+/uOR/wC//QEAHK/+/sRP/wDK/QEAFtX+/pkp/wDV/QEAEuns7HAU/wDg/QEAD/zMzEwC/wDr/QEADPeMjC0E/wD2/QEAKhn////l/wAB/gEAJUL///e8/wAM/gEAH23+/uOR/wAX/gEAHK/+/sRP/wAi/gEAFtX+/pkp/wAt/gEAEuns7HAU/wA4/gEAD/zMzEwC/wBD/gEADPeMjC0E/wBO/gEAKhn////l/wBZ/gEAJUL///e8/wBk/gEAH23+/uOR/wBv/gEAHK/+/sRP/wB6/gEAFtX+/pkp/wCF/gEAEuns7HAU/wCQ/gEAD/zMzEwC/wCb/gEADfiZmTQE/wCm/gEADfBmZiUG/wCx/gEAIl///+2g/wC8/gEAGLL+/rJM/wDH/gEABd3w8Dsg/wDS/gEAKk3///+y/wDd/gEAHaL+/sxc/wDo/gEAEcL9/Y08/wDz/gEA/uHj4xoc/wD+/gEAKk3///+y/wAJ/wEAHaL+/sxc/wAU/wEAEcL9/Y08/wAf/wEABd3w8Dsg/wAq/wEA9v+9vQAm/wA1/wEAKk3///+y/wBA/wEAHoj+/tl2/wBL/wEAGLL+/rJM/wBW/wEAEcL9/Y08/wBh/wEABd3w8Dsg/wBs/wEA9v+9vQAm/wB3/wEAKk3///+y/wCC/wEAHoj+/tl2/wCN/wEAGLL+/rJM/wCY/wEAEcL9/Y08/wCj/wEAB9T8/E4q/wCu/wEA/uHj4xoc/wC5/wEA9f+xsQAm/wDE/wEAKjL////M/wDP/wEAIl///+2g/wDa/wEAHoj+/tl2/wDl/wEAGLL+/rJM/wDw/wEAEcL9/Y08/wD7/wEAB9T8/E4q/wAGAAIA/uHj4xoc/wARAAIA9f+xsQAm/wAcAAIAKjL////M/wAnAAIAIl///+2g/wAyAAIAHoj+/tl2/wA9AAIAGLL+/rJM/wBIAAIAEcL9/Y08/wBTAAIAB9T8/E4q/wBeAAIA/uHj4xoc/wBpAAIA9v+9vQAm/wB0AAIA8v+AgAAm/wB/AAIAkw//8Pj//wCJAAIAGCP6+uvX/wCWAAIAFyT//+/b/wCkAAIAFyTu7t/M/wCyAAIAFyTNzcCw/wDAAAIAGCKLi4N4/wDOAAIAcYD/f//U/wDZAAIAcYD/f//U/wDlAAIAcYDudu7G/wDxAAIAcYDNZs2q/wD9AAIAcYCLRYt0/wAJAQIAfw//8P///wAPAQIAfw//8P///wAWAQIAfw/u4O7u/wAdAQIAfw7Nwc3N/wAkAQIAfw6Lg4uL/wArAQIAKhr19fXc/wAxAQIAFzr//+TE/wA4AQIAFzr//+TE/wBAAQIAFzru7tW3/wBIAQIAFjrNzbee/wBQAQIAFzqLi31r/wBiGAIAAAAAAAAA/wBYAQIAGTH//+vN/wBnAQIAqv//AAD//wBsAQIAqv//AAD//wByAQIAqv/uAADu/wB4AQIAqv/NAADN/wB+AQIAqv+LAACL/wCEAQIAwM7iiivi/wCPAQIAAL6lpSoq/wCVAQIAAL///0BA/wCcAQIAAL/u7js7/wCjAQIAAL/NzTMz/wCqAQIAAL6LiyMj/wCxAQIAF2Pe3riH/wC7AQIAF2T//9Ob/wDGAQIAF2Pu7sWR/wDRAQIAF2PNzap9/wDcAQIAF2OLi3NV/wDnAQIAgGegX56g/wDxAQIAg2f/mPX//wD8AQIAg2bujuXu/wAHAgIAg2fNesXN/wASAgIAg2aLU4aL/wAdAgIAP///f/8A/wAoAgIAP///f/8A/wA0AgIAP//udu4A/wBAAgIAP//NZs0A/wBMAgIAP/+LRYsA/wBYAgIAEdrS0mke/wBiAgIAEdv//38k/wBtAgIAEdvu7nYh/wB4AgIAEdrNzWYd/wCDAgIAEdyLi0UT/wCOAgIAC6///39Q/wCUAgIAB6n//3JW/wCbAgIABqnu7mpQ/wCiAgIABqnNzVtF/wCpAgIABqiLiz4v/wCwAgIAmpPtZJXt/wC/AgIAISL///jc/wDIAgIAISL///jc/wDSAgIAIiPu7ujN/wDcAgIAIiLNzcix/wDmAgIAIyKLi4h4/wDwAgIA9ufc3BQ8/wD4AgIAf///AP///wD9AgIAf///AP///wADAwIAf//uAO7u/wAJAwIAf//NAM3N/wAPAwIAf/+LAIuL/wAVAwIAHu+4uIYL/wAjAwIAHvD//7kP/wAyAwIAHvDu7q0O/wBBAwIAHvDNzZUM/wBQAwIAHvCLi2UI/wBfAwIAVf9kAGQA/wBpAwIAJ269vbdr/wBzAwIAOo5rVWsv/wCCAwIAOo//yv9w/wCSAwIAOo/uvO5o/wCiAwIAOo/Nos1a/wCyAwIAOo+Lbos9/wDCAwIAF////4wA/wDNAwIAFf///38A/wDZAwIAFf/u7nYA/wDlAwIAFf/NzWYA/wDxAwIAFf+Li0UA/wD9AwIAxsDMmTLM/wAIBAIAxsH/vz7//wAUBAIAxsDusjru/wAgBAIAxsDNmjLN/wAsBAIAxsCLaCKL/wA4BAIACnnp6ZZ6/wBDBAIAVT28j7yP/wBQBAIAVT7/wf/B/wBeBAIAVT7utO60/wBsBAIAVT7Nm82b/wB6BAIAVT6LaYtp/wCIBAIAr4+LSD2L/wCWBAIAf2dPL09P/wCkBAIAf2j/l////wCzBAIAf2fuje7u/wDCBAIAf2jNec3N/wDRBAIAf2iLUouL/wDgBAIAf2dPL09P/wDuBAIAgP/RAM7R/wD8BAIAx//TlADT/wAHBQIA6Ov//xST/wAQBQIA6Ov//xST/wAaBQIA6Ovu7hKJ/wAkBQIA6OvNzRB2/wAuBQIA5+yLiwpQ/wA4BQIAiv//AL///wBEBQIAiv//AL///wBRBQIAiv/uALLu/wBeBQIAiv/NAJrN/wBrBQIAiv+LAGiL/wB4BQIAAABpaWlp/wCABQIAAABpaWlp/wCIBQIAlOH/HpD//wCTBQIAlOH/HpD//wCfBQIAlOHuHIbu/wCrBQIAlOHNGHTN/wC3BQIAlOGLEE6L/wDDBQIAAM6ysiIi/wDNBQIAAM///zAw/wDYBQIAAM/u7iws/wDjBQIAAM/NzSYm/wDuBQIAAM+Lixoa/wD5BQIAHA////rw/wAFBgIAVcCLIosi/wARBgIAAADc3Nzc/wAbBgIAqgf/+Pj//wAmBgIAI////9cA/wArBgIAI////9cA/wAxBgIAI//u7skA/wA3BgIAI//Nza0A/wA9BgIAI/+Li3UA/wBDBgIAHtna2qUg/wBNBgIAHtr//8El/wBYBgIAHtru7rQi/wBjBgIAHtrNzZsd/wBuBgIAHtqLi2kU/wB5BgIAAADAwMDA/wB+BgIAAAAAAAAA/wCEBgIAAAADAwMD/wCKBgIAAAAaGhoa/wCRBgIAAAD//////wCZBgIAAAAcHBwc/wCgBgIAAAAfHx8f/wCnBgIAAAAhISEh/wCuBgIAAAAkJCQk/wC1BgIAAAAmJiYm/wC8BgIAAAApKSkp/wDDBgIAAAArKysr/wDKBgIAAAAuLi4u/wDRBgIAAAAwMDAw/wDYBgIAAAAFBQUF/wDeBgIAAAAzMzMz/wDlBgIAAAA2NjY2/wDsBgIAAAA4ODg4/wDzBgIAAAA7Ozs7/wD6BgIAAAA9PT09/wABBwIAAABAQEBA/wAIBwIAAABCQkJC/wAPBwIAAABFRUVF/wAWBwIAAABHR0dH/wAdBwIAAABKSkpK/wAkBwIAAAAICAgI/wAqBwIAAABNTU1N/wAxBwIAAABPT09P/wA4BwIAAABSUlJS/wA/BwIAAABUVFRU/wBGBwIAAABXV1dX/wBNBwIAAABZWVlZ/wBUBwIAAABcXFxc/wBbBwIAAABeXl5e/wBiBwIAAABhYWFh/wBpBwIAAABjY2Nj/wBwBwIAAAAKCgoK/wB2BwIAAABmZmZm/wB9BwIAAABpaWlp/wCEBwIAAABra2tr/wCLBwIAAABubm5u/wCSBwIAAABwcHBw/wCZBwIAAABzc3Nz/wCgBwIAAAB1dXV1/wCnBwIAAAB4eHh4/wCuBwIAAAB6enp6/wC1BwIAAAB9fX19/wC8BwIAAAANDQ0N/wDCBwIAAAB/f39//wDJBwIAAACCgoKC/wDQBwIAAACFhYWF/wDXBwIAAACHh4eH/wDeBwIAAACKioqK/wDlBwIAAACMjIyM/wDsBwIAAACPj4+P/wDzBwIAAACRkZGR/wD6BwIAAACUlJSU/wABCAIAAACWlpaW/wAICAIAAAAPDw8P/wAOCAIAAACZmZmZ/wAVCAIAAACcnJyc/wAcCAIAAACenp6e/wAjCAIAAAChoaGh/wAqCAIAAACjo6Oj/wAxCAIAAACmpqam/wA4CAIAAACoqKio/wA/CAIAAACrq6ur/wBGCAIAAACtra2t/wBNCAIAAACwsLCw/wBUCAIAAAASEhIS/wBaCAIAAACzs7Oz/wBhCAIAAAC1tbW1/wBoCAIAAAC4uLi4/wBvCAIAAAC6urq6/wB2CAIAAAC9vb29/wB9CAIAAAC/v7+//wCECAIAAADCwsLC/wCLCAIAAADExMTE/wCSCAIAAADHx8fH/wCZCAIAAADJycnJ/wCgCAIAAAAUFBQU/wCmCAIAAADMzMzM/wCtCAIAAADPz8/P/wC0CAIAAADR0dHR/wC7CAIAAADU1NTU/wDCCAIAAADW1tbW/wDJCAIAAADZ2dnZ/wDQCAIAAADb29vb/wDXCAIAAADe3t7e/wDeCAIAAADg4ODg/wDlCAIAAADj4+Pj/wDsCAIAAAAXFxcX/wDyCAIAAADl5eXl/wD5CAIAAADo6Ojo/wAACQIAAADr6+vr/wAHCQIAAADt7e3t/wAOCQIAAADw8PDw/wAVCQIAAADy8vLy/wAcCQIAAAD19fX1/wAjCQIAAAD39/f3/wAqCQIAAAD6+vr6/wAxCQIAAAD8/Pz8/wA4CQIAVf//AP8A/wA+CQIAVf//AP8A/wBFCQIAVf/uAO4A/wBMCQIAVf/NAM0A/wBTCQIAVf+LAIsA/wBaCQIAO9D/rf8v/wBmCQIAAADAwMDA/wBrCQIAAAAAAAAA/wBxCQIAAAADAwMD/wB3CQIAAAAaGhoa/wB+CQIAAAD//////wCGCQIAAAAcHBwc/wCNCQIAAAAfHx8f/wCUCQIAAAAhISEh/wCbCQIAAAAkJCQk/wCiCQIAAAAmJiYm/wCpCQIAAAApKSkp/wCwCQIAAAArKysr/wC3CQIAAAAuLi4u/wC+CQIAAAAwMDAw/wDFCQIAAAAFBQUF/wDLCQIAAAAzMzMz/wDSCQIAAAA2NjY2/wDZCQIAAAA4ODg4/wDgCQIAAAA7Ozs7/wDnCQIAAAA9PT09/wDuCQIAAABAQEBA/wD1CQIAAABCQkJC/wD8CQIAAABFRUVF/wADCgIAAABHR0dH/wAKCgIAAABKSkpK/wARCgIAAAAICAgI/wAXCgIAAABNTU1N/wAeCgIAAABPT09P/wAlCgIAAABSUlJS/wAsCgIAAABUVFRU/wAzCgIAAABXV1dX/wA6CgIAAABZWVlZ/wBBCgIAAABcXFxc/wBICgIAAABeXl5e/wBPCgIAAABhYWFh/wBWCgIAAABjY2Nj/wBdCgIAAAAKCgoK/wBjCgIAAABmZmZm/wBqCgIAAABpaWlp/wBxCgIAAABra2tr/wB4CgIAAABubm5u/wB/CgIAAABwcHBw/wCGCgIAAABzc3Nz/wCNCgIAAAB1dXV1/wCUCgIAAAB4eHh4/wCbCgIAAAB6enp6/wCiCgIAAAB9fX19/wCpCgIAAAANDQ0N/wCvCgIAAAB/f39//wC2CgIAAACCgoKC/wC9CgIAAACFhYWF/wDECgIAAACHh4eH/wDLCgIAAACKioqK/wDSCgIAAACMjIyM/wDZCgIAAACPj4+P/wDgCgIAAACRkZGR/wDnCgIAAACUlJSU/wDuCgIAAACWlpaW/wD1CgIAAAAPDw8P/wD7CgIAAACZmZmZ/wACCwIAAACcnJyc/wAJCwIAAACenp6e/wAQCwIAAAChoaGh/wAXCwIAAACjo6Oj/wAeCwIAAACmpqam/wAlCwIAAACoqKio/wAsCwIAAACrq6ur/wAzCwIAAACtra2t/wA6CwIAAACwsLCw/wBBCwIAAAASEhIS/wBHCwIAAACzs7Oz/wBOCwIAAAC1tbW1/wBVCwIAAAC4uLi4/wBcCwIAAAC6urq6/wBjCwIAAAC9vb29/wBqCwIAAAC/v7+//wBxCwIAAADCwsLC/wB4CwIAAADExMTE/wB/CwIAAADHx8fH/wCGCwIAAADJycnJ/wCNCwIAAAAUFBQU/wCTCwIAAADMzMzM/wCaCwIAAADPz8/P/wChCwIAAADR0dHR/wCoCwIAAADU1NTU/wCvCwIAAADW1tbW/wC2CwIAAADZ2dnZ/wC9CwIAAADb29vb/wDECwIAAADe3t7e/wDLCwIAAADg4ODg/wDSCwIAAADj4+Pj/wDZCwIAAAAXFxcX/wDfCwIAAADl5eXl/wDmCwIAAADo6Ojo/wDtCwIAAADr6+vr/wD0CwIAAADt7e3t/wD7CwIAAADw8PDw/wACDAIAAADy8vLy/wAJDAIAAAD19fX1/wAQDAIAAAD39/f3/wAXDAIAAAD6+vr6/wAeDAIAAAD8/Pz8/wAlDAIAVQ//8P/w/wAuDAIAVQ//8P/w/wA4DAIAVQ/u4O7g/wBCDAIAVQ7Nwc3B/wBMDAIAVQ6Lg4uD/wBWDAIA6Zb//2m0/wBeDAIA6pH//260/wBnDAIA643u7mqn/wBwDAIA7IfNzWCQ/wB5DAIA6pSLizpi/wCCDAIAAIzNzVxc/wCMDAIAAJT//2pq/wCXDAIAAJTu7mNj/wCiDAIAAJXNzVVV/wCtDAIAAJSLizo6/wC4DAIAwv+CSwCC/wC/DAIAKgD////+AADFDAIAKg/////w/wDLDAIAKg/////w/wDSDAIAKg/u7u7g/wDZDAIAKg7Nzc3B/wDgDAIAKg6Li4uD/wDnDAIAJmrw8OaM/wDtDAIAJ3D///aP/wD0DAIAJ3Du7uaF/wD7DAIAJ2/NzcZz/wACDQIAJ2+Li4ZO/wAJDQIAqhT65ub6/wASDQIA8A////D1/wAgDQIA8A////D1/wAvDQIA7w/u7uDl/wA+DQIA8A7NzcHF/wBNDQIA7w6Li4OG/wBcDQIAQP/8fPwA/wBmDQIAJjH///rN/wBzDQIAJjH///rN/wCBDQIAJTLu7um//wCPDQIAJjHNzcml/wCdDQIAJzGLi4lw/wCrDQIAiT/mrdjm/wC1DQIAikD/v+///wDADQIAikDust/u/wDLDQIAij/NmsDN/wDWDQIAiUCLaIOL/wDhDQIAAHfw8ICA/wDsDQIAfx//4P///wD2DQIAfx//4P///wABDgIAfx/u0e7u/wAMDgIAfx/NtM3N/wAXDgIAfx+LeouL/wAiDgIAI3Pu7t2C/wAxDgIAI3T//+yL/wBBDgIAI3Pu7tyC/wBRDgIAI3PNzb5w/wBhDgIAI3OLi4FM/wBxDgIAKij6+vrS/wCGDgIAAADT09PT/wCQDgIAAADT09PT/wCaDgIA+En//7bB/wCkDgIA+VH//665/wCvDgIA+FHu7qKt/wC6DgIA+VDNzYyV/wDFDgIA+VCLi19l/wDQDgIADIT//6B6/wDcDgIADIT//6B6/wDpDgIAC4Tu7pVy/wD2DgIADIXNzYFi/wADDwIADIWLi1dC/wAQDwIAfdGyILKq/wAeDwIAj3X6h876/wArDwIAj0//sOL//wA5DwIAj0/upNPu/wBHDwIAjk/NjbbN/wBVDwIAj06LYHuL/wBjDwIAr4//hHD//wByDwIAlDiZd4iZ/wCBDwIAlDiZd4iZ/wCQDwIAlzTesMTe/wCfDwIAlzX/yuH//wCvDwIAlzXuvNLu/wC/DwIAlzXNorXN/wDPDwIAljWLbnuL/wDfDwIAKh/////g/wDrDwIAKh/////g/wD4DwIAKh/u7u7R/wAFEAIAKh/Nzc20/wASEAIAKh+Li4t6/wAfEAIAVcDNMs0y/wApEAIAFRT6+vDm/wAvEAIA1P///wD//wA3EAIA1P///wD//wBAEAIA1P/u7gDu/wBJEAIA1P/NzQDN/wBSEAIA1P+LiwCL/wBbEAIA77mwsDBg/wBiEAIA5Mv//zSz/wBqEAIA5Mvu7jCn/wByEAIA5MzNzSmQ/wB6EAIA5MuLixxi/wCCEAIAcYDNZs2q/wCTEAIAqv/NAADN/wCeEAIAzJjTulXT/wCrEAIAy5n/4Gb//wC5EAIAy5nu0V/u/wDHEAIAy5nNtFLN/wDVEAIAy5qLejeL/wDjEAIAt3zbk3Db/wDwEAIAt33/q4L//wD+EAIAt33un3nu/wAMEQIAt33NiWjN/wAaEQIAt3yLXUeL/wAoEQIAZ6mzPLNx/wA3EQIAsI/ue2ju/wBHEQIAb//6APqa/wBZEQIAfafRSNHM/wBpEQIA5OTHxxWF/wB5EQIAqsZwGRlw/wCGEQIAagn/9f/6/wCQEQIABB7//+Th/wCaEQIABB7//+Th/wClEQIABB7u7tXS/wCwEQIAAx3Nzbe1/wC7EQIABR2Li317/wDGEQIAGkn//+S1/wDPEQIAGVH//96t/wDbEQIAGVH//96t/wDoEQIAGVLu7s+h/wD1EQIAGVLNzbOL/wACEgIAGVKLi3le/wAPEgIAqv+AAACA/wAUEgIAqv+AAACA/wAdEgIAKgD////+AAAiEgIAGxf9/fXm/wAqEgIAOMCOa44j/wA0EgIAOMH/wP8+/wA/EgIAOMDus+46/wBKEgIAOMDNms0y/wBVEgIAOMCLaYsi/wBgEgIAG////6UA/wBnEgIAG////6UA/wBvEgIAG//u7poA/wB3EgIAG//NzYUA/wB/EgIAG/+Li1oA/wCHEgIAC////0UA/wCREgIAC////0UA/wCcEgIAC//u7kAA/wCnEgIAC//NzTcA/wCyEgIAC/+LiyUA/wC9EgIA1nva2nDW/wDEEgIA1nz//4P6/wDMEgIA1nzu7nrp/wDUEgIA1nzNzWnJ/wDcEgIA1XyLi0eJ/wDkEgIAJkju7uiq/wDyEgIAVWT7mPuY/wD8EgIAVWX/mv+a/wAHEwIAVWTukO6Q/wASEwIAVWTNfM18/wAdEwIAVWSLVItU/wAoEwIAf0Pur+7u/wA2EwIAf0T/u////wBFEwIAf0Turu7u/wBUEwIAf0TNls3N/wBjEwIAf0OLZouL/wByEwIA8Xzb23CT/wCAEwIA8X3//4Kr/wCPEwIA8X3u7nmf/wCeEwIA8X3NzWiJ/wCtEwIA8XyLi0dd/wC8EwIAGin//+/V/wDHEwIAFEb//9q5/wDREwIAFEb//9q5/wDcEwIAE0Xu7sut/wDnEwIAE0XNza+V/wDyEwIAFEWLi3dl/wD9EwIAFLDNzYU//wACFAIA9z///8DL/wAHFAIA9Un//7XF/wANFAIA9Unu7qm4/wATFAIA9UrNzZGe/wAZFAIA9UmLi2Ns/wAfFAIA1Ebd3aDd/wAkFAIA1ET//7v//wAqFAIA1ETu7q7u/wAwFAIA1ETNzZbN/wA2FAIA1EOLi2aL/wA8FAIAhDvmsODm/wBHFAIAxN3woCDw/wBOFAIAv8//mzD//wBWFAIAwM/ukSzu/wBeFAIAwM/NfSbN/wBmFAIAwM+LVRqL/wBuFAIAAP///wAA/wByFAIAAP///wAA/wB3FAIAAP/u7gAA/wB8FAIAAP/NzQAA/wCBFAIAAP+LiwAA/wCGFAIAAD28vI+P/wCQFAIAAD7//8HB/wCbFAIAAD7u7rS0/wCmFAIAAD7NzZub/wCxFAIAAD6Li2lp/wC8FAIAn7XhQWnh/wDGFAIAn7f/SHb//wDRFAIAn7fuQ27u/wDcFAIAn7bNOl/N/wDnFAIAn7eLJ0CL/wDyFAIAEdyLi0UT/wD+FAIABIr6+oBy/wAFFQIACZb//4xp/wANFQIACZbu7oJi/wAVFQIACZbNzXBU/wAdFQIACZaLi0w5/wAlFQIAE5r09KRg/wAwFQIAZ6qLLotX/wA5FQIAZ6v/VP+f/wBDFQIAZ6vuTu6U/wBNFQIAZ6vNQ82A/wBXFQIAZ6qLLotX/wBhFQIAERD///Xu/wBqFQIAERD///Xu/wB0FQIAEhHu7uXe/wB+FQIAEhHNzcW//wCIFQIAEhCLi4aC/wCSFQIADbegoFIt/wCZFQIADbj//4JH/wChFQIADbju7nlC/wCpFQIADbjNzWg5/wCxFQIADbmLi0cm/wC5FQIAi2zrh87r/wDBFQIAkHj/h87//wDKFQIAkHjufsDu/wDTFQIAkHjNbKbN/wDcFQIAkXeLSnCL/wDlFQIAr4/NalrN/wDvFQIAr5D/g2///wD6FQIAr5Duemfu/wAFFgIAr5DNaVnN/wAQFgIAr5CLRzyL/wAbFgIAlDiQcICQ/wAlFgIAlTj/xuL//wAwFgIAlTjuudPu/wA7FgIAlDnNn7bN/wBGFgIAlTiLbHuL/wBRFgIAlDiQcICQ/wBbFgIAAAX///r6/wBgFgIAAAX///r6/wBmFgIAAAXu7unp/wBsFgIAAATNzcnJ/wByFgIAAAOLi4mJ/wB4FgIAav//AP9//wCEFgIAav//AP9//wCRFgIAav/uAO52/wCeFgIAav/NAM1m/wCrFgIAav+LAItF/wC4FgIAkpu0RoK0/wDCFgIAkpz/Y7j//wDNFgIAkpzuXKzu/wDYFgIAkpzNT5TN/wDjFgIAk5uLNmSL/wDuFgIAGFTS0rSM/wDyFgIAFLD//6VP/wD3FgIAFLDu7ppJ/wD8FgIAFLDNzYU//wABFwIAFLCLi1or/wAGFwIA1B3Y2L/Y/wAOFwIA1B7//+H//wAXFwIA1B7u7tLu/wAgFwIA1B3NzbXN/wApFwIA1B2Li3uL/wAyFwIABrj//2NH/wA5FwIABrj//2NH/wBBFwIABrju7lxC/wBJFwIABrjNzU85/wBRFwIABrmLizYm/wCjGAIAKgD////+AABZFwIAe7bgQODQ/wBjFwIAgf//APX//wBuFwIAgf/uAOXu/wB5FwIAgf/NAMXN/wCEFwIAgf+LAIaL/wCPFwIA1HPu7oLu/wCWFwIA49fQ0CCQ/wCgFwIA68H//z6W/wCrFwIA68Du7jqM/wC2FwIA68DNzTJ4/wDBFwIA68CLiyJS/wDMFwIAG0T19d6z/wDSFwIAG0X//+e6/wDZFwIAG0Tu7tiu/wDgFwIAG0TNzbqW/wDnFwIAG0OLi35m/wDuFwIAAAD//////wD0FwIAAAD19fX1/wD/FwIAKv////8A/wAGGAIAKv////8A/wAOGAIAKv/u7u4A/wAWGAIAKv/Nzc0A/wAeGAIAKv+Li4sA/wAmGAIAOMDNms0y/wCaHAIAfywCALYYAgC4GAIAuhgCALwYAgC+GAIAwBgCAMIYAgDEGAIAxhgCAMkYAgDMGAIAzxgCANIYAgDVGAIA2BgCANsYAgDeGAIA4RgCAOQYAgAAAAAABAAAAAQAAAALAAAANgAAABYAAAAAAAAAAAAAAAAAAAAIAAAAEAAAABgAAAAAAAAAAAAAABcAAAAAAAAAAAAAAAAAAAAIAAAAEAAAABgAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAIAAAABAAAAAAAAAAAAAAANwAAAAAAAAAAAAAAAAAAAAAAAAAIAAAABAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAADGJQIACQAAAMwlAgAKAAAA1SUCAAsAAAAXJgIADAAAAB0mAgANAAAAIiYCAA4AAADVJQIADwAAAKomAgAQAAAAsSYCABEAAAC5JgIAEgAAAMAmAgATAAAAzCYCABQAAAAXJgIAFQAAANgmAgAWAAAA4CYCABcAAADqJgIAGAAAAPgmAgAZAAAA/yYCABoAAAAEJwIAGwAAAAcnAgAcAAAADCcCAB0AAAAUJwIAHgAAABonAgAfAAAAICcCACAAAAAnJwIAIQAAAC0nAgAhAAAANScCACIAAAA8JwIAIwAAANUlAgAkAAAAsSYCABEAAAC5JgIAEgAAADMpAgAlAAAAwCYCABMAAADMJgIAFAAAABcmAgAVAAAAPikCACYAAADgJgIAFwAAAOomAgAYAAAA+CYCABkAAAD/JgIAGgAAAAQnAgAbAAAABycCABwAAABGKQIAJwAAABQnAgAeAAAAGicCAB8AAAAgJwIAIAAAACcnAgAhAAAALScCACEAAAA1JwIAIgAAADwnAgAjAAAAGQAAABoAAAAbAAAAHAAAAB0AAAAeAAAAHwAAACgAAAApAAAAIAAAACoAAAAMAAAAGQAAACEAAAAEAAAABQAAAAEAAAAAAAAAAAAAAAAAAAAAFQoAAAkAAAAAAAAAAAAAAAAAAAAAAAAVEAwTHB4DDR8gISIjGxoRGRkZGRkZGRkZGRYSAg4LDxwYGBgYGBgWFhYWFhYWFhYWFhYWFhYWFhYWFhQcBBwWHBgYGBgYGBYWFhYWFhYWFhYWFhYWFhYWFhYWHCQcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwWHBwcHBwcHBwcHBYcGhwcFhwcHBwcFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYcFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhwWFhYWFhYWFgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//////////////////////////////////////////8AAAAAAAAABP7//4f+//8HAAAAAAAAAAD//3////9///////////N//v3//////3///////////w/g/////zH8////AAAAAAAAAP//////////////AQD4AwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQNf///v/////f39U/f8PAP7f///////////+3/////8DAP///////58Z////zz8DAAAAAAAA/v///38C/v///38AAAAAAAAAAAD///8HBwAAAAAA/v//B/4HAAAAAP7//////////3z/fy8AYAAAAOD///////8jAAAA/wMAAADgn/n///3FAwAAALADAAMA4If5///9bQMAAABeAAAcAOCv+////e0jAAAAAAEAAADgn/n///3NIwAAALADAAAA4Mc91hjHvwMAAAAAAAAAAODf/f///e8DAAAAAAMAAADg3/3///3vAwAAAEADAAAA4N/9///9/wMAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAD+/////38NAD8AAAAAAAAAliXw/q5sDSAfAAAAAAAAAAAAAAAAAAAA//7///8DAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/////PwD/////fwDt2gcAAAAAUAFQMYKrYiwAAAAAQADJgPUHAAAAAAgBAv////////////////////////8P//////////////8D//8/P/////8/P/+q////P////////99f3B/PD/8f3B8AAAAAQEwAAAAAAAAAAAAABwAAAAAAAAAAAAAAAAAAAIAAAAD+AwAA/v///////////x8A/v////////////8H4P////8fAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//////////////////////////z8AAAAAAAAAAAAAAP//////////////////////////DwAAAAAAAAAAAAAAAAAAAABg/wf+//+H/v//BwAAAAAAAIAA//9/////f/////8AAAAAAAAA//////////////8BAPgDAAMAAAAAAP//////////PwAAAAMAAADA1///+/////9/f1T9/w8A/t////////////7f/////3sA////////nxn////PPwMAAAAAAAD+////fwL+////fwD+//v//7sWAP///wcHAAAAAAD+//8H//8HAP8D////////////fP9/7///Pf8D7v////////P/Px7/z/8AAO6f+f///cXTnzmAsM//AwDkh/n///1t04c5AF7A/x8A7q/7///97fO/OwAAwf8AAO6f+f///c3zjznAsMP/AADsxz3WGMe/w8c9gACA/wAA7t/9///978PfPWAAw/8AAOzf/f///e/D3z1gQMP/AADs3/3///3/w889gADD/wAAAAAAAAAAAAAAAAAAAAAAAP7/////f/8H/3//AwAAAACWJfD+rmz/O18//wMAAAAAAAAAA/8DoML//v///wP+/98Pv/7/P/4CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8fAgAAAKAAAAD+/z4A/v///////////x9m/v////////////93GQAAABoAAAAbAAAAHAAAAB0AAAAeAAAAHwAAACgAAAApAAAAIAAAACoAAAAMAAAAGQAAACEAAAAGAAAABwAAAAEAAAABAAAAAAAAAAAAAAAAFQoAABUAAAAAAAAAAAAAAAAAAAAAAAAVEAwTHB4DDR8gISIjGxoRGRkZGRkZGRkZGRYSAg4LDxwYGBgYGBgWFhYWFhYWFhYWFhYWFhYWFhYWFhQcBBwWHBgYGBgYGBYWFhYWFhYWFhYWFhYWFhYWFhYWHCQcHBwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUGBgYGBgYGBgYGBgYGBgYGBwcHBwcAAAAAAAAAAAABASsAAAAsAAAALQAAAC4AAAAvAAAALQAAADAAAAAxAAAAMgAAABkAAAAaAAAAGwAAABwAAAAdAAAAHgAAAB8AAAAoAAAAKQAAACAAAAAqAAAADAAAABkAAAAhAAAABgAAAAcAAAABAAAAAQAAAAAAAAAAAAAAABUKAAAJAAAAAAAAAAAAAAAAAAAAAAAAFRAMExweAw0fICEiIxsaERkZGRkZGRkZGRkWEgIOCw8cGBgYGBgYFhYWFhYWFhYWFhYWFhYWFhYWFhYUHAQcFhwYGBgYGBgWFhYWFhYWFhYWFhYWFhYWFhYWFhwkHBwcCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBgYGBgYGBgYGBgYGBgYGBgcHBwcHAAAAAAAAAAAAAQErAAAALAAAAC0AAAAuAAAALwAAAC0AAAAwAAAAMQAAADIAAAAA3QAAYOYAANjkAADM5wAAzOcAADjpAADY5AAAGQAAABoAAAAbAAAAHAAAAB0AAAAeAAAAHwAAACgAAAApAAAAIAAAACoAAAAMAAAAGQAAACEAAAAIAAAABQAAAAEAAAABAAAAAAAAAAAAAAAAFQoAAAkAAAAAAAAAAAAAAAAAAAAAAAAVEAwTHB4DDR8gISIjGxoRGRkZGRkZGRkZGRYSAg4LDxwYGBgYGBgWFhYWFhYWFhYWFhYWFhYWFhYWFhQcBBwWHBgYGBgYGBYWFhYWFhYWFhYWFhYWFhYWFhYWHCQcHBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACIAAAAjAAAAJAAAACUAAAAmAAAAJwAAACgAAAAzAAAANAAAACkAAAA1AAAADQAAABoAAAAqAAAACQAAAAoAAAACAAAAAAAAAAAAAAAAAAAAABUKAAAJAAAAAAAAAAAAAAAAAAAAAAAAFRAMExweAw0fICEiIxsaERkZGRkZGRkZGRkWEgIOCw8cGBgYGBgYFhYWFhYWFhYWFhYWFhYWFhYWFhYUHAQcFhwYGBgYGBgWFhYWFhYWFhYWFhYWFhYWFhYWFhwkHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcFhwcHBwcHBwcHBwWHBocHBYcHBwcHBYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWHBYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYcFhYWFhYWFhYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAArAAAALAAAAC0AAAAuAAAALwAAADAAAAAxAAAANgAAADcAAAAyAAAAOAAAAA4AAAAbAAAAMwAAAAsAAAAMAAAAAgAAAAABAAAAAAAAAAAAAAAVCgAACQAAAAAAAAAAAAAAAAAAAAAAABUQDBMcHgMNHyAhIiMbGhEZGRkZGRkZGRkZFhICDgsPHBgYGBgYGBYWFhYWFhYWFhYWFhYWFhYWFhYWFBwEHBYcGBgYGBgYFhYWFhYWFhYWFhYWFhYWFhYWFhYcJBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBYcHBwcHBwcHBwcFhwaHBwWHBwcHBwWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhwWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWHBYWFhYWFhYWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAz40BALIzAgBTjgEAuzMCAMIzAgDLMwIAGQAAABoAAAAbAAAAHAAAAB0AAAAeAAAAHwAAACgAAAApAAAAIAAAACoAAAAMAAAAGQAAACEAAAAGAAAABwAAAAEAAAABAAAAAAAAAAAAAAAAFQoAABUAAAAAAAAAAAAAAAAAAAAAAAAVEAwTHB4DDR8gISIjGxoRGRkZGRkZGRkZGRcSAg4LDxwYGBgYGBgWFhYWFhYWFhYWFhYWFhYWFhYWFhQcBBwWHBgYGBgYGBYWFhYWFhYWFhYWFhYWFhYWFhYWHCQcHBwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUGBgYGBgYGBgYGBgYGBgYGBwcHBwcAAAAAAAAAAAABASsAAAAsAAAALQAAAC4AAAAvAAAALQAAADAAAAAxAAAAMgAAAETsAACw7QAAHO8AAIjwAACI8AAA9PEAABzvAAAZAAAAGgAAABsAAAAcAAAAHQAAAB4AAAAfAAAAKAAAACkAAAAgAAAAKgAAAAwAAAAZAAAAIQAAAAQAAAAFAAAAAQAAAAAAAAAAAAAAAAAAAAAVCgAACQAAAAAAAAAAAAAAAAAAAAAAABUQDBMcHgMNHyAhIiMbGhEZGRkZGRkZGRkZFxICDgsPHBgYGBgYGBYWFhYWFhYWFhYWFhYWFhYWFhYWFBwEHBYcGBgYGBgYFhYWFhYWFhYWFhYWFhYWFhYWFhYcJBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBYcHBwcHBwcHBwcFhwaHBwWHBwcHBwWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhwWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWHBYWFhYWFhYWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGQAAABoAAAAbAAAAHAAAAB0AAAAeAAAAHwAAACgAAAApAAAAIAAAACoAAAAMAAAAGQAAACEAAAAIAAAABQAAAAEAAAABAAAAAAAAAAAAAAAAFQoAAAkAAAAAAAAAAAAAAAAAAAAAAAAVEAwTHB4DDR8gISIjGxoRGRkZGRkZGRkZGRcSAg4LDxwYGBgYGBgWFhYWFhYWFhYWFhYWFhYWFhYWFhQcBBwWHBgYGBgYGBYWFhYWFhYWFhYWFhYWFhYWFhYWHCQcHBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABkAAAAaAAAAGwAAABwAAAAdAAAAHgAAAB8AAAAoAAAAKQAAACAAAAAqAAAADAAAABkAAAAhAAAABgAAAAcAAAABAAAAAQAAAAAAAAAAAAAAABUKAAAJAAAAAAAAAAAAAAAAAAAAAAAAFRAMExweAw0fICEiIxsaERkZGRkZGRkZGRkXEgIOCw8cGBgYGBgYFhYWFhYWFhYWFhYWFhYWFhYWFhYUHAQcFhwYGBgYGBgWFhYWFhYWFhYWFhYWFhYWFhYWFhwkHBwcCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBgYGBgYGBgYGBgYGBgYGBgcHBwcHAAAAAAAAAAAAAQErAAAALAAAAC0AAAAuAAAALwAAAC0AAAAwAAAAMQAAADIAAAAiAAAAIwAAACQAAAAlAAAAJgAAACcAAAAoAAAAMwAAADQAAAApAAAANQAAAA0AAAAaAAAAKgAAAAkAAAAKAAAAAgAAAAAAAAAAAAAAAAAAAAAVCgAACQAAAAAAAAAAAAAAAAAAAAAAABUQDBMcHgMNHyAhIiMbGhEZGRkZGRkZGRkZFxICDgsPHBgYGBgYGBYWFhYWFhYWFhYWFhYWFhYWFhYWFBwEHBYcGBgYGBgYFhYWFhYWFhYWFhYWFhYWFhYWFhYcJBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBYcHBwcHBwcHBwcFhwaHBwWHBwcHBwWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhwWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWHBYWFhYWFhYWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKwAAACwAAAAtAAAALgAAAC8AAAAwAAAAMQAAADYAAAA3AAAAMgAAADgAAAAOAAAAGwAAADMAAAALAAAADAAAAAIAAAAAAQAAAAAAAAAAAAAAFQoAAAkAAAAAAAAAAAAAAAAAAAAAAAAVEAwTHB4DDR8gISIjGxoRGRkZGRkZGRkZGRcSAg4LDxwYGBgYGBgWFhYWFhYWFhYWFhYWFhYWFhYWFhQcBBwWHBgYGBgYGBYWFhYWFhYWFhYWFhYWFhYWFhYWHCQcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwWHBwcHBwcHBwcHBYcGhwcFhwcHBwcFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYcFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhwWFhYWFhYWFgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF00AgBjNAIAZjQCAGw0AgAGNAIAczQCAHw0AgCENAIAnPMAABQAAABDLlVURi04AAAAAAAAAAAAAAAAAN4SBJUAAAAA////////////////AgAAwAMAAMAEAADABQAAwAYAAMAHAADACAAAwAkAAMAKAADACwAAwAwAAMANAADADgAAwA8AAMAQAADAEQAAwBIAAMATAADAFAAAwBUAAMAWAADAFwAAwBgAAMAZAADAGgAAwBsAAMAcAADAHQAAwB4AAMAfAADAAAAAswEAAMMCAADDAwAAwwQAAMMFAADDBgAAwwcAAMMIAADDCQAAwwoAAMMLAADDDAAAww0AANMOAADDDwAAwwAADLsBAAzDAgAMwwMADMMEAAzTgPQAAAkAAAAAAAAAAAAAABEAAAAAAAAAAAAAAAAAAAAAAAAADwAAAAAAAAAQAAAA/PkCAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9QAABQAAAAAAAAAAAAAAEQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEQAAABAAAAAE/gIAAAQAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAACv////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD1AACE9QAABQAAAAAAAAAAAAAAEQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEgAAABAAAAAMAgMAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAA//////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAmOgCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAABAAAAAQAAAAGAAAAg/miAERObgD8KRUA0VcnAN009QBi28AAPJmVAEGQQwBjUf4Au96rALdhxQA6biQA0k1CAEkG4AAJ6i4AHJLRAOsd/gApsRwA6D6nAPU1ggBEuy4AnOmEALQmcABBfl8A1pE5AFODOQCc9DkAi1+EACj5vQD4HzsA3v+XAA+YBQARL+8AClqLAG0fbQDPfjYACcsnAEZPtwCeZj8ALepfALondQDl68cAPXvxAPc5BwCSUooA+2vqAB+xXwAIXY0AMANWAHv8RgDwq2sAILzPADb0mgDjqR0AXmGRAAgb5gCFmWUAoBRfAI1AaACA2P8AJ3NNAAYGMQDKVhUAyahzAHviYABrjMAAIAAAAAkAAAAKAAAADQAAAAsAAAAMAAAAhQAAAAAgAAABIAAAAiAAAAMgAAAEIAAABSAAAAYgAAAIIAAACSAAAAogAAAoIAAAKSAAAF8gAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAZAAAAOgDAAAQJwAAoIYBAEBCDwCAlpgAAOH1BV9wiQD/CS8PdAAAAP1XAgBuAAAA/1cCAHIAAAABWAIAZgAAAANYAgBhAAAABVgCAGUAAAAHWAIAdwAAAAlYAgBXAAAAFlgCAHMAAAAkWAIAUwAAADBYAgBkAAAAPVgCAEQAAABJWAIAAAAAAAAAAAAAAAAAAAAEAAQAGwAbACAAIAAjACEACgACABYACQAhACEAIQAVABwAAQAUABQAFAAUABQAFAAUAAgABAAFABsAAgAXABsAIAAfAB4AHQAJABMAAAAVABIAFQADAAcAFQAVABQAFAAUABQAFAAUABQAFAAIAAQABQAFAAYAGwAaABgAGQAgAAcAFQAUABQAFAAUABQAFAALABQADQAUAAwAFAAUABQADgAUABQAFAAQABQADwAUABEAAAAAAAAArgAuAC8AMwA1ADAANwCqANsA2wDbANsAAAA9AIcANwA3ANsA2wAAACgANQAuADIALwBiAAAAAABHAAAAAADbAFEAAADbANsA2wAAANsAhABVANsAggDbAAAAgQDbAAAAPgBCAEEASABEAFIAWwAAAAAAXgBfANsAAADbANsA2wAAAAAAewBJAFcAUgBaAFoAXQAAAF8AAABfAAAAZQBdAF8AAABdAG4AagAAAGkAAABuAAAA2wCTAJoAoQCoAKsAcACxALgAvwDGAM0A0wAAAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAMABAAHAAMABAAFAAUABgAGAAgABwAHABEAFgASABEAEgAIAAgADwAPABcADwAYAA8AGQAaABoAHgAWADQAHgAFADIABgAiACIAMwAXABgANQAZABoAGgAqADYAKgA0ADcAMgBFADsAPAAzADsAPABGADUARwBIAEwANgAiAEkASgA3AEUATgBQAGIAUQBSAFQARgBHAFUASABMAFYASQBKAFgAWgBOAEQAUABRAFIAVAA4AC8ALABVACkAVgAbABAAWABaAF0AXQBdAF0AXQBdAF0AXgBeAF4AXgBeAF4AXgBfAF8AXwBfAF8AXwBfAGAACQBgAGAAYABgAGAAYQBhAGMAAgBjAGMAYwBjAGMAZAAAAGQAAABkAGQAZABlAAAAZQBlAGUAZQBlAGYAZgAAAGYAZgBmAGYAZwAAAGcAZwBnAGcAaAAAAGgAaABoAGgAaABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAAAAXAABAF0AXQBeAF4AXwBfAFwAXABcAFwAXABgAFwAXABcAGEAXABcAGIAYgBiAGIAYgBiAGIAYwBkAGUAZgBmAFwAXABnAFwAXABcAGAAXABcAGEAXABhAFwAaABhAFwAYgBiAGIAYgBiAGIAYgBiAGMAZABlAGUAXABmAFwAXABcAGcAaABhAGIAYgBiAGIAYgBiAGIAYgBiAGIAYgBiAGIAYgBiAGIAYgBiAGIAYgBiAGIAYgAAAFwAXABcAFwAXABcAFwAXABcAFwAXABcAAAACgALAAwADQAOAAoADwAQABEAEgATAAoAFAAVABUAFQAWABcAFQAYABUAFQAZABUAFQAVABoAFQAVAAoAFQAVABUAFgAXABgAFQAVABkAFQAVABUAGgAVABUAFQAVABsADAAMACQAHgAeACAAIQAgACEAJAAlACYALQAyAC8ALgAqACUAJgAoACkAMwAqADQAKwA1ADYANwA8ADIARwA9ACIARQAiAD8AQABGADMANABIADUANgA3AC8ASQAqAEcASgBFAEwAXAA8AEYAXAA9AE0ASABOAE8AUgBJAEEAUABRAEoATABTAFQAMQBVAFYAVwBNAE4AWABPAFIAWQBQAFEAWgBbAFMARABUAFUAVgBXAEsARAAsAFgALABZADgALABaAFsAHQAdAB0AHQAdAB0AHQAfAB8AHwAfAB8AHwAfACMAIwAjACMAIwAjACMAJwBcACcAJwAnACcAJwAwADAAOQAcADkAOQA5ADkAOQA6AFwAOgBcADoAOgA6ADsAXAA7ADsAOwA7ADsAPgA+AFwAPgA+AD4APgBCAFwAQgBCAEIAQgBDAFwAQwBDAEMAQwBDAAkAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwACACu/9EACgCu/67/CwCu/67/rv+u/67/rv+u/67/BQDRAK7/0QDRANEA0QDRANEA0QDRAK7/+/+u/w4A7P+u/67/rv+u/9EA0QDRANEA0QANACUADABCABAAUAATAG0AewAUAJgADwCmAMMArv+u/67/rv+u/67/rv+u/67/rv+u/67/rv+u/67/rv+u/67/rv+u/67/rv+u/67/FwCu/3cArv8HAC4Arv8mAK7/FwARACMArv8NAK7/rv+u/67/OgCu/67/NQCu/67/rv8oAK7/BwCu/zsARQCu/0gArv+u/67/rv+u/67/rv/8/+gA9v///xoAAAAnAAEAMgCu/67/AgAkAAMALwCu/67/rv+u/67//v+UAK7/CQAbAK7/vP+u/67/r/+u/67/rv+u/67/rv+u/wAAAAAAAG3m7N4FAAsASQAxAVMAfwEwAWkAeAH/AIEBUwKCAYMBhAGFAYYBVAKHAYgBiQFWAooBVwKLAYwBjgHdAY8BWQKQAVsCkQGSAZMBYAKUAWMClgFpApcBaAKYAZkBnAFvAp0BcgKfAXUCpgGAAqcBqAGpAYMCrAGtAa4BiAKvAbABsQGKArIBiwK3AZICuAG5AbwBvQHEAcYBxAHFAcUBxgHHAckBxwHIAcgByQHKAcwBygHLAcsBzAHxAfMB8QHyAfIB8wH0AfUB9gGVAfcBvwEgAp4BhgOsA4gDrQOJA64DigOvA4wDzAOOA80DjwPOA5kDRQOZA74fowPCA/cD+AP6A/sDYB6bHp4e3wBZH1EfWx9TH10fVR9fH1cfvB+zH8wfwx/sH+Uf/B/zHzoCZSw7AjwCPQKaAT4CZixBAkICQwKAAUQCiQJFAowC9AO4A/kD8gP9A3sD/gN8A/8DfQPABM8EJiHJAyohawArIeUAMiFOIYMhhCFgLGEsYixrAmMsfR1kLH0CbSxRAm4scQJvLFACcCxSAnIscyx1LHYsfiw/An8sQALyLPMsfad5HYunjKeNp2UCqqdmAscQJy3NEC0tdgN3A5wDtQCSA9ADmAPRA6YD1QOgA9YDmgPwA6ED8QOVA/UDzwPXAwAAAABBACAawAAgHwABAS8yAQEFOQEBD0oBAS15AQEFcAMBA5EDIBGjAyAJAARQEBAEICBgBAEhigQBNcEEAQ3QBAE/FAUBEzEFMCagAQEFswEBA80BAQ/eAQER+AEBJyICARHYAwEXAB4BlaAeAV8IH/gIGB/4Bigf+Ag4H/gISB/4Bmgf+AiIH/gImB/4CKgf+Ai4H/gCuh+2AsgfqgTYH/gC2h+cAugf+ALqH5AC+B+AAvofggJGAgEJEAUBA2AhEBAALDAvZywBBYAsAWPrLAEDQKYBLYCmARcipwENMqcBPXmnAQN+pwEJkKcBA6CnAQkh/yAaAAAAAHsgdmFyIHBhdGggPSBQb2ludGVyX3N0cmluZ2lmeSgkMCk7IHZhciBkYXRhID0gUG9pbnRlcl9zdHJpbmdpZnkoJDEpOyBGUy5jcmVhdGVQYXRoKCIvIiwgUEFUSC5kaXJuYW1lKHBhdGgpKTsgRlMud3JpdGVGaWxlKFBBVEguam9pbigiLyIsIHBhdGgpLCBkYXRhKTsgfQBjb3JlAHhkb3R2ZXJzaW9uADEuNwAxLjQAMS4yAF9sZHJhd18AX2hkcmF3XwBfdGRyYXdfAF9obGRyYXdfAF90bGRyYXdfAHhkb3QgdmVyc2lvbiAiJXMiIHRvbyBsb25nACAlZCAAJS4wMmYAJXMlZCAtACMlMDJ4JTAyeCUwMnglMDJ4AHNldGxpbmV3aWR0aCgAJS4zZgBTIABDIAAyIABFIABlIABGIAB0ICV1IABUIABkb3Q6ZG90AGd2OmRvdABjYW5vbjpkb3QAcGxhaW46ZG90AHBsYWluLWV4dDpkb3QAeGRvdDp4ZG90AHhkb3QxLjI6eGRvdAB4ZG90MS40Onhkb3QASSAAIl9zdWJncmFwaF9jbnQiOiAlZAAiX2d2aWQiOiAlZAAiZWRnZXMiOiBbCgAiX2d2aWQiOiAlZCwKACJ0YWlsIjogJWQsCgAiaGVhZCI6ICVkACJvYmplY3RzIjogWwoAIm5vZGVzIjogWwoAIm5hbWUiOiAiJXMiAFwiAFwvAFxiAFxmAFxuAFxyAFx0ACJzdWJncmFwaHMiOiBbCgAiJXMiOiAAIiVzIgBDb3VsZCBub3QgcGFyc2UgeGRvdCAiJXMiCgBbCgAib3AiOiAiJWMiLAoAInJlY3QiOiBbJS4wM2YsJS4wM2YsJS4wM2YsJS4wM2ZdCgAib3AiOiAiTCIsCgAib3AiOiAiVCIsCgAicHQiOiBbJS4wM2YsJS4wM2ZdLAoAImFsaWduIjogIiVjIiwKACJ3aWR0aCI6ICUuMDNmLAoAInRleHQiOiAiJXMiCgAiZ3JhZCI6ICJub25lIiwKACJjb2xvciI6ICIlcyIKACJncmFkIjogImxpbmVhciIsCgAiZ3JhZCI6ICJyYWRpYWwiLAoAIm9wIjogIkYiLAoAInNpemUiOiAlLjAzZiwKACJmYWNlIjogIiVzIgoAIm9wIjogIlMiLAoAInN0eWxlIjogIiVzIgoAIm9wIjogInQiLAoAImZvbnRjaGFyIjogJWQKACJwMCI6IFslLjAzZiwlLjAzZiwlLjAzZl0sCgAicDEiOiBbJS4wM2YsJS4wM2YsJS4wM2ZdLAoAInN0b3BzIjogWwB7ImZyYWMiOiAlLjAzZiwgImNvbG9yIjogIiVzIn0AXQoAInAwIjogWyUuMDNmLCUuMDNmXSwKACJwMSI6IFslLjAzZiwlLjAzZl0sCgAicG9pbnRzIjogWwBbJS4wM2YsJS4wM2ZdAGRyYXdfAGxkcmF3XwBoZHJhd18AdGRyYXdfAGhsZHJhd18AdGxkcmF3XwAiZGlyZWN0ZWQiOiAlcywKACJzdHJpY3QiOiAlcwBEdXBsaWNhdGUgY2x1c3RlciBuYW1lICIlcyIKAHhkb3QAanNvbgBqc29uMABkb3RfanNvbgB4ZG90X2pzb24AanNvbjpqc29uAGpzb24wOmpzb24AZG90X2pzb246anNvbgB4ZG90X2pzb246anNvbgBuID49IDQAZ3ZyZW5kZXJfY29yZV9maWcuYwBmaWdfYmV6aWVyAGZpZ19yZXNvbHZlX2NvbG9yAGZpZwBmaWc6ZmlnAG1hcAByZWN0ICVzICVkLCVkICVkLCVkCgBjaXJjbGUgJXMgJWQsJWQsJWQKAHBvbHkgJXMAICVkLCVkAGd2cmVuZGVyX2NvcmVfbWFwLmMAbWFwX291dHB1dF9zaGFwZQByZWN0YW5nbGUgKCVkLCVkKSAoJWQsJWQpICVzICVzCgA8YXJlYSBzaGFwZT0iY2lyY2xlIgA8YXJlYSBzaGFwZT0icmVjdCIAPGFyZWEgc2hhcGU9InBvbHkiACBocmVmPSIAIHRpdGxlPSIAIGFsdD0iIgAgY29vcmRzPSIAJWQsJWQsJWQAJWQsJWQsJWQsJWQAJWQsJWQALCVkLCVkACI+CgA8L21hcD4KAGJhc2UgcmVmZXJlcgoAZGVmYXVsdCAAPG1hcCBpZD0iACIgbmFtZT0iAGlzbWFwOm1hcABjbWFwOm1hcABpbWFwOm1hcABjbWFweDptYXAAaW1hcF9ucDptYXAAY21hcHhfbnA6bWFwACMgJXMKACVkICVkICVkICVkICVkICVkICVkICVkICVkICUuMWYgJWQgJWQgJWQgJWQgJWQgJWQKACVkICVkICVkICVkICVkICVkICVkICVkICVkICUuMWYgJWQgJWQgJWQgJWQKACVkICVkICVkICVkICVkICVkICVkICVkICVkICUuM2YgJWQgJS40ZiAlZCAlZCAlZCAlZCAlZCAlZCAlZCAlZAoAJWQgJWQgIyUwMnglMDJ4JTAyeAoAZ3ZyZW5kZXJfY29yZV9tcC5jAG1wX3Jlc29sdmVfY29sb3IAJWQgJWQgJWQgJWQgJWQgJWQgJS4xZiAlLjRmICVkICUuMWYgJS4xZiAlZCAlZCAlc1wwMDEKACMgZW5kIG9mIEZJRyBmaWxlCgAjRklHIDMuMgoAIyBHZW5lcmF0ZWQgYnkgJXMgdmVyc2lvbiAlcyAoJXMpCgAjIFRpdGxlOiAlcwoAIyBQYWdlczogJWQKAFBvcnRyYWl0CgBDZW50ZXIKAEluY2hlcwoATGV0dGVyCgAxMDAuMDAKAFNpbmdsZQoALTIKADEyMDAAIDIKAG1wAG1wOm1wACBdICAlZCB0cnVlICVzCgAgXSAgJWQgZmFsc2UgJXMKACBzZXRsaW5ld2lkdGgKACVzIABzZXRoc2IAJS41ZyAlLjVnICUuNWcgJXNjb2xvcgoAJSAAbmV3cGF0aCAAIG1vdmV0bwoAIGxpbmV0bwoAc3Ryb2tlCgAgY3VydmV0bwoAY2xvc2VwYXRoIGZpbGwKAGNsb3NlcGF0aCBzdHJva2UKACBlbGxpcHNlX3BhdGggZmlsbAoAIGVsbGlwc2VfcGF0aCBzdHJva2UKACAvJXMgc2V0X2ZvbnQKACBtb3ZldG8gACAlcyBhbGlnbmVkdGV4dAoAWyAvUmVjdCBbIAAgXQoAICAvQm9yZGVyIFsgMCAwIDAgXQogIC9BY3Rpb24gPDwgL1N1YnR5cGUgL1VSSSAvVVJJICVzID4+CiAgL1N1YnR5cGUgL0xpbmsKL0FOTiBwZGZtYXJrCgBnc2F2ZQoAJSUgJXMKADAgMCAwIGVkZ2Vjb2xvcgoAZW5kcGFnZQpzaG93cGFnZQpncmVzdG9yZQoAJSVQYWdlVHJhaWxlcgoAJSUlJUVuZFBhZ2U6ICVkCgAlJSUlUGFnZTogJWQgJWQKACUlJSVQYWdlQm91bmRpbmdCb3g6ICVkICVkICVkICVkCgBMYW5kc2NhcGUAUG9ydHJhaXQAJSUlJVBhZ2VPcmllbnRhdGlvbjogJXMKADw8IC9QYWdlU2l6ZSBbJWQgJWRdID4+IHNldHBhZ2VkZXZpY2UKACVkICVkICVkIGJlZ2lucGFnZQoAZ3NhdmUKJWQgJWQgJWQgJWQgYm94cHJpbSBjbGlwIG5ld3BhdGgKACVnICVnIHNldF9zY2FsZSAlZCByb3RhdGUgJWcgJWcgdHJhbnNsYXRlCgBjYW52YXMgc2l6ZSAoJWQsJWQpIGV4Y2VlZHMgUERGIGxpbWl0ICglZCkKCShzdWdnZXN0IHNldHRpbmcgYSBib3VuZGluZyBib3ggc2l6ZSwgc2VlIGRvdCgxKSkKAFsgL0Nyb3BCb3ggWyVkICVkICVkICVkXSAvUEFHRVMgcGRmbWFyawoAJWQgJWQgc2V0bGF5ZXIKACUlJSVUaXRsZTogJXMKACUlUGFnZXM6IChhdGVuZCkKACUlUGFnZXM6IDEKACUlQm91bmRpbmdCb3g6IChhdGVuZCkKACUlJSVCb3VuZGluZ0JveDogJWQgJWQgJWQgJWQKACUlRW5kQ29tbWVudHMKc2F2ZQoAc2V0dXBMYXRpbjEKAFsge0NhdGFsb2d9IDw8IC9VUkkgPDwgL0Jhc2UgJXMgPj4gPj4KL1BVVCBwZGZtYXJrCgAlJUJlZ2luUHJvbG9nAC9Eb3REaWN0IDIwMCBkaWN0IGRlZgBEb3REaWN0IGJlZ2luAC9zZXR1cExhdGluMSB7AG1hcmsAL0VuY29kaW5nVmVjdG9yIDI1NiBhcnJheSBkZWYAIEVuY29kaW5nVmVjdG9yIDAASVNPTGF0aW4xRW5jb2RpbmcgMCAyNTUgZ2V0aW50ZXJ2YWwgcHV0aW50ZXJ2YWwARW5jb2RpbmdWZWN0b3IgNDUgL2h5cGhlbiBwdXQAJSBTZXQgdXAgSVNPIExhdGluIDEgY2hhcmFjdGVyIGVuY29kaW5nAC9zdGFybmV0SVNPIHsAICAgICAgICBkdXAgZHVwIGZpbmRmb250IGR1cCBsZW5ndGggZGljdCBiZWdpbgAgICAgICAgIHsgMSBpbmRleCAvRklEIG5lIHsgZGVmIH17IHBvcCBwb3AgfSBpZmVsc2UAICAgICAgICB9IGZvcmFsbAAgICAgICAgIC9FbmNvZGluZyBFbmNvZGluZ1ZlY3RvciBkZWYAICAgICAgICBjdXJyZW50ZGljdCBlbmQgZGVmaW5lZm9udAB9IGRlZgAvVGltZXMtUm9tYW4gc3Rhcm5ldElTTyBkZWYAL1RpbWVzLUl0YWxpYyBzdGFybmV0SVNPIGRlZgAvVGltZXMtQm9sZCBzdGFybmV0SVNPIGRlZgAvVGltZXMtQm9sZEl0YWxpYyBzdGFybmV0SVNPIGRlZgAvSGVsdmV0aWNhIHN0YXJuZXRJU08gZGVmAC9IZWx2ZXRpY2EtT2JsaXF1ZSBzdGFybmV0SVNPIGRlZgAvSGVsdmV0aWNhLUJvbGQgc3Rhcm5ldElTTyBkZWYAL0hlbHZldGljYS1Cb2xkT2JsaXF1ZSBzdGFybmV0SVNPIGRlZgAvQ291cmllciBzdGFybmV0SVNPIGRlZgAvQ291cmllci1PYmxpcXVlIHN0YXJuZXRJU08gZGVmAC9Db3VyaWVyLUJvbGQgc3Rhcm5ldElTTyBkZWYAL0NvdXJpZXItQm9sZE9ibGlxdWUgc3Rhcm5ldElTTyBkZWYAY2xlYXJ0b21hcmsAfSBiaW5kIGRlZgAlJUJlZ2luUmVzb3VyY2U6IHByb2NzZXQgZ3JhcGh2aXogMCAwAC9jb29yZC1mb250LWZhbWlseSAvVGltZXMtUm9tYW4gZGVmAC9kZWZhdWx0LWZvbnQtZmFtaWx5IC9UaW1lcy1Sb21hbiBkZWYAL2Nvb3JkZm9udCBjb29yZC1mb250LWZhbWlseSBmaW5kZm9udCA4IHNjYWxlZm9udCBkZWYAL0ludlNjYWxlRmFjdG9yIDEuMCBkZWYAL3NldF9zY2FsZSB7ACAgICAgICBkdXAgMSBleGNoIGRpdiAvSW52U2NhbGVGYWN0b3IgZXhjaCBkZWYAICAgICAgIHNjYWxlACUgc3R5bGVzAC9zb2xpZCB7IFtdIDAgc2V0ZGFzaCB9IGJpbmQgZGVmAC9kYXNoZWQgeyBbOSBJbnZTY2FsZUZhY3RvciBtdWwgZHVwIF0gMCBzZXRkYXNoIH0gYmluZCBkZWYAL2RvdHRlZCB7IFsxIEludlNjYWxlRmFjdG9yIG11bCA2IEludlNjYWxlRmFjdG9yIG11bF0gMCBzZXRkYXNoIH0gYmluZCBkZWYAL2ludmlzIHsvZmlsbCB7bmV3cGF0aH0gZGVmIC9zdHJva2Uge25ld3BhdGh9IGRlZiAvc2hvdyB7cG9wIG5ld3BhdGh9IGRlZn0gYmluZCBkZWYAL2JvbGQgeyAyIHNldGxpbmV3aWR0aCB9IGJpbmQgZGVmAC9maWxsZWQgeyB9IGJpbmQgZGVmAC91bmZpbGxlZCB7IH0gYmluZCBkZWYAL3JvdW5kZWQgeyB9IGJpbmQgZGVmAC9kaWFnb25hbHMgeyB9IGJpbmQgZGVmAC90YXBlcmVkIHsgfSBiaW5kIGRlZgAlIGhvb2tzIGZvciBzZXR0aW5nIGNvbG9yIAAvbm9kZWNvbG9yIHsgc2V0aHNiY29sb3IgfSBiaW5kIGRlZgAvZWRnZWNvbG9yIHsgc2V0aHNiY29sb3IgfSBiaW5kIGRlZgAvZ3JhcGhjb2xvciB7IHNldGhzYmNvbG9yIH0gYmluZCBkZWYAL25vcGNvbG9yIHtwb3AgcG9wIHBvcH0gYmluZCBkZWYAL2JlZ2lucGFnZSB7CSUgaSBqIG5wYWdlcwAJL25wYWdlcyBleGNoIGRlZgAJL2ogZXhjaCBkZWYACS9pIGV4Y2ggZGVmAAkvc3RyIDEwIHN0cmluZyBkZWYACW5wYWdlcyAxIGd0IHsACQlnc2F2ZQAJCQljb29yZGZvbnQgc2V0Zm9udAAJCQkwIDAgbW92ZXRvAAkJCShcKCkgc2hvdyBpIHN0ciBjdnMgc2hvdyAoLCkgc2hvdyBqIHN0ciBjdnMgc2hvdyAoXCkpIHNob3cACQlncmVzdG9yZQAJfSBpZgAvc2V0X2ZvbnQgewAJZmluZGZvbnQgZXhjaAAJc2NhbGVmb250IHNldGZvbnQAJSBkcmF3IHRleHQgZml0dGVkIHRvIGl0cyBleHBlY3RlZCB3aWR0aAAvYWxpZ25lZHRleHQgewkJCSUgd2lkdGggdGV4dAAJL3RleHQgZXhjaCBkZWYACS93aWR0aCBleGNoIGRlZgAJZ3NhdmUACQl3aWR0aCAwIGd0IHsACQkJW10gMCBzZXRkYXNoAAkJCXRleHQgc3RyaW5nd2lkdGggcG9wIHdpZHRoIGV4Y2ggc3ViIHRleHQgbGVuZ3RoIGRpdiAwIHRleHQgYXNob3cACQl9IGlmAAlncmVzdG9yZQAvYm94cHJpbSB7CQkJCSUgeGNvcm5lciB5Y29ybmVyIHhzaXplIHlzaXplAAkJNCAyIHJvbGwACQltb3ZldG8ACQkyIGNvcHkACQlleGNoIDAgcmxpbmV0bwAJCTAgZXhjaCBybGluZXRvAAkJcG9wIG5lZyAwIHJsaW5ldG8ACQljbG9zZXBhdGgAL2VsbGlwc2VfcGF0aCB7AAkvcnkgZXhjaCBkZWYACS9yeCBleGNoIGRlZgAJL3kgZXhjaCBkZWYACS94IGV4Y2ggZGVmAAltYXRyaXggY3VycmVudG1hdHJpeAAJbmV3cGF0aAAJeCB5IHRyYW5zbGF0ZQAJcnggcnkgc2NhbGUACTAgMCAxIDAgMzYwIGFyYwAJc2V0bWF0cml4AC9lbmRwYWdlIHsgc2hvd3BhZ2UgfSBiaW5kIGRlZgAvc2hvd3BhZ2UgeyB9IGRlZgAvbGF5ZXJjb2xvcnNlcQAJWwklIGxheWVyIGNvbG9yIHNlcXVlbmNlIC0gZGFya2VzdCB0byBsaWdodGVzdAAJCVswIDAgMF0ACQlbLjIgLjggLjhdAAkJWy40IC44IC44XQAJCVsuNiAuOCAuOF0ACQlbLjggLjggLjhdAAldAGRlZgAvbGF5ZXJsZW4gbGF5ZXJjb2xvcnNlcSBsZW5ndGggZGVmAC9zZXRsYXllciB7L21heGxheWVyIGV4Y2ggZGVmIC9jdXJsYXllciBleGNoIGRlZgAJbGF5ZXJjb2xvcnNlcSBjdXJsYXllciAxIHN1YiBsYXllcmxlbiBtb2QgZ2V0AAlhbG9hZCBwb3Agc2V0aHNiY29sb3IACS9ub2RlY29sb3Ige25vcGNvbG9yfSBkZWYACS9lZGdlY29sb3Ige25vcGNvbG9yfSBkZWYACS9ncmFwaGNvbG9yIHtub3Bjb2xvcn0gZGVmAC9vbmxheWVyIHsgY3VybGF5ZXIgbmUge2ludmlzfSBpZiB9IGRlZgAvb25sYXllcnMgewAJL215dXBwZXIgZXhjaCBkZWYACS9teWxvd2VyIGV4Y2ggZGVmAAljdXJsYXllciBteWxvd2VyIGx0AAljdXJsYXllciBteXVwcGVyIGd0AAlvcgAJe2ludmlzfSBpZgAvY3VybGF5ZXIgMCBkZWYAJSVFbmRSZXNvdXJjZQAlJUVuZFByb2xvZwAlJUJlZ2luU2V0dXAAMTQgZGVmYXVsdC1mb250LWZhbWlseSBzZXRfZm9udAAlIC9hcnJvd2xlbmd0aCAxMCBkZWYAJSAvYXJyb3d3aWR0aCA1IGRlZgAlIG1ha2Ugc3VyZSBwZGZtYXJrIGlzIGhhcm1sZXNzIGZvciBQUy1pbnRlcnByZXRlcnMgb3RoZXIgdGhhbiBEaXN0aWxsZXIAL3BkZm1hcmsgd2hlcmUge3BvcH0ge3VzZXJkaWN0IC9wZGZtYXJrIC9jbGVhcnRvbWFyayBsb2FkIHB1dH0gaWZlbHNlACUgbWFrZSAnPDwnIGFuZCAnPj4nIHNhZmUgb24gUFMgTGV2ZWwgMSBkZXZpY2VzAC9sYW5ndWFnZWxldmVsIHdoZXJlIHtwb3AgbGFuZ3VhZ2VsZXZlbH17MX0gaWZlbHNlADIgbHQgewAgICAgdXNlcmRpY3QgKDw8KSBjdm4gKFspIGN2biBsb2FkIHB1dAAgICAgdXNlcmRpY3QgKD4+KSBjdm4gKFspIGN2biBsb2FkIHB1dAB9IGlmACUlRW5kU2V0dXAAJSVUcmFpbGVyCgAlJSUlUGFnZXM6ICVkCgBlbmQKcmVzdG9yZQoAJSVFT0YKACUhUFMtQWRvYmUtMy4wACBFUFNGLTMuMAoAJSUlJUNyZWF0b3I6ICVzIHZlcnNpb24gJXMgKCVzKQoAcHMyOnBzADwhLS0gADxwb2x5bGluZQAgcG9pbnRzPSIAIi8+CgAgZmlsbD0iAHVybCgjbF8lZCkAdXJsKCNyXyVkKQAiIGZpbGwtb3BhY2l0eT0iJWYAIiBzdHJva2U9IgAiIHN0cm9rZS13aWR0aD0iACIgc3Ryb2tlLWRhc2hhcnJheT0iJXMANSwyADEsNQAiIHN0cm9rZS1vcGFjaXR5PSIlZgBndnJlbmRlcl9jb3JlX3N2Zy5jAHN2Z19wcmludF9jb2xvcgA8cGF0aAAgaWQ9IgBfcCIgACBkPSIAJWMAPGRlZnM+CjxyYWRpYWxHcmFkaWVudCBpZD0icl8lZCIgY3g9IjUwJSUiIGN5PSI1MCUlIiByPSI3NSUlIiBmeD0iJWQlJSIgZnk9IiVkJSUiPgoAPHN0b3Agb2Zmc2V0PSIwIiBzdHlsZT0ic3RvcC1jb2xvcjoAO3N0b3Atb3BhY2l0eToAMS4AOyIvPgoAPHN0b3Agb2Zmc2V0PSIxIiBzdHlsZT0ic3RvcC1jb2xvcjoAOyIvPgo8L3JhZGlhbEdyYWRpZW50Pgo8L2RlZnM+CgA8ZGVmcz4KPGxpbmVhckdyYWRpZW50IGlkPSJsXyVkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgAHgxPSIAIiB5MT0iACIgeDI9IgAiIHkyPSIAIiA+CgA8c3RvcCBvZmZzZXQ9IiUuMDNmIiBzdHlsZT0ic3RvcC1jb2xvcjoAOyIvPgo8L2xpbmVhckdyYWRpZW50Pgo8L2RlZnM+CgA8cG9seWdvbgA8ZWxsaXBzZQAgY3g9IgAiIGN5PSIAIiByeD0iACIgcnk9IgA8dGV4dAAgdGV4dC1hbmNob3I9InN0YXJ0IgAgdGV4dC1hbmNob3I9ImVuZCIAIHRleHQtYW5jaG9yPSJtaWRkbGUiACB4PSIAIiB5PSIAIGZvbnQtZmFtaWx5PSIlcwAsJXMAIGZvbnQtd2VpZ2h0PSIlcyIAIGZvbnQtc3RyZXRjaD0iJXMiACBmb250LXN0eWxlPSIlcyIAIGZvbnQtZmFtaWx5PSIlcyIAIGZvbnQtd2VpZ2h0PSJib2xkIgAgZm9udC1zdHlsZT0iaXRhbGljIgAgdGV4dC1kZWNvcmF0aW9uPSIAJXNvdmVybGluZQAlc2xpbmUtdGhyb3VnaAAgYmFzZWxpbmUtc2hpZnQ9InN1cGVyIgAgYmFzZWxpbmUtc2hpZnQ9InN1YiIAIGZvbnQtc2l6ZT0iJS4yZiIAIGZpbGw9IiVzIgAgZmlsbD0iIyUwMnglMDJ4JTAyeCIAc3ZnX3RleHRzcGFuAD4APHRleHRQYXRoIHhsaW5rOmhyZWY9IiMlc19wIiBzdGFydE9mZnNldD0iNTAlJSI+ADx0c3BhbiB4PSIwIiBkeT0iACI+ADwvdHNwYW4+PC90ZXh0UGF0aD4APC90ZXh0PgoAPC9nPgoAPGcAIGlkPSJhXwAgeGxpbms6aHJlZj0iACB4bGluazp0aXRsZT0iACB0YXJnZXQ9IgA8dGl0bGU+ADwvdGl0bGU+CgA8ZyBpZD0iAF8lcwAiIGNsYXNzPSIlcwBjbGFzcwAgdHJhbnNmb3JtPSJzY2FsZSgAKSByb3RhdGUoJWQpIHRyYW5zbGF0ZSgAKSI+CgA8L3N2Zz4KADwhLS0AIFBhZ2VzOiAlZCAtLT4KADxzdmcgd2lkdGg9IiVkcHQiIGhlaWdodD0iJWRwdCIKACB2aWV3Qm94PSIlLjJmICUuMmYgJS4yZiAlLjJmIgAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgAgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiADw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJubyI/PgoAc3R5bGVzaGVldAA8P3htbC1zdHlsZXNoZWV0IGhyZWY9IgAiIHR5cGU9InRleHQvY3NzIj8+CgA8IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iCgAgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+CgA8IS0tIEdlbmVyYXRlZCBieSAAZGFya2JsdWUAZGFya2N5YW4AZGFya2dyYXkAZGFya2dyZXkAZGFya21hZ2VudGEAZGFya3JlZABsaWdodGdyZWVuACMgACBjcmVhdGUgbGluZSAAIC1maWxsIAAgLWRhc2ggNQAgLWRhc2ggMgBndnJlbmRlcl9jb3JlX3RrLmMAdGtnZW5fcHJpbnRfdGFncwBncmFwaCBsYWJlbAAgLXRhZ3MgeyVkJXMlcH0AdGtnZW5fcHJpbnRfY29sb3IAJGMAIC13aWR0aCAAIC1zbW9vdGggYmV6aWVyIAAgY3JlYXRlIHBvbHlnb24gACAtb3V0bGluZSAAIGNyZWF0ZSBvdmFsIAAgY3JlYXRlIHRleHQgACAtdGV4dCB7AH0AIC1mb250IHsAICVkfQAgLWFuY2hvciB3ACAtYW5jaG9yIGUAIwAgVGl0bGU6IAAgUGFnZXM6ICVkCgAjIEdlbmVyYXRlZCBieSAAKQoAdGsAdGs6dGsAICAgICAgPCEtLSAAIC0tPgoARXJyb3IgZHVyaW5nIGNvbnZlcnNpb24gdG8gIlVURi04Ii4gIFF1aXRpbmcuCgAgPHY6c2hhcGUgc3R5bGU9InBvc2l0aW9uOmFic29sdXRlOyAAIHdpZHRoOiAlZDsgaGVpZ2h0OiAlZCIgZmlsbGVkPSJmYWxzZSI+ADx2OnBhdGggdj0iACBtIAAlLjBmLCUuMGYgACBsIAAgZSAAIi8+ADwvdjpzaGFwZT4KADx2OnN0cm9rZSBjb2xvcj0iACIgd2VpZ2h0PSIlLjBmcHQAIiBkYXNoc3R5bGU9ImRhc2gAIiBkYXNoc3R5bGU9ImRvdAAiIC8+ACMlMDJ4JTAyeCUwMngAZ3ZyZW5kZXJfY29yZV92bWwuYwB2bWxfcHJpbnRfY29sb3IAIHdpZHRoOiAlZDsgaGVpZ2h0OiAlZCIAID4APHY6cGF0aCAgdj0iAC8+PC92OnNoYXBlPgoAbSAAJXMlLjBmLCUuMGYgAGMgACBmaWxsZWQ9InRydWUiIGZpbGxjb2xvcj0iACIgACBmaWxsZWQ9ImZhbHNlIiAAJS4wZiAlLjBmIABsIAB4IGUgIi8+ACAgPHY6b3ZhbCBzdHlsZT0icG9zaXRpb246YWJzb2x1dGU7ACBsZWZ0OiAlLjJmOyB0b3A6ICUuMmY7ACB3aWR0aDogJS4yZjsgaGVpZ2h0OiAlLjJmIgA8L3Y6b3ZhbD4KADx2OnJlY3Qgc3R5bGU9InBvc2l0aW9uOmFic29sdXRlOyAAIHN0cm9rZWQ9ImZhbHNlIiBmaWxsZWQ9ImZhbHNlIj4KADx2OnRleHRib3ggaW5zZXQ9IjAsMCwwLDAiIHN0eWxlPSJwb3NpdGlvbjphYnNvbHV0ZTsgdi10ZXh0LXdyYXBwaW5nOidmYWxzZSc7cGFkZGluZzonMCc7AGZvbnQtZmFtaWx5OiAnJXMnOwBmb250LXdlaWdodDogJXM7AGZvbnQtc3RyZXRjaDogJXM7AGZvbnQtc3R5bGU6ICVzOwAgZm9udC1zaXplOiAlLjJmcHQ7AGNvbG9yOiVzOwBjb2xvcjojJTAyeCUwMnglMDJ4OwB2bWxfdGV4dHNwYW4AIj48Y2VudGVyPgA8L2NlbnRlcj48L3Y6dGV4dGJveD4KADwvdjpyZWN0PgoAPC9hPgoAPGEAIGhyZWY9IiVzIgAgdGl0bGU9IiVzIgAgdGFyZ2V0PSIlcyIAPgoAPC92Omdyb3VwPgoAPC9ESVY+CgA8RElWIGlkPSdfVk1MMl8nIHN0eWxlPSJwb3NpdGlvbjpyZWxhdGl2ZTt2aXNpYmlsaXR5OmhpZGRlbiI+CgA8IS0tIGluc2VydCBhbnkgb3RoZXIgaHRtbCBjb250ZW50IGhlcmUgLS0+CgA8RElWIGlkPSdfbm90Vk1MMV8nIHN0eWxlPSJwb3NpdGlvbjpyZWxhdGl2ZTsiPgoAPCEtLSB0aGlzIHNob3VsZCBvbmx5IGRpc3BsYXkgb24gTk9OLUlFIGJyb3dzZXJzIC0tPgoAPEgyPlNvcnJ5LCB0aGlzIGRpYWdyYW0gd2lsbCBvbmx5IGRpc3BsYXkgY29ycmVjdGx5IG9uIEludGVybmV0IEV4cGxvcmVyIDUgKGFuZCB1cCkgYnJvd3NlcnMuPC9IMj4KADxESVYgaWQ9J19ub3RWTUwyXycgc3R5bGU9InBvc2l0aW9uOnJlbGF0aXZlOyI+CgA8IS0tIGluc2VydCBhbnkgb3RoZXIgTk9OLUlFIGh0bWwgY29udGVudCBoZXJlIC0tPgoAPC9CT0RZPgo8L0hUTUw+CgA8SEVBRD4APE1FVEEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgoAPFRJVExFPgA8L1RJVExFPgA8IS0tIFBhZ2VzOiAlZCAtLT4KACAgIDxTQ1JJUFQgTEFOR1VBR0U9J0phdmFzY3JpcHQnPgoAICAgZnVuY3Rpb24gYnJvd3NlcmNoZWNrKCkKACAgIHsKACAgICAgIHZhciB1YSA9IHdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50CgAgICAgICB2YXIgbXNpZSA9IHVhLmluZGV4T2YgKCAnTVNJRSAnICkKACAgICAgIHZhciBpZXZlcnM7CgAgICAgICB2YXIgaXRlbTsKACAgICAgIHZhciBWTUx5ZXM9bmV3IEFycmF5KCdfVk1MMV8nLCdfVk1MMl8nKTsKACAgICAgIHZhciBWTUxubz1uZXcgQXJyYXkoJ19ub3RWTUwxXycsJ19ub3RWTUwyXycpOwoAICAgICAgaWYgKCBtc2llID4gMCApeyAgICAgIC8vIElmIEludGVybmV0IEV4cGxvcmVyLCByZXR1cm4gdmVyc2lvbiBudW1iZXIKACAgICAgICAgIGlldmVycz0gcGFyc2VJbnQgKHVhLnN1YnN0cmluZyAobXNpZSs1LCB1YS5pbmRleE9mICgnLicsIG1zaWUgKSkpCgAgICAgICB9CgAgICAgICBpZiAoaWV2ZXJzPj01KXsKACAgICAgICBmb3IgKHggaW4gVk1MeWVzKXsKACAgICAgICAgIGl0ZW0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChWTUx5ZXNbeF0pOwoAICAgICAgICAgaWYgKGl0ZW0pIHsKACAgICAgICAgICAgaXRlbS5zdHlsZS52aXNpYmlsaXR5PSd2aXNpYmxlJzsKACAgICAgICAgIH0KACAgICAgICB9CgAgICAgICAgZm9yICh4IGluIFZNTG5vKXsKACAgICAgICAgIGl0ZW0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChWTUxub1t4XSk7CgAgICAgICAgICAgIGl0ZW0uc3R5bGUudmlzaWJpbGl0eT0naGlkZGVuJzsKACAgICAgfWVsc2V7CgAgICAgIH0KACAgIH0KACAgIDwvU0NSSVBUPgoAPC9IRUFEPgA8Qk9EWSBvbmxvYWQ9J2Jyb3dzZXJjaGVjaygpOyc+CgA8RElWIGlkPSdfVk1MMV8nIHN0eWxlPSJwb3NpdGlvbjpyZWxhdGl2ZTsgZGlzcGxheTppbmxpbmU7IHZpc2liaWxpdHk6aGlkZGVuACB3aWR0aDogJWRwdDsgaGVpZ2h0OiAlZHB0Ij4KADxTVFlMRT4KAHZcOiogeyBiZWhhdmlvcjogdXJsKCNkZWZhdWx0I1ZNTCk7ZGlzcGxheTppbmxpbmUtYmxvY2t9CgA8L1NUWUxFPgoAPHhtbDpuYW1lc3BhY2UgbnM9InVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206dm1sIiBwcmVmaXg9InYiIC8+CgAgPHY6Z3JvdXAgc3R5bGU9InBvc2l0aW9uOnJlbGF0aXZlOyAAIHdpZHRoOiAlZHB0OyBoZWlnaHQ6ICVkcHQiACBjb29yZG9yaWdpbj0iMCwwIiBjb29yZHNpemU9IiVkLCVkIiA+ADxIVE1MPgoACjwhLS0gR2VuZXJhdGVkIGJ5IAAgdmVyc2lvbiAAICgAKQotLT4KAGFxdWEAZnVjaHNpYQBsaW1lAG9saXZlAHRlYWwAdm1sAHZtbDp2bWwALy8qKiogY29tbWVudDogJXMKAC8vKioqIHBvbHlsaW5lCgBzY2FsZSAgICA8JTkuM2YsICU5LjNmLCAlOS4zZj4KAHJvdGF0ZSAgIDwlOS4zZiwgJTkuM2YsICU5LjNmPgoAdHJhbnNsYXRlPCU5LjNmLCAlOS4zZiwgJTkuM2Y+CgBzcGhlcmVfc3dlZXAgewogICAgJXMKICAgICVkLAoAbGluZWFyX3NwbGluZQA8JTkuM2YsICU5LjNmLCAlOS4zZj4sICUuM2YKACVzICAgICVzACAgICB0b2xlcmFuY2UgMC4wMQogICAgJXMgICAgJXMgICAgJXMgICAgJXN9CgAlcyVzACVzIHRyYW5zbWl0ICUuM2YAUmVkAEdyZWVuAEJsdWUAcmdiPCU5LjNmLCAlOS4zZiwgJTkuM2Y+IHRyYW5zbWl0ICUuM2YAb29wcywgaW50ZXJuYWwgZXJyb3I6IHVuaGFuZGxlZCBjb2xvciB0eXBlPSVkICVzCgBndnJlbmRlcl9jb3JlX3Bvdi5jAHBvdl9jb2xvcl9hc19zdHIAcGlnbWVudCB7IGNvbG9yICVzIH0KAHBvdiByZW5kZXJlcjplbCAtICVzCgAvLyoqKiBiZXppZXIKAGJfc3BsaW5lACAgICAgICAgdG9sZXJhbmNlIDAuMDEKICAgICVzICAgICVzICAgICVzICAgICVzfQoALy8qKiogcG9seWdvbgoAICAgIHRvbGVyYW5jZSAwLjEKICAgICVzICAgICVzICAgICVzICAgICVzfQoAcG9seWdvbiB7ICVkLAoAPCU5LjNmLCAlOS4zZiwgJTkuM2Y+ACVzCiAgICAlcwAKICAgICVzICAgICVzICAgICVzICAgICVzfQoALy8qKiogZWxsaXBzZQoAdG9ydXMgeyAlLjNmLCAlLjNmCiAgICAlcyAgICAlcyAgICAlcyAgICAlc30KAHNwaGVyZSB7PCU5LjNmLCAlOS4zZiwgJTkuM2Y+LCAxLjAKICAgICVzICAgICVzICAgICVzICAgICVzfQoALy8qKiogdGV4dHNwYW46ICVzLCBmb250c2l6ZSA9ICUuM2YsIGZvbnRuYW1lID0gJXMKAHNjYWxlICUuM2YKAHRleHQgewogICAgdHRmICIlcyIsCiAgICAiJXMiLCAlLjNmLCAlLjNmCiAgICAlcyAgICAlcyAgICAlcyAgICAlcyAgICAlc30KACAgICBub19zaGFkb3cKAC8vKioqIGVuZF9lZGdlCgAvLyoqKiBiZWdpbl9lZGdlCgAvLyoqKiBlbmRfbm9kZQoALy8qKiogYmVnaW5fbm9kZTogJXMKAC8vKioqIGVuZF9jbHVzdGVyCgAvLyoqKiBiZWdpbl9jbHVzdGVyCgAvLyoqKiBlbmRfcGFnZQoALy8qKiogYmVnaW5fcGFnZQoALy8qKiogZW5kX2xheWVyCgAvLyoqKiBiZWdpbl9sYXllcjogJXMsICVkLyVkCgAvLyoqKiBlbmRfZ3JhcGgKAC8vKioqIGJlZ2luX2dyYXBoICVzCgBjYW1lcmEgeyBsb2NhdGlvbiA8JS4zZiAsICUuM2YgLCAlLjNmPgogICAgICAgICBsb29rX2F0ICA8JS4zZiAsICUuM2YgLCAlLjNmPgogICAgICAgICByaWdodCB4ICogaW1hZ2Vfd2lkdGggLyBpbWFnZV9oZWlnaHQKICAgICAgICAgYW5nbGUgJS4zZgp9CgAvL3NreQpwbGFuZSB7IDwwLCAxLCAwPiwgMSBob2xsb3cKICAgIHRleHR1cmUgewogICAgICAgIHBpZ21lbnQgeyBib3pvIHR1cmJ1bGVuY2UgMC45NQogICAgICAgICAgICBjb2xvcl9tYXAgewogICAgICAgICAgICAgICAgWzAuMDAgcmdiIDwwLjA1LCAwLjIwLCAwLjUwPl0KICAgICAgICAgICAgICAgIFswLjUwIHJnYiA8MC4wNSwgMC4yMCwgMC41MD5dCiAgICAgICAgICAgICAgICBbMC43NSByZ2IgPDEuMDAsIDEuMDAsIDEuMDA+XQogICAgICAgICAgICAgICAgWzAuNzUgcmdiIDwwLjI1LCAwLjI1LCAwLjI1Pl0KICAgICAgICAgICAgICAgIFsxLjAwIHJnYiA8MC41MCwgMC41MCwgMC41MD5dCiAgICAgICAgICAgIH0KICAgICAgICAgICAgc2NhbGUgPDEuMDAsIDEuMDAsIDEuNTA+ICogMi41MAogICAgICAgICAgICB0cmFuc2xhdGUgPDAuMDAsIDAuMDAsIDAuMDA+CiAgICAgICAgfQogICAgICAgIGZpbmlzaCB7IGFtYmllbnQgMSBkaWZmdXNlIDAgfQogICAgfQogICAgc2NhbGUgMTAwMDAKfQovL21pc3QKZm9nIHsgZm9nX3R5cGUgMgogICAgZGlzdGFuY2UgNTAKICAgIGNvbG9yIHJnYiA8MS4wMCwgMS4wMCwgMS4wMD4gKiAwLjc1CiAgICBmb2dfb2Zmc2V0IDAuMTAKICAgIGZvZ19hbHQgMS41MAogICAgdHVyYnVsZW5jZSAxLjc1Cn0KLy9nbmQKcGxhbmUgeyA8MC4wMCwgMS4wMCwgMC4wMD4sIDAKICAgIHRleHR1cmUgewogICAgICAgIHBpZ21lbnR7IGNvbG9yIHJnYiA8MC4yNSwgMC40NSwgMC4wMD4gfQogICAgICAgIG5vcm1hbCB7IGJ1bXBzIDAuNzUgc2NhbGUgMC4wMSB9CiAgICAgICAgZmluaXNoIHsgcGhvbmcgMC4xMCB9CiAgICB9Cn0KAGxpZ2h0X3NvdXJjZSB7IDwxNTAwLDMwMDAsLTI1MDA+IGNvbG9yIFdoaXRlIH0KACN2ZXJzaW9uIDMuNjsKAGdsb2JhbF9zZXR0aW5ncyB7IGFzc3VtZWRfZ2FtbWEgMS4wIH0KACNkZWZhdWx0IHsgZmluaXNoIHsgYW1iaWVudCAwLjEgZGlmZnVzZSAwLjkgfSB9CgAjaW5jbHVkZSAiY29sb3JzLmluYyIKI2luY2x1ZGUgInRleHR1cmVzLmluYyIKI2luY2x1ZGUgInNoYXBlcy5pbmMiCgAjZGVjbGFyZSAlcyA9ICVzOwoAQmxhY2sAV2hpdGUAYmFrZXJzY2hvYwBicmFzcwBicmlnaHRnb2xkAGJyb256ZQBicm9uemUyAGNsZWFyAGNvb2xjb3BwZXIAY29wcGVyAGRhcmticm93bgBkYXJrcHVycGxlAGRhcmt0YW4AZGFya3dvb2QAZGtncmVlbmNvcHBlcgBkdXN0eXJvc2UAZmVsZHNwYXIAZmxlc2gAZ3JheTA1AGdyZWVuY29wcGVyAGh1bnRlcnNncmVlbgBsaWdodF9wdXJwbGUAbGlnaHR3b29kAG1hbmRhcmlub3JhbmdlAG1lZGl1bWZvcmVzdGdyZWVuAG1lZGl1bWdvbGRlbnJvZABtZWRpdW13b29kAG1lZF9wdXJwbGUAbWljYQBuZW9uYmx1ZQBuZW9ucGluawBuZXdtaWRuaWdodGJsdWUAbmV3dGFuAG9sZGdvbGQAcXVhcnR6AHJpY2hibHVlAHNjYXJsZXQAc2VtaVN3ZWV0Q2hvYwBzaWx2ZXIAc3BpY3lwaW5rAHN1bW1lcnNreQB2ZXJ5ZGFya2Jyb3duAHZlcnlfbGlnaHRfcHVycGxlAHBvdgBwb3Y6cG92ACVzICVzCgAuXCIgACAlZCAlZAAgJXMKACAlZABmaWxsIABlbGxpcHNlIGF0dHJzJWQgJXN3aWQgJS41ZiBodCAlLjVmIGF0ICglLjVmLCUuNWYpOwoALmZ0ICVzCgAucHMgJWQqXG4oU0Z1LyUuMGZ1CgAiJXMiIGF0ICglLjVmLCUuNWYpOwoAJTAzbwAlcyVzIGlzIG5vdCBhIHRyb2ZmIGZvbnQKAGRvdCBwaWMgcGx1Z2luOiAAUgBdCi5QRQoALlBTICUuNWYgJS41ZgoAJXMgdG8gY2hhbmdlIGRyYXdpbmcgc2l6ZSwgbXVsdGlwbHkgdGhlIHdpZHRoIGFuZCBoZWlnaHQgb24gdGhlIC5QUyBsaW5lIGFib3ZlIGFuZCB0aGUgbnVtYmVyIG9uIHRoZSB0d28gbGluZXMgYmVsb3cgKHJvdW5kZWQgdG8gdGhlIG5lYXJlc3QgaW50ZWdlcikgYnkgYSBzY2FsZSBmYWN0b3IKAC5uciBTRiAlLjBmCnNjYWxldGhpY2tuZXNzID0gJS4wZgoAJXMgZG9uJ3QgY2hhbmdlIGFueXRoaW5nIGJlbG93IHRoaXMgbGluZSBpbiB0aGlzIGRyYXdpbmcKACVzIG5vbi1mYXRhbCBydW4tdGltZSBwaWMgdmVyc2lvbiBkZXRlcm1pbmF0aW9uLCB2ZXJzaW9uIDIKAGJveHJhZD0yLjAgJXMgd2lsbCBiZSByZXNldCB0byAwLjAgYnkgZ3BpYyBvbmx5CgBzY2FsZT0xLjAgJXMgcmVxdWlyZWQgZm9yIGNvbXBhcmlzb25zCgAlcyBib3hyYWQgaXMgbm93IDAuMCBpbiBncGljLCBlbHNlIGl0IHJlbWFpbnMgMi4wCgAlcyBkYXNod2lkIGlzIDAuMSBpbiAxMHRoIEVkaXRpb24sIDAuMDUgaW4gRFdCIDIgYW5kIGluIGdwaWMKACVzIGZpbGx2YWwgaXMgMC4zIGluIDEwdGggRWRpdGlvbiAoZmlsbCAwIG1lYW5zIGJsYWNrKSwgMC41IGluIGdwaWMgKGZpbGwgMCBtZWFucyB3aGl0ZSksIHVuZGVmaW5lZCBpbiBEV0IgMgoAJXMgZmlsbCBoYXMgbm8gbWVhbmluZyBpbiBEV0IgMiwgZ3BpYyBjYW4gdXNlIGZpbGwgb3IgZmlsbGVkLCAxMHRoIEVkaXRpb24gdXNlcyBmaWxsIG9ubHkKACVzIERXQiAyIGRvZXNuJ3QgdXNlIGZpbGwgYW5kIGRvZXNuJ3QgZGVmaW5lIGZpbGx2YWwKACVzIHJlc2V0IHdvcmtzIGluIGdwaWMgYW5kIDEwdGggZWRpdGlvbiwgYnV0IGlzbid0IGRlZmluZWQgaW4gRFdCIDIKACVzIERXQiAyIGNvbXBhdGliaWxpdHkgZGVmaW5pdGlvbnMKAGlmIGJveHJhZCA+IDEuMCAmJiBkYXNod2lkIDwgMC4wNzUgdGhlbiBYCglmaWxsdmFsID0gMTsKCWRlZmluZSBmaWxsIFkgWTsKCWRlZmluZSBzb2xpZCBZIFk7CglkZWZpbmUgcmVzZXQgWSBzY2FsZT0xLjAgWTsKWAoAcmVzZXQgJXMgc2V0IHRvIGtub3duIHN0YXRlCgAlcyBHTlUgcGljIHZzLiAxMHRoIEVkaXRpb24gZFwoZSd0ZW50ZQoAaWYgZmlsbHZhbCA+IDAuNCB0aGVuIFgKCWRlZmluZSBzZXRmaWxsdmFsIFkgZmlsbHZhbCA9IDEgLSBZOwoJZGVmaW5lIGJvbGQgWSB0aGlja25lc3MgMiBZOwoACSVzIGlmIHlvdSB1c2UgZ3BpYyBhbmQgaXQgYmFyZnMgb24gZW5jb3VudGVyaW5nICJzb2xpZCIsCgAJJXMJaW5zdGFsbCBhIG1vcmUgcmVjZW50IHZlcnNpb24gb2YgZ3BpYyBvciBzd2l0Y2ggdG8gRFdCIG9yIDEwdGggRWRpdGlvbiBwaWM7CgAJJXMJc29ycnksIHRoZSBncm9mZiBmb2xrcyBjaGFuZ2VkIGdwaWM7IHNlbmQgYW55IGNvbXBsYWludCB0byB0aGVtOwoAWCBlbHNlIFoKCWRlZmluZSBzZXRmaWxsdmFsIFkgZmlsbHZhbCA9IFk7CglkZWZpbmUgYm9sZCBZIFk7CglkZWZpbmUgZmlsbGVkIFkgZmlsbCBZOwpaCgAlcyBhcnJvd2hlYWQgaGFzIG5vIG1lYW5pbmcgaW4gRFdCIDIsIGFycm93aGVhZCA9IDcgbWFrZXMgZmlsbGVkIGFycm93aGVhZHMgaW4gZ3BpYyBhbmQgaW4gMTB0aCBFZGl0aW9uCgAlcyBhcnJvd2hlYWQgaXMgdW5kZWZpbmVkIGluIERXQiAyLCBpbml0aWFsbHkgMSBpbiBncGljLCAyIGluIDEwdGggRWRpdGlvbgoAYXJyb3doZWFkID0gNyAlcyBub3QgdXNlZCBieSBncmFwaHZpegoAJXMgR05VIHBpYyBzdXBwb3J0cyBhIGJveHJhZCB2YXJpYWJsZSB0byBkcmF3IGJveGVzIHdpdGggcm91bmRlZCBjb3JuZXJzOyBEV0IgYW5kIDEwdGggRWQuIGRvIG5vdAoAYm94cmFkID0gMCAlcyBubyByb3VuZGVkIGNvcm5lcnMgaW4gZ3JhcGh2aXoKACVzIEdOVSBwaWMgc3VwcG9ydHMgYSBsaW5ldGhpY2sgdmFyaWFibGUgdG8gc2V0IGxpbmUgdGhpY2tuZXNzOyBEV0IgYW5kIDEwdGggRWQuIGRvIG5vdAoAbGluZXRoaWNrID0gMDsgb2xkbGluZXRoaWNrID0gbGluZXRoaWNrCgAlcyAuUFMgdy9vIGFyZ3MgY2F1c2VzIEdOVSBwaWMgdG8gc2NhbGUgZHJhd2luZyB0byBmaXQgOC41eDExIHBhcGVyOyBEV0IgZG9lcyBub3QKACVzIG1heHBzaHQgYW5kIG1heHBzd2lkIGhhdmUgbm8gbWVhbmluZyBpbiBEV0IgMi4wLCBzZXQgcGFnZSBib3VuZGFyaWVzIGluIGdwaWMgYW5kIGluIDEwdGggRWRpdGlvbgoAJXMgbWF4cHNodCBhbmQgbWF4cHN3aWQgYXJlIHByZWRlZmluZWQgdG8gMTEuMCBhbmQgOC41IGluIGdwaWMKAG1heHBzaHQgPSAlZgptYXhwc3dpZCA9ICVmCgBEb3Q6IFsKAGRlZmluZSBhdHRyczAgJSUgJSU7IGRlZmluZSB1bmZpbGxlZCAlJSAlJTsgZGVmaW5lIHJvdW5kZWQgJSUgJSU7IGRlZmluZSBkaWFnb25hbHMgJSUgJSUKACVzJXMgdW5zdXBwb3J0ZWQKACVzIHJlc3RvcmUgcG9pbnQgc2l6ZSBhbmQgZm9udAoucHMgXG4oLlMKLmZ0IFxuKERGCgAlcyBDcmVhdG9yOiAlcyB2ZXJzaW9uICVzICglcykKACVzIFRpdGxlOiAlcwoAJXMgc2F2ZSBwb2ludCBzaXplIGFuZCBmb250Ci5uciAuUyBcbigucwoubnIgREYgXG4oLmYKAHBpYwBwaWM6cGljAHBuZzpzdmcAZ2lmOnN2ZwBqcGVnOnN2ZwBqcGU6c3ZnAGpwZzpzdmcAcG5nOmZpZwBnaWY6ZmlnAGpwZWc6ZmlnAGpwZTpmaWcAanBnOmZpZwBwbmc6dnJtbABnaWY6dnJtbABqcGVnOnZybWwAanBlOnZybWwAanBnOnZybWwAZXBzOnBzAHBzOnBzAChsaWIpOnBzAHBuZzptYXAAZ2lmOm1hcABqcGVnOm1hcABqcGU6bWFwAGpwZzptYXAAcHM6bWFwAGVwczptYXAAc3ZnOm1hcABwbmc6ZG90AGdpZjpkb3QAanBlZzpkb3QAanBlOmRvdABqcGc6ZG90AHBzOmRvdABlcHM6ZG90AHN2Zzpkb3QAcG5nOnhkb3QAZ2lmOnhkb3QAanBlZzp4ZG90AGpwZTp4ZG90AGpwZzp4ZG90AHBzOnhkb3QAZXBzOnhkb3QAc3ZnOnhkb3QAc3ZnOnN2ZwBwbmc6dm1sAGdpZjp2bWwAanBlZzp2bWwAanBlOnZtbABqcGc6dm1sAGdpZjp0awBpbWFnZSBjcmVhdGUgcGhvdG8gInBob3RvXyVzIiAtZmlsZSAiJXMiCgAkYyBjcmVhdGUgaW1hZ2UgJS4yZiAlLjJmIC1pbWFnZSAicGhvdG9fJXMiCgA8djppbWFnZSBzcmM9IiVzIiBzdHlsZT0iIHBvc2l0aW9uOmFic29sdXRlOyB3aWR0aDolLjJmOyBoZWlnaHQ6JS4yZjsgbGVmdDolLjJmIDsgdG9wOiUuMmYiACAvPgoAZ3Zsb2FkaW1hZ2VfY29yZS5jAGNvcmVfbG9hZGltYWdlX3BzbGliAFsgACVnICVnIABdICAlZCB0cnVlICVzCgBdICAlZCBmYWxzZSAlcwoAY29yZV9sb2FkaW1hZ2VfcHMAZ3NhdmUgJWcgJWcgdHJhbnNsYXRlIG5ld3BhdGgKAHVzZXJfc2hhcGVfJWQKAGdyZXN0b3JlCgBjb3JlX2xvYWRpbWFnZV92cm1sAFNoYXBlIHsKACAgYXBwZWFyYW5jZSBBcHBlYXJhbmNlIHsKACAgICBtYXRlcmlhbCBNYXRlcmlhbCB7CgAgICAgICBhbWJpZW50SW50ZW5zaXR5IDAuMzMKACAgICAgICAgZGlmZnVzZUNvbG9yIDEgMSAxCgAgICAgfQoAICAgIHRleHR1cmUgSW1hZ2VUZXh0dXJlIHsgdXJsICIlcyIgfQoAICB9CgBjb3JlX2xvYWRpbWFnZV9maWcAJWQgJWQgJWQgJWQgJWQgJWQgJWQgJWQgJWQgJS4xZiAlZCAlZCAlZCAlZCAlZCAlZAogJWQgJXMKACAlZCAlZCAlZCAlZCAlZCAlZCAlZCAlZCAlZCAlZAoAY29yZV9sb2FkaW1hZ2Vfc3ZnADxpbWFnZSB4bGluazpocmVmPSIAIiB3aWR0aD0iJWdweCIgaGVpZ2h0PSIlZ3B4IiBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJ4TWlkWU1pZCBtZWV0IiB4PSIlZyIgeT0iJWciACB0cmFuc2Zvcm09InJvdGF0ZSglZCAlZyAlZykiACIgd2lkdGg9IiVncHgiIGhlaWdodD0iJWdweCIgcHJlc2VydmVBc3BlY3RSYXRpbz0ieE1pbllNaW4gbWVldCIgeD0iJWciIHk9IiVnIgAvPgoAZG90X2xheW91dABwaGFzZQBkb3QgZG9lcyBub3Qgc3VwcG9ydCB0aGUgYXNwZWN0IGF0dHJpYnV0ZSBmb3IgZGlzY29ubmVjdGVkIGdyYXBocyBvciBncmFwaHMgd2l0aCBjbHVzdGVycwoAY29tcG91bmQAdiA9PSBuAGRvdGluaXQuYwByZW1vdmVfZnJvbV9yYW5rAG9yZGVyAGVkZ2UgbGFiZWxzIHdpdGggc3BsaW5lcz1jdXJ2ZWQgbm90IHN1cHBvcnRlZCBpbiBkb3QgLSB1c2UgeGxhYmVscwoARURfbGFiZWwoZmUpAGRvdHNwbGluZXMuYwBfZG90X3NwbGluZXMAZmxhdCBlZGdlIGJldHdlZW4gYWRqYWNlbnQgbm9kZXMgb25lIG9mIHdoaWNoIGhhcyBhIHJlY29yZCBzaGFwZSAtIHJlcGxhY2UgcmVjb3JkcyB3aXRoIEhUTUwtbGlrZSBsYWJlbHMKACAgRWRnZSAlcyAlcyAlcwoAeHh4ADEwMDAwAHslc30AYXV4ZwBsYWJlbF9mbG9hdABmaXhlZAAobCA9IEVEX2xhYmVsKGZlKSkAc2V0RWRnZUxhYmVsUG9zAGUgIT0gTlVMTABmYXN0Z3IuYwBkZWxldGVfZmFzdF9lZGdlAG4gIT0gTkRfbmV4dChuKQBmYXN0X25vZGUAdSAhPSB2AGZhc3Rfbm9kZWFwcABORF9uZXh0KHYpID09IE5VTEwAZmluZF9mYXN0X25vZGUoZywgbikAZGVsZXRlX2Zhc3Rfbm9kZQBkZWxldGVfZmxhdF9lZGdlAG1lcmdlX29uZXdheSBnbGl0Y2gKAG1lcmdlX29uZXdheQBzYWZlX2RlbGV0ZV9mYXN0X2VkZ2UAbGcAY29tcABjbnQgPT0gc3oAbWluY3Jvc3MuYwBmaXhMYWJlbE9yZGVyAHJlbWluY3Jvc3MAbWluY3Jvc3MgJXM6ICVkIGNyb3NzaW5ncywgJS4yZiBzZWNzLgoAdgBuZWlnaGJvcgAocnYgPT0gMCkgfHwgKE5EX29yZGVyKHJ2KS1ORF9vcmRlcih2KSkqZGlyID4gMABjb25zdHJhaW5pbmdfZmxhdF9lZGdlKGcsdixlKSA9PSBGQUxTRQBmbGF0X3Jlb3JkZXIATkRfcmFuayh2KSA9PSByAHBvc3RvcmRlcgBmbGF0aW5kZXgoYWdoZWFkKGUpKSA8IE0tPm5yb3dzAGZsYXRfc2VhcmNoAGZsYXRpbmRleChhZ3RhaWwoZSkpIDwgTS0+bmNvbHMAb3V0AG9yZGVyaW5nICclcycgbm90IHJlY29nbml6ZWQuCgBvcmRlcmluZyAnJXMnIG5vdCByZWNvZ25pemVkIGZvciBub2RlICclcycuCgBtZXJnZTI6IGdyYXBoICVzLCByYW5rICVkIGhhcyBvbmx5ICVkIDwgJWQgbm9kZXMKAG1pbmNyb3NzOiBwYXNzICVkIGl0ZXIgJWQgdHJ5aW5nICVkIGN1cl9jcm9zcyAlZCBiZXN0X2Nyb3NzICVkCgBORF9vcmRlcih2KSA8IE5EX29yZGVyKHcpAGJhbGFuY2UAdHJhbnNwb3NlX3N0ZXAAc3VycHJpc2UKAGluc3RhbGxfaW5fcmFuaywgbGluZSAlZDogJXMgJXMgcmFuayAlZCBpID0gJWQgYW4gPSAwCgBHRF9yYW5rKGcpW3JdLm4gPD0gR0RfcmFuayhnKVtyXS5hbgBpbnN0YWxsX2luX3JhbmsAaW5zdGFsbF9pbl9yYW5rLCBsaW5lICVkOiBORF9vcmRlciglcykgWyVkXSA+IEdEX3JhbmsoUm9vdClbJWRdLmFuIFslZF0KAGluc3RhbGxfaW5fcmFuaywgbGluZSAlZDogcmFuayAlZCBub3QgaW4gcmFuayByYW5nZSBbJWQsJWRdCgBpbnN0YWxsX2luX3JhbmssIGxpbmUgJWQ6IEdEX3JhbmsoZylbJWRdLnYgKyBORF9vcmRlciglcykgWyVkXSA+IEdEX3JhbmsoZylbJWRdLmF2ICsgR0RfcmFuayhSb290KVslZF0uYW4gWyVkXQoAX25ld19yYW5rAG1jbGltaXQAcmFuayhnLCAyLCBuc2l0ZXIyKGcpKSA9PSAwAHBvc2l0aW9uLmMAZG90X3Bvc2l0aW9uAEFSPSUwLjRsZgkgQXJlYT0gJTAuNGxmCQBEdW1teT0lZAoAR29pbmcgdG8gYXBwbHkgYW5vdGhlciBleHBhbnNpb24uCgBuZXh0I2l0ZXI9JWQKAGhwAGNvbm5lY3RHcmFwaABFZGdlIGxlbmd0aCAlZiBsYXJnZXIgdGhhbiBtYXhpbXVtICV1IGFsbG93ZWQuCkNoZWNrIGZvciBvdmVyd2lkZSBub2RlKHMpLgoAbnNsaW1pdABjb250YWluX25vZGVzIGNsdXN0ICVzIHJhbmsgJWQgbWlzc2luZyBub2RlCgBuc2xpbWl0MQBuZXdyYW5rAE1heHJhbmsgPSAlZCwgbWlucmFuayA9ICVkCgBsZWFkZXIgIT0gTlVMTAByYW5rLmMAY2x1c3Rlcl9sZWFkZXIAKE5EX1VGX3NpemUobikgPD0gMSkgfHwgKG4gPT0gbGVhZGVyKQBhZ2hlYWQoZSkgPT0gVUZfZmluZChhZ2hlYWQoZSkpAG1pbm1heF9lZGdlcwBhZ3RhaWwoZSkgPT0gVUZfZmluZChhZ3RhaWwoZSkpAHJhbmsAc2FtZQBtaW4Ac291cmNlAG1heABzaW5rAGxldmVsIGFzc2lnbm1lbnQgY29uc3RyYWludHMAbGV2ZWwgZ3JhcGggcmVjAH9yb290AH90b3AAf2JvdABjb21wYWN0AF93ZWFrXyVkAHJhbmtpbmc6IGZhaWx1cmUgdG8gY3JlYXRlIHN0cm9uZyBjb25zdHJhaW50IGVkZ2UgYmV0d2VlbiBub2RlcyAlcyBhbmQgJXMKACVzIGhhcyB1bnJlY29nbml6ZWQgcmFuaz0lcwBsZXZlbCBlZGdlIHJlYwBsZXZlbCBub2RlIHJlYwBzYW1laGVhZABzYW1ldGFpbAB0b28gbWFueSAoPiAlZCkgc2FtZXtoZWFkLHRhaWx9IGdyb3VwcyBmb3Igbm9kZSAlcwoAY29tYmlBUiA9ICVsZgoAJWxmLCVkAHRoZSBhc3BlY3QgYXR0cmlidXRlIGhhcyBiZWVuIGRpc2FibGVkIGR1ZSB0byBpbXBsZW1lbnRhdGlvbiBmbGF3cyAtIGF0dHJpYnV0ZSBpZ25vcmVkLgoARURfdG9fdmlydChlKSA9PSBOVUxMAGNsYXNzMi5jAG1lcmdlX2NoYWluAEVEX3RvX3ZpcnQob3JpZykgPT0gTlVMTABtYWtlX2NoYWluAEVEX3RvX3ZpcnQob3JpZykgIT0gTlVMTABORF9yYW5rKGZyb20pIDwgTkRfcmFuayh0bykAY2x1c3Rlci5jAG1hcF9wYXRoACVzIHdhcyBhbHJlYWR5IGluIGEgcmFua3NldCwgZGVsZXRlZCBmcm9tIGNsdXN0ZXIgJXMKAGxoZWFkAGx0YWlsACVzIC0+ICVzOiBzcGxpbmUgc2l6ZSA+IDEgbm90IHN1cHBvcnRlZAoAJXMgLT4gJXM6IGhlYWQgbm90IGluc2lkZSBoZWFkIGNsdXN0ZXIgJXMKACVzIC0+ICVzOiB0YWlsIGlzIGluc2lkZSBoZWFkIGNsdXN0ZXIgJXMKAGJlei0+c2ZsYWcAY29tcG91bmQuYwBtYWtlQ29tcG91bmRFZGdlAGJlei0+ZWZsYWcAJXMgLT4gJXM6IHRhaWwgbm90IGluc2lkZSB0YWlsIGNsdXN0ZXIgJXMKACVzIC0+ICVzOiBoZWFkIGlzIGluc2lkZSB0YWlsIGNsdXN0ZXIgJXMKAHNlZ21lbnQgWyVzLCVzXSBkb2VzIG5vdCBpbnRlcnNlY3QgYm94IGxsPSVzLHVyPSVzCgBib3hJbnRlcnNlY3RmACglLjVnLCUuNWcpAGNsdXN0ZXIgbmFtZWQgJXMgbm90IGZvdW5kCgBjb25jZW50cmF0ZT10cnVlIG1heSBub3Qgd29yayBjb3JyZWN0bHkuCgByZWJ1aWx0ZF92bGlzdHM6IHJhbmsgbGVhZCAlcyBub3QgaW4gb3JkZXIgJWQgb2YgcmFuayAlZAoAZGVnZW5lcmF0ZSBjb25jZW50cmF0ZWQgcmFuayAlcywlZAoATkRfaW4ocmlnaHQpLnNpemUgKyBORF9vdXQocmlnaHQpLnNpemUgPT0gMABjb25jLmMAbWVyZ2V2aXJ0dWFsAGRvdDogT3V0IG9mIG1lbW9yeQoATkRfb3V0KHYpLnNpemUgPT0gMgBmbGF0LmMAc2V0Ym91bmRzAEdEX21pbnJhbmsoZykgPT0gMABhYm9taW5hdGlvbgBuZWF0b19sYXlvdXQAbmVhdG8AZmRwAHNmZHAAdHdvcGkAY2lyY28AcGF0Y2h3b3JrAG9zYWdlAG5vcABub3AxAG5vcDIAJWxmLCVsZiwlbGYlYwBub2RlICVzLCBwb3NpdGlvbiAlcywgZXhwZWN0ZWQgdHdvIGRvdWJsZXMKAG5vdHJhbnNsYXRlAG5vZGUgJXMgaW4gZ3JhcGggJXMgaGFzIG5vIHBvc2l0aW9uCgBzLCVsZiwlbGYlbgAgZSwlbGYsJWxmJW4AcG9zIGF0dHJpYnV0ZSBmb3IgZWRnZSAoJXMsJXMpIGRvZXNuJ3QgaGF2ZSAzbisxIHBvaW50cwoAJWxmLCVsZiVuAHN5bnRheCBlcnJvciBpbiBwb3MgYXR0cmlidXRlIGZvciBlZGdlICglcywlcykKACVsZiwlbGYsJWxmLCVsZgBzdGFydABzZWxmAHJhbmRvbQBub2RlIHBvc2l0aW9ucyBhcmUgaWdub3JlZCB1bmxlc3Mgc3RhcnQ9cmFuZG9tCgBhcyByZXF1aXJlZCBieSB0aGUgLW4gZmxhZwoAX25lYXRvX2NjAGdyYXBoICVzIGlzIGRpc2Nvbm5lY3RlZC4gSGVuY2UsIHRoZSBjaXJjdWl0IG1vZGVsCgBBbHRlcm5hdGl2ZWx5LCBjb25zaWRlciBydW5uaW5nIG5lYXRvIHVzaW5nIC1HcGFjaz10cnVlIG9yIGRlY29tcG9zaW5nCgB0aGUgZ3JhcGggaW50byBjb25uZWN0ZWQgY29tcG9uZW50cy4KAFNvbHZpbmcgbW9kZWwgJWQgaXRlcmF0aW9ucyAlZCB0b2wgJWYKAE5EX2lkKG5wKSA9PSBpAG5lYXRvaW5pdC5jAG1ha2VHcmFwaERhdGEAZiA8IGdyYXBoW2pdLm5lZGdlcwBkZnNDeWNsZQBtb2RlbCAlZCBzbWFydF9pbml0ICVkIHN0cmVzc3d0ICVkIGl0ZXJhdGlvbnMgJWQgdG9sICVmCgBjb252ZXJ0IGdyYXBoOiAAbWFqb3JpemF0aW9uCgAlZCBub2RlcyAlLjJmIHNlYwoAbGV2ZWxzZ2FwAGxheW91dCBhYm9ydGVkCgBzdHJlc3N3dAAlcyBhdHRyaWJ1dGUgdmFsdWUgbXVzdCBiZSAxIG9yIDIgLSBpZ25vcmluZwoAbW9kZWwAY2lyY3VpdABzdWJzZXQAc2hvcnRwYXRoAG1kcwBlZGdlcyBpbiBncmFwaCAlcyBoYXZlIG5vIGxlbiBhdHRyaWJ1dGUuIEhlbmNlLCB0aGUgbWRzIG1vZGVsCgBpcyBpbmFwcHJvcHJpYXRlLiBSZXZlcnRpbmcgdG8gdGhlIHNob3J0ZXN0IHBhdGggbW9kZWwuCgBVbmtub3duIHZhbHVlICVzIGZvciBhdHRyaWJ1dGUgIm1vZGVsIiBpbiBncmFwaCAlcyAtIGlnbm9yZWQKAG1vZGUAS0sAbWFqb3IAaGllcgBJbGxlZ2FsIHZhbHVlICVzIGZvciBhdHRyaWJ1dGUgIm1vZGUiIGluIGdyYXBoICVzIC0gaWdub3JlZAoAbWFrZVNwbGluZTogZmFpbGVkIHRvIG1ha2Ugc3BsaW5lIGVkZ2UgKCVzLCVzKQoAc3BsaW5lICVzICVzCgBiID09IG4AbmVhdG9zcGxpbmVzLmMAbWFrZV9iYXJyaWVycwB0aGUgYm91bmRpbmcgYm94ZXMgb2Ygc29tZSBub2RlcyB0b3VjaCAtIGZhbGxpbmcgYmFjayB0byBzdHJhaWdodCBsaW5lIGVkZ2VzCgBzb21lIG5vZGVzIHdpdGggbWFyZ2luICglLjAyZiwlLjAyZikgdG91Y2ggLSBmYWxsaW5nIGJhY2sgdG8gc3RyYWlnaHQgbGluZSBlZGdlcwoAcG9seWxpbmVzAGxpbmUgc2VnbWVudHMAb3J0aG9nb25hbCBsaW5lcwBDcmVhdGluZyBlZGdlcyB1c2luZyAlcwoAcG9seWxpbmUgJXMgJXMKAG1kc01vZGVsOiBkZWx0YSA9ICVmCgBTZXR0aW5nIHVwIHN0cmVzcyBmdW5jdGlvbgBTb2x2aW5nIG1vZGVsOiAACmZpbmFsIGUgPSAlZiAlZCBpdGVyYXRpb25zICUuMmYgc2VjCgBEYW1waW5nAGRlZmF1bHRkaXN0ACBpbiAlcyAtIHNldHRpbmcgdG8gJS4wMmYKAGJhZCBlZGdlIGxlbiAiJXMiAFNldHRpbmcgaW5pdGlhbCBwb3NpdGlvbnMKAHN0YXJ0PSVzIG5vdCBzdXBwb3J0ZWQgd2l0aCBtb2RlPXNlbGYgLSBpZ25vcmVkCgBTZXR0aW5nIHVwIHNwcmluZyBtb2RlbDogACUuMmYgc2VjCgAKZmluYWwgZSA9ICVmACEAICVkJXMgaXRlcmF0aW9ucyAlLjJmIHNlYwoATWF4LiBpdGVyYXRpb25zICglZCkgcmVhY2hlZCBvbiBncmFwaCAlcwoAJXMgJS4zZgoAJS4zZiAATkRfaGVhcGluZGV4KHYpIDwgMABzdHVmZi5jAG5lYXRvX2VucXVldWUAQ2FsY3VsYXRpbmcgc2hvcnRlc3QgcGF0aHM6IABzcGVjaWZpZWQgcm9vdCBub2RlICIlcyIgd2FzIG5vdCBmb3VuZC4AVXNpbmcgZGVmYXVsdCBjYWxjdWxhdGlvbiBmb3Igcm9vdCBub2RlCgByZXBvc2l0aW9uICVzCgAlcyA6ICVmICVmCgAlcyA6ICVmICVmICVmICVmCgAgIABHcmFwaCAlcyBoYXMgYXJyYXkgcGFja2luZyB3aXRoIHVzZXIgdmFsdWVzIGJ1dCBubyAic29ydHYiIGF0dHJpYnV0ZXMgYXJlIGRlZmluZWQuAHBpbgBXYXJuaW5nOiBub2RlICVzLCBwb3NpdGlvbiAlcywgZXhwZWN0ZWQgdHdvIGZsb2F0cwoAY29vcmRzAGxheW91dCAlcwoAZW5kICVzCgBpZHggPT0gc3oAbGF5b3V0LmMAZXhwYW5kQ2x1c3RlcgBpID09IGRlZwBnZXRFZGdlTGlzdABfZGdfJWQAZGVyaXZlIGdyYXBoICVzIG9mICVzCgBub2RlICIlcyIgaXMgY29udGFpbmVkIGluIHR3byBub24tY29tcGFyYWJsZSBjbHVzdGVycyAiJXMiIGFuZCAiJXMiCgBfcG9ydF8lc18lc18lc18lbGQAX3BvcnRfJXNfKCVkKV8oJWQpXyVsZAAlbGYsJWxmLCVsZiwlbGYlYwBncmFwaCAlcywgY29vcmQgJXMsIGV4cGVjdGVkIGZvdXIgZG91YmxlcwoAc3BsaW5lcyBhbmQgY2x1c3RlciBlZGdlcyBub3Qgc3VwcG9ydGVkIC0gdXNpbmcgbGluZSBzZWdtZW50cwoAbWF4aXRlcgBUMABmZHAgZG9lcyBub3Qgc3VwcG9ydCBzdGFydD1zZWxmIC0gaWdub3JpbmcKAHhMYXlvdXQgADk6cHJpc20AdHJpZXMgPSAlZCwgbW9kZSA9ICVzCgBkZXJpdmVkAGluZm8Ac2ZkcCBvbmx5IHN1cHBvcnRzIHN0YXJ0PXJhbmRvbQoASwByZXB1bHNpdmVmb3JjZQBsZXZlbHMAc21vb3RoaW5nAHF1YWR0cmVlAGJlYXV0aWZ5AG92ZXJsYXBfc2hyaW5rAHJvdGF0aW9uAGxhYmVsX3NjaGVtZQBsYWJlbF9zY2hlbWUgPSAlZCA+IDQgOiBpZ25vcmluZwoAZmFzdABhdmdfZGlzdABncmFwaF9kaXN0AHBvd2VyX2Rpc3QAc3ByaW5nAGRpbWVuAGRpbQBzcHJpbmdfZWxlY3RyaWNhbF9jb250cm9sOgoAICByZXB1bHNpdmUgYW5kIGF0dHJhY3RpdmUgZXhwb25lbnRzOiAlLjAzZiAlLjAzZgoAICByYW5kb20gc3RhcnQgJWQgc2VlZCAlZAoAICBLIDogJS4wM2YgQyA6ICUuMDNmCgAgIG1heCBsZXZlbHMgJWQgY29hcnNlbl9zY2hlbWUgJWQgY29hcnNlbl9ub2RlICVkCgAgIHF1YWR0cmVlIHNpemUgJWQgbWF4X2xldmVsICVkCgAgIEJhcm5lcy1IdXR0IGNvbnN0YW50ICUuMDNmIHRvbGVyYW5jZSAgJS4wM2YgbWF4aXRlciAlZAoAICBjb29saW5nICUuMDNmIHN0ZXAgc2l6ZSAgJS4wM2YgYWRhcHRpdmUgJWQKACAgYmVhdXRpZnlfbGVhdmVzICVkIG5vZGUgd2VpZ2h0cyAlZCByb3RhdGlvbiAlLjAzZgoAICBzbW9vdGhpbmcgJXMgb3ZlcmxhcCAlZCBpbml0aWFsX3NjYWxpbmcgJS4wM2YgZG9fc2hyaW5raW5nICVkCgAgIG9jdHJlZSBzY2hlbWUgJXMgbWV0aG9kICVzCgAgIGVkZ2VfbGFiZWxpbmdfc2NoZW1lICVkCgBTUFJJTkdfRUxFQ1RSSUNBTABTUFJJTkdfTUFYRU5UAFNUUkVTU19NQVhFTlQAU1RSRVNTX0FQUFJPWABTVFJFU1MAVU5JRk9STV9TVFJFU1MARlVMTF9TVFJFU1MATk9ORQBOT1JNQUwARkFTVABIWUJSSUQAU1RSRVNTX01BSk9SSVpBVElPTl9HUkFQSF9ESVNUAFNUUkVTU19NQUpPUklaQVRJT05fQVZHX0RJU1QAU1RSRVNTX01BSk9SSVpBVElPTl9QT1dFUl9ESVNUAFNQUklORwBUUklBTkdMRQBSTkcADSAgICAgICAgICAgICAgICBpdGVyID0gJWQsIHN0ZXAgPSAlZiBGbm9ybSA9ICVmIG56ID0gJWQgIEsgPSAlZiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAAc3ByaW5nX2VsZWN0cmljYWxfZW1iZWRkaW5nX3Nsb3cAZG1lYW4gPSAlZiwgcmhvID0gJWYKAHNlbmQgcmFuZG9tIGNvb3JkaW5hdGVzCgBzY2FsaW5nIGZhY3RvciA9ICVmCgBRVUFEX1RSRUVfSFlCUklELCBzaXplIGxhcmdlciB0aGFuICVkLCBzd2l0Y2ggdG8gZmFzdCBxdWFkdHJlZQBjdHJsLT5vdmVybGFwPSVkCgAlZCAlZAoAdW5pZm9ybV9zdHJlc3MuYwBVbmlmb3JtU3RyZXNzU21vb3RoZXJfbmV3AFNwYXJzZU1hdHJpeF9pc19zeW1tZXRyaWMoQiwgRkFMU0UpAHVuaWZvcm1fc3RyZXNzAHxlZGdlbGFiZWx8AGxlbgBub3JtYWxpemUAb3ZlcmxhcABPdmVybGFwIHZhbHVlICIlcyIgdW5zdXBwb3J0ZWQgLSBpZ25vcmVkCgBVbnJlY29nbml6ZWQgb3ZlcmxhcCB2YWx1ZSAiJXMiIC0gdXNpbmcgZmFsc2UKAFZvcm9ub2kAb3ZlcmxhcDogJXMgdmFsdWUgJWQgc2NhbGluZyAlLjA0ZgoAb3ZlcmxhcF9zY2FsaW5nAHZvcm9ub2kAc2NhbGluZwB2cHNjAGlwc2VwAG9zY2FsZQBvbGQgc2NhbGluZwBzY2FsZXh5AHggYW5kIHkgc2NhbGluZwBvcnRobwBvcnRob2dvbmFsIGNvbnN0cmFpbnRzAG9ydGhvX3l4AG9ydGhveHkAeHkgb3J0aG9nb25hbCBjb25zdHJhaW50cwBvcnRob3l4AHl4IG9ydGhvZ29uYWwgY29uc3RyYWludHMAcG9ydGhvAHBzZXVkby1vcnRob2dvbmFsIGNvbnN0cmFpbnRzAHBvcnRob195eABwb3J0aG94eQB4eSBwc2V1ZG8tb3J0aG9nb25hbCBjb25zdHJhaW50cwBwb3J0aG95eAB5eCBwc2V1ZG8tb3J0aG9nb25hbCBjb25zdHJhaW50cwBwcmlzbQBBZGp1c3RpbmcgJXMgdXNpbmcgJXMKAFVuaGFuZGxlZCBhZGp1c3Qgb3B0aW9uICVzCgBOdW1iZXIgb2YgaXRlcmF0aW9ucyA9ICVkCgBOdW1iZXIgb2YgaW5jcmVhc2VzID0gJWQKAG92ZXJsYXAgWyVkXSA6ICVkCgB2b3JvX21hcmdpbgBzZXAAZXNlcABOb2RlIHNlcGFyYXRpb246IGFkZD0lZCAoJWYsJWYpCgAlZiwlZgBzY2FsZSA9ICglLjAzZiwlLjAzZikKAEVkZ2Ugc2VwYXJhdGlvbjogYWRkPSVkICglZiwlZikKAENhbGN1bGF0aW5nIGNpcmN1aXQgbW9kZWwAY29uanVnYXRlX2dyYWRpZW50OiB1bmV4cGVjdGVkIGxlbmd0aCAwIHZlY3RvcgoAQ2FsY3VsYXRpbmcgc3Vic2V0IG1vZGVsAGdyYXBoIGlzIGRpc2Nvbm5lY3RlZC4gSGVuY2UsIHRoZSBjaXJjdWl0IG1vZGVsCgBpcyB1bmRlZmluZWQuIFJldmVydGluZyB0byB0aGUgc2hvcnRlc3QgcGF0aCBtb2RlbC4KAENhbGN1bGF0aW5nIE1EUyBtb2RlbABDYWxjdWxhdGluZyBzaG9ydGVzdCBwYXRocwA6ICUuMmYgc2VjCgBTZXR0aW5nIGluaXRpYWwgcG9zaXRpb25zADogJS4yZiBzZWMAY2cAZGVsdGEgPD0gMHhGRkZGAGNvbnN0cmFpbnQuYwBta05Db25zdHJhaW50RwB2ZwBjb21wcmVzcyAlZyAKAHNjYWxlIGJ5ICVnLCVnIAoAYmVzdGNvc3QgPCBIVUdFX1ZBTABjb21wdXRlU2NhbGVYWQBHcmFwaHZpeiBidWlsdCB3aXRob3V0IGFueSB0cmlhbmd1bGF0aW9uIGxpYnJhcnkKAGRlbGF1bmF5X3RyaWFuZ3VsYXRpb246ICVzCgBkZWxhdW5heV90cmk6ICVzCgB0cnlpbmcgdG8gZGVsZXRlIGEgbm9uLWxpbmUKAAppbnRlcnNlY3Rpb24gYXQgJS4zZiAlLjNmCgBzZWcjJWQgOiAoJS4zZiwgJS4zZikgKCUuM2YsICUuM2YpCgByZW1vdmVfb3ZlcmxhcDogR3JhcGh2aXogbm90IGJ1aWx0IHdpdGggdHJpYW5ndWxhdGlvbiBsaWJyYXJ5CgBtYWtlQWRkUG9seTogdW5rbm93biBzaGFwZSB0eXBlICVzCgBtYWtlUG9seTogdW5rbm93biBzaGFwZSB0eXBlICVzCgB4IT1OVUxMAHNtYXJ0X2luaV94LmMASU1EU19naXZlbl9kaW0AaWxsLWNvbmRpdGlvbmVkAHJvb3QgPSAlcyBtYXggc3RlcHMgdG8gcm9vdCA9ICVkCgB0d29waTogdXNlIG9mIHdlaWdodD0wIGNyZWF0ZXMgZGlzY29ubmVjdGVkIGNvbXBvbmVudC4KAFJhbmsgc2VwYXJhdGlvbiA9IAAlLjAzbGYgAGFyZWEAaW5zZXQAJXMgY29vcmQgJS41ZyAlLjVnIGh0ICVmIHdpZHRoICVmCgAlLjAzZgByZWMgJWYgJWYgJWYgJWYKACVmIC0gJWYgJWYgJWYgJWYgPSAlZiAoJWYgJWYgJWYgJWYpCgB0cnlpbmcgdG8gYWRkIHRvIHJlY3QgeyVmICsvLSAlZiwgJWYgKy8tICVmfQoAdG90YWwgYWRkZWQgc28gZmFyID0gJWQKAGFkZGluZyAlZCBpdGVtcywgdG90YWwgYXJlYSA9ICVmLCB3ID0gJWYsIGFyZWEvdz0lZgoAY29tcG91bmRFZGdlczogY291bGQgbm90IGNvbnN0cnVjdCBvYnN0YWNsZXMgLSBmYWxsaW5nIGJhY2sgdG8gc3RyYWlnaHQgbGluZSBlZGdlcwoAY29tcG91bmRFZGdlczogbm9kZXMgdG91Y2ggLSBmYWxsaW5nIGJhY2sgdG8gc3RyYWlnaHQgbGluZSBlZGdlcwoAcGFjayB2YWx1ZSAlZCBpcyBzbWFsbGVyIHRoYW4gZXNlcCAoJS4wM2YsJS4wM2YpCgBzZXAgdmFsdWUgKCUuMDNmLCUuMDNmKSBpcyBzbWFsbGVyIHRoYW4gZXNlcCAoJS4wM2YsJS4wM2YpCgBjYyVzXyVkAGNjJXMrJWQAY19jbnQgPT0gMABjb21wLmMAZmluZENDb21wAGdyaWQoJWQsJWQpOiAlcwoAd2d0ID4gMABRdWFkVHJlZS5jAFF1YWRUcmVlX3JlcHVsc2l2ZV9mb3JjZV9hY2N1bXVsYXRlAHF0Mi0+biA+IDAAcXQxLT5uID4gMCAmJiBxdDItPm4gPiAwAFF1YWRUcmVlX3JlcHVsc2l2ZV9mb3JjZV9pbnRlcmFjdABkaXN0ID4gMAAhKHEtPmwpAFF1YWRUcmVlX2FkZF9pbnRlcm5hbABpaSA8IDE8PGRpbSAmJiBpaSA+PSAwAHEtPnF0c1tpaV0AcS0+biA9PSAxACEocS0+cXRzKQBxLT5sAHdpZHRoID4gMABRdWFkVHJlZV9uZXcAQS0+Zm9ybWF0ID09IEZPUk1BVF9DU1IAU3BhcnNlTWF0cml4LmMAU3BhcnNlTWF0cml4X3RyYW5zcG9zZQBBICYmIEIAU3BhcnNlTWF0cml4X2FkZABBLT5mb3JtYXQgPT0gQi0+Zm9ybWF0ICYmIEEtPmZvcm1hdCA9PSBGT1JNQVRfQ1NSAEEtPnR5cGUgPT0gQi0+dHlwZQBTcGFyc2VNYXRyaXhfaXNfc3ltbWV0cmljAEEtPmZvcm1hdCA9PSBGT1JNQVRfQ09PUkQAU3BhcnNlTWF0cml4X2Zyb21fY29vcmRpbmF0ZV9mb3JtYXQAbSA+IDAgJiYgbiA+IDAgJiYgbnogPj0gMABTcGFyc2VNYXRyaXhfZnJvbV9jb29yZGluYXRlX2FycmF5c19pbnRlcm5hbABBAGphW21hc2tbamFbal1dXSA9PSBqYVtqXQBTcGFyc2VNYXRyaXhfc3VtX3JlcGVhdF9lbnRyaWVzAGlkIDwgbiooeW1heC15bWluKzEpAGphW21hc2tbaWRdXSA9PSBqYVtqXQBTcGFyc2VNYXRyaXhfbXVsdGlwbHlfZGVuc2UyAEEtPnR5cGUgPT0gTUFUUklYX1RZUEVfUkVBTABTcGFyc2VNYXRyaXhfbXVsdGlwbHlfdmVjdG9yAEEtPnR5cGUgPT0gTUFUUklYX1RZUEVfUkVBTCB8fCBBLT50eXBlID09IE1BVFJJWF9UWVBFX0lOVEVHRVIAU3BhcnNlTWF0cml4X211bHRpcGx5X2RlbnNlMQBTcGFyc2VNYXRyaXhfbXVsdGlwbHkAamNbbWFza1tqYltrXV1dID09IGpiW2tdAFNwYXJzZU1hdHJpeF9tdWx0aXBseTMAamRbbWFza1tqY1trXV1dID09IGpjW2tdAFNwYXJzZU1hdHJpeF9jb29yZGluYXRlX2Zvcm1fYWRkX2VudHJpZXMAU3BhcnNlTWF0cml4X2RpdmlkZV9yb3dfYnlfZGVncmVlAG4gPiAxAGdlbmVyYWwuYwBpcmFuZABvbmVibG9jawBtaW5kaXN0AGFydGljdWxhdGlvbl9wb3MAcm9vdABQcmlvcml0eVF1ZXVlLmMAUHJpb3JpdHlRdWV1ZV9wdXNoAGdhaW4gPD0gcS0+bmdhaW4AU3BhcnNlTWF0cml4X2lzX3N5bW1ldHJpYyhBLCBGQUxTRSkAcG9zdF9wcm9jZXNzLmMAaWRlYWxfZGlzdGFuY2VfbWF0cml4AGxlbiA+IDAAU3RyZXNzTWFqb3JpemF0aW9uU21vb3RoZXIyX25ldwBueiA+IDAAaWRlYWxfZGlzdF9zY2hlbWUgdmFsdWUgd3JvbmcAU3BhcnNlTWF0cml4X2lzX3N5bW1ldHJpYyhBLCBGQUxTRSkgJiYgQS0+dHlwZSA9PSBNQVRSSVhfVFlQRV9SRUFMAFNwYXJzZVN0cmVzc01ham9yaXphdGlvblNtb290aGVyX25ldwBpZGlhZyA+PSAwAFN0cmVzc01ham9yaXphdGlvblNtb290aGVyX3Ntb290aAAoIWpjbikgJiYgKCF2YWwpAGdldF9lZGdlX2xhYmVsX21hdHJpeABUcmlhbmdsZVNtb290aGVyX25ldwBqZGlhZyA+PSAwAFNwcmluZ1Ntb290aGVyX25ldwAhZmxhZwBTcHJpbmdTbW9vdGhlcl9zbW9vdGgAbmVpZ2hiPSVkCgByb290ID0gJXMKAF9ibG9ja18lZABzLT5zeiA+IDAAYmxvY2t0cmVlLmMAcG9wAGFjdHVhbABub2RlbGlzdC5jAGluc2VydE5vZGVsaXN0AF9zcGFuXyVkAF9jbG9uZV8lZABpcABkZWdsaXN0LmMAcmVtb3ZlRGVnbGlzdABFcnJvcgBXYXJuaW5nACVzOiAAdXNlcm91dDogY291bGQgbm90IGFsbG9jYXRlIG1lbW9yeQoAX0FHX3N0cmRhdGEAX0FHX2RhdGFkaWN0AGFnZGljdG9mOiB1bmtub3duIGtpbmQgJWQKACVjJWxkAG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmUAYWdkZWxldGUgb24gd3JvbmcgZ3JhcGgAX0FHX3BlbmRpbmcAYWdyZWNvcmRfY2FsbGJhY2sgb2YgYSBiYWQgb2JqZWN0AHBlbmQgZGljdG9mIGEgYmFkIG9iamVjdABtb3ZlIHRvIGZyb250IGxvY2sgaW5jb25zaXN0ZW5jeQBcXABmYXRhbCBmbGV4IHNjYW5uZXIgaW50ZXJuYWwgZXJyb3ItLW5vIGFjdGlvbiBmb3VuZAAlcwoAZmF0YWwgZmxleCBzY2FubmVyIGludGVybmFsIGVycm9yLS1lbmQgb2YgYnVmZmVyIG1pc3NlZABmYXRhbCBlcnJvciAtIHNjYW5uZXIgaW5wdXQgYnVmZmVyIG92ZXJmbG93AG91dCBvZiBkeW5hbWljIG1lbW9yeSBpbiBhYWdfZ2V0X25leHRfYnVmZmVyKCkAaW5wdXQAc3ludGF4IGFtYmlndWl0eSAtIGJhZGx5IGRlbGltaXRlZCBudW1iZXIgJwAnIGluIGxpbmUgJWQgb2YgACBzcGxpdHMgaW50byB0d28gdG9rZW5zCgAlcwBsaW5lACVkICUxWyJdJW4Ab3V0IG9mIGR5bmFtaWMgbWVtb3J5IGluIGFhZ19jcmVhdGVfYnVmZmVyKCkAb3V0IG9mIGR5bmFtaWMgbWVtb3J5IGluIGFhZ2Vuc3VyZV9idWZmZXJfc3RhY2soKQA6IAAgaW4gbGluZSAlZAAgbmVhciAnACBzY2FubmluZyBhIHF1b3RlZCBzdHJpbmcgKG1pc3NpbmcgZW5kcXVvdGU/IGxvbmdlciB0aGFuICVkPykAClN0cmluZyBzdGFydGluZzoiACBzY2FubmluZyBhIEhUTUwgc3RyaW5nIChtaXNzaW5nICc+Jz8gYmFkIG5lc3Rpbmc/IGxvbmdlciB0aGFuICVkPykAClN0cmluZyBzdGFydGluZzo8ACBzY2FubmluZyBhIC8qLi4uKi8gY29tbWVudCAobWlzc2luZyAnKi8/IGxvbmdlciB0aGFuICVkPykAZmxleCBzY2FubmVyIHB1c2gtYmFjayBvdmVyZmxvdwAiIgBzdHJpY3QAbGluZWxlbmd0aAA7CgAgW2tleT0AXQAgWwAsCgA9AF8lbGRfU1VTUEVDVABkaQBzdHJpY3QgAHsKAF07CgAS7u4UCQPu/u7u7gHu7u4B7u4K/u4TGRXuEwHu7u7uCxHu7u7u7u7u7u4B7u4WCQEBHQ8X7u4aFxvu7hzu7u7uARn77u7uAe4Q7u4e7u7u7gACAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIXEQICAgICAgICAgICAgISEAITAgIWAgICAgICAgICAgICAgICAgICAgICAgICAgIUAhUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg4CDwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIBAgMEBQYHCAkKCwwNCwMEBQ8HAwwNBgwNDgwNGhUWAAEAAwcOBg8IDA0SEyoQEQkQLzARMhcTDRQSLhIUQRMyEyxAKkIZLEJGIgwNDiMPCRARChARyRARLUVG/AEG9g8H9iQCEBEvMDZNTigmOzwqNjE5PT8vOkDYRDA+JTdDNUsrOElMAAMJAAAAAQ4CCwwIIyQlNjs9AA0QEhsWHBInMiIXMx48Bgc1BQ8RFBgpABMpAAAAAAA3FSgdHgAhJjQfMD4ZLAAbACAaKgArOi4vADE4OS0AAgIBAAMDAQABAAEBAQACAQEAAgIDAQEAAAUAAQMBAwUDAQEBAQIAAQAEAgACAQEDAgEAAwIBAAEBAAEBAQMAGBkZGRobHBwdHR4eHx8gICEhIiIjJCQmJyUlKCgpKSkqKisrKywsLS0uLy8wMTEyMzQ2NTc3Nzg4ODk5Ojru7v/u7u7u7u4fIO4A7+7u7gzu7u4IDe7u7vju7u7u7u717v8DCAQhBQsSEycUFRYpMkEXGBkaLDM0QkdIG0ocHS4eTx8ga2V5AGF0dHJpYnV0ZSBtYWNyb3Mgbm90IGltcGxlbWVudGVkACVzOiVzAENvdWxkIG5vdCBvcGVuICIlcyIgZm9yIHdyaXRpbmcgOiAlcwoATm8gbGlieiBzdXBwb3J0LgoALiVkAG5vbmFtZS5ndgBndndyaXRlX25vX3ogcHJvYmxlbSAlZAoAbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZQoATm8gbGlieiBzdXBwb3J0CgBndnByaW50ZjogJXMKAC05OTk5OTk5OTk5OTk5OTkuOTkAZ3JhcGh2aXoAMi40MC4xADIwMTYxMjI1LjAzMDQAcmVuZGVyAGRldmljZQBsb2FkaW1hZ2UAZHluYW1pYyBsb2FkaW5nIG5vdCBhdmFpbGFibGUKAFVzaW5nICVzOiAlczolcwoAZ3Z1c2Vyc2hhcGUuYwBndnVzZXJzaGFwZV9maW5kAGd2dXNlcnNoYXBlX2ZpbGVfYWNjZXNzAEZpbGVuYW1lICIlcyIgaXMgdW5zYWZlCgAlcyB3aGlsZSBvcGVuaW5nICVzCgB1cy0+ZgBndnVzZXJzaGFwZV9vcGVuACIlcyIgd2FzIG5vdCBmb3VuZCBhcyBhIGZpbGUgb3IgYXMgYSBzaGFwZSBsaWJyYXJ5IG1lbWJlcgoAL01lZGlhQm94AChbYS16XVthLXpBLVpdKik9IihbXiJdKikiAGNhbm5vdCBjb21waWxlIHJlZ3VsYXIgZXhwcmVzc2lvbiAlcwAlbGYlMnMAcHQAdmlld0JveAAlbGYgJWxmICVsZiAlbGYAaW4AcHgAcGMAIgBjbQBtbQAlJUJvdW5kaW5nQm94OgAB0NHS09TV1tfY2QA8c3ZnAFdFQlAAd2VicAAobGliKQCJUE5HDQoaCgBwbmcAJSFQUy1BZG9iZS0AQk0AYm1wAEdJRjgAZ2lmAP/Y/+AAanBlZwAlUERGLQBwZGYAxdDTxgBlcHMAPD94bWwAeG1sAFJJRkYAcmlmZgAAAAEAAGljbwAlZCAlZCAlZCAlZABMYXlvdXQgd2FzIG5vdCBkb25lCgBmYWlsdXJlIG1hbGxvYydpbmcgZm9yIHJlc3VsdCBzdHJpbmcAZ2M6IE91dCBvZiBtZW1vcnkKAF9jY18Ab3JpZwBvcABjY29tcHMuYwBtYXBDbHVzdABjY2dyYXBoaW5mbwBjY2dub2RlaW5mbwAoJTRsZCkgJTdsZCBub2RlcyAlN2xkIGVkZ2VzCgAgICAgICAgJTdkIG5vZGVzICU3ZCBlZGdlcyAlN2xkIGNvbXBvbmVudHMgJXMKAGRnAEVycm9yOiBub2RlICIlcyIgYmVsb25ncyB0byB0d28gbm9uLW5lc3RlZCBjbHVzdGVycyAiJXMiIGFuZCAiJXMiCgBzb3J0dgByb3cgbWFqb3IAY29sdW1uIG1ham9yAGFycmF5IHBhY2tpbmc6ICVzICVkIHJvd3MgJWQgY29sdW1ucwoAYmJbJXNdICUuNWcgJS41ZyAlLjVnICUuNWcKAHN0ZXAgc2l6ZSA9ICVkCgBwb3NbJWRdICVkICVkCgBjYyAoJWQgY2VsbHMpIGF0ICglZCwlZCkgKCVkLCVkKQoAY2MgKCVkIGNlbGxzKSBhdCAoJWQsJWQpCgAlcyBuby4gY2VsbHMgJWQgVyAlZCBIICVkCgAgICVkICVkIGNlbGwKAGxpYnBhY2s6IGRpc2MgPSAlZiAoIDwgMCkKAFBhY2tpbmc6IGNvbXB1dGUgZ3JpZCBzaXplCgBhICVmIGIgJWYgYyAlZiBkICVmIHIgJWYKAHJvb3QgJWQgKCVmKSAlZCAoJWYpCgAgcjEgJWYgcjIgJWYKAHBpbmZvAHBhY2suYwBnZXRQYWNrSW5mbwAgIG1hcmdpbiAlZAoAcGFja21vZGUAcGFyc2VQYWNrTW9kZUluZm8AYXJyYXkAYXNwZWN0ACVmAHBhY2sgaW5mbzoKACAgbW9kZSAgICVzCgAgIGFzcGVjdCAlZgoAICBzaXplICAgJWQKACAgZmxhZ3MgICVkCgB1bmRlZmluZWQAcGFjawBBcnJvdyB0eXBlICIlcyIgdW5rbm93biAtIGlnbm9yaW5nCgBub3JtYWwAY3JvdwB0ZWUAZG90AGludgB2ZWUAcGVuAG1wdHkAY3VydmUAaWN1cnZlAGwAaGFsZgBpbnZlbXB0eQBfYmFja2dyb3VuZABfZHJhd18AQ291bGQgbm90IHBhcnNlICJfYmFja2dyb3VuZCIgYXR0cmlidXRlIGluIGdyYXBoICVzCgAgICIlcyIKAG5vIG1lbW9yeSBmcm9tIHptYWxsb2MoKQoAb2JqAGVtaXQuYwBwb3Bfb2JqX3N0YXRlAGNsdXN0ACVsZABwYWdlJWQsJWRfAFRvdGFsIHNpemUgPiAxIGluICIlcyIgY29sb3Igc3BlYyAASWxsZWdhbCBsZW5ndGggdmFsdWUgaW4gIiVzIiBjb2xvciBhdHRyaWJ1dGUgAGxucmNvbG9yc2NoZW1lAGVtaXRfZWRnZV9sYWJlbAAlcy0lcwBmb3J3YXJkAGJhY2sAIC0+IAAgLS0gAGluIGVkZ2UgJXMlcyVzCgBsYWJlbGFsaWduZWQAZWRnZWhyZWYAZWRnZVVSTABsYWJlbGhyZWYAbGFiZWxVUkwAdGFpbGhyZWYAdGFpbFVSTABoZWFkaHJlZgBoZWFkVVJMAGVkZ2V0YXJnZXQAbGFiZWx0YXJnZXQAdGFpbHRhcmdldABoZWFkdGFyZ2V0AGVkZ2V0b29sdGlwAGxhYmVsdG9vbHRpcAB0YWlsdG9vbHRpcABoZWFkdG9vbHRpcAABbmVzdGluZyBub3QgYWxsb3dlZCBpbiBzdHlsZTogJXMKAHVubWF0Y2hlZCAnKScgaW4gc3R5bGU6ICVzCgB0cnVuY2F0aW5nIHN0eWxlICclcycKAHVubWF0Y2hlZCAnKCcgaW4gc3R5bGU6ICVzCgBhbGwAaW4gY2x1c3RlciAlcwoATW9yZSB0aGFuIDIgY29sb3JzIHNwZWNpZmllZCBmb3IgYSBncmFkaWVudCAtIGlnbm9yaW5nIHJlbWFpbmluZwoAZ3JhZGllbnQgcGVuIGNvbG9ycyBub3QgeWV0IHN1cHBvcnRlZC4KAEltYWdlcyB1bnN1cHBvcnRlZCBpbiAiYmFja2dyb3VuZCIgYXR0cmlidXRlCgBsYXllcnMgbm90IHN1cHBvcnRlZCBpbiAlcyBvdXRwdXQKAExheW91dCB3YXMgbm90IGRvbmUuICBNaXNzaW5nIGxheW91dCBwbHVnaW5zPyAKAGd2UmVuZGVySm9icyAlczogJS4yZiBzZWNzLgoAbGF5b3V0IHdhcyBub3QgZG9uZQoAcmVuZGVyZXIgZm9yICVzIGlzIHVuYXZhaWxhYmxlCgBwYWdlZGlyPSVzIGlnbm9yZWQKAHZpZXdwb3J0ACVsZiwlbGYsJWxmLCclW14nXScAJWxmLCVsZiwlbGYsJVteLF0lcwAlbGYsJWxmLCVsZiwlbGYsJWxmAG91dHB1dG9yZGVyAG9kZXNmaXJzdABkZ2VzZmlyc3QAbGF5ZXJzAGxheWVyc2VsZWN0AFRoZSBsYXllcnNlbGVjdCBhdHRyaWJ1dGUgIiVzIiBkb2VzIG5vdCBtYXRjaCBhbnkgbGF5ZXIgc3BlY2lmZWQgYnkgdGhlIGxheWVycyBhdHRyaWJ1dGUgLSBpZ25vcmVkLgoAbGF5ZXJzZXAAOgkgAGxheWVybGlzdHNlcAAsAFRoZSBjaGFyYWN0ZXIgJyVjJyBhcHBlYXJzIGluIGJvdGggdGhlIGxheWVyc2VwIGFuZCBsYXllcmxpc3RzZXAgYXR0cmlidXRlcyAtIGxheWVybGlzdHNlcCBpZ25vcmVkLgoAcGFkAEJMAHBhZ2VkaXIAc29saWQAAHNldGxpbmV3aWR0aAAxAABzcGwtPnNpemUgPiAwAGluaXRfc3BsaW5lc19iYgBiei5zaXplID4gMABiZXppZXJfYmIAYnouc2l6ZSAlIDMgPT0gMQAlbGYAZm9udHBhdGgARE9URk9OVFBBVEgAR0RGT05UUEFUSABpbWFnZXBhdGgAcXVhbnR1bQByYW5rZGlyAExSAEJUAFJMAG5vZGVzZXAAcmFua3NlcABlcXVhbGx5AHNob3dib3hlcwBmb250bmFtZXMAc2l6ZQBwYWdlAGNlbnRlcgByb3RhdGUAb3JpZW50YXRpb24AbGFuZHNjYXBlAGNsdXN0ZXJyYW5rAGNvbmNlbnRyYXRlAGRwaQByZXNvbHV0aW9uAG9yZGVyaW5nAGZpbGxjb2xvcgBmb250c2l6ZQBmb250bmFtZQBmb250Y29sb3IAeGxhYmVsAHBlbndpZHRoAHBlcmlwaGVyaWVzAHNrZXcAZGlzdG9ydGlvbgBub2p1c3RpZnkAbGF5ZXIAZ3JvdXAAY29tbWVudAB2ZXJ0aWNlcwB6AHdlaWdodABsYWJlbGZsb2F0AGRpcgBhcnJvd2hlYWQAYXJyb3d0YWlsAGhlYWRsYWJlbAB0YWlsbGFiZWwAbGFiZWxmb250c2l6ZQBsYWJlbGZvbnRuYW1lAGxhYmVsZm9udGNvbG9yAGxhYmVsZGlzdGFuY2UAbGFiZWxhbmdsZQBtaW5sZW4AZGVjb3JhdGUAYXJyb3dzaXplAGNvbnN0cmFpbnQAdGFpbGNsaXAAaGVhZGNsaXAAbGFiZWxqdXN0AGxvY2FsAGdsb2JhbAAlbGYsJWxmJWMAJWxmJWMAcmF0aW8AYXV0bwBjb21wcmVzcwBleHBhbmQAZmlsbABnZABwcwBzdmcAY2hhcnNldAB1dGYtOABsYXRpbi0xAGxhdGluMQBsMQBJU08tODg1OS0xAElTT184ODU5LTEASVNPODg1OS0xAElTTy1JUi0xMDAAYmlnLTUAYmlnNQB1dGY4AFVuc3VwcG9ydGVkIGNoYXJzZXQgIiVzIiAtIGFzc3VtaW5nIHV0Zi04CgBVbnN1cHBvcnRlZCBjaGFyc2V0IHZhbHVlICVkCgBVVEYtOABCSUctNQBpbiBsYWJlbCBvZiBncmFwaCAlcwoAaW4gbGFiZWwgb2Ygbm9kZSAlcwoAaW4gbGFiZWwgb2YgZWRnZSAlcyAlcyAlcwoAa2luZCA9PSBMVF9OT05FAGxhYmVscy5jAG1ha2VfbGFiZWwAXEwAXEcAXEUAXEgAXFQAJiMxMzsAJiMxMDsAJnF1b3Q7ACYjMTYwOwAmYW1wOwAmZ3Q7ACYjMzk7ACYjNDU7ACZsdDsAJXMgJWQgbm9kZXMgJWQgZWRnZXMgbWF4aXRlcj0lZCBiYWxhbmNlPSVkCgBuZXR3b3JrIHNpbXBsZXg6IAAlZCAAJXMlZCBub2RlcyAlZCBlZGdlcyAlZCBpdGVyICUuMmYgc2VjCgB1cGRhdGU6IG1pc21hdGNoZWQgbGNhIGluIHRyZWV1cGRhdGVzCgBUcmVlX2VkZ2Uuc2l6ZSA9PSBOX25vZGVzIC0gMQBucy5jAGZlYXNpYmxlX3RyZWUAIVRSRUVfRURHRShlKQBtZXJnZV90cmVlcwAocjAtPmhlYXBfaW5kZXggPiAtMSkgfHwgKHIxLT5oZWFwX2luZGV4ID4gLTEpAFNUc2V0VW5pb24Aci0+aGVhcF9pbmRleCA+PSAwAGFkZF90cmVlX2VkZ2U6IG1pc3NpbmcgdHJlZSBlZGdlCgBhZGRfdHJlZV9lZGdlOiBlbXB0eSBvdXRlZGdlIGxpc3QKAGFkZF90cmVlX2VkZ2U6IGVtcHR5IGluZWRnZSBsaXN0CgB0cm91YmxlIGluIGluaXRfcmFuawoACSVzICVkCgBzZWFyY2hzaXplAGdyYXBoIAAgAG5vZGUgAHN0b3AKACUuNWcAcG9zAHJlY3RzAHhscABscABoZWFkX2xwAHRhaWxfbHAAbHdpZHRoAGxoZWlnaHQAYmIAJS41ZywlLjVnLCUuNWcALCUuNWcAJS41ZywlLjVnAHNhbXBsZXBvaW50cwAlLjVnICUuNWcAcywlLjVnLCUuNWcgAGUsJS41ZywlLjVnIAAlLjVnLCUuNWcsJS41ZywlLjVnACUuMmYAJS41ZywlLjVnLCUuNWcsJS41ZyAAL3BhdGhib3ggewogICAgL1ggZXhjaCBuZWcgJS41ZyBzdWIgZGVmCiAgICAvWSBleGNoICUuNWcgc3ViIGRlZgogICAgL3ggZXhjaCBuZWcgJS41ZyBzdWIgZGVmCiAgICAveSBleGNoICUuNWcgc3ViIGRlZgogICAgbmV3cGF0aCB4IHkgbW92ZXRvCiAgICBYIHkgbGluZXRvCiAgICBYIFkgbGluZXRvCiAgICB4IFkgbGluZXRvCiAgICBjbG9zZXBhdGggc3Ryb2tlCn0gZGVmCgAvcGF0aGJveCB7CiAgICAvWSBleGNoICUuNWcgc3ViIGRlZgogICAgL1ggZXhjaCAlLjVnIHN1YiBkZWYKICAgIC95IGV4Y2ggJS41ZyBzdWIgZGVmCiAgICAveCBleGNoICUuNWcgc3ViIGRlZgogICAgbmV3cGF0aCB4IHkgbW92ZXRvCiAgICBYIHkgbGluZXRvCiAgICBYIFkgbGluZXRvCiAgICB4IFkgbGluZXRvCiAgICBjbG9zZXBhdGggc3Ryb2tlCiB9IGRlZgovZGJnc3RhcnQgeyBnc2F2ZSAlLjVnICUuNWcgdHJhbnNsYXRlIH0gZGVmCi9hcnJvd2xlbmd0aCAxMCBkZWYKL2Fycm93d2lkdGggYXJyb3dsZW5ndGggMiBkaXYgZGVmCi9hcnJvd2hlYWQgewogICAgZ3NhdmUKICAgIHJvdGF0ZQogICAgY3VycmVudHBvaW50CiAgICBuZXdwYXRoCiAgICBtb3ZldG8KICAgIGFycm93bGVuZ3RoIGFycm93d2lkdGggMiBkaXYgcmxpbmV0bwogICAgMCBhcnJvd3dpZHRoIG5lZyBybGluZXRvCiAgICBjbG9zZXBhdGggZmlsbAogICAgZ3Jlc3RvcmUKfSBiaW5kIGRlZgovbWFrZWFycm93IHsKICAgIGN1cnJlbnRwb2ludCBleGNoIHBvcCBzdWIgZXhjaCBjdXJyZW50cG9pbnQgcG9wIHN1YiBhdGFuCiAgICBhcnJvd2hlYWQKfSBiaW5kIGRlZgovcG9pbnQgeyAgICBuZXdwYXRoICAgIDIgMCAzNjAgYXJjIGZpbGx9IGRlZi9tYWtldmVjIHsKICAgIC9ZIGV4Y2ggZGVmCiAgICAvWCBleGNoIGRlZgogICAgL3kgZXhjaCBkZWYKICAgIC94IGV4Y2ggZGVmCiAgICBuZXdwYXRoIHggeSBtb3ZldG8KICAgIFggWSBsaW5ldG8gc3Ryb2tlCiAgICBYIFkgbW92ZXRvCiAgICB4IHkgbWFrZWFycm93Cn0gZGVmCgBsb3N0ICVzICVzIGVkZ2UKAG5vIHBvc2l0aW9uIGZvciBlZGdlIHdpdGggbGFiZWwgJXMAbm8gcG9zaXRpb24gZm9yIGVkZ2Ugd2l0aCB0YWlsIGxhYmVsICVzAG5vIHBvc2l0aW9uIGZvciBlZGdlIHdpdGggaGVhZCBsYWJlbCAlcwBubyBwb3NpdGlvbiBmb3IgZWRnZSB3aXRoIHhsYWJlbCAlcwBmb3JjZWxhYmVscwAlZCBvdXQgb2YgJWQgbGFiZWxzIHBvc2l0aW9uZWQuCgAlZCBvdXQgb2YgJWQgZXh0ZXJpb3IgbGFiZWxzIHBvc2l0aW9uZWQuCgAlZCBvYmpzICVkIHhsYWJlbHMgZm9yY2U9JWQgYmI9KCUuMDJmLCUuMDJmKSAoJS4wMmYsJS4wMmYpCgBvYmplY3RzCgAgWyVkXSAoJS4wMmYsJS4wMmYpICglLjAyZiwlLjAyZikgJXAgIiVzIgoAeGxhYmVscwoAIFslZF0gJXAgc2V0ICVkICglLjAyZiwlLjAyZikgKCUuMDJmLCUuMDJmKSAlcwoAc2hhcGVmaWxlIG5vdCBzZXQgb3Igbm90IGZvdW5kIGZvciBlcHNmIG5vZGUgJXMKAGNvdWxkbid0IG9wZW4gZXBzZiBmaWxlICVzCgAlJSUlQm91bmRpbmdCb3g6ICVkICVkICVkICVkAHJlYWQAQm91bmRpbmdCb3ggbm90IGZvdW5kIGluIGVwc2YgZmlsZSAlcwoAY2FuJ3QgZmluZCBsaWJyYXJ5IGZpbGUgJXMKAGNhbid0IG9wZW4gbGlicmFyeSBmaWxlICVzCgBFT0YAQkVHSU4ARU5EAFRSQUlMRVIAL3VzZXJfc2hhcGVfJWQgewoAJSVCZWdpbkRvY3VtZW50OgoAJSVFbmREb2N1bWVudAoAfSBiaW5kIGRlZgoAVVRGLTggaW5wdXQgdXNlcyBub24tTGF0aW4xIGNoYXJhY3RlcnMgd2hpY2ggY2Fubm90IGJlIGhhbmRsZWQgYnkgdGhpcyBQb3N0U2NyaXB0IGRyaXZlcgoAY2Fubm90IHJlLWFsbG9jYXRlIHBzCgByb3V0ZXNwbGluZXNpbml0OiBjYW5ub3QgYWxsb2NhdGUgcHMKAHJvdXRlc3BsaW5lczogJWQgZWRnZXMsICVkIGJveGVzICUuMmYgc2VjCgBpbiByb3V0ZXNwbGluZXMsIGNhbm5vdCBmaW5kIE5PUk1BTCBlZGdlCgBpbiByb3V0ZXNwbGluZXMsIGlsbGVnYWwgdmFsdWVzIG9mIHByZXYgJWQgYW5kIG5leHQgJWQsIGxpbmUgJWQKAGluIHJvdXRlc3BsaW5lcywgZWRnZSBpcyBhIGxvb3AgYXQgJXMKAGluIHJvdXRlc3BsaW5lcywgUHNob3J0ZXN0cGF0aCBmYWlsZWQKAGluIHJvdXRlc3BsaW5lcywgUHJvdXRlc3BsaW5lIGZhaWxlZAoAVW5hYmxlIHRvIHJlY2xhaW0gYm94IHNwYWNlIGluIHNwbGluZSByb3V0aW5nIGZvciBlZGdlICIlcyIgLT4gIiVzIi4gU29tZXRoaW5nIGlzIHByb2JhYmx5IHNlcmlvdXNseSB3cm9uZy4KAGluIGNoZWNrcGF0aCwgYm94IDAgaGFzIExMIGNvb3JkID4gVVIgY29vcmQKAGluIGNoZWNrcGF0aCwgYm94ICVkIGhhcyBMTCBjb29yZCA+IFVSIGNvb3JkCgBpbiBjaGVja3BhdGgsIGJveGVzICVkIGFuZCAlZCBkb24ndCB0b3VjaAoAaW4gY2hlY2twYXRoLCBzdGFydCBwb3J0IG5vdCBpbiBmaXJzdCBib3gKAGluIGNoZWNrcGF0aCwgZW5kIHBvcnQgbm90IGluIGxhc3QgYm94CgAlZCBib3hlczoKACVkICglLjVnLCAlLjVnKSwgKCUuNWcsICUuNWcpCgBjb25zdHJhaW5lZABub3QgY29uc3RyYWluZWQAc3RhcnQgcG9ydDogKCUuNWcsICUuNWcpLCB0YW5nZW50IGFuZ2xlOiAlLjVnLCAlcwoAZW5kIHBvcnQ6ICglLjVnLCAlLjVnKSwgdGFuZ2VudCBhbmdsZTogJS41ZywgJXMKAHNpZGVzID09IDQAc2hhcGVzLmMAcm91bmRfY29ybmVycwBiYWQgbGFiZWwgZm9ybWF0ICVzCgBcTgBtYXJnaW4AJWxmLCVsZgByZWd1bGFyAGN1c3RvbQBzaGFwZWZpbGUAPG5pbD4ATm8gb3IgaW1wcm9wZXIgc2hhcGVmaWxlPSIlcyIgZm9yIG5vZGUgIiVzIgoATm8gb3IgaW1wcm9wZXIgaW1hZ2U9IiVzIiBmb3Igbm9kZSAiJXMiCgBsYWJlbGxvYwBub2RlICclcycsIGdyYXBoICclcycgc2l6ZSB0b28gc21hbGwgZm9yIGxhYmVsCgBlcHNmAHVzaW5nICVzIGZvciB1bmtub3duIHNoYXBlICVzCgBwb2x5Z29uAG92YWwAY2lyY2xlAHBvaW50AGVnZwB0cmlhbmdsZQBwbGFpbnRleHQAcGxhaW4AZGlhbW9uZAB0cmFwZXppdW0AcGFyYWxsZWxvZ3JhbQBob3VzZQBwZW50YWdvbgBoZXhhZ29uAHNlcHRhZ29uAG9jdGFnb24Abm90ZQB0YWIAZm9sZGVyAGJveDNkAGNvbXBvbmVudABjeWxpbmRlcgByZWN0AHJlY3RhbmdsZQBzcXVhcmUAZG91YmxlY2lyY2xlAGRvdWJsZW9jdGFnb24AdHJpcGxlb2N0YWdvbgBpbnZ0cmlhbmdsZQBpbnZ0cmFwZXppdW0AaW52aG91c2UAdW5kZXJsaW5lAE1kaWFtb25kAE1zcXVhcmUATWNpcmNsZQBwcm9tb3RlcgBjZHMAdGVybWluYXRvcgB1dHIAaW5zdWxhdG9yAHJpYm9zaXRlAHJuYXN0YWIAcHJvdGVhc2VzaXRlAHByb3RlaW5zdGFiAHByaW1lcnNpdGUAcmVzdHJpY3Rpb25zaXRlAGZpdmVwb3ZlcmhhbmcAdGhyZWVwb3ZlcmhhbmcAbm92ZXJoYW5nAGFzc2VtYmx5AHNpZ25hdHVyZQBycHJvbW90ZXIAbGFycm93AHJhcnJvdwBscHJvbW90ZXIAcmVjb3JkAE1yZWNvcmQAc3RhcgAjODA4MDgwACNmY2ZjZmMAIzMwMzAzMAAjZThlOGU4ACNlMGUwZTAAI2YwZjBmMAAjMTAxMDEwACNmOGY4ZjgAaW4gbm9kZSAlcwoAcm91bmRlZABkaWFnb25hbHMAcmFkaWFsAHN0cmlwZWQAd2VkZ2VkAF8Abm9kZSAlcywgcG9ydCAlcywgdW5yZWNvZ25pemVkIGNvbXBhc3MgcG9pbnQgJyVzJyAtIGlnbm9yZWQKAG5vZGUgJXMsIHBvcnQgJXMgdW5yZWNvZ25pemVkCgAlLjVnICUuNWcgdHJhbnNsYXRlIG5ld3BhdGggdXNlcl9zaGFwZV8lZAoAaW52aXMAAGZpbGxlZAAAcwBlAHcAc3BsaW5lcy5jAGJlZ2lucGF0aABQLT5lbmQudGhldGEgPCAyICogTV9QSQBlbmRwYXRoAG1ha2VTZWxmRWRnZQBnZXRzcGxpbmVwb2ludHM6IG5vIHNwbGluZSBwb2ludHMgYXZhaWxhYmxlIGZvciBlZGdlICglcywlcykKAHBvbHlsaW5lTWlkcG9pbnQAc3Bhbi0+Zm9udAB0ZXh0c3Bhbi5jAHRleHRzcGFuX3NpemUAZm9udC0+bmFtZQBmb250bmFtZTogIiVzIiByZXNvbHZlZCB0bzogJXMKAGZvbnRuYW1lOiB1bmFibGUgdG8gcmVzb2x2ZSAiJXMiCgBjb3VyAGFyaWFsAGhlbHZldGljYQBbaW50ZXJuYWwgdGltZXNdAFtpbnRlcm5hbCBjb3VyaWVyXQBbaW50ZXJuYWwgYXJpYWxdAEF2YW50R2FyZGUtQm9vawBVUlcgR290aGljIEwAYm9vawBzYW5zLVNlcmlmAEF2YW50R2FyZGUtQm9va09ibGlxdWUAb2JsaXF1ZQBpdGFsaWMAQXZhbnRHYXJkZS1EZW1pAGRlbWkAQXZhbnRHYXJkZS1EZW1pT2JsaXF1ZQBCb29rbWFuLURlbWkAVVJXIEJvb2ttYW4gTABzZXJpZgBCb29rbWFuLURlbWlJdGFsaWMAQm9va21hbi1MaWdodABsaWdodABCb29rbWFuLUxpZ2h0SXRhbGljAENvdXJpZXIAbW9ub3NwYWNlAENvdXJpZXItQm9sZABDb3VyaWVyLUJvbGRPYmxpcXVlAENvdXJpZXItT2JsaXF1ZQBIZWx2ZXRpY2EASGVsdmV0aWNhLUJvbGQASGVsdmV0aWNhLUJvbGRPYmxpcXVlAEhlbHZldGljYS1OYXJyb3cAY29uZGVuc2VkAEhlbHZldGljYS1OYXJyb3ctQm9sZABIZWx2ZXRpY2EtTmFycm93LUJvbGRPYmxpcXVlAEhlbHZldGljYS1OYXJyb3ctT2JsaXF1ZQBIZWx2ZXRpY2EtT2JsaXF1ZQBOZXdDZW50dXJ5U2NobGJrLUJvbGQAQ2VudHVyeSBTY2hvb2xib29rIEwATmV3Q2VudHVyeVNjaGxiay1Cb2xkSXRhbGljAE5ld0NlbnR1cnlTY2hsYmstSXRhbGljAE5ld0NlbnR1cnlTY2hsYmstUm9tYW4Acm9tYW4AUGFsYXRpbm8tQm9sZABQYWxhdGlubyBMaW5vdHlwZQBQYWxhdGluby1Cb2xkSXRhbGljAFBhbGF0aW5vLUl0YWxpYwBQYWxhdGluby1Sb21hbgBTeW1ib2wAZmFudGFzeQBUaW1lcy1Cb2xkAFRpbWVzAFRpbWVzLUJvbGRJdGFsaWMAVGltZXMtSXRhbGljAFphcGZDaGFuY2VyeS1NZWRpdW1JdGFsaWMAVVJXIENoYW5jZXJ5IEwAbWVkaXVtAFphcGZEaW5nYmF0cwBEaW5nYmF0cwBpbnB1dHNjYWxlAG5vAHRydWUAeWVzAHV0aWxzLmMAdSA9PSBVRl9maW5kKHUpAFVGX3NldG5hbWUAAWZpbGUgbG9hZGluZyBpcyBkaXNhYmxlZCBiZWNhdXNlIHRoZSBlbnZpcm9ubWVudCBjb250YWlucyBTRVJWRVJfTkFNRT0iJXMiCmFuZCB0aGUgR1ZfRklMRV9QQVRIIHZhcmlhYmxlIGlzIHVuc2V0IG9yIGVtcHR5LgoAUGF0aCBwcm92aWRlZCB0byBmaWxlOiAiJXMiIGhhcyBiZWVuIGlnbm9yZWQgYmVjYXVzZSBmaWxlcyBhcmUgb25seSBwZXJtaXR0ZWQgdG8gYmUgbG9hZGVkIGZyb20gdGhlIGRpcmVjdG9yaWVzIGluICIlcyIgd2hlbiBydW5uaW5nIGluIGFuIGh0dHAgc2VydmVyLgoAJXMlcyVzAC8AOgBlbGxpcHNlAFRpbWVzLVJvbWFuAGNsdXN0ZXIAX19jbHVzdGVybm9kZXMAY2x1c3RlciBjeWNsZSAlcyAtLSAlcyBub3Qgc3VwcG9ydGVkCgB0YWlsIGNsdXN0ZXIgJXMgaW5zaWRlIGhlYWQgY2x1c3RlciAlcwoAaGVhZCBjbHVzdGVyICVzIGluc2lkZSB0YWlsIGNsdXN0ZXIgJXMKAHRhaWwgbm9kZSAlcyBpbnNpZGUgaGVhZCBjbHVzdGVyICVzCgBoZWFkIG5vZGUgJXMgaW5zaWRlIHRhaWwgY2x1c3RlciAlcwoAX18AbGFiZWwAc2hhcGUAYm94AFR3byBjbHVzdGVycyBuYW1lZCAlcyAtIHRoZSBzZWNvbmQgd2lsbCBiZSBpZ25vcmVkCgBtYXBOAEFFbGlnAEFhY3V0ZQBBY2lyYwBBZ3JhdmUAQWxwaGEAQXJpbmcAQXRpbGRlAEF1bWwAQmV0YQBDY2VkaWwAQ2hpAERhZ2dlcgBEZWx0YQBFVEgARWFjdXRlAEVjaXJjAEVncmF2ZQBFcHNpbG9uAEV0YQBFdW1sAEdhbW1hAElhY3V0ZQBJY2lyYwBJZ3JhdmUASW90YQBJdW1sAEthcHBhAExhbWJkYQBNdQBOdGlsZGUATnUAT0VsaWcAT2FjdXRlAE9jaXJjAE9ncmF2ZQBPbWVnYQBPbWljcm9uAE9zbGFzaABPdGlsZGUAT3VtbABQaGkAUGkAUHJpbWUAUHNpAFJobwBTY2Fyb24AU2lnbWEAVEhPUk4AVGF1AFRoZXRhAFVhY3V0ZQBVY2lyYwBVZ3JhdmUAVXBzaWxvbgBVdW1sAFhpAFlhY3V0ZQBZdW1sAFpldGEAYWFjdXRlAGFjaXJjAGFjdXRlAGFlbGlnAGFncmF2ZQBhbGVmc3ltAGFscGhhAGFtcABhbmQAYW5nAGFyaW5nAGFzeW1wAGF0aWxkZQBhdW1sAGJkcXVvAGJldGEAYnJ2YmFyAGJ1bGwAY2FwAGNjZWRpbABjZWRpbABjZW50AGNoaQBjaXJjAGNsdWJzAGNvbmcAY29weQBjcmFycgBjdXAAY3VycmVuAGRBcnIAZGFnZ2VyAGRhcnIAZGVnAGRlbHRhAGRpYW1zAGRpdmlkZQBlYWN1dGUAZWNpcmMAZWdyYXZlAGVtcHR5AGVtc3AAZW5zcABlcHNpbG9uAGVxdWl2AGV0YQBldGgAZXVtbABldXJvAGV4aXN0AGZub2YAZm9yYWxsAGZyYWMxMgBmcmFjMTQAZnJhYzM0AGZyYXNsAGdhbW1hAGdlAGd0AGhBcnIAaGFycgBoZWFydHMAaGVsbGlwAGlhY3V0ZQBpY2lyYwBpZXhjbABpZ3JhdmUAaW1hZ2UAaW5maW4AaW50AGlvdGEAaXF1ZXN0AGlzaW4AaXVtbABrYXBwYQBsQXJyAGxhbWJkYQBsYW5nAGxhcXVvAGxhcnIAbGNlaWwAbGRxdW8AbGUAbGZsb29yAGxvd2FzdABsb3oAbHJtAGxzYXF1bwBsc3F1bwBsdABtYWNyAG1kYXNoAG1pY3JvAG1pZGRvdABtdQBuYWJsYQBuYnNwAG5kYXNoAG5lAG5pAG5vdABub3RpbgBuc3ViAG50aWxkZQBudQBvYWN1dGUAb2NpcmMAb2VsaWcAb2dyYXZlAG9saW5lAG9tZWdhAG9taWNyb24Ab3BsdXMAb3IAb3JkZgBvcmRtAG9zbGFzaABvdGlsZGUAb3RpbWVzAG91bWwAcGFyYQBwYXJ0AHBlcm1pbABwZXJwAHBoaQBwaQBwaXYAcGx1c21uAHBvdW5kAHByaW1lAHByb2QAcHJvcABwc2kAcXVvdAByQXJyAHJhZGljAHJhbmcAcmFxdW8AcmFycgByY2VpbAByZHF1bwByZWFsAHJlZwByZmxvb3IAcmhvAHJsbQByc2FxdW8AcnNxdW8Ac2JxdW8Ac2Nhcm9uAHNkb3QAc2VjdABzaHkAc2lnbWEAc2lnbWFmAHNpbQBzcGFkZXMAc3ViAHN1YmUAc3VtAHN1cABzdXAxAHN1cDIAc3VwMwBzdXBlAHN6bGlnAHRhdQB0aGVyZTQAdGhldGEAdGhldGFzeW0AdGhpbnNwAHRob3JuAHRpbGRlAHRpbWVzAHRyYWRlAHVBcnIAdWFjdXRlAHVhcnIAdWNpcmMAdWdyYXZlAHVtbAB1cHNpaAB1cHNpbG9uAHV1bWwAd2VpZXJwAHhpAHlhY3V0ZQB5ZW4AeXVtbAB6ZXRhAHp3agB6d25qAFVURjggY29kZXMgPiA0IGJ5dGVzIGFyZSBub3QgY3VycmVudGx5IHN1cHBvcnRlZCAoZ3JhcGggJXMpIC0gdHJlYXRlZCBhcyBMYXRpbi0xLiBQZXJoYXBzICItR2NoYXJzZXQ9bGF0aW4xIiBpcyBuZWVkZWQ/CgBJbnZhbGlkICVkLWJ5dGUgVVRGOCBmb3VuZCBpbiBpbnB1dCBvZiBncmFwaCAlcyAtIHRyZWF0ZWQgYXMgTGF0aW4tMS4gUGVyaGFwcyAiLUdjaGFyc2V0PWxhdGluMSIgaXMgbmVlZGVkPwoAYnouc2l6ZQBvdmVybGFwX2JlemllcgB1cnZlZABvbXBvdW5kAGFsc2UAaW5lAG9uZQBvAHJ0aG8Ab2x5bGluZQBwbGluZQBydWUAZXMAVW5rbm93biAic3BsaW5lcyIgdmFsdWU6ICIlcyIgLSBpZ25vcmVkCgBzcGxpbmVzAG9kYgBPcnRob2dvbmFsIGVkZ2VzIGRvIG5vdCBjdXJyZW50bHkgaGFuZGxlIGVkZ2UgbGFiZWxzLiBUcnkgdXNpbmcgeGxhYmVscy4KAG9ydGhvICVzICVzCgBjaGFuaQBvcnRoby5jAGNoYW5TZWFyY2gAY3AAJSUhUFMtQWRvYmUtMi4wCiUlJSVCb3VuZGluZ0JveDogKGF0ZW5kKQovcG9pbnQgewogIC9ZIGV4Y2ggZGVmCiAgL1ggZXhjaCBkZWYKICBuZXdwYXRoCiAgWCBZIDMgMCAzNjAgYXJjIGZpbGwKfSBkZWYKL2NlbGwgewogIC9ZIGV4Y2ggZGVmCiAgL1ggZXhjaCBkZWYKICAveSBleGNoIGRlZgogIC94IGV4Y2ggZGVmCiAgbmV3cGF0aAogIHggeSBtb3ZldG8KICB4IFkgbGluZXRvCiAgWCBZIGxpbmV0bwogIFggeSBsaW5ldG8KICBjbG9zZXBhdGggc3Ryb2tlCn0gZGVmCi9ub2RlIHsKIC91IGV4Y2ggZGVmCiAvciBleGNoIGRlZgogL2QgZXhjaCBkZWYKIC9sIGV4Y2ggZGVmCiBuZXdwYXRoIGwgZCBtb3ZldG8KIHIgZCBsaW5ldG8gciB1IGxpbmV0byBsIHUgbGluZXRvCiBjbG9zZXBhdGggZmlsbAp9IGRlZgoKACVkICVkIHRyYW5zbGF0ZQoAMC44IDAuOCAwLjggc2V0cmdiY29sb3IKAHNob3dwYWdlCiUlJSVUcmFpbGVyCiUlJSVCb3VuZGluZ0JveDogJWQgJWQgJWQgJWQKAG5ld3BhdGggJWQgJWQgbW92ZXRvCgAlZCAlZCBsaW5ldG8KACVkICVkIGxpbmV0byBzdHJva2UKAGNoYW5uZWwgJWQgKCVmLCVmKQoAIC0+CgAgICAgIAAoKCVmLCVmKSwoJWYsJWYpKSAlcyAlcwBCX1JJR0hUAEJfRE9XTgBCX0xFRlQAQl9VUABCX05PREUAc2VnAG5leHRfc2VnAGRlY2lkZV9wb2ludABpbmNvbXBhcmFibGUgc2VnbWVudHMgISEgLS0gQWJvcnRpbmcKAHMxLT5jb21tX2Nvb3JkPT1zMi0+Y29tbV9jb29yZABpc19wYXJhbGxlbABncmFwaCBHIHsKACBub2RlW3NoYXBlPXBvaW50XQoAICAlZCBbcG9zPSIlZCwlZCJdCgAgICVkIC0tICVkW2xlbj0iJWYiXQoAfQoAY29sb3IgJXMAJXMgaXMgbm90IGEga25vd24gY29sb3IuCgBlcnJvciBpbiBjb2x4bGF0ZSgpCgBzb2xpZABpbnZpc2libGUAYm9sZABzZXRsaW5ld2lkdGgAZmlsbGVkAHVuZmlsbGVkAHRhcGVyZWQAZ3ZyZW5kZXJfc2V0X3N0eWxlOiB1bnN1cHBvcnRlZCBzdHlsZSAlcyAtIGlnbm9yaW5nCgBndnJlbmRlci5jAGd2cmVuZGVyX3VzZXJzaGFwZQBuYW1lAG5hbWVbMF0AYm90aABsYXlvdXQATGF5b3V0IHR5cGU6ICIlcyIgbm90IHJlY29nbml6ZWQuIFVzZSBvbmUgb2Y6JXMKAGpvYgBndmxvYWRpbWFnZS5jAGd2bG9hZGltYWdlAHVzAHVzLT5uYW1lAHVzLT5uYW1lWzBdAE5vIGxvYWRpbWFnZSBwbHVnaW4gZm9yICIlcyIKAFEATGVmdABLUF9MZWZ0AFJpZ2h0AEtQX1JpZ2h0AFVwAEtQX1VwAERvd24AS1BfRG93bgBwbHVzAEtQX0FkZABtaW51cwBLUF9TdWJ0cmFjdABGAGVkZ2UAdGFpbHBvcnQAaGVhZHBvcnQAa2V5AFVSTABub2RlAGRpZ3JhcGgAZ3JhcGgAc3ViZ3JhcGgAX0xUWF9saWJyYXJ5AHRleHRsYXlvdXQAb2JqcC0+bGJsAHhsYWJlbHMuYwB4bGFkanVzdAB4bGludGVyc2VjdGlvbnMAbHAgIT0gY2xwAGdldGludHJzeGkAb2JqcDEtPnN6LnggPT0gMCAmJiBvYmpwMS0+c3oueSA9PSAwAGxibGVuY2xvc2luZwB2cAB4bGhkeHVubG9hZABzaXplPT1mcmVlZAByZWN0LmJvdW5kYXJ5WzJdIDwgSU5UX01BWABvYmpwbHBta3MAcmVjdC5ib3VuZGFyeVszXSA8IElOVF9NQVgAb3V0IG9mIG1lbW9yeQoAIyUyeCUyeCUyeCUyeAAlbGYlbGYlbGYAL2FjY2VudDMvMQAvYWNjZW50My8yAC9hY2NlbnQzLzMAL2FjY2VudDQvMQAvYWNjZW50NC8yAC9hY2NlbnQ0LzMAL2FjY2VudDQvNAAvYWNjZW50NS8xAC9hY2NlbnQ1LzIAL2FjY2VudDUvMwAvYWNjZW50NS80AC9hY2NlbnQ1LzUAL2FjY2VudDYvMQAvYWNjZW50Ni8yAC9hY2NlbnQ2LzMAL2FjY2VudDYvNAAvYWNjZW50Ni81AC9hY2NlbnQ2LzYAL2FjY2VudDcvMQAvYWNjZW50Ny8yAC9hY2NlbnQ3LzMAL2FjY2VudDcvNAAvYWNjZW50Ny81AC9hY2NlbnQ3LzYAL2FjY2VudDcvNwAvYWNjZW50OC8xAC9hY2NlbnQ4LzIAL2FjY2VudDgvMwAvYWNjZW50OC80AC9hY2NlbnQ4LzUAL2FjY2VudDgvNgAvYWNjZW50OC83AC9hY2NlbnQ4LzgAL2JsdWVzMy8xAC9ibHVlczMvMgAvYmx1ZXMzLzMAL2JsdWVzNC8xAC9ibHVlczQvMgAvYmx1ZXM0LzMAL2JsdWVzNC80AC9ibHVlczUvMQAvYmx1ZXM1LzIAL2JsdWVzNS8zAC9ibHVlczUvNAAvYmx1ZXM1LzUAL2JsdWVzNi8xAC9ibHVlczYvMgAvYmx1ZXM2LzMAL2JsdWVzNi80AC9ibHVlczYvNQAvYmx1ZXM2LzYAL2JsdWVzNy8xAC9ibHVlczcvMgAvYmx1ZXM3LzMAL2JsdWVzNy80AC9ibHVlczcvNQAvYmx1ZXM3LzYAL2JsdWVzNy83AC9ibHVlczgvMQAvYmx1ZXM4LzIAL2JsdWVzOC8zAC9ibHVlczgvNAAvYmx1ZXM4LzUAL2JsdWVzOC82AC9ibHVlczgvNwAvYmx1ZXM4LzgAL2JsdWVzOS8xAC9ibHVlczkvMgAvYmx1ZXM5LzMAL2JsdWVzOS80AC9ibHVlczkvNQAvYmx1ZXM5LzYAL2JsdWVzOS83AC9ibHVlczkvOAAvYmx1ZXM5LzkAL2JyYmcxMC8xAC9icmJnMTAvMTAAL2JyYmcxMC8yAC9icmJnMTAvMwAvYnJiZzEwLzQAL2JyYmcxMC81AC9icmJnMTAvNgAvYnJiZzEwLzcAL2JyYmcxMC84AC9icmJnMTAvOQAvYnJiZzExLzEAL2JyYmcxMS8xMAAvYnJiZzExLzExAC9icmJnMTEvMgAvYnJiZzExLzMAL2JyYmcxMS80AC9icmJnMTEvNQAvYnJiZzExLzYAL2JyYmcxMS83AC9icmJnMTEvOAAvYnJiZzExLzkAL2JyYmczLzEAL2JyYmczLzIAL2JyYmczLzMAL2JyYmc0LzEAL2JyYmc0LzIAL2JyYmc0LzMAL2JyYmc0LzQAL2JyYmc1LzEAL2JyYmc1LzIAL2JyYmc1LzMAL2JyYmc1LzQAL2JyYmc1LzUAL2JyYmc2LzEAL2JyYmc2LzIAL2JyYmc2LzMAL2JyYmc2LzQAL2JyYmc2LzUAL2JyYmc2LzYAL2JyYmc3LzEAL2JyYmc3LzIAL2JyYmc3LzMAL2JyYmc3LzQAL2JyYmc3LzUAL2JyYmc3LzYAL2JyYmc3LzcAL2JyYmc4LzEAL2JyYmc4LzIAL2JyYmc4LzMAL2JyYmc4LzQAL2JyYmc4LzUAL2JyYmc4LzYAL2JyYmc4LzcAL2JyYmc4LzgAL2JyYmc5LzEAL2JyYmc5LzIAL2JyYmc5LzMAL2JyYmc5LzQAL2JyYmc5LzUAL2JyYmc5LzYAL2JyYmc5LzcAL2JyYmc5LzgAL2JyYmc5LzkAL2J1Z24zLzEAL2J1Z24zLzIAL2J1Z24zLzMAL2J1Z240LzEAL2J1Z240LzIAL2J1Z240LzMAL2J1Z240LzQAL2J1Z241LzEAL2J1Z241LzIAL2J1Z241LzMAL2J1Z241LzQAL2J1Z241LzUAL2J1Z242LzEAL2J1Z242LzIAL2J1Z242LzMAL2J1Z242LzQAL2J1Z242LzUAL2J1Z242LzYAL2J1Z243LzEAL2J1Z243LzIAL2J1Z243LzMAL2J1Z243LzQAL2J1Z243LzUAL2J1Z243LzYAL2J1Z243LzcAL2J1Z244LzEAL2J1Z244LzIAL2J1Z244LzMAL2J1Z244LzQAL2J1Z244LzUAL2J1Z244LzYAL2J1Z244LzcAL2J1Z244LzgAL2J1Z245LzEAL2J1Z245LzIAL2J1Z245LzMAL2J1Z245LzQAL2J1Z245LzUAL2J1Z245LzYAL2J1Z245LzcAL2J1Z245LzgAL2J1Z245LzkAL2J1cHUzLzEAL2J1cHUzLzIAL2J1cHUzLzMAL2J1cHU0LzEAL2J1cHU0LzIAL2J1cHU0LzMAL2J1cHU0LzQAL2J1cHU1LzEAL2J1cHU1LzIAL2J1cHU1LzMAL2J1cHU1LzQAL2J1cHU1LzUAL2J1cHU2LzEAL2J1cHU2LzIAL2J1cHU2LzMAL2J1cHU2LzQAL2J1cHU2LzUAL2J1cHU2LzYAL2J1cHU3LzEAL2J1cHU3LzIAL2J1cHU3LzMAL2J1cHU3LzQAL2J1cHU3LzUAL2J1cHU3LzYAL2J1cHU3LzcAL2J1cHU4LzEAL2J1cHU4LzIAL2J1cHU4LzMAL2J1cHU4LzQAL2J1cHU4LzUAL2J1cHU4LzYAL2J1cHU4LzcAL2J1cHU4LzgAL2J1cHU5LzEAL2J1cHU5LzIAL2J1cHU5LzMAL2J1cHU5LzQAL2J1cHU5LzUAL2J1cHU5LzYAL2J1cHU5LzcAL2J1cHU5LzgAL2J1cHU5LzkAL2RhcmsyMy8xAC9kYXJrMjMvMgAvZGFyazIzLzMAL2RhcmsyNC8xAC9kYXJrMjQvMgAvZGFyazI0LzMAL2RhcmsyNC80AC9kYXJrMjUvMQAvZGFyazI1LzIAL2RhcmsyNS8zAC9kYXJrMjUvNAAvZGFyazI1LzUAL2RhcmsyNi8xAC9kYXJrMjYvMgAvZGFyazI2LzMAL2RhcmsyNi80AC9kYXJrMjYvNQAvZGFyazI2LzYAL2RhcmsyNy8xAC9kYXJrMjcvMgAvZGFyazI3LzMAL2RhcmsyNy80AC9kYXJrMjcvNQAvZGFyazI3LzYAL2RhcmsyNy83AC9kYXJrMjgvMQAvZGFyazI4LzIAL2RhcmsyOC8zAC9kYXJrMjgvNAAvZGFyazI4LzUAL2RhcmsyOC82AC9kYXJrMjgvNwAvZGFyazI4LzgAL2duYnUzLzEAL2duYnUzLzIAL2duYnUzLzMAL2duYnU0LzEAL2duYnU0LzIAL2duYnU0LzMAL2duYnU0LzQAL2duYnU1LzEAL2duYnU1LzIAL2duYnU1LzMAL2duYnU1LzQAL2duYnU1LzUAL2duYnU2LzEAL2duYnU2LzIAL2duYnU2LzMAL2duYnU2LzQAL2duYnU2LzUAL2duYnU2LzYAL2duYnU3LzEAL2duYnU3LzIAL2duYnU3LzMAL2duYnU3LzQAL2duYnU3LzUAL2duYnU3LzYAL2duYnU3LzcAL2duYnU4LzEAL2duYnU4LzIAL2duYnU4LzMAL2duYnU4LzQAL2duYnU4LzUAL2duYnU4LzYAL2duYnU4LzcAL2duYnU4LzgAL2duYnU5LzEAL2duYnU5LzIAL2duYnU5LzMAL2duYnU5LzQAL2duYnU5LzUAL2duYnU5LzYAL2duYnU5LzcAL2duYnU5LzgAL2duYnU5LzkAL2dyZWVuczMvMQAvZ3JlZW5zMy8yAC9ncmVlbnMzLzMAL2dyZWVuczQvMQAvZ3JlZW5zNC8yAC9ncmVlbnM0LzMAL2dyZWVuczQvNAAvZ3JlZW5zNS8xAC9ncmVlbnM1LzIAL2dyZWVuczUvMwAvZ3JlZW5zNS80AC9ncmVlbnM1LzUAL2dyZWVuczYvMQAvZ3JlZW5zNi8yAC9ncmVlbnM2LzMAL2dyZWVuczYvNAAvZ3JlZW5zNi81AC9ncmVlbnM2LzYAL2dyZWVuczcvMQAvZ3JlZW5zNy8yAC9ncmVlbnM3LzMAL2dyZWVuczcvNAAvZ3JlZW5zNy81AC9ncmVlbnM3LzYAL2dyZWVuczcvNwAvZ3JlZW5zOC8xAC9ncmVlbnM4LzIAL2dyZWVuczgvMwAvZ3JlZW5zOC80AC9ncmVlbnM4LzUAL2dyZWVuczgvNgAvZ3JlZW5zOC83AC9ncmVlbnM4LzgAL2dyZWVuczkvMQAvZ3JlZW5zOS8yAC9ncmVlbnM5LzMAL2dyZWVuczkvNAAvZ3JlZW5zOS81AC9ncmVlbnM5LzYAL2dyZWVuczkvNwAvZ3JlZW5zOS84AC9ncmVlbnM5LzkAL2dyZXlzMy8xAC9ncmV5czMvMgAvZ3JleXMzLzMAL2dyZXlzNC8xAC9ncmV5czQvMgAvZ3JleXM0LzMAL2dyZXlzNC80AC9ncmV5czUvMQAvZ3JleXM1LzIAL2dyZXlzNS8zAC9ncmV5czUvNAAvZ3JleXM1LzUAL2dyZXlzNi8xAC9ncmV5czYvMgAvZ3JleXM2LzMAL2dyZXlzNi80AC9ncmV5czYvNQAvZ3JleXM2LzYAL2dyZXlzNy8xAC9ncmV5czcvMgAvZ3JleXM3LzMAL2dyZXlzNy80AC9ncmV5czcvNQAvZ3JleXM3LzYAL2dyZXlzNy83AC9ncmV5czgvMQAvZ3JleXM4LzIAL2dyZXlzOC8zAC9ncmV5czgvNAAvZ3JleXM4LzUAL2dyZXlzOC82AC9ncmV5czgvNwAvZ3JleXM4LzgAL2dyZXlzOS8xAC9ncmV5czkvMgAvZ3JleXM5LzMAL2dyZXlzOS80AC9ncmV5czkvNQAvZ3JleXM5LzYAL2dyZXlzOS83AC9ncmV5czkvOAAvZ3JleXM5LzkAL29yYW5nZXMzLzEAL29yYW5nZXMzLzIAL29yYW5nZXMzLzMAL29yYW5nZXM0LzEAL29yYW5nZXM0LzIAL29yYW5nZXM0LzMAL29yYW5nZXM0LzQAL29yYW5nZXM1LzEAL29yYW5nZXM1LzIAL29yYW5nZXM1LzMAL29yYW5nZXM1LzQAL29yYW5nZXM1LzUAL29yYW5nZXM2LzEAL29yYW5nZXM2LzIAL29yYW5nZXM2LzMAL29yYW5nZXM2LzQAL29yYW5nZXM2LzUAL29yYW5nZXM2LzYAL29yYW5nZXM3LzEAL29yYW5nZXM3LzIAL29yYW5nZXM3LzMAL29yYW5nZXM3LzQAL29yYW5nZXM3LzUAL29yYW5nZXM3LzYAL29yYW5nZXM3LzcAL29yYW5nZXM4LzEAL29yYW5nZXM4LzIAL29yYW5nZXM4LzMAL29yYW5nZXM4LzQAL29yYW5nZXM4LzUAL29yYW5nZXM4LzYAL29yYW5nZXM4LzcAL29yYW5nZXM4LzgAL29yYW5nZXM5LzEAL29yYW5nZXM5LzIAL29yYW5nZXM5LzMAL29yYW5nZXM5LzQAL29yYW5nZXM5LzUAL29yYW5nZXM5LzYAL29yYW5nZXM5LzcAL29yYW5nZXM5LzgAL29yYW5nZXM5LzkAL29ycmQzLzEAL29ycmQzLzIAL29ycmQzLzMAL29ycmQ0LzEAL29ycmQ0LzIAL29ycmQ0LzMAL29ycmQ0LzQAL29ycmQ1LzEAL29ycmQ1LzIAL29ycmQ1LzMAL29ycmQ1LzQAL29ycmQ1LzUAL29ycmQ2LzEAL29ycmQ2LzIAL29ycmQ2LzMAL29ycmQ2LzQAL29ycmQ2LzUAL29ycmQ2LzYAL29ycmQ3LzEAL29ycmQ3LzIAL29ycmQ3LzMAL29ycmQ3LzQAL29ycmQ3LzUAL29ycmQ3LzYAL29ycmQ3LzcAL29ycmQ4LzEAL29ycmQ4LzIAL29ycmQ4LzMAL29ycmQ4LzQAL29ycmQ4LzUAL29ycmQ4LzYAL29ycmQ4LzcAL29ycmQ4LzgAL29ycmQ5LzEAL29ycmQ5LzIAL29ycmQ5LzMAL29ycmQ5LzQAL29ycmQ5LzUAL29ycmQ5LzYAL29ycmQ5LzcAL29ycmQ5LzgAL29ycmQ5LzkAL3BhaXJlZDEwLzEAL3BhaXJlZDEwLzEwAC9wYWlyZWQxMC8yAC9wYWlyZWQxMC8zAC9wYWlyZWQxMC80AC9wYWlyZWQxMC81AC9wYWlyZWQxMC82AC9wYWlyZWQxMC83AC9wYWlyZWQxMC84AC9wYWlyZWQxMC85AC9wYWlyZWQxMS8xAC9wYWlyZWQxMS8xMAAvcGFpcmVkMTEvMTEAL3BhaXJlZDExLzIAL3BhaXJlZDExLzMAL3BhaXJlZDExLzQAL3BhaXJlZDExLzUAL3BhaXJlZDExLzYAL3BhaXJlZDExLzcAL3BhaXJlZDExLzgAL3BhaXJlZDExLzkAL3BhaXJlZDEyLzEAL3BhaXJlZDEyLzEwAC9wYWlyZWQxMi8xMQAvcGFpcmVkMTIvMTIAL3BhaXJlZDEyLzIAL3BhaXJlZDEyLzMAL3BhaXJlZDEyLzQAL3BhaXJlZDEyLzUAL3BhaXJlZDEyLzYAL3BhaXJlZDEyLzcAL3BhaXJlZDEyLzgAL3BhaXJlZDEyLzkAL3BhaXJlZDMvMQAvcGFpcmVkMy8yAC9wYWlyZWQzLzMAL3BhaXJlZDQvMQAvcGFpcmVkNC8yAC9wYWlyZWQ0LzMAL3BhaXJlZDQvNAAvcGFpcmVkNS8xAC9wYWlyZWQ1LzIAL3BhaXJlZDUvMwAvcGFpcmVkNS80AC9wYWlyZWQ1LzUAL3BhaXJlZDYvMQAvcGFpcmVkNi8yAC9wYWlyZWQ2LzMAL3BhaXJlZDYvNAAvcGFpcmVkNi81AC9wYWlyZWQ2LzYAL3BhaXJlZDcvMQAvcGFpcmVkNy8yAC9wYWlyZWQ3LzMAL3BhaXJlZDcvNAAvcGFpcmVkNy81AC9wYWlyZWQ3LzYAL3BhaXJlZDcvNwAvcGFpcmVkOC8xAC9wYWlyZWQ4LzIAL3BhaXJlZDgvMwAvcGFpcmVkOC80AC9wYWlyZWQ4LzUAL3BhaXJlZDgvNgAvcGFpcmVkOC83AC9wYWlyZWQ4LzgAL3BhaXJlZDkvMQAvcGFpcmVkOS8yAC9wYWlyZWQ5LzMAL3BhaXJlZDkvNAAvcGFpcmVkOS81AC9wYWlyZWQ5LzYAL3BhaXJlZDkvNwAvcGFpcmVkOS84AC9wYWlyZWQ5LzkAL3Bhc3RlbDEzLzEAL3Bhc3RlbDEzLzIAL3Bhc3RlbDEzLzMAL3Bhc3RlbDE0LzEAL3Bhc3RlbDE0LzIAL3Bhc3RlbDE0LzMAL3Bhc3RlbDE0LzQAL3Bhc3RlbDE1LzEAL3Bhc3RlbDE1LzIAL3Bhc3RlbDE1LzMAL3Bhc3RlbDE1LzQAL3Bhc3RlbDE1LzUAL3Bhc3RlbDE2LzEAL3Bhc3RlbDE2LzIAL3Bhc3RlbDE2LzMAL3Bhc3RlbDE2LzQAL3Bhc3RlbDE2LzUAL3Bhc3RlbDE2LzYAL3Bhc3RlbDE3LzEAL3Bhc3RlbDE3LzIAL3Bhc3RlbDE3LzMAL3Bhc3RlbDE3LzQAL3Bhc3RlbDE3LzUAL3Bhc3RlbDE3LzYAL3Bhc3RlbDE3LzcAL3Bhc3RlbDE4LzEAL3Bhc3RlbDE4LzIAL3Bhc3RlbDE4LzMAL3Bhc3RlbDE4LzQAL3Bhc3RlbDE4LzUAL3Bhc3RlbDE4LzYAL3Bhc3RlbDE4LzcAL3Bhc3RlbDE4LzgAL3Bhc3RlbDE5LzEAL3Bhc3RlbDE5LzIAL3Bhc3RlbDE5LzMAL3Bhc3RlbDE5LzQAL3Bhc3RlbDE5LzUAL3Bhc3RlbDE5LzYAL3Bhc3RlbDE5LzcAL3Bhc3RlbDE5LzgAL3Bhc3RlbDE5LzkAL3Bhc3RlbDIzLzEAL3Bhc3RlbDIzLzIAL3Bhc3RlbDIzLzMAL3Bhc3RlbDI0LzEAL3Bhc3RlbDI0LzIAL3Bhc3RlbDI0LzMAL3Bhc3RlbDI0LzQAL3Bhc3RlbDI1LzEAL3Bhc3RlbDI1LzIAL3Bhc3RlbDI1LzMAL3Bhc3RlbDI1LzQAL3Bhc3RlbDI1LzUAL3Bhc3RlbDI2LzEAL3Bhc3RlbDI2LzIAL3Bhc3RlbDI2LzMAL3Bhc3RlbDI2LzQAL3Bhc3RlbDI2LzUAL3Bhc3RlbDI2LzYAL3Bhc3RlbDI3LzEAL3Bhc3RlbDI3LzIAL3Bhc3RlbDI3LzMAL3Bhc3RlbDI3LzQAL3Bhc3RlbDI3LzUAL3Bhc3RlbDI3LzYAL3Bhc3RlbDI3LzcAL3Bhc3RlbDI4LzEAL3Bhc3RlbDI4LzIAL3Bhc3RlbDI4LzMAL3Bhc3RlbDI4LzQAL3Bhc3RlbDI4LzUAL3Bhc3RlbDI4LzYAL3Bhc3RlbDI4LzcAL3Bhc3RlbDI4LzgAL3BpeWcxMC8xAC9waXlnMTAvMTAAL3BpeWcxMC8yAC9waXlnMTAvMwAvcGl5ZzEwLzQAL3BpeWcxMC81AC9waXlnMTAvNgAvcGl5ZzEwLzcAL3BpeWcxMC84AC9waXlnMTAvOQAvcGl5ZzExLzEAL3BpeWcxMS8xMAAvcGl5ZzExLzExAC9waXlnMTEvMgAvcGl5ZzExLzMAL3BpeWcxMS80AC9waXlnMTEvNQAvcGl5ZzExLzYAL3BpeWcxMS83AC9waXlnMTEvOAAvcGl5ZzExLzkAL3BpeWczLzEAL3BpeWczLzIAL3BpeWczLzMAL3BpeWc0LzEAL3BpeWc0LzIAL3BpeWc0LzMAL3BpeWc0LzQAL3BpeWc1LzEAL3BpeWc1LzIAL3BpeWc1LzMAL3BpeWc1LzQAL3BpeWc1LzUAL3BpeWc2LzEAL3BpeWc2LzIAL3BpeWc2LzMAL3BpeWc2LzQAL3BpeWc2LzUAL3BpeWc2LzYAL3BpeWc3LzEAL3BpeWc3LzIAL3BpeWc3LzMAL3BpeWc3LzQAL3BpeWc3LzUAL3BpeWc3LzYAL3BpeWc3LzcAL3BpeWc4LzEAL3BpeWc4LzIAL3BpeWc4LzMAL3BpeWc4LzQAL3BpeWc4LzUAL3BpeWc4LzYAL3BpeWc4LzcAL3BpeWc4LzgAL3BpeWc5LzEAL3BpeWc5LzIAL3BpeWc5LzMAL3BpeWc5LzQAL3BpeWc5LzUAL3BpeWc5LzYAL3BpeWc5LzcAL3BpeWc5LzgAL3BpeWc5LzkAL3ByZ24xMC8xAC9wcmduMTAvMTAAL3ByZ24xMC8yAC9wcmduMTAvMwAvcHJnbjEwLzQAL3ByZ24xMC81AC9wcmduMTAvNgAvcHJnbjEwLzcAL3ByZ24xMC84AC9wcmduMTAvOQAvcHJnbjExLzEAL3ByZ24xMS8xMAAvcHJnbjExLzExAC9wcmduMTEvMgAvcHJnbjExLzMAL3ByZ24xMS80AC9wcmduMTEvNQAvcHJnbjExLzYAL3ByZ24xMS83AC9wcmduMTEvOAAvcHJnbjExLzkAL3ByZ24zLzEAL3ByZ24zLzIAL3ByZ24zLzMAL3ByZ240LzEAL3ByZ240LzIAL3ByZ240LzMAL3ByZ240LzQAL3ByZ241LzEAL3ByZ241LzIAL3ByZ241LzMAL3ByZ241LzQAL3ByZ241LzUAL3ByZ242LzEAL3ByZ242LzIAL3ByZ242LzMAL3ByZ242LzQAL3ByZ242LzUAL3ByZ242LzYAL3ByZ243LzEAL3ByZ243LzIAL3ByZ243LzMAL3ByZ243LzQAL3ByZ243LzUAL3ByZ243LzYAL3ByZ243LzcAL3ByZ244LzEAL3ByZ244LzIAL3ByZ244LzMAL3ByZ244LzQAL3ByZ244LzUAL3ByZ244LzYAL3ByZ244LzcAL3ByZ244LzgAL3ByZ245LzEAL3ByZ245LzIAL3ByZ245LzMAL3ByZ245LzQAL3ByZ245LzUAL3ByZ245LzYAL3ByZ245LzcAL3ByZ245LzgAL3ByZ245LzkAL3B1YnUzLzEAL3B1YnUzLzIAL3B1YnUzLzMAL3B1YnU0LzEAL3B1YnU0LzIAL3B1YnU0LzMAL3B1YnU0LzQAL3B1YnU1LzEAL3B1YnU1LzIAL3B1YnU1LzMAL3B1YnU1LzQAL3B1YnU1LzUAL3B1YnU2LzEAL3B1YnU2LzIAL3B1YnU2LzMAL3B1YnU2LzQAL3B1YnU2LzUAL3B1YnU2LzYAL3B1YnU3LzEAL3B1YnU3LzIAL3B1YnU3LzMAL3B1YnU3LzQAL3B1YnU3LzUAL3B1YnU3LzYAL3B1YnU3LzcAL3B1YnU4LzEAL3B1YnU4LzIAL3B1YnU4LzMAL3B1YnU4LzQAL3B1YnU4LzUAL3B1YnU4LzYAL3B1YnU4LzcAL3B1YnU4LzgAL3B1YnU5LzEAL3B1YnU5LzIAL3B1YnU5LzMAL3B1YnU5LzQAL3B1YnU5LzUAL3B1YnU5LzYAL3B1YnU5LzcAL3B1YnU5LzgAL3B1YnU5LzkAL3B1YnVnbjMvMQAvcHVidWduMy8yAC9wdWJ1Z24zLzMAL3B1YnVnbjQvMQAvcHVidWduNC8yAC9wdWJ1Z240LzMAL3B1YnVnbjQvNAAvcHVidWduNS8xAC9wdWJ1Z241LzIAL3B1YnVnbjUvMwAvcHVidWduNS80AC9wdWJ1Z241LzUAL3B1YnVnbjYvMQAvcHVidWduNi8yAC9wdWJ1Z242LzMAL3B1YnVnbjYvNAAvcHVidWduNi81AC9wdWJ1Z242LzYAL3B1YnVnbjcvMQAvcHVidWduNy8yAC9wdWJ1Z243LzMAL3B1YnVnbjcvNAAvcHVidWduNy81AC9wdWJ1Z243LzYAL3B1YnVnbjcvNwAvcHVidWduOC8xAC9wdWJ1Z244LzIAL3B1YnVnbjgvMwAvcHVidWduOC80AC9wdWJ1Z244LzUAL3B1YnVnbjgvNgAvcHVidWduOC83AC9wdWJ1Z244LzgAL3B1YnVnbjkvMQAvcHVidWduOS8yAC9wdWJ1Z245LzMAL3B1YnVnbjkvNAAvcHVidWduOS81AC9wdWJ1Z245LzYAL3B1YnVnbjkvNwAvcHVidWduOS84AC9wdWJ1Z245LzkAL3B1b3IxMC8xAC9wdW9yMTAvMTAAL3B1b3IxMC8yAC9wdW9yMTAvMwAvcHVvcjEwLzQAL3B1b3IxMC81AC9wdW9yMTAvNgAvcHVvcjEwLzcAL3B1b3IxMC84AC9wdW9yMTAvOQAvcHVvcjExLzEAL3B1b3IxMS8xMAAvcHVvcjExLzExAC9wdW9yMTEvMgAvcHVvcjExLzMAL3B1b3IxMS80AC9wdW9yMTEvNQAvcHVvcjExLzYAL3B1b3IxMS83AC9wdW9yMTEvOAAvcHVvcjExLzkAL3B1b3IzLzEAL3B1b3IzLzIAL3B1b3IzLzMAL3B1b3I0LzEAL3B1b3I0LzIAL3B1b3I0LzMAL3B1b3I0LzQAL3B1b3I1LzEAL3B1b3I1LzIAL3B1b3I1LzMAL3B1b3I1LzQAL3B1b3I1LzUAL3B1b3I2LzEAL3B1b3I2LzIAL3B1b3I2LzMAL3B1b3I2LzQAL3B1b3I2LzUAL3B1b3I2LzYAL3B1b3I3LzEAL3B1b3I3LzIAL3B1b3I3LzMAL3B1b3I3LzQAL3B1b3I3LzUAL3B1b3I3LzYAL3B1b3I3LzcAL3B1b3I4LzEAL3B1b3I4LzIAL3B1b3I4LzMAL3B1b3I4LzQAL3B1b3I4LzUAL3B1b3I4LzYAL3B1b3I4LzcAL3B1b3I4LzgAL3B1b3I5LzEAL3B1b3I5LzIAL3B1b3I5LzMAL3B1b3I5LzQAL3B1b3I5LzUAL3B1b3I5LzYAL3B1b3I5LzcAL3B1b3I5LzgAL3B1b3I5LzkAL3B1cmQzLzEAL3B1cmQzLzIAL3B1cmQzLzMAL3B1cmQ0LzEAL3B1cmQ0LzIAL3B1cmQ0LzMAL3B1cmQ0LzQAL3B1cmQ1LzEAL3B1cmQ1LzIAL3B1cmQ1LzMAL3B1cmQ1LzQAL3B1cmQ1LzUAL3B1cmQ2LzEAL3B1cmQ2LzIAL3B1cmQ2LzMAL3B1cmQ2LzQAL3B1cmQ2LzUAL3B1cmQ2LzYAL3B1cmQ3LzEAL3B1cmQ3LzIAL3B1cmQ3LzMAL3B1cmQ3LzQAL3B1cmQ3LzUAL3B1cmQ3LzYAL3B1cmQ3LzcAL3B1cmQ4LzEAL3B1cmQ4LzIAL3B1cmQ4LzMAL3B1cmQ4LzQAL3B1cmQ4LzUAL3B1cmQ4LzYAL3B1cmQ4LzcAL3B1cmQ4LzgAL3B1cmQ5LzEAL3B1cmQ5LzIAL3B1cmQ5LzMAL3B1cmQ5LzQAL3B1cmQ5LzUAL3B1cmQ5LzYAL3B1cmQ5LzcAL3B1cmQ5LzgAL3B1cmQ5LzkAL3B1cnBsZXMzLzEAL3B1cnBsZXMzLzIAL3B1cnBsZXMzLzMAL3B1cnBsZXM0LzEAL3B1cnBsZXM0LzIAL3B1cnBsZXM0LzMAL3B1cnBsZXM0LzQAL3B1cnBsZXM1LzEAL3B1cnBsZXM1LzIAL3B1cnBsZXM1LzMAL3B1cnBsZXM1LzQAL3B1cnBsZXM1LzUAL3B1cnBsZXM2LzEAL3B1cnBsZXM2LzIAL3B1cnBsZXM2LzMAL3B1cnBsZXM2LzQAL3B1cnBsZXM2LzUAL3B1cnBsZXM2LzYAL3B1cnBsZXM3LzEAL3B1cnBsZXM3LzIAL3B1cnBsZXM3LzMAL3B1cnBsZXM3LzQAL3B1cnBsZXM3LzUAL3B1cnBsZXM3LzYAL3B1cnBsZXM3LzcAL3B1cnBsZXM4LzEAL3B1cnBsZXM4LzIAL3B1cnBsZXM4LzMAL3B1cnBsZXM4LzQAL3B1cnBsZXM4LzUAL3B1cnBsZXM4LzYAL3B1cnBsZXM4LzcAL3B1cnBsZXM4LzgAL3B1cnBsZXM5LzEAL3B1cnBsZXM5LzIAL3B1cnBsZXM5LzMAL3B1cnBsZXM5LzQAL3B1cnBsZXM5LzUAL3B1cnBsZXM5LzYAL3B1cnBsZXM5LzcAL3B1cnBsZXM5LzgAL3B1cnBsZXM5LzkAL3JkYnUxMC8xAC9yZGJ1MTAvMTAAL3JkYnUxMC8yAC9yZGJ1MTAvMwAvcmRidTEwLzQAL3JkYnUxMC81AC9yZGJ1MTAvNgAvcmRidTEwLzcAL3JkYnUxMC84AC9yZGJ1MTAvOQAvcmRidTExLzEAL3JkYnUxMS8xMAAvcmRidTExLzExAC9yZGJ1MTEvMgAvcmRidTExLzMAL3JkYnUxMS80AC9yZGJ1MTEvNQAvcmRidTExLzYAL3JkYnUxMS83AC9yZGJ1MTEvOAAvcmRidTExLzkAL3JkYnUzLzEAL3JkYnUzLzIAL3JkYnUzLzMAL3JkYnU0LzEAL3JkYnU0LzIAL3JkYnU0LzMAL3JkYnU0LzQAL3JkYnU1LzEAL3JkYnU1LzIAL3JkYnU1LzMAL3JkYnU1LzQAL3JkYnU1LzUAL3JkYnU2LzEAL3JkYnU2LzIAL3JkYnU2LzMAL3JkYnU2LzQAL3JkYnU2LzUAL3JkYnU2LzYAL3JkYnU3LzEAL3JkYnU3LzIAL3JkYnU3LzMAL3JkYnU3LzQAL3JkYnU3LzUAL3JkYnU3LzYAL3JkYnU3LzcAL3JkYnU4LzEAL3JkYnU4LzIAL3JkYnU4LzMAL3JkYnU4LzQAL3JkYnU4LzUAL3JkYnU4LzYAL3JkYnU4LzcAL3JkYnU4LzgAL3JkYnU5LzEAL3JkYnU5LzIAL3JkYnU5LzMAL3JkYnU5LzQAL3JkYnU5LzUAL3JkYnU5LzYAL3JkYnU5LzcAL3JkYnU5LzgAL3JkYnU5LzkAL3JkZ3kxMC8xAC9yZGd5MTAvMTAAL3JkZ3kxMC8yAC9yZGd5MTAvMwAvcmRneTEwLzQAL3JkZ3kxMC81AC9yZGd5MTAvNgAvcmRneTEwLzcAL3JkZ3kxMC84AC9yZGd5MTAvOQAvcmRneTExLzEAL3JkZ3kxMS8xMAAvcmRneTExLzExAC9yZGd5MTEvMgAvcmRneTExLzMAL3JkZ3kxMS80AC9yZGd5MTEvNQAvcmRneTExLzYAL3JkZ3kxMS83AC9yZGd5MTEvOAAvcmRneTExLzkAL3JkZ3kzLzEAL3JkZ3kzLzIAL3JkZ3kzLzMAL3JkZ3k0LzEAL3JkZ3k0LzIAL3JkZ3k0LzMAL3JkZ3k0LzQAL3JkZ3k1LzEAL3JkZ3k1LzIAL3JkZ3k1LzMAL3JkZ3k1LzQAL3JkZ3k1LzUAL3JkZ3k2LzEAL3JkZ3k2LzIAL3JkZ3k2LzMAL3JkZ3k2LzQAL3JkZ3k2LzUAL3JkZ3k2LzYAL3JkZ3k3LzEAL3JkZ3k3LzIAL3JkZ3k3LzMAL3JkZ3k3LzQAL3JkZ3k3LzUAL3JkZ3k3LzYAL3JkZ3k3LzcAL3JkZ3k4LzEAL3JkZ3k4LzIAL3JkZ3k4LzMAL3JkZ3k4LzQAL3JkZ3k4LzUAL3JkZ3k4LzYAL3JkZ3k4LzcAL3JkZ3k4LzgAL3JkZ3k5LzEAL3JkZ3k5LzIAL3JkZ3k5LzMAL3JkZ3k5LzQAL3JkZ3k5LzUAL3JkZ3k5LzYAL3JkZ3k5LzcAL3JkZ3k5LzgAL3JkZ3k5LzkAL3JkcHUzLzEAL3JkcHUzLzIAL3JkcHUzLzMAL3JkcHU0LzEAL3JkcHU0LzIAL3JkcHU0LzMAL3JkcHU0LzQAL3JkcHU1LzEAL3JkcHU1LzIAL3JkcHU1LzMAL3JkcHU1LzQAL3JkcHU1LzUAL3JkcHU2LzEAL3JkcHU2LzIAL3JkcHU2LzMAL3JkcHU2LzQAL3JkcHU2LzUAL3JkcHU2LzYAL3JkcHU3LzEAL3JkcHU3LzIAL3JkcHU3LzMAL3JkcHU3LzQAL3JkcHU3LzUAL3JkcHU3LzYAL3JkcHU3LzcAL3JkcHU4LzEAL3JkcHU4LzIAL3JkcHU4LzMAL3JkcHU4LzQAL3JkcHU4LzUAL3JkcHU4LzYAL3JkcHU4LzcAL3JkcHU4LzgAL3JkcHU5LzEAL3JkcHU5LzIAL3JkcHU5LzMAL3JkcHU5LzQAL3JkcHU5LzUAL3JkcHU5LzYAL3JkcHU5LzcAL3JkcHU5LzgAL3JkcHU5LzkAL3JkeWxidTEwLzEAL3JkeWxidTEwLzEwAC9yZHlsYnUxMC8yAC9yZHlsYnUxMC8zAC9yZHlsYnUxMC80AC9yZHlsYnUxMC81AC9yZHlsYnUxMC82AC9yZHlsYnUxMC83AC9yZHlsYnUxMC84AC9yZHlsYnUxMC85AC9yZHlsYnUxMS8xAC9yZHlsYnUxMS8xMAAvcmR5bGJ1MTEvMTEAL3JkeWxidTExLzIAL3JkeWxidTExLzMAL3JkeWxidTExLzQAL3JkeWxidTExLzUAL3JkeWxidTExLzYAL3JkeWxidTExLzcAL3JkeWxidTExLzgAL3JkeWxidTExLzkAL3JkeWxidTMvMQAvcmR5bGJ1My8yAC9yZHlsYnUzLzMAL3JkeWxidTQvMQAvcmR5bGJ1NC8yAC9yZHlsYnU0LzMAL3JkeWxidTQvNAAvcmR5bGJ1NS8xAC9yZHlsYnU1LzIAL3JkeWxidTUvMwAvcmR5bGJ1NS80AC9yZHlsYnU1LzUAL3JkeWxidTYvMQAvcmR5bGJ1Ni8yAC9yZHlsYnU2LzMAL3JkeWxidTYvNAAvcmR5bGJ1Ni81AC9yZHlsYnU2LzYAL3JkeWxidTcvMQAvcmR5bGJ1Ny8yAC9yZHlsYnU3LzMAL3JkeWxidTcvNAAvcmR5bGJ1Ny81AC9yZHlsYnU3LzYAL3JkeWxidTcvNwAvcmR5bGJ1OC8xAC9yZHlsYnU4LzIAL3JkeWxidTgvMwAvcmR5bGJ1OC80AC9yZHlsYnU4LzUAL3JkeWxidTgvNgAvcmR5bGJ1OC83AC9yZHlsYnU4LzgAL3JkeWxidTkvMQAvcmR5bGJ1OS8yAC9yZHlsYnU5LzMAL3JkeWxidTkvNAAvcmR5bGJ1OS81AC9yZHlsYnU5LzYAL3JkeWxidTkvNwAvcmR5bGJ1OS84AC9yZHlsYnU5LzkAL3JkeWxnbjEwLzEAL3JkeWxnbjEwLzEwAC9yZHlsZ24xMC8yAC9yZHlsZ24xMC8zAC9yZHlsZ24xMC80AC9yZHlsZ24xMC81AC9yZHlsZ24xMC82AC9yZHlsZ24xMC83AC9yZHlsZ24xMC84AC9yZHlsZ24xMC85AC9yZHlsZ24xMS8xAC9yZHlsZ24xMS8xMAAvcmR5bGduMTEvMTEAL3JkeWxnbjExLzIAL3JkeWxnbjExLzMAL3JkeWxnbjExLzQAL3JkeWxnbjExLzUAL3JkeWxnbjExLzYAL3JkeWxnbjExLzcAL3JkeWxnbjExLzgAL3JkeWxnbjExLzkAL3JkeWxnbjMvMQAvcmR5bGduMy8yAC9yZHlsZ24zLzMAL3JkeWxnbjQvMQAvcmR5bGduNC8yAC9yZHlsZ240LzMAL3JkeWxnbjQvNAAvcmR5bGduNS8xAC9yZHlsZ241LzIAL3JkeWxnbjUvMwAvcmR5bGduNS80AC9yZHlsZ241LzUAL3JkeWxnbjYvMQAvcmR5bGduNi8yAC9yZHlsZ242LzMAL3JkeWxnbjYvNAAvcmR5bGduNi81AC9yZHlsZ242LzYAL3JkeWxnbjcvMQAvcmR5bGduNy8yAC9yZHlsZ243LzMAL3JkeWxnbjcvNAAvcmR5bGduNy81AC9yZHlsZ243LzYAL3JkeWxnbjcvNwAvcmR5bGduOC8xAC9yZHlsZ244LzIAL3JkeWxnbjgvMwAvcmR5bGduOC80AC9yZHlsZ244LzUAL3JkeWxnbjgvNgAvcmR5bGduOC83AC9yZHlsZ244LzgAL3JkeWxnbjkvMQAvcmR5bGduOS8yAC9yZHlsZ245LzMAL3JkeWxnbjkvNAAvcmR5bGduOS81AC9yZHlsZ245LzYAL3JkeWxnbjkvNwAvcmR5bGduOS84AC9yZHlsZ245LzkAL3JlZHMzLzEAL3JlZHMzLzIAL3JlZHMzLzMAL3JlZHM0LzEAL3JlZHM0LzIAL3JlZHM0LzMAL3JlZHM0LzQAL3JlZHM1LzEAL3JlZHM1LzIAL3JlZHM1LzMAL3JlZHM1LzQAL3JlZHM1LzUAL3JlZHM2LzEAL3JlZHM2LzIAL3JlZHM2LzMAL3JlZHM2LzQAL3JlZHM2LzUAL3JlZHM2LzYAL3JlZHM3LzEAL3JlZHM3LzIAL3JlZHM3LzMAL3JlZHM3LzQAL3JlZHM3LzUAL3JlZHM3LzYAL3JlZHM3LzcAL3JlZHM4LzEAL3JlZHM4LzIAL3JlZHM4LzMAL3JlZHM4LzQAL3JlZHM4LzUAL3JlZHM4LzYAL3JlZHM4LzcAL3JlZHM4LzgAL3JlZHM5LzEAL3JlZHM5LzIAL3JlZHM5LzMAL3JlZHM5LzQAL3JlZHM5LzUAL3JlZHM5LzYAL3JlZHM5LzcAL3JlZHM5LzgAL3JlZHM5LzkAL3NldDEzLzEAL3NldDEzLzIAL3NldDEzLzMAL3NldDE0LzEAL3NldDE0LzIAL3NldDE0LzMAL3NldDE0LzQAL3NldDE1LzEAL3NldDE1LzIAL3NldDE1LzMAL3NldDE1LzQAL3NldDE1LzUAL3NldDE2LzEAL3NldDE2LzIAL3NldDE2LzMAL3NldDE2LzQAL3NldDE2LzUAL3NldDE2LzYAL3NldDE3LzEAL3NldDE3LzIAL3NldDE3LzMAL3NldDE3LzQAL3NldDE3LzUAL3NldDE3LzYAL3NldDE3LzcAL3NldDE4LzEAL3NldDE4LzIAL3NldDE4LzMAL3NldDE4LzQAL3NldDE4LzUAL3NldDE4LzYAL3NldDE4LzcAL3NldDE4LzgAL3NldDE5LzEAL3NldDE5LzIAL3NldDE5LzMAL3NldDE5LzQAL3NldDE5LzUAL3NldDE5LzYAL3NldDE5LzcAL3NldDE5LzgAL3NldDE5LzkAL3NldDIzLzEAL3NldDIzLzIAL3NldDIzLzMAL3NldDI0LzEAL3NldDI0LzIAL3NldDI0LzMAL3NldDI0LzQAL3NldDI1LzEAL3NldDI1LzIAL3NldDI1LzMAL3NldDI1LzQAL3NldDI1LzUAL3NldDI2LzEAL3NldDI2LzIAL3NldDI2LzMAL3NldDI2LzQAL3NldDI2LzUAL3NldDI2LzYAL3NldDI3LzEAL3NldDI3LzIAL3NldDI3LzMAL3NldDI3LzQAL3NldDI3LzUAL3NldDI3LzYAL3NldDI3LzcAL3NldDI4LzEAL3NldDI4LzIAL3NldDI4LzMAL3NldDI4LzQAL3NldDI4LzUAL3NldDI4LzYAL3NldDI4LzcAL3NldDI4LzgAL3NldDMxMC8xAC9zZXQzMTAvMTAAL3NldDMxMC8yAC9zZXQzMTAvMwAvc2V0MzEwLzQAL3NldDMxMC81AC9zZXQzMTAvNgAvc2V0MzEwLzcAL3NldDMxMC84AC9zZXQzMTAvOQAvc2V0MzExLzEAL3NldDMxMS8xMAAvc2V0MzExLzExAC9zZXQzMTEvMgAvc2V0MzExLzMAL3NldDMxMS80AC9zZXQzMTEvNQAvc2V0MzExLzYAL3NldDMxMS83AC9zZXQzMTEvOAAvc2V0MzExLzkAL3NldDMxMi8xAC9zZXQzMTIvMTAAL3NldDMxMi8xMQAvc2V0MzEyLzEyAC9zZXQzMTIvMgAvc2V0MzEyLzMAL3NldDMxMi80AC9zZXQzMTIvNQAvc2V0MzEyLzYAL3NldDMxMi83AC9zZXQzMTIvOAAvc2V0MzEyLzkAL3NldDMzLzEAL3NldDMzLzIAL3NldDMzLzMAL3NldDM0LzEAL3NldDM0LzIAL3NldDM0LzMAL3NldDM0LzQAL3NldDM1LzEAL3NldDM1LzIAL3NldDM1LzMAL3NldDM1LzQAL3NldDM1LzUAL3NldDM2LzEAL3NldDM2LzIAL3NldDM2LzMAL3NldDM2LzQAL3NldDM2LzUAL3NldDM2LzYAL3NldDM3LzEAL3NldDM3LzIAL3NldDM3LzMAL3NldDM3LzQAL3NldDM3LzUAL3NldDM3LzYAL3NldDM3LzcAL3NldDM4LzEAL3NldDM4LzIAL3NldDM4LzMAL3NldDM4LzQAL3NldDM4LzUAL3NldDM4LzYAL3NldDM4LzcAL3NldDM4LzgAL3NldDM5LzEAL3NldDM5LzIAL3NldDM5LzMAL3NldDM5LzQAL3NldDM5LzUAL3NldDM5LzYAL3NldDM5LzcAL3NldDM5LzgAL3NldDM5LzkAL3NwZWN0cmFsMTAvMQAvc3BlY3RyYWwxMC8xMAAvc3BlY3RyYWwxMC8yAC9zcGVjdHJhbDEwLzMAL3NwZWN0cmFsMTAvNAAvc3BlY3RyYWwxMC81AC9zcGVjdHJhbDEwLzYAL3NwZWN0cmFsMTAvNwAvc3BlY3RyYWwxMC84AC9zcGVjdHJhbDEwLzkAL3NwZWN0cmFsMTEvMQAvc3BlY3RyYWwxMS8xMAAvc3BlY3RyYWwxMS8xMQAvc3BlY3RyYWwxMS8yAC9zcGVjdHJhbDExLzMAL3NwZWN0cmFsMTEvNAAvc3BlY3RyYWwxMS81AC9zcGVjdHJhbDExLzYAL3NwZWN0cmFsMTEvNwAvc3BlY3RyYWwxMS84AC9zcGVjdHJhbDExLzkAL3NwZWN0cmFsMy8xAC9zcGVjdHJhbDMvMgAvc3BlY3RyYWwzLzMAL3NwZWN0cmFsNC8xAC9zcGVjdHJhbDQvMgAvc3BlY3RyYWw0LzMAL3NwZWN0cmFsNC80AC9zcGVjdHJhbDUvMQAvc3BlY3RyYWw1LzIAL3NwZWN0cmFsNS8zAC9zcGVjdHJhbDUvNAAvc3BlY3RyYWw1LzUAL3NwZWN0cmFsNi8xAC9zcGVjdHJhbDYvMgAvc3BlY3RyYWw2LzMAL3NwZWN0cmFsNi80AC9zcGVjdHJhbDYvNQAvc3BlY3RyYWw2LzYAL3NwZWN0cmFsNy8xAC9zcGVjdHJhbDcvMgAvc3BlY3RyYWw3LzMAL3NwZWN0cmFsNy80AC9zcGVjdHJhbDcvNQAvc3BlY3RyYWw3LzYAL3NwZWN0cmFsNy83AC9zcGVjdHJhbDgvMQAvc3BlY3RyYWw4LzIAL3NwZWN0cmFsOC8zAC9zcGVjdHJhbDgvNAAvc3BlY3RyYWw4LzUAL3NwZWN0cmFsOC82AC9zcGVjdHJhbDgvNwAvc3BlY3RyYWw4LzgAL3NwZWN0cmFsOS8xAC9zcGVjdHJhbDkvMgAvc3BlY3RyYWw5LzMAL3NwZWN0cmFsOS80AC9zcGVjdHJhbDkvNQAvc3BlY3RyYWw5LzYAL3NwZWN0cmFsOS83AC9zcGVjdHJhbDkvOAAvc3BlY3RyYWw5LzkAL3N2Zy9hbGljZWJsdWUAL3N2Zy9hbnRpcXVld2hpdGUAL3N2Zy9hcXVhAC9zdmcvYXF1YW1hcmluZQAvc3ZnL2F6dXJlAC9zdmcvYmVpZ2UAL3N2Zy9iaXNxdWUAL3N2Zy9ibGFjawAvc3ZnL2JsYW5jaGVkYWxtb25kAC9zdmcvYmx1ZQAvc3ZnL2JsdWV2aW9sZXQAL3N2Zy9icm93bgAvc3ZnL2J1cmx5d29vZAAvc3ZnL2NhZGV0Ymx1ZQAvc3ZnL2NoYXJ0cmV1c2UAL3N2Zy9jaG9jb2xhdGUAL3N2Zy9jb3JhbAAvc3ZnL2Nvcm5mbG93ZXJibHVlAC9zdmcvY29ybnNpbGsAL3N2Zy9jcmltc29uAC9zdmcvY3lhbgAvc3ZnL2RhcmtibHVlAC9zdmcvZGFya2N5YW4AL3N2Zy9kYXJrZ29sZGVucm9kAC9zdmcvZGFya2dyYXkAL3N2Zy9kYXJrZ3JlZW4AL3N2Zy9kYXJrZ3JleQAvc3ZnL2RhcmtraGFraQAvc3ZnL2RhcmttYWdlbnRhAC9zdmcvZGFya29saXZlZ3JlZW4AL3N2Zy9kYXJrb3JhbmdlAC9zdmcvZGFya29yY2hpZAAvc3ZnL2RhcmtyZWQAL3N2Zy9kYXJrc2FsbW9uAC9zdmcvZGFya3NlYWdyZWVuAC9zdmcvZGFya3NsYXRlYmx1ZQAvc3ZnL2RhcmtzbGF0ZWdyYXkAL3N2Zy9kYXJrc2xhdGVncmV5AC9zdmcvZGFya3R1cnF1b2lzZQAvc3ZnL2Rhcmt2aW9sZXQAL3N2Zy9kZWVwcGluawAvc3ZnL2RlZXBza3libHVlAC9zdmcvZGltZ3JheQAvc3ZnL2RpbWdyZXkAL3N2Zy9kb2RnZXJibHVlAC9zdmcvZmlyZWJyaWNrAC9zdmcvZmxvcmFsd2hpdGUAL3N2Zy9mb3Jlc3RncmVlbgAvc3ZnL2Z1Y2hzaWEAL3N2Zy9nYWluc2Jvcm8AL3N2Zy9naG9zdHdoaXRlAC9zdmcvZ29sZAAvc3ZnL2dvbGRlbnJvZAAvc3ZnL2dyYXkAL3N2Zy9ncmVlbgAvc3ZnL2dyZWVueWVsbG93AC9zdmcvZ3JleQAvc3ZnL2hvbmV5ZGV3AC9zdmcvaG90cGluawAvc3ZnL2luZGlhbnJlZAAvc3ZnL2luZGlnbwAvc3ZnL2l2b3J5AC9zdmcva2hha2kAL3N2Zy9sYXZlbmRlcgAvc3ZnL2xhdmVuZGVyYmx1c2gAL3N2Zy9sYXduZ3JlZW4AL3N2Zy9sZW1vbmNoaWZmb24AL3N2Zy9saWdodGJsdWUAL3N2Zy9saWdodGNvcmFsAC9zdmcvbGlnaHRjeWFuAC9zdmcvbGlnaHRnb2xkZW5yb2R5ZWxsb3cAL3N2Zy9saWdodGdyYXkAL3N2Zy9saWdodGdyZWVuAC9zdmcvbGlnaHRncmV5AC9zdmcvbGlnaHRwaW5rAC9zdmcvbGlnaHRzYWxtb24AL3N2Zy9saWdodHNlYWdyZWVuAC9zdmcvbGlnaHRza3libHVlAC9zdmcvbGlnaHRzbGF0ZWdyYXkAL3N2Zy9saWdodHNsYXRlZ3JleQAvc3ZnL2xpZ2h0c3RlZWxibHVlAC9zdmcvbGlnaHR5ZWxsb3cAL3N2Zy9saW1lAC9zdmcvbGltZWdyZWVuAC9zdmcvbGluZW4AL3N2Zy9tYWdlbnRhAC9zdmcvbWFyb29uAC9zdmcvbWVkaXVtYXF1YW1hcmluZQAvc3ZnL21lZGl1bWJsdWUAL3N2Zy9tZWRpdW1vcmNoaWQAL3N2Zy9tZWRpdW1wdXJwbGUAL3N2Zy9tZWRpdW1zZWFncmVlbgAvc3ZnL21lZGl1bXNsYXRlYmx1ZQAvc3ZnL21lZGl1bXNwcmluZ2dyZWVuAC9zdmcvbWVkaXVtdHVycXVvaXNlAC9zdmcvbWVkaXVtdmlvbGV0cmVkAC9zdmcvbWlkbmlnaHRibHVlAC9zdmcvbWludGNyZWFtAC9zdmcvbWlzdHlyb3NlAC9zdmcvbW9jY2FzaW4AL3N2Zy9uYXZham93aGl0ZQAvc3ZnL25hdnkAL3N2Zy9vbGRsYWNlAC9zdmcvb2xpdmUAL3N2Zy9vbGl2ZWRyYWIAL3N2Zy9vcmFuZ2UAL3N2Zy9vcmFuZ2VyZWQAL3N2Zy9vcmNoaWQAL3N2Zy9wYWxlZ29sZGVucm9kAC9zdmcvcGFsZWdyZWVuAC9zdmcvcGFsZXR1cnF1b2lzZQAvc3ZnL3BhbGV2aW9sZXRyZWQAL3N2Zy9wYXBheWF3aGlwAC9zdmcvcGVhY2hwdWZmAC9zdmcvcGVydQAvc3ZnL3BpbmsAL3N2Zy9wbHVtAC9zdmcvcG93ZGVyYmx1ZQAvc3ZnL3B1cnBsZQAvc3ZnL3JlZAAvc3ZnL3Jvc3licm93bgAvc3ZnL3JveWFsYmx1ZQAvc3ZnL3NhZGRsZWJyb3duAC9zdmcvc2FsbW9uAC9zdmcvc2FuZHlicm93bgAvc3ZnL3NlYWdyZWVuAC9zdmcvc2Vhc2hlbGwAL3N2Zy9zaWVubmEAL3N2Zy9zaWx2ZXIAL3N2Zy9za3libHVlAC9zdmcvc2xhdGVibHVlAC9zdmcvc2xhdGVncmF5AC9zdmcvc2xhdGVncmV5AC9zdmcvc25vdwAvc3ZnL3NwcmluZ2dyZWVuAC9zdmcvc3RlZWxibHVlAC9zdmcvdGFuAC9zdmcvdGVhbAAvc3ZnL3RoaXN0bGUAL3N2Zy90b21hdG8AL3N2Zy90dXJxdW9pc2UAL3N2Zy92aW9sZXQAL3N2Zy93aGVhdAAvc3ZnL3doaXRlAC9zdmcvd2hpdGVzbW9rZQAvc3ZnL3llbGxvdwAvc3ZnL3llbGxvd2dyZWVuAC95bGduMy8xAC95bGduMy8yAC95bGduMy8zAC95bGduNC8xAC95bGduNC8yAC95bGduNC8zAC95bGduNC80AC95bGduNS8xAC95bGduNS8yAC95bGduNS8zAC95bGduNS80AC95bGduNS81AC95bGduNi8xAC95bGduNi8yAC95bGduNi8zAC95bGduNi80AC95bGduNi81AC95bGduNi82AC95bGduNy8xAC95bGduNy8yAC95bGduNy8zAC95bGduNy80AC95bGduNy81AC95bGduNy82AC95bGduNy83AC95bGduOC8xAC95bGduOC8yAC95bGduOC8zAC95bGduOC80AC95bGduOC81AC95bGduOC82AC95bGduOC83AC95bGduOC84AC95bGduOS8xAC95bGduOS8yAC95bGduOS8zAC95bGduOS80AC95bGduOS81AC95bGduOS82AC95bGduOS83AC95bGduOS84AC95bGduOS85AC95bGduYnUzLzEAL3lsZ25idTMvMgAveWxnbmJ1My8zAC95bGduYnU0LzEAL3lsZ25idTQvMgAveWxnbmJ1NC8zAC95bGduYnU0LzQAL3lsZ25idTUvMQAveWxnbmJ1NS8yAC95bGduYnU1LzMAL3lsZ25idTUvNAAveWxnbmJ1NS81AC95bGduYnU2LzEAL3lsZ25idTYvMgAveWxnbmJ1Ni8zAC95bGduYnU2LzQAL3lsZ25idTYvNQAveWxnbmJ1Ni82AC95bGduYnU3LzEAL3lsZ25idTcvMgAveWxnbmJ1Ny8zAC95bGduYnU3LzQAL3lsZ25idTcvNQAveWxnbmJ1Ny82AC95bGduYnU3LzcAL3lsZ25idTgvMQAveWxnbmJ1OC8yAC95bGduYnU4LzMAL3lsZ25idTgvNAAveWxnbmJ1OC81AC95bGduYnU4LzYAL3lsZ25idTgvNwAveWxnbmJ1OC84AC95bGduYnU5LzEAL3lsZ25idTkvMgAveWxnbmJ1OS8zAC95bGduYnU5LzQAL3lsZ25idTkvNQAveWxnbmJ1OS82AC95bGduYnU5LzcAL3lsZ25idTkvOAAveWxnbmJ1OS85AC95bG9yYnIzLzEAL3lsb3JicjMvMgAveWxvcmJyMy8zAC95bG9yYnI0LzEAL3lsb3JicjQvMgAveWxvcmJyNC8zAC95bG9yYnI0LzQAL3lsb3JicjUvMQAveWxvcmJyNS8yAC95bG9yYnI1LzMAL3lsb3JicjUvNAAveWxvcmJyNS81AC95bG9yYnI2LzEAL3lsb3JicjYvMgAveWxvcmJyNi8zAC95bG9yYnI2LzQAL3lsb3JicjYvNQAveWxvcmJyNi82AC95bG9yYnI3LzEAL3lsb3JicjcvMgAveWxvcmJyNy8zAC95bG9yYnI3LzQAL3lsb3JicjcvNQAveWxvcmJyNy82AC95bG9yYnI3LzcAL3lsb3JicjgvMQAveWxvcmJyOC8yAC95bG9yYnI4LzMAL3lsb3JicjgvNAAveWxvcmJyOC81AC95bG9yYnI4LzYAL3lsb3JicjgvNwAveWxvcmJyOC84AC95bG9yYnI5LzEAL3lsb3JicjkvMgAveWxvcmJyOS8zAC95bG9yYnI5LzQAL3lsb3JicjkvNQAveWxvcmJyOS82AC95bG9yYnI5LzcAL3lsb3JicjkvOAAveWxvcmJyOS85AC95bG9ycmQzLzEAL3lsb3JyZDMvMgAveWxvcnJkMy8zAC95bG9ycmQ0LzEAL3lsb3JyZDQvMgAveWxvcnJkNC8zAC95bG9ycmQ0LzQAL3lsb3JyZDUvMQAveWxvcnJkNS8yAC95bG9ycmQ1LzMAL3lsb3JyZDUvNAAveWxvcnJkNS81AC95bG9ycmQ2LzEAL3lsb3JyZDYvMgAveWxvcnJkNi8zAC95bG9ycmQ2LzQAL3lsb3JyZDYvNQAveWxvcnJkNi82AC95bG9ycmQ3LzEAL3lsb3JyZDcvMgAveWxvcnJkNy8zAC95bG9ycmQ3LzQAL3lsb3JyZDcvNQAveWxvcnJkNy82AC95bG9ycmQ3LzcAL3lsb3JyZDgvMQAveWxvcnJkOC8yAC95bG9ycmQ4LzMAL3lsb3JyZDgvNAAveWxvcnJkOC81AC95bG9ycmQ4LzYAL3lsb3JyZDgvNwAveWxvcnJkOC84AC95bG9ycmQ5LzEAL3lsb3JyZDkvMgAveWxvcnJkOS8zAC95bG9ycmQ5LzQAL3lsb3JyZDkvNQAveWxvcnJkOS82AC95bG9ycmQ5LzcAL3lsb3JyZDkvOAAveWxvcnJkOS85AGFsaWNlYmx1ZQBhbnRpcXVld2hpdGUAYW50aXF1ZXdoaXRlMQBhbnRpcXVld2hpdGUyAGFudGlxdWV3aGl0ZTMAYW50aXF1ZXdoaXRlNABhcXVhbWFyaW5lAGFxdWFtYXJpbmUxAGFxdWFtYXJpbmUyAGFxdWFtYXJpbmUzAGFxdWFtYXJpbmU0AGF6dXJlAGF6dXJlMQBhenVyZTIAYXp1cmUzAGF6dXJlNABiZWlnZQBiaXNxdWUAYmlzcXVlMQBiaXNxdWUyAGJpc3F1ZTMAYmlzcXVlNABibGFuY2hlZGFsbW9uZABibHVlAGJsdWUxAGJsdWUyAGJsdWUzAGJsdWU0AGJsdWV2aW9sZXQAYnJvd24AYnJvd24xAGJyb3duMgBicm93bjMAYnJvd240AGJ1cmx5d29vZABidXJseXdvb2QxAGJ1cmx5d29vZDIAYnVybHl3b29kMwBidXJseXdvb2Q0AGNhZGV0Ymx1ZQBjYWRldGJsdWUxAGNhZGV0Ymx1ZTIAY2FkZXRibHVlMwBjYWRldGJsdWU0AGNoYXJ0cmV1c2UAY2hhcnRyZXVzZTEAY2hhcnRyZXVzZTIAY2hhcnRyZXVzZTMAY2hhcnRyZXVzZTQAY2hvY29sYXRlAGNob2NvbGF0ZTEAY2hvY29sYXRlMgBjaG9jb2xhdGUzAGNob2NvbGF0ZTQAY29yYWwAY29yYWwxAGNvcmFsMgBjb3JhbDMAY29yYWw0AGNvcm5mbG93ZXJibHVlAGNvcm5zaWxrAGNvcm5zaWxrMQBjb3Juc2lsazIAY29ybnNpbGszAGNvcm5zaWxrNABjcmltc29uAGN5YW4AY3lhbjEAY3lhbjIAY3lhbjMAY3lhbjQAZGFya2dvbGRlbnJvZABkYXJrZ29sZGVucm9kMQBkYXJrZ29sZGVucm9kMgBkYXJrZ29sZGVucm9kMwBkYXJrZ29sZGVucm9kNABkYXJrZ3JlZW4AZGFya2toYWtpAGRhcmtvbGl2ZWdyZWVuAGRhcmtvbGl2ZWdyZWVuMQBkYXJrb2xpdmVncmVlbjIAZGFya29saXZlZ3JlZW4zAGRhcmtvbGl2ZWdyZWVuNABkYXJrb3JhbmdlAGRhcmtvcmFuZ2UxAGRhcmtvcmFuZ2UyAGRhcmtvcmFuZ2UzAGRhcmtvcmFuZ2U0AGRhcmtvcmNoaWQAZGFya29yY2hpZDEAZGFya29yY2hpZDIAZGFya29yY2hpZDMAZGFya29yY2hpZDQAZGFya3NhbG1vbgBkYXJrc2VhZ3JlZW4AZGFya3NlYWdyZWVuMQBkYXJrc2VhZ3JlZW4yAGRhcmtzZWFncmVlbjMAZGFya3NlYWdyZWVuNABkYXJrc2xhdGVibHVlAGRhcmtzbGF0ZWdyYXkAZGFya3NsYXRlZ3JheTEAZGFya3NsYXRlZ3JheTIAZGFya3NsYXRlZ3JheTMAZGFya3NsYXRlZ3JheTQAZGFya3NsYXRlZ3JleQBkYXJrdHVycXVvaXNlAGRhcmt2aW9sZXQAZGVlcHBpbmsAZGVlcHBpbmsxAGRlZXBwaW5rMgBkZWVwcGluazMAZGVlcHBpbms0AGRlZXBza3libHVlAGRlZXBza3libHVlMQBkZWVwc2t5Ymx1ZTIAZGVlcHNreWJsdWUzAGRlZXBza3libHVlNABkaW1ncmF5AGRpbWdyZXkAZG9kZ2VyYmx1ZQBkb2RnZXJibHVlMQBkb2RnZXJibHVlMgBkb2RnZXJibHVlMwBkb2RnZXJibHVlNABmaXJlYnJpY2sAZmlyZWJyaWNrMQBmaXJlYnJpY2syAGZpcmVicmljazMAZmlyZWJyaWNrNABmbG9yYWx3aGl0ZQBmb3Jlc3RncmVlbgBnYWluc2Jvcm8AZ2hvc3R3aGl0ZQBnb2xkAGdvbGQxAGdvbGQyAGdvbGQzAGdvbGQ0AGdvbGRlbnJvZABnb2xkZW5yb2QxAGdvbGRlbnJvZDIAZ29sZGVucm9kMwBnb2xkZW5yb2Q0AGdyYXkAZ3JheTAAZ3JheTEAZ3JheTEwAGdyYXkxMDAAZ3JheTExAGdyYXkxMgBncmF5MTMAZ3JheTE0AGdyYXkxNQBncmF5MTYAZ3JheTE3AGdyYXkxOABncmF5MTkAZ3JheTIAZ3JheTIwAGdyYXkyMQBncmF5MjIAZ3JheTIzAGdyYXkyNABncmF5MjUAZ3JheTI2AGdyYXkyNwBncmF5MjgAZ3JheTI5AGdyYXkzAGdyYXkzMABncmF5MzEAZ3JheTMyAGdyYXkzMwBncmF5MzQAZ3JheTM1AGdyYXkzNgBncmF5MzcAZ3JheTM4AGdyYXkzOQBncmF5NABncmF5NDAAZ3JheTQxAGdyYXk0MgBncmF5NDMAZ3JheTQ0AGdyYXk0NQBncmF5NDYAZ3JheTQ3AGdyYXk0OABncmF5NDkAZ3JheTUAZ3JheTUwAGdyYXk1MQBncmF5NTIAZ3JheTUzAGdyYXk1NABncmF5NTUAZ3JheTU2AGdyYXk1NwBncmF5NTgAZ3JheTU5AGdyYXk2AGdyYXk2MABncmF5NjEAZ3JheTYyAGdyYXk2MwBncmF5NjQAZ3JheTY1AGdyYXk2NgBncmF5NjcAZ3JheTY4AGdyYXk2OQBncmF5NwBncmF5NzAAZ3JheTcxAGdyYXk3MgBncmF5NzMAZ3JheTc0AGdyYXk3NQBncmF5NzYAZ3JheTc3AGdyYXk3OABncmF5NzkAZ3JheTgAZ3JheTgwAGdyYXk4MQBncmF5ODIAZ3JheTgzAGdyYXk4NABncmF5ODUAZ3JheTg2AGdyYXk4NwBncmF5ODgAZ3JheTg5AGdyYXk5AGdyYXk5MABncmF5OTEAZ3JheTkyAGdyYXk5MwBncmF5OTQAZ3JheTk1AGdyYXk5NgBncmF5OTcAZ3JheTk4AGdyYXk5OQBncmVlbgBncmVlbjEAZ3JlZW4yAGdyZWVuMwBncmVlbjQAZ3JlZW55ZWxsb3cAZ3JleQBncmV5MABncmV5MQBncmV5MTAAZ3JleTEwMABncmV5MTEAZ3JleTEyAGdyZXkxMwBncmV5MTQAZ3JleTE1AGdyZXkxNgBncmV5MTcAZ3JleTE4AGdyZXkxOQBncmV5MgBncmV5MjAAZ3JleTIxAGdyZXkyMgBncmV5MjMAZ3JleTI0AGdyZXkyNQBncmV5MjYAZ3JleTI3AGdyZXkyOABncmV5MjkAZ3JleTMAZ3JleTMwAGdyZXkzMQBncmV5MzIAZ3JleTMzAGdyZXkzNABncmV5MzUAZ3JleTM2AGdyZXkzNwBncmV5MzgAZ3JleTM5AGdyZXk0AGdyZXk0MABncmV5NDEAZ3JleTQyAGdyZXk0MwBncmV5NDQAZ3JleTQ1AGdyZXk0NgBncmV5NDcAZ3JleTQ4AGdyZXk0OQBncmV5NQBncmV5NTAAZ3JleTUxAGdyZXk1MgBncmV5NTMAZ3JleTU0AGdyZXk1NQBncmV5NTYAZ3JleTU3AGdyZXk1OABncmV5NTkAZ3JleTYAZ3JleTYwAGdyZXk2MQBncmV5NjIAZ3JleTYzAGdyZXk2NABncmV5NjUAZ3JleTY2AGdyZXk2NwBncmV5NjgAZ3JleTY5AGdyZXk3AGdyZXk3MABncmV5NzEAZ3JleTcyAGdyZXk3MwBncmV5NzQAZ3JleTc1AGdyZXk3NgBncmV5NzcAZ3JleTc4AGdyZXk3OQBncmV5OABncmV5ODAAZ3JleTgxAGdyZXk4MgBncmV5ODMAZ3JleTg0AGdyZXk4NQBncmV5ODYAZ3JleTg3AGdyZXk4OABncmV5ODkAZ3JleTkAZ3JleTkwAGdyZXk5MQBncmV5OTIAZ3JleTkzAGdyZXk5NABncmV5OTUAZ3JleTk2AGdyZXk5NwBncmV5OTgAZ3JleTk5AGhvbmV5ZGV3AGhvbmV5ZGV3MQBob25leWRldzIAaG9uZXlkZXczAGhvbmV5ZGV3NABob3RwaW5rAGhvdHBpbmsxAGhvdHBpbmsyAGhvdHBpbmszAGhvdHBpbms0AGluZGlhbnJlZABpbmRpYW5yZWQxAGluZGlhbnJlZDIAaW5kaWFucmVkMwBpbmRpYW5yZWQ0AGluZGlnbwBpbnZpcwBpdm9yeQBpdm9yeTEAaXZvcnkyAGl2b3J5MwBpdm9yeTQAa2hha2kAa2hha2kxAGtoYWtpMgBraGFraTMAa2hha2k0AGxhdmVuZGVyAGxhdmVuZGVyYmx1c2gAbGF2ZW5kZXJibHVzaDEAbGF2ZW5kZXJibHVzaDIAbGF2ZW5kZXJibHVzaDMAbGF2ZW5kZXJibHVzaDQAbGF3bmdyZWVuAGxlbW9uY2hpZmZvbgBsZW1vbmNoaWZmb24xAGxlbW9uY2hpZmZvbjIAbGVtb25jaGlmZm9uMwBsZW1vbmNoaWZmb240AGxpZ2h0Ymx1ZQBsaWdodGJsdWUxAGxpZ2h0Ymx1ZTIAbGlnaHRibHVlMwBsaWdodGJsdWU0AGxpZ2h0Y29yYWwAbGlnaHRjeWFuAGxpZ2h0Y3lhbjEAbGlnaHRjeWFuMgBsaWdodGN5YW4zAGxpZ2h0Y3lhbjQAbGlnaHRnb2xkZW5yb2QAbGlnaHRnb2xkZW5yb2QxAGxpZ2h0Z29sZGVucm9kMgBsaWdodGdvbGRlbnJvZDMAbGlnaHRnb2xkZW5yb2Q0AGxpZ2h0Z29sZGVucm9keWVsbG93AGxpZ2h0Z3JheQBsaWdodGdyZXkAbGlnaHRwaW5rAGxpZ2h0cGluazEAbGlnaHRwaW5rMgBsaWdodHBpbmszAGxpZ2h0cGluazQAbGlnaHRzYWxtb24AbGlnaHRzYWxtb24xAGxpZ2h0c2FsbW9uMgBsaWdodHNhbG1vbjMAbGlnaHRzYWxtb240AGxpZ2h0c2VhZ3JlZW4AbGlnaHRza3libHVlAGxpZ2h0c2t5Ymx1ZTEAbGlnaHRza3libHVlMgBsaWdodHNreWJsdWUzAGxpZ2h0c2t5Ymx1ZTQAbGlnaHRzbGF0ZWJsdWUAbGlnaHRzbGF0ZWdyYXkAbGlnaHRzbGF0ZWdyZXkAbGlnaHRzdGVlbGJsdWUAbGlnaHRzdGVlbGJsdWUxAGxpZ2h0c3RlZWxibHVlMgBsaWdodHN0ZWVsYmx1ZTMAbGlnaHRzdGVlbGJsdWU0AGxpZ2h0eWVsbG93AGxpZ2h0eWVsbG93MQBsaWdodHllbGxvdzIAbGlnaHR5ZWxsb3czAGxpZ2h0eWVsbG93NABsaW1lZ3JlZW4AbGluZW4AbWFnZW50YQBtYWdlbnRhMQBtYWdlbnRhMgBtYWdlbnRhMwBtYWdlbnRhNABtYXJvb24AbWFyb29uMQBtYXJvb24yAG1hcm9vbjMAbWFyb29uNABtZWRpdW1hcXVhbWFyaW5lAG1lZGl1bWJsdWUAbWVkaXVtb3JjaGlkAG1lZGl1bW9yY2hpZDEAbWVkaXVtb3JjaGlkMgBtZWRpdW1vcmNoaWQzAG1lZGl1bW9yY2hpZDQAbWVkaXVtcHVycGxlAG1lZGl1bXB1cnBsZTEAbWVkaXVtcHVycGxlMgBtZWRpdW1wdXJwbGUzAG1lZGl1bXB1cnBsZTQAbWVkaXVtc2VhZ3JlZW4AbWVkaXVtc2xhdGVibHVlAG1lZGl1bXNwcmluZ2dyZWVuAG1lZGl1bXR1cnF1b2lzZQBtZWRpdW12aW9sZXRyZWQAbWlkbmlnaHRibHVlAG1pbnRjcmVhbQBtaXN0eXJvc2UAbWlzdHlyb3NlMQBtaXN0eXJvc2UyAG1pc3R5cm9zZTMAbWlzdHlyb3NlNABtb2NjYXNpbgBuYXZham93aGl0ZQBuYXZham93aGl0ZTEAbmF2YWpvd2hpdGUyAG5hdmFqb3doaXRlMwBuYXZham93aGl0ZTQAbmF2eQBuYXZ5Ymx1ZQBub25lAG9sZGxhY2UAb2xpdmVkcmFiAG9saXZlZHJhYjEAb2xpdmVkcmFiMgBvbGl2ZWRyYWIzAG9saXZlZHJhYjQAb3JhbmdlAG9yYW5nZTEAb3JhbmdlMgBvcmFuZ2UzAG9yYW5nZTQAb3JhbmdlcmVkAG9yYW5nZXJlZDEAb3JhbmdlcmVkMgBvcmFuZ2VyZWQzAG9yYW5nZXJlZDQAb3JjaGlkAG9yY2hpZDEAb3JjaGlkMgBvcmNoaWQzAG9yY2hpZDQAcGFsZWdvbGRlbnJvZABwYWxlZ3JlZW4AcGFsZWdyZWVuMQBwYWxlZ3JlZW4yAHBhbGVncmVlbjMAcGFsZWdyZWVuNABwYWxldHVycXVvaXNlAHBhbGV0dXJxdW9pc2UxAHBhbGV0dXJxdW9pc2UyAHBhbGV0dXJxdW9pc2UzAHBhbGV0dXJxdW9pc2U0AHBhbGV2aW9sZXRyZWQAcGFsZXZpb2xldHJlZDEAcGFsZXZpb2xldHJlZDIAcGFsZXZpb2xldHJlZDMAcGFsZXZpb2xldHJlZDQAcGFwYXlhd2hpcABwZWFjaHB1ZmYAcGVhY2hwdWZmMQBwZWFjaHB1ZmYyAHBlYWNocHVmZjMAcGVhY2hwdWZmNABwZXJ1AHBpbmsAcGluazEAcGluazIAcGluazMAcGluazQAcGx1bQBwbHVtMQBwbHVtMgBwbHVtMwBwbHVtNABwb3dkZXJibHVlAHB1cnBsZQBwdXJwbGUxAHB1cnBsZTIAcHVycGxlMwBwdXJwbGU0AHJlZAByZWQxAHJlZDIAcmVkMwByZWQ0AHJvc3licm93bgByb3N5YnJvd24xAHJvc3licm93bjIAcm9zeWJyb3duMwByb3N5YnJvd240AHJveWFsYmx1ZQByb3lhbGJsdWUxAHJveWFsYmx1ZTIAcm95YWxibHVlMwByb3lhbGJsdWU0AHNhZGRsZWJyb3duAHNhbG1vbgBzYWxtb24xAHNhbG1vbjIAc2FsbW9uMwBzYWxtb240AHNhbmR5YnJvd24Ac2VhZ3JlZW4Ac2VhZ3JlZW4xAHNlYWdyZWVuMgBzZWFncmVlbjMAc2VhZ3JlZW40AHNlYXNoZWxsAHNlYXNoZWxsMQBzZWFzaGVsbDIAc2Vhc2hlbGwzAHNlYXNoZWxsNABzaWVubmEAc2llbm5hMQBzaWVubmEyAHNpZW5uYTMAc2llbm5hNABza3libHVlAHNreWJsdWUxAHNreWJsdWUyAHNreWJsdWUzAHNreWJsdWU0AHNsYXRlYmx1ZQBzbGF0ZWJsdWUxAHNsYXRlYmx1ZTIAc2xhdGVibHVlMwBzbGF0ZWJsdWU0AHNsYXRlZ3JheQBzbGF0ZWdyYXkxAHNsYXRlZ3JheTIAc2xhdGVncmF5MwBzbGF0ZWdyYXk0AHNsYXRlZ3JleQBzbm93AHNub3cxAHNub3cyAHNub3czAHNub3c0AHNwcmluZ2dyZWVuAHNwcmluZ2dyZWVuMQBzcHJpbmdncmVlbjIAc3ByaW5nZ3JlZW4zAHNwcmluZ2dyZWVuNABzdGVlbGJsdWUAc3RlZWxibHVlMQBzdGVlbGJsdWUyAHN0ZWVsYmx1ZTMAc3RlZWxibHVlNAB0YW4AdGFuMQB0YW4yAHRhbjMAdGFuNAB0aGlzdGxlAHRoaXN0bGUxAHRoaXN0bGUyAHRoaXN0bGUzAHRoaXN0bGU0AHRvbWF0bwB0b21hdG8xAHRvbWF0bzIAdG9tYXRvMwB0b21hdG80AHR1cnF1b2lzZQB0dXJxdW9pc2UxAHR1cnF1b2lzZTIAdHVycXVvaXNlMwB0dXJxdW9pc2U0AHZpb2xldAB2aW9sZXRyZWQAdmlvbGV0cmVkMQB2aW9sZXRyZWQyAHZpb2xldHJlZDMAdmlvbGV0cmVkNAB3aGVhdAB3aGVhdDEAd2hlYXQyAHdoZWF0MwB3aGVhdDQAd2hpdGUAd2hpdGVzbW9rZQB5ZWxsb3cAeWVsbG93MQB5ZWxsb3cyAHllbGxvdzMAeWVsbG93NAB5ZWxsb3dncmVlbgBsYWNrAGhpdGUAaWdodGdyZXkAWDExLwAvJXMvJXMAaW1hZ2VzY2FsZQBmYWxzZQBibGFjawBkb3R0ZWQAZGFzaGVkAGNwLT5zcmMAaHRtbHRhYmxlLmMAZW1pdF9odG1sX2ltZwBjcC0+c3JjWzBdAHRyYW5zcGFyZW50AF8lZAAlZAAyADMANAA1ADYANwA4ADkAMTAAMTEAMTIAMTMAMTQAMTUAMTYAMTcAMTgAMTkAMjAAQWdub2RlaW5mb190AEFnZWRnZWluZm9fdAByb3dnAGNvbGcAQWdyYXBoaW5mb190AGRlbHggPj0gMABwb3NfaHRtbF90YmwAZGVseSA+PSAwAHRhYmxlIHNpemUgdG9vIHNtYWxsIGZvciBjb250ZW50CgBmaXhlZCB0YWJsZSBzaXplIHdpdGggdW5zcGVjaWZpZWQgd2lkdGggb3IgaGVpZ2h0CgBjZWxsIHNpemUgdG9vIHNtYWxsIGZvciBjb250ZW50CgBmaXhlZCBjZWxsIHNpemUgd2l0aCB1bnNwZWNpZmllZCB3aWR0aCBvciBoZWlnaHQKAE5vIG9yIGltcHJvcGVyIGltYWdlIGZpbGU9IiVzIgoAcGVuY29sb3IALT4AZlBRLmMAUFFjaGVjawBIZWFwIG92ZXJmbG93CgAlIVBTLUFkb2JlLTIuMAovbm9kZSB7CiAgL1kgZXhjaCBkZWYKICAvWCBleGNoIGRlZgogIC95IGV4Y2ggZGVmCiAgL3ggZXhjaCBkZWYKICBuZXdwYXRoCiAgeCB5IG1vdmV0bwogIHggWSBsaW5ldG8KICBYIFkgbGluZXRvCiAgWCB5IGxpbmV0bwogIGNsb3NlcGF0aCBmaWxsCn0gZGVmCi9jZWxsIHsKICAvWSBleGNoIGRlZgogIC9YIGV4Y2ggZGVmCiAgL3kgZXhjaCBkZWYKICAveCBleGNoIGRlZgogIG5ld3BhdGgKICB4IHkgbW92ZXRvCiAgeCBZIGxpbmV0bwogIFggWSBsaW5ldG8KICBYIHkgbGluZXRvCiAgY2xvc2VwYXRoIHN0cm9rZQp9IGRlZgoAc2hvd3BhZ2UKAGZhaWxlZCBhdCBub2RlICVkWzBdCgBucC0+Y2VsbHNbMF0AbWF6ZS5jAGNoa1NncmFwaABmYWlsZWQgYXQgbm9kZSAlZFsxXQoAbnAtPmNlbGxzWzFdAGRpdGVtcwBmaW5kU1ZlcnQAJSUlJVBhZ2U6IDEgMQolJSUlUGFnZUJvdW5kaW5nQm94OiAlZCAlZCAlZCAlZAoAJWYgJWYgdHJhbnNsYXRlCgAwIDAgMSBzZXRyZ2Jjb2xvcgoAJWYgJWYgJWYgJWYgbm9kZQoAMCAwIDAgc2V0cmdiY29sb3IKACVmICVmICVmICVmIGNlbGwKADEgMCAwIHNldHJnYmNvbG9yCgB1bmV4cGVjdGVkIGNhc2UgaW4gbG9jYXRlX2VuZHBvaW50CgAwAHRyYXBlem9pZC5jAGxvY2F0ZV9lbmRwb2ludABhZGRfc2VnbWVudDogZXJyb3IKAG5ld25vZGU6IFF1ZXJ5LXRhYmxlIG92ZXJmbG93CgBuZXdub2RlAG5ld3RyYXA6IFRyYXBlem9pZC10YWJsZSBvdmVyZmxvdyAlZAoAbmV3dHJhcABpbmRleC5jAFJUcmVlU2VhcmNoAG4tPmxldmVsID49IDAAUlRyZWVJbnNlcnQAbGV2ZWwgPj0gMCAmJiBsZXZlbCA8PSAoKm4pLT5sZXZlbAByLT5ib3VuZGFyeVtpXSA8PSByLT5ib3VuZGFyeVtOVU1ESU1TICsgaV0AciAmJiBuICYmIG5ldwBSVHJlZUluc2VydDIAbGV2ZWwgPj0gMCAmJiBsZXZlbCA8PSBuLT5sZXZlbABGQUxTRQBub2RlLmMATm9kZUNvdmVyAHIgJiYgbgBQaWNrQnJhbmNoAEFkZEJyYW5jaABpIDwgTk9ERUNBUkQAbmV3AG4gJiYgaSA+PSAwICYmIGkgPCBOT0RFQ0FSRABEaXNjb25CcmFuY2gAcgByZWN0YW5nbGUuYwBSZWN0QXJlYQByICYmIHJyAENvbWJpbmVSZWN0AHIgJiYgcwBPdmVybGFwAG4Ac3BsaXQucS5jAFNwbGl0Tm9kZQBiAG4tPmNvdW50ICsgKCpubiktPmNvdW50ID09IE5PREVDQVJEICsgMQBMb2FkTm9kZXMAcQBwAHJ0cC0+c3BsaXQuUGFydGl0aW9uc1swXS5wYXJ0aXRpb25baV0gPT0gMCB8fCBydHAtPnNwbGl0LlBhcnRpdGlvbnNbMF0ucGFydGl0aW9uW2ldID09IDEAcnRwLT5zcGxpdC5QYXJ0aXRpb25zWzBdLmNvdW50WzBdICsgcnRwLT5zcGxpdC5QYXJ0aXRpb25zWzBdLmNvdW50WzFdID09IE5PREVDQVJEICsgMQBNZXRob2RaZXJvAHJ0cC0+c3BsaXQuUGFydGl0aW9uc1swXS5jb3VudFswXSA+PSBydHAtPk1pbkZpbGwgJiYgcnRwLT5zcGxpdC5QYXJ0aXRpb25zWzBdLmNvdW50WzFdID49IHJ0cC0+TWluRmlsbAAhcnRwLT5zcGxpdC5QYXJ0aXRpb25zWzBdLnRha2VuW2ldAENsYXNzaWZ5AEdldEJyYW5jaGVzAG4tPmJyYW5jaFtpXS5jaGlsZAAAAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAQIDBAUGBwgJCgsMDQ4PEBESExQVFhcYGRobHB0eHyAhIiMkJSYnKAICAgICAhAMWQEAH1AIAwcSExRXFhcIC2kMHwoFDA4pESsPLRAvMCAyBjQ1GxwdHgsMISIjJCUmJygMGBkXBAobHBogKgohIiMkJSYnKAwKDlMKLFgxWFhYWFhYDBscDy5YMyEiIyQlJicoGxz/U///ISIjJCUmJygM//8F////CRT//////wwbHP8QFRYhIiMkJSYnKBsc/////yEiIyQlJicoDP8SExQRFhf///////8MGxz///8SISIjJCUmJygbHP////8hIiMkJSYnKAz///////8T////////DBsc/////yEiIyQlJicoGxz/////ISIjJCUmJygSExQVFhcYGf///////////yMkJSYnGxITFBYXIjZoAR84ViEgAhsbG14bGzc5cDbSwk8EPCJHIj8iRCIiWCJlIiIFBl9gOQQHCAkKCwwNDgRmZ11qbQUGb1g7cQcICQoLDA0OBHI8W3M+YUYbEhMUFhcEBQY/QWJJBwgJCgsMDQ4FBgBcAAAHCAkKCwwNDgQAAE8AAABTQgAAAAAABAUGAERUVQcICQoLDA0OBQYAAAAABwgJCgsMDQ4EACosLkcxMwAAAAAAAAQFBgAAAEoHCAkKCwwNDgUGAAAAAAcICQoLDA0OBAAAAAAAAEwAAAAAAAAEBQYAAAAABwgJCgsMDQ4FBgAAAAAHCAkKCwwNDikrLS8wMjQ1AAAAAAAAAAAAKSstMDIABC8AJCMAEhQWGhweIBgABQcvLy8ALy8AAAkIKAAAASICBgAAAAAACAAAAAAAAAAAAAAAAAAlAyYTCikVCyoXDi0ZERsMKx0NLB8PIRAAMwAwAC9DADEALwA1LidCMkEAOjgAPDRFADYAQAAAPwBENzs5PQACAwMBAQIBAQEDAwMDAwMDAwEBAQEBAQEBAQEBAQEBAQECAQECAAYBAwMDAwMBAAECAwAEAQIDAAQABAAEAAMCAQIBAgFTeW50YXggZXJyb3I6IG5vbi1zcGFjZSBzdHJpbmcgdXNlZCBiZWZvcmUgPFRBQkxFPgBTeW50YXggZXJyb3I6IG5vbi1zcGFjZSBzdHJpbmcgdXNlZCBhZnRlciA8L1RBQkxFPgAAKSoqKissLC0tLS0tLS0tLS0uLzAxMjM0NTY3ODk6Ozw9Pj4/P0FAQkJCQkJCQ0NERERGRUdHR0lISkhLSExITU1OTk9P/wMPEBEjOiQ9JUAVQyZFJ0gYSxlNGigcTh0eUFFSWVpsa25jZFdpbWVtb3J5IGV4aGF1c3RlZAAlcyBpbiBsaW5lICVkIAoALi4uICVzIC4uLgoAVEFCTEUAVFIAVEgAVEQASFRNTABGT05UAEIAVQBPAEkAU1VQAFNVQgBTAEJSAEhSAFZSAElNRwBVbmtub3duIEhUTUwgZWxlbWVudCA8JXM+IG9uIGxpbmUgJWQgCgA8SU1HPgBJbGxlZ2FsIGF0dHJpYnV0ZSAlcyBpbiAlcyAtIGlnbm9yZWQKAHNjYWxlAHNyYwA8QlI+AGFsaWduAElHSFQARUZUAEVOVEVSAElsbGVnYWwgdmFsdWUgJXMgZm9yIEFMSUdOIC0gaWdub3JlZAoAPEZPTlQ+AGNvbG9yAGZhY2UAcG9pbnQtc2l6ZQBQT0lOVC1TSVpFAEltcHJvcGVyICVzIHZhbHVlICVzIC0gaWdub3JlZAAlcyB2YWx1ZSAlcyA+ICVkIC0gdG9vIGxhcmdlIC0gaWdub3JlZAAlcyB2YWx1ZSAlcyA8ICVkIC0gdG9vIHNtYWxsIC0gaWdub3JlZAA8VEQ+AGJhbGlnbgBiZ2NvbG9yAGJvcmRlcgBjZWxscGFkZGluZwBjZWxsc3BhY2luZwBjb2xzcGFuAGZpeGVkc2l6ZQBncmFkaWVudGFuZ2xlAGhlaWdodABocmVmAGlkAHBvcnQAcm93c3BhbgBzaWRlcwBzdHlsZQB0YXJnZXQAdGl0bGUAdG9vbHRpcAB2YWxpZ24Ad2lkdGgAV0lEVEgAT1RUT00AT1AASURETEUASWxsZWdhbCB2YWx1ZSAlcyBmb3IgVkFMSUdOIC0gaWdub3JlZAoAICwAT1VOREVEAEFESUFMAElsbGVnYWwgdmFsdWUgJXMgZm9yIFNUWUxFIC0gaWdub3JlZAoAU09MSUQASU5WSVNJQkxFAElOVklTAERPVFRFRABEQVNIRUQAVW5yZWNvZ25pemVkIGNoYXJhY3RlciAnJWMnICglZCkgaW4gc2lkZXMgYXR0cmlidXRlCgBST1dTUEFOAFJPV1NQQU4gdmFsdWUgY2Fubm90IGJlIDAgLSBpZ25vcmVkCgBIRUlHSFQAR1JBRElFTlRBTkdMRQBSVUUAQUxTRQBJbGxlZ2FsIHZhbHVlICVzIGZvciBGSVhFRFNJWkUgLSBpZ25vcmVkCgBDT0xTUEFOAENPTFNQQU4gdmFsdWUgY2Fubm90IGJlIDAgLSBpZ25vcmVkCgBDRUxMU1BBQ0lORwBDRUxMUEFERElORwBCT1JERVIASWxsZWdhbCB2YWx1ZSAlcyBmb3IgQkFMSUdOIGluIFREIC0gaWdub3JlZAoARVhUAElsbGVnYWwgdmFsdWUgJXMgZm9yIEFMSUdOIGluIFREIC0gaWdub3JlZAoAPFRBQkxFPgBjZWxsYm9yZGVyAGNvbHVtbnMAcm93cwBVbmtub3duIHZhbHVlICVzIGZvciBST1dTIC0gaWdub3JlZAoAVW5rbm93biB2YWx1ZSAlcyBmb3IgQ09MVU1OUyAtIGlnbm9yZWQKAENFTExTQk9SREVSADxIVE1MPgA8L0hUTUw+AC0tAExhYmVsIGNsb3NlZCBiZWZvcmUgZW5kIG9mIEhUTUwgZWxlbWVudAoAVW5jbG9zZWQgY29tbWVudAoAaiA9PSAwAGN2dC5jAFBvYnNwYXRoAHJvdXRlLmMAbGlicGF0aC8lczolZDogJXMKAHNob3J0ZXN0LmMAc291cmNlIHBvaW50IG5vdCBpbiBhbnkgdHJpYW5nbGUAZGVzdGluYXRpb24gcG9pbnQgbm90IGluIGFueSB0cmlhbmdsZQBjYW5ub3QgZmluZCB0cmlhbmdsZSBwYXRoAGNhbm5vdCBtYWxsb2Mgb3BzAGNhbm5vdCByZWFsbG9jIG9wcwB0cmlhbmd1bGF0aW9uIGZhaWxlZABjYW5ub3QgbWFsbG9jIHRyaXMAY2Fubm90IHJlYWxsb2MgdHJpcwBjYW5ub3QgbWFsbG9jIGRxLnBubHMAY2Fubm90IHJlYWxsb2MgZHEucG5scwBjYW5ub3QgbWFsbG9jIHBubHMAY2Fubm90IG1hbGxvYyBwbmxwcwBjYW5ub3QgcmVhbGxvYyBwbmxzAGNhbm5vdCByZWFsbG9jIHBubHBzAENEQVRBAElEAElEUkVGAElEUkVGUwBFTlRJVFkARU5USVRJRVMATk1UT0tFTgBOTVRPS0VOUwBOT1RBVElPTigAKAB8AGh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZQBodHRwOi8vd3d3LnczLm9yZy8yMDAwL3htbG5zLwB4bWw9aHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlAC9kZXYvdXJhbmRvbQBmYWxsYmFjayg0KQBnZXR0aW1lb2ZkYXlfcmVzID09IDAAeG1scGFyc2UuYwBnYXRoZXJfdGltZV9lbnRyb3B5AEVYUEFUX0VOVFJPUFlfREVCVUcAMQBFbnRyb3B5OiAlcyAtLT4gMHglMCpseCAoJWx1IGJ5dGVzKQoAaW52YWxpZCBhcmd1bWVudABwcmVmaXggbXVzdCBub3QgYmUgYm91bmQgdG8gb25lIG9mIHRoZSByZXNlcnZlZCBuYW1lc3BhY2UgbmFtZXMAcmVzZXJ2ZWQgcHJlZml4ICh4bWxucykgbXVzdCBub3QgYmUgZGVjbGFyZWQgb3IgdW5kZWNsYXJlZAByZXNlcnZlZCBwcmVmaXggKHhtbCkgbXVzdCBub3QgYmUgdW5kZWNsYXJlZCBvciBib3VuZCB0byBhbm90aGVyIG5hbWVzcGFjZSBuYW1lAGNhbm5vdCBzdXNwZW5kIGluIGV4dGVybmFsIHBhcmFtZXRlciBlbnRpdHkAcGFyc2luZyBmaW5pc2hlZABwYXJzaW5nIGFib3J0ZWQAcGFyc2VyIG5vdCBzdXNwZW5kZWQAcGFyc2VyIHN1c3BlbmRlZABpbGxlZ2FsIGNoYXJhY3RlcihzKSBpbiBwdWJsaWMgaWQAdGV4dCBkZWNsYXJhdGlvbiBub3Qgd2VsbC1mb3JtZWQAWE1MIGRlY2xhcmF0aW9uIG5vdCB3ZWxsLWZvcm1lZABpbmNvbXBsZXRlIG1hcmt1cCBpbiBwYXJhbWV0ZXIgZW50aXR5AG11c3Qgbm90IHVuZGVjbGFyZSBwcmVmaXgAdW5ib3VuZCBwcmVmaXgAY2Fubm90IGNoYW5nZSBzZXR0aW5nIG9uY2UgcGFyc2luZyBoYXMgYmVndW4AcmVxdWVzdGVkIGZlYXR1cmUgcmVxdWlyZXMgWE1MX0RURCBzdXBwb3J0IGluIEV4cGF0AGVudGl0eSBkZWNsYXJlZCBpbiBwYXJhbWV0ZXIgZW50aXR5AHVuZXhwZWN0ZWQgcGFyc2VyIHN0YXRlIC0gcGxlYXNlIHNlbmQgYSBidWcgcmVwb3J0AGRvY3VtZW50IGlzIG5vdCBzdGFuZGFsb25lAGVycm9yIGluIHByb2Nlc3NpbmcgZXh0ZXJuYWwgZW50aXR5IHJlZmVyZW5jZQB1bmNsb3NlZCBDREFUQSBzZWN0aW9uAGVuY29kaW5nIHNwZWNpZmllZCBpbiBYTUwgZGVjbGFyYXRpb24gaXMgaW5jb3JyZWN0AHVua25vd24gZW5jb2RpbmcAWE1MIG9yIHRleHQgZGVjbGFyYXRpb24gbm90IGF0IHN0YXJ0IG9mIGVudGl0eQByZWZlcmVuY2UgdG8gZXh0ZXJuYWwgZW50aXR5IGluIGF0dHJpYnV0ZQByZWZlcmVuY2UgdG8gYmluYXJ5IGVudGl0eQByZWZlcmVuY2UgdG8gaW52YWxpZCBjaGFyYWN0ZXIgbnVtYmVyAGFzeW5jaHJvbm91cyBlbnRpdHkAcmVjdXJzaXZlIGVudGl0eSByZWZlcmVuY2UAdW5kZWZpbmVkIGVudGl0eQBpbGxlZ2FsIHBhcmFtZXRlciBlbnRpdHkgcmVmZXJlbmNlAGp1bmsgYWZ0ZXIgZG9jdW1lbnQgZWxlbWVudABkdXBsaWNhdGUgYXR0cmlidXRlAG1pc21hdGNoZWQgdGFnAHBhcnRpYWwgY2hhcmFjdGVyAHVuY2xvc2VkIHRva2VuAG5vdCB3ZWxsLWZvcm1lZCAoaW52YWxpZCB0b2tlbikAbm8gZWxlbWVudCBmb3VuZABzeW50YXggZXJyb3IAb3V0IG9mIG1lbW9yeQACAwQFBgcIAAAJCgsMDQ4PEBEAAAAAAAAAAAAAAAASEwAUAAAAAAAAAAAAAAAAAAAVFgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEXAAAAAAAAAAAAAAAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBARgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGQMaGxwdHgAAHyAhIiMkJRARAAAAAAAAAAAAAAAAEhMmFAAAAAAAAAAAAAAAAAAAJxYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBFwAAAAAAAAAAAAAAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAENEQVRBW1VTLUFTQ0lJAFVURi0xNgBVVEYtMTZCRQBVVEYtMTZMRQB2ZXJzaW9uAGVuY29kaW5nAHN0YW5kYWxvbmUARE9DVFlQRQBTWVNURU0AUFVCTElDAEVOVElUWQBBVFRMSVNUAEVMRU1FTlQATk9UQVRJT04ASU5DTFVERQBJR05PUkUARU1QVFkAQU5ZAFBDREFUQQBJTVBMSUVEAFJFUVVJUkVEAEZJWEVEAENEQVRBAElEAElEUkVGAElEUkVGUwBFTlRJVElFUwBOTVRPS0VOAE5NVE9LRU5TAE5EQVRBAFQhIhkNAQIDEUscDBAECx0SHidobm9wcWIgBQYPExQVGggWBygkFxgJCg4bHyUjg4J9JiorPD0+P0NHSk1YWVpbXF1eX2BhY2RlZmdpamtscnN0eXp7fABJbGxlZ2FsIGJ5dGUgc2VxdWVuY2UARG9tYWluIGVycm9yAFJlc3VsdCBub3QgcmVwcmVzZW50YWJsZQBOb3QgYSB0dHkAUGVybWlzc2lvbiBkZW5pZWQAT3BlcmF0aW9uIG5vdCBwZXJtaXR0ZWQATm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeQBObyBzdWNoIHByb2Nlc3MARmlsZSBleGlzdHMAVmFsdWUgdG9vIGxhcmdlIGZvciBkYXRhIHR5cGUATm8gc3BhY2UgbGVmdCBvbiBkZXZpY2UAT3V0IG9mIG1lbW9yeQBSZXNvdXJjZSBidXN5AEludGVycnVwdGVkIHN5c3RlbSBjYWxsAFJlc291cmNlIHRlbXBvcmFyaWx5IHVuYXZhaWxhYmxlAEludmFsaWQgc2VlawBDcm9zcy1kZXZpY2UgbGluawBSZWFkLW9ubHkgZmlsZSBzeXN0ZW0ARGlyZWN0b3J5IG5vdCBlbXB0eQBDb25uZWN0aW9uIHJlc2V0IGJ5IHBlZXIAT3BlcmF0aW9uIHRpbWVkIG91dABDb25uZWN0aW9uIHJlZnVzZWQASG9zdCBpcyBkb3duAEhvc3QgaXMgdW5yZWFjaGFibGUAQWRkcmVzcyBpbiB1c2UAQnJva2VuIHBpcGUASS9PIGVycm9yAE5vIHN1Y2ggZGV2aWNlIG9yIGFkZHJlc3MAQmxvY2sgZGV2aWNlIHJlcXVpcmVkAE5vIHN1Y2ggZGV2aWNlAE5vdCBhIGRpcmVjdG9yeQBJcyBhIGRpcmVjdG9yeQBUZXh0IGZpbGUgYnVzeQBFeGVjIGZvcm1hdCBlcnJvcgBJbnZhbGlkIGFyZ3VtZW50AEFyZ3VtZW50IGxpc3QgdG9vIGxvbmcAU3ltYm9saWMgbGluayBsb29wAEZpbGVuYW1lIHRvbyBsb25nAFRvbyBtYW55IG9wZW4gZmlsZXMgaW4gc3lzdGVtAE5vIGZpbGUgZGVzY3JpcHRvcnMgYXZhaWxhYmxlAEJhZCBmaWxlIGRlc2NyaXB0b3IATm8gY2hpbGQgcHJvY2VzcwBCYWQgYWRkcmVzcwBGaWxlIHRvbyBsYXJnZQBUb28gbWFueSBsaW5rcwBObyBsb2NrcyBhdmFpbGFibGUAUmVzb3VyY2UgZGVhZGxvY2sgd291bGQgb2NjdXIAU3RhdGUgbm90IHJlY292ZXJhYmxlAFByZXZpb3VzIG93bmVyIGRpZWQAT3BlcmF0aW9uIGNhbmNlbGVkAEZ1bmN0aW9uIG5vdCBpbXBsZW1lbnRlZABObyBtZXNzYWdlIG9mIGRlc2lyZWQgdHlwZQBJZGVudGlmaWVyIHJlbW92ZWQARGV2aWNlIG5vdCBhIHN0cmVhbQBObyBkYXRhIGF2YWlsYWJsZQBEZXZpY2UgdGltZW91dABPdXQgb2Ygc3RyZWFtcyByZXNvdXJjZXMATGluayBoYXMgYmVlbiBzZXZlcmVkAFByb3RvY29sIGVycm9yAEJhZCBtZXNzYWdlAEZpbGUgZGVzY3JpcHRvciBpbiBiYWQgc3RhdGUATm90IGEgc29ja2V0AERlc3RpbmF0aW9uIGFkZHJlc3MgcmVxdWlyZWQATWVzc2FnZSB0b28gbGFyZ2UAUHJvdG9jb2wgd3JvbmcgdHlwZSBmb3Igc29ja2V0AFByb3RvY29sIG5vdCBhdmFpbGFibGUAUHJvdG9jb2wgbm90IHN1cHBvcnRlZABTb2NrZXQgdHlwZSBub3Qgc3VwcG9ydGVkAE5vdCBzdXBwb3J0ZWQAUHJvdG9jb2wgZmFtaWx5IG5vdCBzdXBwb3J0ZWQAQWRkcmVzcyBmYW1pbHkgbm90IHN1cHBvcnRlZCBieSBwcm90b2NvbABBZGRyZXNzIG5vdCBhdmFpbGFibGUATmV0d29yayBpcyBkb3duAE5ldHdvcmsgdW5yZWFjaGFibGUAQ29ubmVjdGlvbiByZXNldCBieSBuZXR3b3JrAENvbm5lY3Rpb24gYWJvcnRlZABObyBidWZmZXIgc3BhY2UgYXZhaWxhYmxlAFNvY2tldCBpcyBjb25uZWN0ZWQAU29ja2V0IG5vdCBjb25uZWN0ZWQAQ2Fubm90IHNlbmQgYWZ0ZXIgc29ja2V0IHNodXRkb3duAE9wZXJhdGlvbiBhbHJlYWR5IGluIHByb2dyZXNzAE9wZXJhdGlvbiBpbiBwcm9ncmVzcwBTdGFsZSBmaWxlIGhhbmRsZQBSZW1vdGUgSS9PIGVycm9yAFF1b3RhIGV4Y2VlZGVkAE5vIG1lZGl1bSBmb3VuZABXcm9uZyBtZWRpdW0gdHlwZQBObyBlcnJvciBpbmZvcm1hdGlvbgAAEhATFBUWFxgZGhscHR4fICEQECIjECQlJicoKSorECwtLhEvMBERMRERETIzNDU2Nzg5ERAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBA6EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBA7EDw9Pj9AQRAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBBCEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBBDEBBEEEVGRxBIEEkQEBAQSktMTRAQThBPUBAQEBBREBAQEBAQEBAQEBAQEFIQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEFMQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBBUVVZXEBBYWRAQEBAQEBAQEBAQEBAQEBAQEBAQEBBaEFtcXV5fYGFiEBAQEBAQEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//////////////////////////////////////////AAAAAP7/APwBAAD4AQAAeAAAAAD/+9/7AACAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8APz/4K//////////////3///////IECwAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAPwDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPwAAAAAAIb+////AEBJAAAAAAAYAN//AMgAAAAAAAAAAQA8AAAAAAAAAAAAAAAAEOABHgBg/78AAAAAAAD/BwAAAAAAAAAAAAAAAAAAAAAAAAD4zwMAAAADACD/fwAAAE4AAAAAAAAAAAAAAAAAAAAAAPwAAAAAAAAAAAAQACAeADAAAQAAAAAAAAAAEAAgAAAAAPwPAAAAAAAAABAAIAAAAAAAAAAAAAAAAAAQACAAAAAAAwAAAAAAAAAAEAAgAAAAAP0AAAAAAAAAAAAAIAAAAAD/BwAAAAAAAAAAACAAAAAAAP8AAAAAAAAAEAAgAAAAAAAAAAAAAAAAAAAAIAAAAAA/AgAAAAAAAAAAAAQAAAAAEAAAAAAAAIAAgMDfAAwAAAAAAAAAAAAAAAAAHwAAAAAAAP7///8A/P//AAAAAAAAAAD8AAAAAAAAwP/f/wcAAAAAAAAAAAAAgAYA/AAAGD4AAIC/AMwAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAGD///8fAAD/AwAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAEAABgAAAAAAAAAAAA4AAAAABAAAABwAAAAAAAAAAAAAAAAAAAAMAAA/n8vAAD/A/9/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4xAAAAAAAAAAAAAAAAAAAAAAAAxP////8AAADAAAAAAAAAAAABAOCfAAAAAH8/AAAAAAAAAAAAAAAAAAAAABAAEAAA/P///x8AAAAAAAwAAAAAAABAAAzwAAAAAAAAwPgAAAAAAAAAwAAAAAAAAAAA/wD///8hEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/////fwAA8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAPgAOAA4ABggPj////8//////9/H/zxf/9/AAD///8DAAD/////AQB7A9DBr0IADB+8//8AAAAAAAL//////////////////////////////////////////////////////////w8A/////38AAAD/BwAA/////////////z8AAAAAAAD8///+/////////////////////////////////////////////////////x//AwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOCHA/4AAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAAAAAAAAAAAP//////f/8PAAAAAAAAAAD////7/////////////w8A//////////////////////////////////8/AAAA/w8e////AfzB4AAAAAAAAAAAAAAAHgEAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAP//AAAAAP////8PAAAA////f////////////////////////////////////38AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//////////wAAAAAAAAAAAAAAAAAAAAAAAP///////38AAAAAAADAAOAAAAAAAAAAAAAAAIAPcAAAAAAAAAAAAAAAAAAA/wD//38AAwAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAEQIAAAAD/8DAAAAAAAA8AAAAAAAAAAAABDAAAD//wMHAAAAAAD4AAAAAAiAAAAAAAAAAAAAAAgA/z8AwAAAAAAAAAAAAAAAAAAAAPAAAIALAAAAAAAAAIACAADAAABDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAgAAAAAAAAAAAAAAAAAAAAD8/wMAAAAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADD///8DfwD/////9/9/DwAAAAAAAAAAAAAAAAAAAAAAgP7/APwBAAD4AQAA+D8AAAAAAAAAAAAAAAAAAAB/fwAwh///////j/8AAAAAAADg//8H/w8AAAAAAAD//////z8AAAAADwAAAAAAAAAAAAAAAAAAgAAAAAAAAAEAAAAAAAAAAAAAAAAAAACA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAADAjwAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAh/8A/wEAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AAAA/wAAAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////fwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMA//P8/AAAAAwAAAAAAAP4DAAAAAAAAAAAAAAAAABgADwAAAAAAAAAAAAAAAAAAAOEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAcAAAAAAAAAAAAAAAAA////////////////////////////////////////PwD/////f/7///////////////////////////8/AAAAAP//////////PwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/////////////38A//8DAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAIAAAACAAAIAAAACAAAIAAAACAAAAAAgAAAAIAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwD//////w////////////////8PAP9//n/+//7/AAAAAP8H////f/////////8P//////8HAAAAAAAAAADA////BwD//////wf/AQMAAAAAAAAAAAAAAAAAAAAAAAAAAAD/////AQC///////////8f//8PAP/////fBwAA//8BAP////////9//f////////////////////////////8e/////////z8PAP///wAAAAAAAAAAAAAAAAAAAAAAAPj//////////+H/AAAAAAAA//////////8/AAAAAAAAAP//////////////////DwAAAAAAAAAAAAAAAAAAAAAA/////////////////////////////////////////////////////////////////wABAgMEBQYHCAn/////////CgsMDQ4PEBESExQVFhcYGRobHB0eHyAhIiP///////8KCwwNDg8QERITFBUWFxgZGhscHR4fICEiI/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////8AAQIEBwMGBQASERMUFRYXGBkaGxwdHh8gIREiIyQRJSYnKCkqKywRLS4vEBAwEBAQEBAQEDEyMxA0NRAQERERERERERERERERERERERERERERERERETYRERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERE3ERERETgROTo7PD0+ERERERERERERERERERERERERERERERERERERERERERERERERERERERERET8QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBARQEERQkNERUZHSEkQEBBKS0xNThAQEE9QEBAQEFEQEBAQEBAQEBARERFSUxAQEBAQEBAQEBAQEREREVQQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAREVUQEBAQVhAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBBXEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBBYWVpbEBAQEBAQEBAQEBAQEBAQEBAQEBAQEFwQEBAQEBAQEBAQEBAQEBAQEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//////////////////////////////////////////8AAAAAAAAAAP7//wf+//8HAAAAAAAEIAT//3////9//////////////////////////////////8P/AwAfUAAAAAAAAAAAAAAgAAAAAADfPEDX///7////////////v///////////////////////A/z/////////////////////////AP7///9/Av7/////AAAAAAD/v7YA////BwcAAAD/B//////////+/8P////////////////vH/7h/58AAP///////wDg////////////////AwD//////wcwBP////z/HwAA////AQAAAAAAAAAA/R8AAAAAAADwA/9//////////+//3+H/z//+/u6f+f///cXjn1mAsM//AwDuh/n///1tw4cZAl7A/z8A7r/7///97eO/GwEAz/8AAO6f+f///e3jnxnAsM//AgDsxz3WGMf/w8cdgQDA/wAA7t/9///97+PfHWADz/8AAOzf/f///e/j3x1gQM//BgDs3/3/////599dgADP/wD87P9//P//+y9/gF//AAAMAP7/////f/8HPyD/AwAAAACWJfD+ruz/O18g//MAAAAAAQAAAP8DAAD//v///x/+/wP///7///8fAAAAAAAAAAD///////9/+f8D///nwf//f0D/M/////+/IP//////9////////////z1/Pf//////Pf////89fz3/f/////////89//////////+HAAAAAP//AAD/////////////HwD+//////////////////////////////////////////////////////////+f///+//8H////////////xwEA/98PAP//DwD//w8A/98NAP///////8///wGAEP8DAAAAAP8D//////////////8A//////8H//////////8/AP///x//D/8BwP////8/HwD//////w////8D/wMAAAAA////D/////////9//v8fAP8D/wOAAAAAAAAAAAAAAAD////////v/+8P/wMAAAAA///////z////////v/8DAP///////z8A/+P//////z8AAAAAAAAAAAAAAAAA3m8A////////////////////////////////AAAAAAAAAAD//z8//////z8//6r///8/////////31/cH88P/x/cHwAAAAAAAAAAAAAAAAAAAoAAAP8fAAAAAAAAAAAAAAAAhPwvPlC9//PgQwAA//////8BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwP///////wMAAP//////f///////f/////////////////////8feAwA/////78g/////////4AAAP//fwB/f39/f39/f/////8AAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAD+Az4f/v///////////3/g/v/////////////34P////8//v////////////9/AAD///8HAAAAAAAA////////////////////////////////PwAAAAAAAAAAAP////////////////////////////////8fAAAAAAAA//////////////////////8fAAAAAAAAAAD//////z//H////w8AAP//////f/CP////gP////////////8AAAAAgP/8////////////////eQ8A/wcAAAAAAAAAAAD/u/f///8AAAD///////8PAP//////////DwD/AwAA/Aj//////wf/////BwD///8f////////9/8AgP8DAAAAAP///////38A/z//A///fwT/////////fwUAADj//zwAfn5+AH9/AAAAAAAAAAAAAAAAAAAAAAAA//////8H/wP//////////////////////////w8A//9/+P//////D/////////////////8//////////////////wMAAAAAfwD44P/9f1/b/////////////////wMAAAD4////////////////PwAA///////////8////////AAAAAAD/DwAAAAAAAAAAAAAAAAAA3/////////////////////8fAAD/A/7//wf+//8HwP////////////9//Pz8HAAAAAD/7///f///t/8//z8AAAAA////////////////////BwAAAAAAAAAA////////HwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///x////////8BAAAAAAD///9/AAD///8HAAAAAAAA////P/////8P/z4AAAAAAP////////////////////////8//wMAAAAAAAAAAAAAP/3/////v5H//z8AAAAAAAAAAAAAAAAAAAAAAAAAAAD//z8A////AwAAAAAAAAAA/////////8AAAAAAAAAAAG/w7/7//w8AAAAAAP///x8AAAAAAAAAAAAAAAAAAAAA////////PwD//z8A//8HAAAAAAAAAAAAAAAAAAAAAAD///////////8BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//////////PwAAAMD/AAD8////////AQAA////Af8D////////x/8AAAAAAAAAAP//////////HgD/AwAAAAAAAAAAAAAAAAAAAAAAAAAA////////PwD/AwAAAAAAAP////////////////9/AAAAAAAAAAAAAAAAAAAAAAAA////////////////BwAAAAAAAAAAAAAAAAAAAAAAAAD//////38AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////////8BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//////////8fAP//////fwAA+P8AAAAAAAAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/////////////f///////////fZN7/6+//////////v+ff3////3tf/P3//////////////////////////////////////////////////////z/////9///3////9///3////9///3////9//////f////3///fP////////7////5b+9wqE6paqlvf3Xv/7/w/u+/8PAAAAAAAAAABMQ19BTEwATENfQ1RZUEUAAAAATENfTlVNRVJJQwAATENfVElNRQAAAAAATENfQ09MTEFURQAATENfTU9ORVRBUlkATENfTUVTU0FHRVMATEFORwBDLlVURi04AFBPU0lYAE1VU0xfTE9DUEFUSAARAAoAERERAAAAAAUAAAAAAAAJAAAAAAsAAAAAAAAAABEADwoREREDCgcAARMJCwsAAAkGCwAACwAGEQAAABEREQAAAAAAAAAAAAAAAAAAAAALAAAAAAAAAAARAAoKERERAAoAAAIACQsAAAAJAAsAAAsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAAAAAADAAAAAAMAAAAAAkMAAAAAAAMAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4AAAAAAAAAAAAAAA0AAAAEDQAAAAAJDgAAAAAADgAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAPAAAAAA8AAAAACRAAAAAAABAAABAAABIAAAASEhIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEgAAABISEgAAAAAAAAkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsAAAAAAAAAAAAAAAoAAAAACgAAAAAJCwAAAAAACwAACwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAMAAAAAAwAAAAACQwAAAAAAAwAAAwAAC0rICAgMFgweAAobnVsbCkALTBYKzBYIDBYLTB4KzB4IDB4AGluZgBJTkYATkFOADAxMjM0NTY3ODlBQkNERUYuAGFsbnVtAGFscGhhAGJsYW5rAGNudHJsAGRpZ2l0AGdyYXBoAGxvd2VyAHByaW50AHB1bmN0AHNwYWNlAHVwcGVyAHhkaWdpdABDLlVURi04AAAAAAAAAAAAQwAvcHJvYy9zZWxmL2ZkLwByd2EAaW5maW5pdHkAbmFuAAkACgANAAwABwAbAFtbOmFsbnVtOl1fXQBbXls6YWxudW06XV9dAFtbOnNwYWNlOl1dAFteWzpzcGFjZTpdXQBbWzpkaWdpdDpdXQBbXls6ZGlnaXQ6XV0AL3RtcC90bXBmaWxlX1hYWFhYWAB3Kw==";var tempDoublePtr=STATICTOP;STATICTOP+=16;function ___assert_fail(condition,filename,line,func){abort("Assertion failed: "+Pointer_stringify(condition)+", at: "+[filename?Pointer_stringify(filename):"unknown filename",line,func?Pointer_stringify(func):"unknown function"])}function _emscripten_get_now(){abort()}function _emscripten_get_now_is_monotonic(){return ENVIRONMENT_IS_NODE||typeof dateNow!=="undefined"||(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)&&self["performance"]&&self["performance"]["now"]}var ERRNO_CODES={EPERM:1,ENOENT:2,ESRCH:3,EINTR:4,EIO:5,ENXIO:6,E2BIG:7,ENOEXEC:8,EBADF:9,ECHILD:10,EAGAIN:11,EWOULDBLOCK:11,ENOMEM:12,EACCES:13,EFAULT:14,ENOTBLK:15,EBUSY:16,EEXIST:17,EXDEV:18,ENODEV:19,ENOTDIR:20,EISDIR:21,EINVAL:22,ENFILE:23,EMFILE:24,ENOTTY:25,ETXTBSY:26,EFBIG:27,ENOSPC:28,ESPIPE:29,EROFS:30,EMLINK:31,EPIPE:32,EDOM:33,ERANGE:34,ENOMSG:42,EIDRM:43,ECHRNG:44,EL2NSYNC:45,EL3HLT:46,EL3RST:47,ELNRNG:48,EUNATCH:49,ENOCSI:50,EL2HLT:51,EDEADLK:35,ENOLCK:37,EBADE:52,EBADR:53,EXFULL:54,ENOANO:55,EBADRQC:56,EBADSLT:57,EDEADLOCK:35,EBFONT:59,ENOSTR:60,ENODATA:61,ETIME:62,ENOSR:63,ENONET:64,ENOPKG:65,EREMOTE:66,ENOLINK:67,EADV:68,ESRMNT:69,ECOMM:70,EPROTO:71,EMULTIHOP:72,EDOTDOT:73,EBADMSG:74,ENOTUNIQ:76,EBADFD:77,EREMCHG:78,ELIBACC:79,ELIBBAD:80,ELIBSCN:81,ELIBMAX:82,ELIBEXEC:83,ENOSYS:38,ENOTEMPTY:39,ENAMETOOLONG:36,ELOOP:40,EOPNOTSUPP:95,EPFNOSUPPORT:96,ECONNRESET:104,ENOBUFS:105,EAFNOSUPPORT:97,EPROTOTYPE:91,ENOTSOCK:88,ENOPROTOOPT:92,ESHUTDOWN:108,ECONNREFUSED:111,EADDRINUSE:98,ECONNABORTED:103,ENETUNREACH:101,ENETDOWN:100,ETIMEDOUT:110,EHOSTDOWN:112,EHOSTUNREACH:113,EINPROGRESS:115,EALREADY:114,EDESTADDRREQ:89,EMSGSIZE:90,EPROTONOSUPPORT:93,ESOCKTNOSUPPORT:94,EADDRNOTAVAIL:99,ENETRESET:102,EISCONN:106,ENOTCONN:107,ETOOMANYREFS:109,EUSERS:87,EDQUOT:122,ESTALE:116,ENOTSUP:95,ENOMEDIUM:123,EILSEQ:84,EOVERFLOW:75,ECANCELED:125,ENOTRECOVERABLE:131,EOWNERDEAD:130,ESTRPIPE:86};function ___setErrNo(value){if(Module["___errno_location"])HEAP32[Module["___errno_location"]()>>2]=value;return value}function _clock_gettime(clk_id,tp){var now;if(clk_id===0){now=Date.now()}else if(clk_id===1&&_emscripten_get_now_is_monotonic()){now=_emscripten_get_now()}else{___setErrNo(ERRNO_CODES.EINVAL);return-1}HEAP32[tp>>2]=now/1e3|0;HEAP32[tp+4>>2]=now%1e3*1e3*1e3|0;return 0}function ___clock_gettime(){return _clock_gettime.apply(null,arguments)}function ___lock(){}function ___map_file(pathname,size){___setErrNo(ERRNO_CODES.EPERM);return-1}var ERRNO_MESSAGES={0:"Success",1:"Not super-user",2:"No such file or directory",3:"No such process",4:"Interrupted system call",5:"I/O error",6:"No such device or address",7:"Arg list too long",8:"Exec format error",9:"Bad file number",10:"No children",11:"No more processes",12:"Not enough core",13:"Permission denied",14:"Bad address",15:"Block device required",16:"Mount device busy",17:"File exists",18:"Cross-device link",19:"No such device",20:"Not a directory",21:"Is a directory",22:"Invalid argument",23:"Too many open files in system",24:"Too many open files",25:"Not a typewriter",26:"Text file busy",27:"File too large",28:"No space left on device",29:"Illegal seek",30:"Read only file system",31:"Too many links",32:"Broken pipe",33:"Math arg out of domain of func",34:"Math result not representable",35:"File locking deadlock error",36:"File or path name too long",37:"No record locks available",38:"Function not implemented",39:"Directory not empty",40:"Too many symbolic links",42:"No message of desired type",43:"Identifier removed",44:"Channel number out of range",45:"Level 2 not synchronized",46:"Level 3 halted",47:"Level 3 reset",48:"Link number out of range",49:"Protocol driver not attached",50:"No CSI structure available",51:"Level 2 halted",52:"Invalid exchange",53:"Invalid request descriptor",54:"Exchange full",55:"No anode",56:"Invalid request code",57:"Invalid slot",59:"Bad font file fmt",60:"Device not a stream",61:"No data (for no delay io)",62:"Timer expired",63:"Out of streams resources",64:"Machine is not on the network",65:"Package not installed",66:"The object is remote",67:"The link has been severed",68:"Advertise error",69:"Srmount error",70:"Communication error on send",71:"Protocol error",72:"Multihop attempted",73:"Cross mount point (not really error)",74:"Trying to read unreadable message",75:"Value too large for defined data type",76:"Given log. name not unique",77:"f.d. invalid for this operation",78:"Remote address changed",79:"Can access a needed shared lib",80:"Accessing a corrupted shared lib",81:".lib section in a.out corrupted",82:"Attempting to link in too many libs",83:"Attempting to exec a shared library",84:"Illegal byte sequence",86:"Streams pipe error",87:"Too many users",88:"Socket operation on non-socket",89:"Destination address required",90:"Message too long",91:"Protocol wrong type for socket",92:"Protocol not available",93:"Unknown protocol",94:"Socket type not supported",95:"Not supported",96:"Protocol family not supported",97:"Address family not supported by protocol family",98:"Address already in use",99:"Address not available",100:"Network interface is not configured",101:"Network is unreachable",102:"Connection reset by network",103:"Connection aborted",104:"Connection reset by peer",105:"No buffer space available",106:"Socket is already connected",107:"Socket is not connected",108:"Can't send after socket shutdown",109:"Too many references",110:"Connection timed out",111:"Connection refused",112:"Host is down",113:"Host is unreachable",114:"Socket already connected",115:"Connection already in progress",116:"Stale file handle",122:"Quota exceeded",123:"No medium (in tape drive)",125:"Operation canceled",130:"Previous owner died",131:"State not recoverable"};var PATH={splitPath:(function(filename){var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)}),normalizeArray:(function(parts,allowAboveRoot){var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift("..")}}return parts}),normalize:(function(path){var isAbsolute=path.charAt(0)==="/",trailingSlash=path.substr(-1)==="/";path=PATH.normalizeArray(path.split("/").filter((function(p){return!!p})),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path}),dirname:(function(path){var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir}),basename:(function(path){if(path==="/")return"/";var lastSlash=path.lastIndexOf("/");if(lastSlash===-1)return path;return path.substr(lastSlash+1)}),extname:(function(path){return PATH.splitPath(path)[3]}),join:(function(){var paths=Array.prototype.slice.call(arguments,0);return PATH.normalize(paths.join("/"))}),join2:(function(l,r){return PATH.normalize(l+"/"+r)}),resolve:(function(){var resolvedPath="",resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?arguments[i]:FS.cwd();if(typeof path!=="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=path.charAt(0)==="/"}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter((function(p){return!!p})),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."}),relative:(function(from,to){from=PATH.resolve(from).substr(1);to=PATH.resolve(to).substr(1);function trim(arr){var start=0;for(;start=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i0){result=buf.slice(0,bytesRead).toString("utf-8")}else{result=null}}else if(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else if(typeof readline=="function"){result=readline();if(result!==null){result+="\n"}}if(!result){return null}tty.input=intArrayFromString(result,true)}return tty.input.shift()}),put_char:(function(tty,val){if(val===null||val===10){Module["print"](UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}}),flush:(function(tty){if(tty.output&&tty.output.length>0){Module["print"](UTF8ArrayToString(tty.output,0));tty.output=[]}})},default_tty1_ops:{put_char:(function(tty,val){if(val===null||val===10){Module["printErr"](UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}}),flush:(function(tty){if(tty.output&&tty.output.length>0){Module["printErr"](UTF8ArrayToString(tty.output,0));tty.output=[]}})}};var MEMFS={ops_table:null,mount:(function(mount){return MEMFS.createNode(null,"/",16384|511,0)}),createNode:(function(parent,name,mode,dev){if(FS.isBlkdev(mode)||FS.isFIFO(mode)){throw new FS.ErrnoError(ERRNO_CODES.EPERM)}if(!MEMFS.ops_table){MEMFS.ops_table={dir:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,lookup:MEMFS.node_ops.lookup,mknod:MEMFS.node_ops.mknod,rename:MEMFS.node_ops.rename,unlink:MEMFS.node_ops.unlink,rmdir:MEMFS.node_ops.rmdir,readdir:MEMFS.node_ops.readdir,symlink:MEMFS.node_ops.symlink},stream:{llseek:MEMFS.stream_ops.llseek}},file:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:{llseek:MEMFS.stream_ops.llseek,read:MEMFS.stream_ops.read,write:MEMFS.stream_ops.write,allocate:MEMFS.stream_ops.allocate,mmap:MEMFS.stream_ops.mmap,msync:MEMFS.stream_ops.msync}},link:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,readlink:MEMFS.node_ops.readlink},stream:{}},chrdev:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:FS.chrdev_stream_ops}}}var node=FS.createNode(parent,name,mode,dev);if(FS.isDir(node.mode)){node.node_ops=MEMFS.ops_table.dir.node;node.stream_ops=MEMFS.ops_table.dir.stream;node.contents={}}else if(FS.isFile(node.mode)){node.node_ops=MEMFS.ops_table.file.node;node.stream_ops=MEMFS.ops_table.file.stream;node.usedBytes=0;node.contents=null}else if(FS.isLink(node.mode)){node.node_ops=MEMFS.ops_table.link.node;node.stream_ops=MEMFS.ops_table.link.stream}else if(FS.isChrdev(node.mode)){node.node_ops=MEMFS.ops_table.chrdev.node;node.stream_ops=MEMFS.ops_table.chrdev.stream}node.timestamp=Date.now();if(parent){parent.contents[name]=node}return node}),getFileDataAsRegularArray:(function(node){if(node.contents&&node.contents.subarray){var arr=[];for(var i=0;inode.contents.length){node.contents=MEMFS.getFileDataAsRegularArray(node);node.usedBytes=node.contents.length}if(!node.contents||node.contents.subarray){var prevCapacity=node.contents?node.contents.length:0;if(prevCapacity>=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity0)node.contents.set(oldContents.subarray(0,node.usedBytes),0);return}if(!node.contents&&newCapacity>0)node.contents=[];while(node.contents.lengthnewSize)node.contents.length=newSize;else while(node.contents.length=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);assert(size>=0);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset)}else{for(var i=0;i0||position+lengthe2.timestamp){create.push(key);total++}}));var remove=[];Object.keys(dst.entries).forEach((function(key){var e=dst.entries[key];var e2=src.entries[key];if(!e2){remove.push(key);total++}}));if(!total){return callback(null)}var completed=0;var db=src.type==="remote"?src.db:dst.db;var transaction=db.transaction([IDBFS.DB_STORE_NAME],"readwrite");var store=transaction.objectStore(IDBFS.DB_STORE_NAME);function done(err){if(err){if(!done.errored){done.errored=true;return callback(err)}return}if(++completed>=total){return callback(null)}}transaction.onerror=(function(e){done(this.error);e.preventDefault()});create.sort().forEach((function(path){if(dst.type==="local"){IDBFS.loadRemoteEntry(store,path,(function(err,entry){if(err)return done(err);IDBFS.storeLocalEntry(path,entry,done)}))}else{IDBFS.loadLocalEntry(path,(function(err,entry){if(err)return done(err);IDBFS.storeRemoteEntry(store,path,entry,done)}))}}));remove.sort().reverse().forEach((function(path){if(dst.type==="local"){IDBFS.removeLocalEntry(path,done)}else{IDBFS.removeRemoteEntry(store,path,done)}}))})};var NODEFS={isWindows:false,staticInit:(function(){NODEFS.isWindows=!!process.platform.match(/^win/);var flags=process["binding"]("constants");if(flags["fs"]){flags=flags["fs"]}NODEFS.flagsForNodeMap={"1024":flags["O_APPEND"],"64":flags["O_CREAT"],"128":flags["O_EXCL"],"0":flags["O_RDONLY"],"2":flags["O_RDWR"],"4096":flags["O_SYNC"],"512":flags["O_TRUNC"],"1":flags["O_WRONLY"]}}),bufferFrom:(function(arrayBuffer){return Buffer.alloc?Buffer.from(arrayBuffer):new Buffer(arrayBuffer)}),mount:(function(mount){assert(ENVIRONMENT_IS_NODE);return NODEFS.createNode(null,"/",NODEFS.getMode(mount.opts.root),0)}),createNode:(function(parent,name,mode,dev){if(!FS.isDir(mode)&&!FS.isFile(mode)&&!FS.isLink(mode)){throw new FS.ErrnoError(ERRNO_CODES.EINVAL)}var node=FS.createNode(parent,name,mode);node.node_ops=NODEFS.node_ops;node.stream_ops=NODEFS.stream_ops;return node}),getMode:(function(path){var stat;try{stat=fs.lstatSync(path);if(NODEFS.isWindows){stat.mode=stat.mode|(stat.mode&292)>>2}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}return stat.mode}),realPath:(function(node){var parts=[];while(node.parent!==node){parts.push(node.name);node=node.parent}parts.push(node.mount.opts.root);parts.reverse();return PATH.join.apply(null,parts)}),flagsForNode:(function(flags){flags&=~2097152;flags&=~2048;flags&=~32768;flags&=~524288;var newFlags=0;for(var k in NODEFS.flagsForNodeMap){if(flags&k){newFlags|=NODEFS.flagsForNodeMap[k];flags^=k}}if(!flags){return newFlags}else{throw new FS.ErrnoError(ERRNO_CODES.EINVAL)}}),node_ops:{getattr:(function(node){var path=NODEFS.realPath(node);var stat;try{stat=fs.lstatSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}if(NODEFS.isWindows&&!stat.blksize){stat.blksize=4096}if(NODEFS.isWindows&&!stat.blocks){stat.blocks=(stat.size+stat.blksize-1)/stat.blksize|0}return{dev:stat.dev,ino:stat.ino,mode:stat.mode,nlink:stat.nlink,uid:stat.uid,gid:stat.gid,rdev:stat.rdev,size:stat.size,atime:stat.atime,mtime:stat.mtime,ctime:stat.ctime,blksize:stat.blksize,blocks:stat.blocks}}),setattr:(function(node,attr){var path=NODEFS.realPath(node);try{if(attr.mode!==undefined){fs.chmodSync(path,attr.mode);node.mode=attr.mode}if(attr.timestamp!==undefined){var date=new Date(attr.timestamp);fs.utimesSync(path,date,date)}if(attr.size!==undefined){fs.truncateSync(path,attr.size)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}}),lookup:(function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);var mode=NODEFS.getMode(path);return NODEFS.createNode(parent,name,mode)}),mknod:(function(parent,name,mode,dev){var node=NODEFS.createNode(parent,name,mode,dev);var path=NODEFS.realPath(node);try{if(FS.isDir(node.mode)){fs.mkdirSync(path,node.mode)}else{fs.writeFileSync(path,"",{mode:node.mode})}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}return node}),rename:(function(oldNode,newDir,newName){var oldPath=NODEFS.realPath(oldNode);var newPath=PATH.join2(NODEFS.realPath(newDir),newName);try{fs.renameSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}}),unlink:(function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.unlinkSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}}),rmdir:(function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.rmdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}}),readdir:(function(node){var path=NODEFS.realPath(node);try{return fs.readdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}}),symlink:(function(parent,newName,oldPath){var newPath=PATH.join2(NODEFS.realPath(parent),newName);try{fs.symlinkSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}}),readlink:(function(node){var path=NODEFS.realPath(node);try{path=fs.readlinkSync(path);path=NODEJS_PATH.relative(NODEJS_PATH.resolve(node.mount.opts.root),path);return path}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}})},stream_ops:{open:(function(stream){var path=NODEFS.realPath(stream.node);try{if(FS.isFile(stream.node.mode)){stream.nfd=fs.openSync(path,NODEFS.flagsForNode(stream.flags))}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}}),close:(function(stream){try{if(FS.isFile(stream.node.mode)&&stream.nfd){fs.closeSync(stream.nfd)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}}),read:(function(stream,buffer,offset,length,position){if(length===0)return 0;try{return fs.readSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(ERRNO_CODES[e.code])}}),write:(function(stream,buffer,offset,length,position){try{return fs.writeSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(ERRNO_CODES[e.code])}}),llseek:(function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){try{var stat=fs.fstatSync(stream.nfd);position+=stat.size}catch(e){throw new FS.ErrnoError(ERRNO_CODES[e.code])}}}if(position<0){throw new FS.ErrnoError(ERRNO_CODES.EINVAL)}return position})}};var WORKERFS={DIR_MODE:16895,FILE_MODE:33279,reader:null,mount:(function(mount){assert(ENVIRONMENT_IS_WORKER);if(!WORKERFS.reader)WORKERFS.reader=new FileReaderSync;var root=WORKERFS.createNode(null,"/",WORKERFS.DIR_MODE,0);var createdParents={};function ensureParent(path){var parts=path.split("/");var parent=root;for(var i=0;i=stream.node.size)return 0;var chunk=stream.node.contents.slice(position,position+length);var ab=WORKERFS.reader.readAsArrayBuffer(chunk);buffer.set(new Uint8Array(ab),offset);return chunk.size}),write:(function(stream,buffer,offset,length,position){throw new FS.ErrnoError(ERRNO_CODES.EIO)}),llseek:(function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){position+=stream.node.size}}if(position<0){throw new FS.ErrnoError(ERRNO_CODES.EINVAL)}return position})}};STATICTOP+=16;STATICTOP+=16;STATICTOP+=16;var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,trackingDelegate:{},tracking:{openFlags:{READ:1,WRITE:2}},ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,handleFSError:(function(e){if(!(e instanceof FS.ErrnoError))throw e+" : "+stackTrace();return ___setErrNo(e.errno)}),lookupPath:(function(path,opts){path=PATH.resolve(FS.cwd(),path);opts=opts||{};if(!path)return{path:"",node:null};var defaults={follow_mount:true,recurse_count:0};for(var key in defaults){if(opts[key]===undefined){opts[key]=defaults[key]}}if(opts.recurse_count>8){throw new FS.ErrnoError(ERRNO_CODES.ELOOP)}var parts=PATH.normalizeArray(path.split("/").filter((function(p){return!!p})),false);var current=FS.root;var current_path="/";for(var i=0;i40){throw new FS.ErrnoError(ERRNO_CODES.ELOOP)}}}}return{path:current_path,node:current}}),getPath:(function(node){var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!=="/"?mount+"/"+path:mount+path}path=path?node.name+"/"+path:node.name;node=node.parent}}),hashName:(function(parentid,name){var hash=0;for(var i=0;i>>0)%FS.nameTable.length}),hashAddNode:(function(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node}),hashRemoveNode:(function(node){var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}}),lookupNode:(function(parent,name){var err=FS.mayLookup(parent);if(err){throw new FS.ErrnoError(err,parent)}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node}}return FS.lookup(parent,name)}),createNode:(function(parent,name,mode,rdev){if(!FS.FSNode){FS.FSNode=(function(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.mounted=null;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.node_ops={};this.stream_ops={};this.rdev=rdev});FS.FSNode.prototype={};var readMode=292|73;var writeMode=146;Object.defineProperties(FS.FSNode.prototype,{read:{get:(function(){return(this.mode&readMode)===readMode}),set:(function(val){val?this.mode|=readMode:this.mode&=~readMode})},write:{get:(function(){return(this.mode&writeMode)===writeMode}),set:(function(val){val?this.mode|=writeMode:this.mode&=~writeMode})},isFolder:{get:(function(){return FS.isDir(this.mode)})},isDevice:{get:(function(){return FS.isChrdev(this.mode)})}})}var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node}),destroyNode:(function(node){FS.hashRemoveNode(node)}),isRoot:(function(node){return node===node.parent}),isMountpoint:(function(node){return!!node.mounted}),isFile:(function(mode){return(mode&61440)===32768}),isDir:(function(mode){return(mode&61440)===16384}),isLink:(function(mode){return(mode&61440)===40960}),isChrdev:(function(mode){return(mode&61440)===8192}),isBlkdev:(function(mode){return(mode&61440)===24576}),isFIFO:(function(mode){return(mode&61440)===4096}),isSocket:(function(mode){return(mode&49152)===49152}),flagModes:{"r":0,"rs":1052672,"r+":2,"w":577,"wx":705,"xw":705,"w+":578,"wx+":706,"xw+":706,"a":1089,"ax":1217,"xa":1217,"a+":1090,"ax+":1218,"xa+":1218},modeStringToFlags:(function(str){var flags=FS.flagModes[str];if(typeof flags==="undefined"){throw new Error("Unknown file open mode: "+str)}return flags}),flagsToPermissionString:(function(flag){var perms=["r","w","rw"][flag&3];if(flag&512){perms+="w"}return perms}),nodePermissions:(function(node,perms){if(FS.ignorePermissions){return 0}if(perms.indexOf("r")!==-1&&!(node.mode&292)){return ERRNO_CODES.EACCES}else if(perms.indexOf("w")!==-1&&!(node.mode&146)){return ERRNO_CODES.EACCES}else if(perms.indexOf("x")!==-1&&!(node.mode&73)){return ERRNO_CODES.EACCES}return 0}),mayLookup:(function(dir){var err=FS.nodePermissions(dir,"x");if(err)return err;if(!dir.node_ops.lookup)return ERRNO_CODES.EACCES;return 0}),mayCreate:(function(dir,name){try{var node=FS.lookupNode(dir,name);return ERRNO_CODES.EEXIST}catch(e){}return FS.nodePermissions(dir,"wx")}),mayDelete:(function(dir,name,isdir){var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var err=FS.nodePermissions(dir,"wx");if(err){return err}if(isdir){if(!FS.isDir(node.mode)){return ERRNO_CODES.ENOTDIR}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return ERRNO_CODES.EBUSY}}else{if(FS.isDir(node.mode)){return ERRNO_CODES.EISDIR}}return 0}),mayOpen:(function(node,flags){if(!node){return ERRNO_CODES.ENOENT}if(FS.isLink(node.mode)){return ERRNO_CODES.ELOOP}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!=="r"||flags&512){return ERRNO_CODES.EISDIR}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))}),MAX_OPEN_FDS:4096,nextfd:(function(fd_start,fd_end){fd_start=fd_start||0;fd_end=fd_end||FS.MAX_OPEN_FDS;for(var fd=fd_start;fd<=fd_end;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(ERRNO_CODES.EMFILE)}),getStream:(function(fd){return FS.streams[fd]}),createStream:(function(stream,fd_start,fd_end){if(!FS.FSStream){FS.FSStream=(function(){});FS.FSStream.prototype={};Object.defineProperties(FS.FSStream.prototype,{object:{get:(function(){return this.node}),set:(function(val){this.node=val})},isRead:{get:(function(){return(this.flags&2097155)!==1})},isWrite:{get:(function(){return(this.flags&2097155)!==0})},isAppend:{get:(function(){return this.flags&1024})}})}var newStream=new FS.FSStream;for(var p in stream){newStream[p]=stream[p]}stream=newStream;var fd=FS.nextfd(fd_start,fd_end);stream.fd=fd;FS.streams[fd]=stream;return stream}),closeStream:(function(fd){FS.streams[fd]=null}),chrdev_stream_ops:{open:(function(stream){var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;if(stream.stream_ops.open){stream.stream_ops.open(stream)}}),llseek:(function(){throw new FS.ErrnoError(ERRNO_CODES.ESPIPE)})},major:(function(dev){return dev>>8}),minor:(function(dev){return dev&255}),makedev:(function(ma,mi){return ma<<8|mi}),registerDevice:(function(dev,ops){FS.devices[dev]={stream_ops:ops}}),getDevice:(function(dev){return FS.devices[dev]}),getMounts:(function(mount){var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push.apply(check,m.mounts)}return mounts}),syncfs:(function(populate,callback){if(typeof populate==="function"){callback=populate;populate=false}FS.syncFSRequests++;if(FS.syncFSRequests>1){console.log("warning: "+FS.syncFSRequests+" FS.syncfs operations in flight at once, probably just doing extra work")}var mounts=FS.getMounts(FS.root.mount);var completed=0;function doCallback(err){assert(FS.syncFSRequests>0);FS.syncFSRequests--;return callback(err)}function done(err){if(err){if(!done.errored){done.errored=true;return doCallback(err)}return}if(++completed>=mounts.length){doCallback(null)}}mounts.forEach((function(mount){if(!mount.type.syncfs){return done(null)}mount.type.syncfs(mount,populate,done)}))}),mount:(function(type,opts,mountpoint){var root=mountpoint==="/";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(ERRNO_CODES.EBUSY)}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(ERRNO_CODES.EBUSY)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(ERRNO_CODES.ENOTDIR)}}var mount={type:type,opts:opts,mountpoint:mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount)}}return mountRoot}),unmount:(function(mountpoint){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(ERRNO_CODES.EINVAL)}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);Object.keys(FS.nameTable).forEach((function(hash){var current=FS.nameTable[hash];while(current){var next=current.name_next;if(mounts.indexOf(current.mount)!==-1){FS.destroyNode(current)}current=next}}));node.mounted=null;var idx=node.mount.mounts.indexOf(mount);assert(idx!==-1);node.mount.mounts.splice(idx,1)}),lookup:(function(parent,name){return parent.node_ops.lookup(parent,name)}),mknod:(function(path,mode,dev){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name||name==="."||name===".."){throw new FS.ErrnoError(ERRNO_CODES.EINVAL)}var err=FS.mayCreate(parent,name);if(err){throw new FS.ErrnoError(err)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(ERRNO_CODES.EPERM)}return parent.node_ops.mknod(parent,name,mode,dev)}),create:(function(path,mode){mode=mode!==undefined?mode:438;mode&=4095;mode|=32768;return FS.mknod(path,mode,0)}),mkdir:(function(path,mode){mode=mode!==undefined?mode:511;mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)}),mkdirTree:(function(path,mode){var dirs=path.split("/");var d="";for(var i=0;ithis.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]};LazyUint8Array.prototype.setDataGetter=function LazyUint8Array_setDataGetter(getter){this.getter=getter};LazyUint8Array.prototype.cacheLength=function LazyUint8Array_cacheLength(){var xhr=new XMLHttpRequest;xhr.open("HEAD",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);var datalength=Number(xhr.getResponseHeader("Content-length"));var header;var hasByteServing=(header=xhr.getResponseHeader("Accept-Ranges"))&&header==="bytes";var usesGzip=(header=xhr.getResponseHeader("Content-Encoding"))&&header==="gzip";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=(function(from,to){if(from>to)throw new Error("invalid range ("+from+", "+to+") or no bytes requested!");if(to>datalength-1)throw new Error("only "+datalength+" bytes available! programmer error!");var xhr=new XMLHttpRequest;xhr.open("GET",url,false);if(datalength!==chunkSize)xhr.setRequestHeader("Range","bytes="+from+"-"+to);if(typeof Uint8Array!="undefined")xhr.responseType="arraybuffer";if(xhr.overrideMimeType){xhr.overrideMimeType("text/plain; charset=x-user-defined")}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[])}else{return intArrayFromString(xhr.responseText||"",true)}});var lazyArray=this;lazyArray.setDataGetter((function(chunkNum){var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]==="undefined"){lazyArray.chunks[chunkNum]=doXHR(start,end)}if(typeof lazyArray.chunks[chunkNum]==="undefined")throw new Error("doXHR failed!");return lazyArray.chunks[chunkNum]}));if(usesGzip||!datalength){chunkSize=datalength=1;datalength=this.getter(0).length;chunkSize=datalength;console.log("LazyFiles on gzip forces download of the whole file when length is accessed")}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true};if(typeof XMLHttpRequest!=="undefined"){if(!ENVIRONMENT_IS_WORKER)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var lazyArray=new LazyUint8Array;Object.defineProperties(lazyArray,{length:{get:(function(){if(!this.lengthKnown){this.cacheLength()}return this._length})},chunkSize:{get:(function(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize})}});var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url:url}}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents}else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperties(node,{usedBytes:{get:(function(){return this.contents.length})}});var stream_ops={};var keys=Object.keys(node.stream_ops);keys.forEach((function(key){var fn=node.stream_ops[key];stream_ops[key]=function forceLoadLazyFile(){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(ERRNO_CODES.EIO)}return fn.apply(null,arguments)}}));stream_ops.read=function stream_ops_read(stream,buffer,offset,length,position){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(ERRNO_CODES.EIO)}var contents=stream.node.contents;if(position>=contents.length)return 0;var size=Math.min(contents.length-position,length);assert(size>=0);if(contents.slice){for(var i=0;i>2]=stat.dev;HEAP32[buf+4>>2]=0;HEAP32[buf+8>>2]=stat.ino;HEAP32[buf+12>>2]=stat.mode;HEAP32[buf+16>>2]=stat.nlink;HEAP32[buf+20>>2]=stat.uid;HEAP32[buf+24>>2]=stat.gid;HEAP32[buf+28>>2]=stat.rdev;HEAP32[buf+32>>2]=0;HEAP32[buf+36>>2]=stat.size;HEAP32[buf+40>>2]=4096;HEAP32[buf+44>>2]=stat.blocks;HEAP32[buf+48>>2]=stat.atime.getTime()/1e3|0;HEAP32[buf+52>>2]=0;HEAP32[buf+56>>2]=stat.mtime.getTime()/1e3|0;HEAP32[buf+60>>2]=0;HEAP32[buf+64>>2]=stat.ctime.getTime()/1e3|0;HEAP32[buf+68>>2]=0;HEAP32[buf+72>>2]=stat.ino;return 0}),doMsync:(function(addr,stream,len,flags){var buffer=new Uint8Array(HEAPU8.subarray(addr,addr+len));FS.msync(stream,buffer,0,len,flags)}),doMkdir:(function(path,mode){path=PATH.normalize(path);if(path[path.length-1]==="/")path=path.substr(0,path.length-1);FS.mkdir(path,mode,0);return 0}),doMknod:(function(path,mode,dev){switch(mode&61440){case 32768:case 8192:case 24576:case 4096:case 49152:break;default:return-ERRNO_CODES.EINVAL}FS.mknod(path,mode,dev);return 0}),doReadlink:(function(path,buf,bufsize){if(bufsize<=0)return-ERRNO_CODES.EINVAL;var ret=FS.readlink(path);var len=Math.min(bufsize,lengthBytesUTF8(ret));var endChar=HEAP8[buf+len];stringToUTF8(ret,buf,bufsize+1);HEAP8[buf+len]=endChar;return len}),doAccess:(function(path,amode){if(amode&~7){return-ERRNO_CODES.EINVAL}var node;var lookup=FS.lookupPath(path,{follow:true});node=lookup.node;var perms="";if(amode&4)perms+="r";if(amode&2)perms+="w";if(amode&1)perms+="x";if(perms&&FS.nodePermissions(node,perms)){return-ERRNO_CODES.EACCES}return 0}),doDup:(function(path,flags,suggestFD){var suggest=FS.getStream(suggestFD);if(suggest)FS.close(suggest);return FS.open(path,flags,0,suggestFD,suggestFD).fd}),doReadv:(function(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr}return ret}),varargs:0,get:(function(varargs){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret}),getStr:(function(){var ret=Pointer_stringify(SYSCALLS.get());return ret}),getStreamFromFD:(function(){var stream=FS.getStream(SYSCALLS.get());if(!stream)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return stream}),getSocketFromFD:(function(){var socket=SOCKFS.getSocket(SYSCALLS.get());if(!socket)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return socket}),getSocketAddress:(function(allowNull){var addrp=SYSCALLS.get(),addrlen=SYSCALLS.get();if(allowNull&&addrp===0)return null;var info=__read_sockaddr(addrp,addrlen);if(info.errno)throw new FS.ErrnoError(info.errno);info.addr=DNS.lookup_addr(info.addr)||info.addr;return info}),get64:(function(){var low=SYSCALLS.get(),high=SYSCALLS.get();if(low>=0)assert(high===0);else assert(high===-1);return low}),getZero:(function(){assert(SYSCALLS.get()===0)})};function ___syscall10(which,varargs){SYSCALLS.varargs=varargs;try{var path=SYSCALLS.getStr();FS.unlink(path);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall140(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),offset_high=SYSCALLS.get(),offset_low=SYSCALLS.get(),result=SYSCALLS.get(),whence=SYSCALLS.get();var offset=offset_low;FS.llseek(stream,offset,whence);HEAP32[result>>2]=stream.position;if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall145(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doReadv(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall146(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doWritev(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall192(which,varargs){SYSCALLS.varargs=varargs;try{var addr=SYSCALLS.get(),len=SYSCALLS.get(),prot=SYSCALLS.get(),flags=SYSCALLS.get(),fd=SYSCALLS.get(),off=SYSCALLS.get();off<<=12;var ptr;var allocated=false;if(fd===-1){ptr=_memalign(PAGE_SIZE,len);if(!ptr)return-ERRNO_CODES.ENOMEM;_memset(ptr,0,len);allocated=true}else{var info=FS.getStream(fd);if(!info)return-ERRNO_CODES.EBADF;var res=FS.mmap(info,HEAPU8,addr,len,off,prot,flags);ptr=res.ptr;allocated=res.allocated}SYSCALLS.mappings[ptr]={malloc:ptr,len:len,allocated:allocated,fd:fd,flags:flags};return ptr}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall195(which,varargs){SYSCALLS.varargs=varargs;try{var path=SYSCALLS.getStr(),buf=SYSCALLS.get();return SYSCALLS.doStat(FS.stat,path,buf)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall197(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),buf=SYSCALLS.get();return SYSCALLS.doStat(FS.stat,stream.path,buf)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}var PROCINFO={ppid:1,pid:42,sid:42,pgid:42};function ___syscall20(which,varargs){SYSCALLS.varargs=varargs;try{return PROCINFO.pid}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall221(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),cmd=SYSCALLS.get();switch(cmd){case 0:{var arg=SYSCALLS.get();if(arg<0){return-ERRNO_CODES.EINVAL}var newStream;newStream=FS.open(stream.path,stream.flags,0,arg);return newStream.fd};case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=SYSCALLS.get();stream.flags|=arg;return 0};case 12:case 12:{var arg=SYSCALLS.get();var offset=0;HEAP16[arg+offset>>1]=2;return 0};case 13:case 14:case 13:case 14:return 0;case 16:case 8:return-ERRNO_CODES.EINVAL;case 9:___setErrNo(ERRNO_CODES.EINVAL);return-1;default:{return-ERRNO_CODES.EINVAL}}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall3(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),buf=SYSCALLS.get(),count=SYSCALLS.get();return FS.read(stream,HEAP8,buf,count)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall33(which,varargs){SYSCALLS.varargs=varargs;try{var path=SYSCALLS.getStr(),amode=SYSCALLS.get();return SYSCALLS.doAccess(path,amode)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall5(which,varargs){SYSCALLS.varargs=varargs;try{var pathname=SYSCALLS.getStr(),flags=SYSCALLS.get(),mode=SYSCALLS.get();var stream=FS.open(pathname,flags,mode);return stream.fd}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall54(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),op=SYSCALLS.get();switch(op){case 21509:case 21505:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0};case 21510:case 21511:case 21512:case 21506:case 21507:case 21508:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0};case 21519:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;var argp=SYSCALLS.get();HEAP32[argp>>2]=0;return 0};case 21520:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return-ERRNO_CODES.EINVAL};case 21531:{var argp=SYSCALLS.get();return FS.ioctl(stream,op,argp)};case 21523:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0};default:abort("bad ioctl syscall "+op)}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall6(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD();FS.close(stream);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall91(which,varargs){SYSCALLS.varargs=varargs;try{var addr=SYSCALLS.get(),len=SYSCALLS.get();var info=SYSCALLS.mappings[addr];if(!info)return 0;if(len===info.len){var stream=FS.getStream(info.fd);SYSCALLS.doMsync(addr,stream,len,info.flags);FS.munmap(stream);SYSCALLS.mappings[addr]=null;if(info.allocated){_free(info.malloc)}}return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}var cttz_i8=allocate([8,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,7,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0],"i8",ALLOC_STATIC);function ___unlock(){}function __exit(status){Module["exit"](status)}function _exit(status){__exit(status)}var _environ=STATICTOP;STATICTOP+=16;function ___buildEnvironment(env){var MAX_ENV_VALUES=64;var TOTAL_ENV_SIZE=1024;var poolPtr;var envPtr;if(!___buildEnvironment.called){___buildEnvironment.called=true;ENV["USER"]=ENV["LOGNAME"]="web_user";ENV["PATH"]="/";ENV["PWD"]="/";ENV["HOME"]="/home/web_user";ENV["LANG"]="C.UTF-8";ENV["_"]=Module["thisProgram"];poolPtr=staticAlloc(TOTAL_ENV_SIZE);envPtr=staticAlloc(MAX_ENV_VALUES*4);HEAP32[envPtr>>2]=poolPtr;HEAP32[_environ>>2]=envPtr}else{envPtr=HEAP32[_environ>>2];poolPtr=HEAP32[envPtr>>2]}var strings=[];var totalSize=0;for(var key in env){if(typeof env[key]==="string"){var line=key+"="+env[key];strings.push(line);totalSize+=line.length}}if(totalSize>TOTAL_ENV_SIZE){throw new Error("Environment size exceeded TOTAL_ENV_SIZE!")}var ptrSize=4;for(var i=0;i>2]=poolPtr;poolPtr+=line.length+1}HEAP32[envPtr+strings.length*ptrSize>>2]=0}var ENV={};function _getenv(name){if(name===0)return 0;name=Pointer_stringify(name);if(!ENV.hasOwnProperty(name))return 0;if(_getenv.ret)_free(_getenv.ret);_getenv.ret=allocateUTF8(ENV[name]);return _getenv.ret}function _gettimeofday(ptr){var now=Date.now();HEAP32[ptr>>2]=now/1e3|0;HEAP32[ptr+4>>2]=now%1e3*1e3|0;return 0}var _llvm_ceil_f64=Math_ceil;var _llvm_fabs_f32=Math_abs;var _llvm_fabs_f64=Math_abs;var _llvm_floor_f64=Math_floor;var _llvm_pow_f64=Math_pow;var _llvm_sqrt_f32=Math_sqrt;var _llvm_sqrt_f64=Math_sqrt;function _llvm_trap(){abort("trap!")}function _longjmp(env,value){Module["setThrew"](env,value||1);throw"longjmp"}function _emscripten_memcpy_big(dest,src,num){HEAPU8.set(HEAPU8.subarray(src,src+num),dest);return dest}function _setenv(envname,envval,overwrite){if(envname===0){___setErrNo(ERRNO_CODES.EINVAL);return-1}var name=Pointer_stringify(envname);var val=Pointer_stringify(envval);if(name===""||name.indexOf("=")!==-1){___setErrNo(ERRNO_CODES.EINVAL);return-1}if(ENV.hasOwnProperty(name)&&!overwrite)return 0;ENV[name]=val;___buildEnvironment(ENV);return 0}function _time(ptr){var ret=Date.now()/1e3|0;if(ptr){HEAP32[ptr>>2]=ret}return ret}function _times(buffer){if(buffer!==0){_memset(buffer,0,16)}return 0}if(ENVIRONMENT_IS_NODE){_emscripten_get_now=function _emscripten_get_now_actual(){var t=process["hrtime"]();return t[0]*1e3+t[1]/1e6}}else if(typeof dateNow!=="undefined"){_emscripten_get_now=dateNow}else if(typeof self==="object"&&self["performance"]&&typeof self["performance"]["now"]==="function"){_emscripten_get_now=(function(){return self["performance"]["now"]()})}else if(typeof performance==="object"&&typeof performance["now"]==="function"){_emscripten_get_now=(function(){return performance["now"]()})}else{_emscripten_get_now=Date.now}FS.staticInit();__ATINIT__.unshift((function(){if(!Module["noFSInit"]&&!FS.init.initialized)FS.init()}));__ATMAIN__.push((function(){FS.ignorePermissions=false}));__ATEXIT__.push((function(){FS.quit()}));__ATINIT__.unshift((function(){TTY.init()}));__ATEXIT__.push((function(){TTY.shutdown()}));if(ENVIRONMENT_IS_NODE){var fs=require("fs");var NODEJS_PATH=require("path");NODEFS.staticInit()}___buildEnvironment(ENV);DYNAMICTOP_PTR=staticAlloc(4);STACK_BASE=STACKTOP=alignMemory(STATICTOP);STACK_MAX=STACK_BASE+TOTAL_STACK;DYNAMIC_BASE=alignMemory(STACK_MAX);HEAP32[DYNAMICTOP_PTR>>2]=DYNAMIC_BASE;staticSealed=true;var ASSERTIONS=false;function intArrayFromString(stringy,dontAddNull,length){var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array}function intArrayToString(array){var ret=[];for(var i=0;i255){if(ASSERTIONS){assert(false,"Character code "+chr+" ("+String.fromCharCode(chr)+") at offset "+i+" not in 0x00-0xFF.")}chr&=255}ret.push(String.fromCharCode(chr))}return ret.join("")}var decodeBase64=typeof atob==="function"?atob:(function(input){var keyStr="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";var output="";var chr1,chr2,chr3;var enc1,enc2,enc3,enc4;var i=0;input=input.replace(/[^A-Za-z0-9\+\/\=]/g,"");do{enc1=keyStr.indexOf(input.charAt(i++));enc2=keyStr.indexOf(input.charAt(i++));enc3=keyStr.indexOf(input.charAt(i++));enc4=keyStr.indexOf(input.charAt(i++));chr1=enc1<<2|enc2>>4;chr2=(enc2&15)<<4|enc3>>2;chr3=(enc3&3)<<6|enc4;output=output+String.fromCharCode(chr1);if(enc3!==64){output=output+String.fromCharCode(chr2)}if(enc4!==64){output=output+String.fromCharCode(chr3)}}while(i>2]=0;s=y;o=0;e=$(29,b|0)|0;f=o;o=0;if((f|0)!=0&(p|0)!=0){g=V6(c[f>>2]|0,w|0,x|0)|0;if(!g)bb(f|0,p|0);z=p}else g=-1;a:do if((g|0)!=1){o=0;v=$(23,e<<3|0)|0;f=o;o=0;if((f|0)!=0&(p|0)!=0){e=V6(c[f>>2]|0,w|0,x|0)|0;if(!e)bb(f|0,p|0);z=p}else e=-1;if((e|0)!=1){if(!(a[194954]|0))t=0;else{o=0;e=_(3)|0;f=o;o=0;if((f|0)!=0&(p|0)!=0){g=V6(c[f>>2]|0,w|0,x|0)|0;if(!g)bb(f|0,p|0);z=p}else g=-1;if((g|0)==1){n=0;k=0;m=0;j=0;i=0;d=v;h=v;e=z;g=0;u=74;break}t=e}o=0;e=aa(97,b|0,110064)|0;f=o;o=0;if((f|0)!=0&(p|0)!=0){g=V6(c[f>>2]|0,w|0,x|0)|0;if(!g)bb(f|0,p|0);z=p}else g=-1;if((g|0)!=1){c[47323]=0;b:do if(e|0?(i=a[e>>0]|0,i<<24>>24):0){h=e;f=i;g=0;while(1){i=h+1|0;if(!(f<<24>>24))break b;switch(f<<24>>24|0){case 99:{e=8;u=16;break}case 105:{e=18;u=16;break}case 109:{e=1;u=16;break}case 114:{e=4;u=16;break}case 115:{e=2;u=16;break}default:e=g}if((u|0)==16){u=0;e=g|e;c[47323]=e}h=i;f=a[i>>0]|0;g=e}}while(0);if(d|0){o=0;ca(20,0,110068,j|0)|0;e=o;o=0;if((e|0)!=0&(p|0)!=0){f=V6(c[e>>2]|0,w|0,x|0)|0;if(!f)bb(e|0,p|0);z=p}else f=-1;if((f|0)==1){n=0;k=t;m=0;j=0;i=0;d=v;h=v;e=z;g=0;u=74;break}}o=0;r=aa(98,b|0,0)|0;e=o;o=0;if((e|0)!=0&(p|0)!=0){f=V6(c[e>>2]|0,w|0,x|0)|0;if(!f)bb(e|0,p|0);z=p}else f=-1;if((f|0)!=1){m=c[r+16>>2]|0;if(c[47323]&2|0){o=0;ja(26,c[15712]|0,m|0);e=o;o=0;if((e|0)!=0&(p|0)!=0){f=V6(c[e>>2]|0,w|0,x|0)|0;if(!f)bb(e|0,p|0);z=p}else f=-1;if((f|0)==1){n=0;k=t;m=0;j=0;i=r;d=v;h=v;e=z;g=0;u=74;break}}o=0;g=$(25,b|0)|0;e=o;o=0;if((e|0)!=0&(p|0)!=0){f=V6(c[e>>2]|0,w|0,x|0)|0;if(!f)bb(e|0,p|0);z=p}else f=-1;if((f|0)!=1){n=0;while(1){if(!g)break;o=0;e=aa(99,b|0,g|0)|0;f=o;o=0;if((f|0)!=0&(p|0)!=0){h=V6(c[f>>2]|0,w|0,x|0)|0;if(!h)bb(f|0,p|0);z=p}else h=-1;if((h|0)==1){k=t;m=0;j=0;i=r;d=v;h=v;e=z;g=0;u=74;break a}i=n;while(1){if(!e)break;if(!((c[47134]|0)==2?(c[(c[e+16>>2]|0)+8>>2]|0)!=0:0))u=32;c:do if((u|0)==32){u=0;do if(a[194954]|0){k=c[e>>2]&3;j=(c[c[((k|0)==3?e:e+48|0)+40>>2]>>2]|0)>>>4;k=(c[c[((k|0)==2?e:e+-48|0)+40>>2]>>2]|0)>>>4;if(j>>>0>k>>>0){o=0;f=ca(34,t|0,k|0,j|0)|0;h=o;o=0;if((h|0)!=0&(p|0)!=0){d=V6(c[h>>2]|0,w|0,x|0)|0;if(!d)bb(h|0,p|0);z=p}else d=-1;if((d|0)==1){k=t;m=0;j=0;i=r;d=v;h=v;e=z;g=0;u=74;break a}if(f|0)break c;o=0;ka(64,t|0,k|0,j|0);f=o;o=0;if((f|0)!=0&(p|0)!=0){h=V6(c[f>>2]|0,w|0,x|0)|0;if(!h)bb(f|0,p|0);z=p}else h=-1;if((h|0)==1){k=t;m=0;j=0;i=r;d=v;h=v;e=z;g=0;u=74;break a}break}else{o=0;f=ca(34,t|0,j|0,k|0)|0;h=o;o=0;if((h|0)!=0&(p|0)!=0){d=V6(c[h>>2]|0,w|0,x|0)|0;if(!d)bb(h|0,p|0);z=p}else d=-1;if((d|0)==1){k=t;m=0;j=0;i=r;d=v;h=v;e=z;g=0;u=74;break a}if(f|0)break c;o=0;ka(64,t|0,j|0,k|0);f=o;o=0;if((f|0)!=0&(p|0)!=0){h=V6(c[f>>2]|0,w|0,x|0)|0;if(!h)bb(f|0,p|0);z=p}else h=-1;if((h|0)==1){k=t;m=0;j=0;i=r;d=v;h=v;e=z;g=0;u=74;break a}break}}while(0);c[v+(i<<3)+4>>2]=e;o=0;d=$(30,e|0)|0;f=o;o=0;if((f|0)!=0&(p|0)!=0){h=V6(c[f>>2]|0,w|0,x|0)|0;if(!h)bb(f|0,p|0);z=p}else h=-1;if((h|0)==1){k=t;m=0;j=0;i=r;d=v;h=v;e=z;g=0;u=74;break a}c[v+(i<<3)>>2]=d;i=i+1|0}while(0);o=0;e=aa(100,b|0,e|0)|0;f=o;o=0;if((f|0)!=0&(p|0)!=0){h=V6(c[f>>2]|0,w|0,x|0)|0;if(!h)bb(f|0,p|0);z=p}else h=-1;if((h|0)==1){k=t;m=0;j=0;i=r;d=v;h=v;e=z;g=0;u=74;break a}}o=0;g=aa(86,b|0,g|0)|0;e=o;o=0;if((e|0)!=0&(p|0)!=0){f=V6(c[e>>2]|0,w|0,x|0)|0;if(!f)bb(e|0,p|0);z=p}else f=-1;if((f|0)==1){k=t;m=0;j=0;i=r;d=v;h=v;e=z;g=0;u=74;break a}n=i}o=0;j=$(31,n<<3|0)|0;e=o;o=0;if((e|0)!=0&(p|0)!=0){f=V6(c[e>>2]|0,w|0,x|0)|0;if(!f)bb(e|0,p|0);z=p}else f=-1;if((f|0)!=1){o=0;ma(28,v|0,n|0,8,101);e=o;o=0;if((e|0)!=0&(p|0)!=0){f=V6(c[e>>2]|0,w|0,x|0)|0;if(!f)bb(e|0,p|0);z=p}else f=-1;if((f|0)!=1){g=c[m>>2]|0;o=0;ia(110,g+2|0);e=o;o=0;if((e|0)!=0&(p|0)!=0){f=V6(c[e>>2]|0,w|0,x|0)|0;if(!f)bb(e|0,p|0);z=p}else f=-1;if((f|0)!=1){i=c[m+16>>2]|0;d=i+(g*40|0)|0;i=i+((g+1|0)*40|0)|0;q=c[15712]|0;h=0;while(1){if((h|0)>=(n|0))break;if((h|0)>0?c[47323]&16|0:0){o=0;ja(26,q|0,m|0);e=o;o=0;if((e|0)!=0&(p|0)!=0){f=V6(c[e>>2]|0,w|0,x|0)|0;if(!f)bb(e|0,p|0);z=p}else f=-1;if((f|0)==1){k=t;m=j;i=r;d=v;h=v;e=z;g=q;u=74;break a}}e=c[v+(h<<3)+4>>2]|0;k=c[e>>2]&3;g=c[(c[(c[((k|0)==3?e:e+48|0)+40>>2]|0)+16>>2]|0)+112>>2]|0;e=c[(c[(c[((k|0)==2?e:e+-48|0)+40>>2]|0)+16>>2]|0)+112>>2]|0;if((g|0)==(e|0)){o=0;ma(29,m|0,g|0,i|0,d|0);e=o;o=0;if((e|0)!=0&(p|0)!=0){f=V6(c[e>>2]|0,w|0,x|0)|0;if(!f)bb(e|0,p|0);z=p}else f=-1;if((f|0)==1){k=t;m=j;i=r;d=v;h=v;e=z;g=q;u=74;break a}}else{o=0;ka(65,m|0,e|0,i|0);e=o;o=0;if((e|0)!=0&(p|0)!=0){f=V6(c[e>>2]|0,w|0,x|0)|0;if(!f)bb(e|0,p|0);z=p}else f=-1;if((f|0)==1){k=t;m=j;i=r;d=v;h=v;e=z;g=q;u=74;break a}o=0;ka(65,m|0,g|0,d|0);e=o;o=0;if((e|0)!=0&(p|0)!=0){f=V6(c[e>>2]|0,w|0,x|0)|0;if(!f)bb(e|0,p|0);z=p}else f=-1;if((f|0)==1){k=t;m=j;i=r;d=v;h=v;e=z;g=q;u=74;break a}}o=0;e=ca(35,m|0,i|0,d|0)|0;f=o;o=0;if((f|0)!=0&(p|0)!=0){g=V6(c[f>>2]|0,w|0,x|0)|0;if(!g)bb(f|0,p|0);z=p}else g=-1;if((g|0)==1){k=t;m=j;i=r;d=v;h=v;e=z;g=q;u=74;break a}if(e|0){k=t;m=j;i=r;d=v;h=v;break a}e=j+(h<<3)|0;o=0;ma(30,s|0,m|0,d|0,i|0);f=o;o=0;if((f|0)!=0&(p|0)!=0){g=V6(c[f>>2]|0,w|0,x|0)|0;if(!g)bb(f|0,p|0);z=p}else g=-1;if((g|0)==1){k=t;m=j;i=r;d=v;h=v;e=z;g=q;u=74;break a}g=s;k=c[g+4>>2]|0;c[e>>2]=c[g>>2];c[e+4>>2]=k;o=0;ia(111,m|0);e=o;o=0;if((e|0)!=0&(p|0)!=0){f=V6(c[e>>2]|0,w|0,x|0)|0;if(!f)bb(e|0,p|0);z=p}else f=-1;if((f|0)==1){k=t;m=j;i=r;d=v;h=v;e=z;g=q;u=74;break a}h=h+1|0}o=0;ha(8);e=o;o=0;if((e|0)!=0&(p|0)!=0){f=V6(c[e>>2]|0,w|0,x|0)|0;if(!f)bb(e|0,p|0);z=p}else f=-1;if((f|0)!=1){o=0;e=$(32,r|0)|0;f=o;o=0;if((f|0)!=0&(p|0)!=0){g=V6(c[f>>2]|0,w|0,x|0)|0;if(!g)bb(f|0,p|0);z=p}else g=-1;if((g|0)!=1){c[r+20>>2]=e;o=0;e=$(33,r|0)|0;f=o;o=0;if((f|0)!=0&(p|0)!=0){g=V6(c[f>>2]|0,w|0,x|0)|0;if(!g)bb(f|0,p|0);z=p}else g=-1;if((g|0)!=1){c[r+24>>2]=e;o=0;ka(66,n|0,j|0,r|0);e=o;o=0;if((e|0)!=0&(p|0)!=0){f=V6(c[e>>2]|0,w|0,x|0)|0;if(!f)bb(e|0,p|0);z=p}else f=-1;if((f|0)!=1){w=U6(189296,1,w|0,x|0)|0;x=z;o=0;e=o;o=0;if((e|0)!=0&(p|0)!=0){f=V6(c[e>>2]|0,w|0,x|0)|0;if(!f)bb(e|0,p|0);z=p}else f=-1;if((f|0)!=1){k=t;m=j;i=r;d=v;h=v;e=0;g=q;u=74}else{k=t;m=j;i=r;d=v;h=v;e=z;g=q;u=74}}else{k=t;m=j;i=r;d=v;h=v;e=z;g=q;u=74}}else{k=t;m=j;i=r;d=v;h=v;e=z;g=q;u=74}}else{k=t;m=j;i=r;d=v;h=v;e=z;g=q;u=74}}else{k=t;m=j;i=r;d=v;h=v;e=z;g=q;u=74}}else{k=t;m=j;i=r;d=v;h=v;e=z;g=0;u=74}}else{k=t;m=j;i=r;d=v;h=v;e=z;g=0;u=74}}else{k=t;m=0;i=r;d=v;h=v;e=z;g=0;u=74}}else{n=0;k=t;m=0;j=0;i=r;d=v;h=v;e=z;g=0;u=74}}else{n=0;k=t;m=0;j=0;i=r;d=v;h=v;e=z;g=0;u=74}}else{n=0;k=t;m=0;j=0;i=0;d=v;h=v;e=z;g=0;u=74}}else{n=0;k=0;m=0;j=0;i=0;d=0;h=v;e=z;g=0;u=74}}else{n=0;k=0;m=0;j=0;i=0;d=0;h=0;e=z;g=0;u=74}while(0);d:while(1){if((u|0)==74){u=0;if(e|0){q=g;continue}o=0;ia(112,i|0);e=o;o=0;if((e|0)!=0&(p|0)!=0){f=V6(c[e>>2]|0,w|0,x|0)|0;if(!f)bb(e|0,p|0);z=p}else f=-1;if((f|0)==1){A=g;f=h;q=d;r=i;s=j;t=m;v=k;u=n;e=z;g=A;h=f;d=q;i=r;j=s;m=t;k=v;n=u;u=74;continue}if(c[47323]&4|0){o=0;na(8,g|0,i|0,n|0,m|0,d|0);e=o;o=0;if((e|0)!=0&(p|0)!=0){f=V6(c[e>>2]|0,w|0,x|0)|0;if(!f)bb(e|0,p|0);z=p}else f=-1;if((f|0)==1){f=g;q=h;r=d;s=i;t=j;v=m;A=k;u=n;e=z;g=f;h=q;d=r;i=s;j=t;m=v;k=A;n=u;u=74;continue}}o=0;oa(10,b|0,i|0,n|0,m|0,d|0,0);e=o;o=0;if((e|0)!=0&(p|0)!=0){f=V6(c[e>>2]|0,w|0,x|0)|0;if(!f)bb(e|0,p|0);z=p}else f=-1;if((f|0)==1){f=g;q=h;r=d;s=i;t=j;v=m;A=k;u=n;e=z;g=f;h=q;d=r;i=s;j=t;m=v;k=A;n=u;u=74;continue}q=g}if(!(a[194954]|0))e=0;else{o=0;ia(113,k|0);e=o;o=0;if((e|0)!=0&(p|0)!=0){f=V6(c[e>>2]|0,w|0,x|0)|0;if(!f)bb(e|0,p|0);z=p}else f=-1;if((f|0)==1){e=z;g=q;u=74;continue}e=0}while(1){if((e|0)>=(n|0))break;o=0;ia(105,c[m+(e<<3)+4>>2]|0);f=o;o=0;if((f|0)!=0&(p|0)!=0){g=V6(c[f>>2]|0,w|0,x|0)|0;if(!g)bb(f|0,p|0);z=p}else g=-1;if((g|0)==1){e=z;g=q;u=74;continue d}e=e+1|0}o=0;ia(105,j|0);e=o;o=0;if((e|0)!=0&(p|0)!=0){f=V6(c[e>>2]|0,w|0,x|0)|0;if(!f)bb(e|0,p|0);z=p}else f=-1;if((f|0)==1){e=z;g=q;u=74;continue}o=0;ia(114,i|0);e=o;o=0;if((e|0)!=0&(p|0)!=0){f=V6(c[e>>2]|0,w|0,x|0)|0;if(!f)bb(e|0,p|0);z=p}else f=-1;if((f|0)==1){e=z;g=q;u=74;continue}o=0;ia(105,h|0);e=o;o=0;if((e|0)!=0&(p|0)!=0){f=V6(c[e>>2]|0,w|0,x|0)|0;if(!f)bb(e|0,p|0);z=p}else f=-1;if((f|0)==1){e=z;g=q;u=74}else break}U1(w|0);l=y;return}function sQ(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0.0;q=l;l=l+64|0;p=q+32|0;o=q+16|0;j=q;k=q+48|0;T4(110935,a)|0;T4(110946,a)|0;m=b+16|0;n=j+8|0;i=k+4|0;g=0;while(1){if((g|0)>=(c[b>>2]|0))break;d=c[m>>2]|0;e=c[d+(g*40|0)+20>>2]|0;f=c[d+(g*40|0)+24>>2]|0;if((e|0)==(f|0)){lR(j,e);d=~~+h[j>>3];e=~~+h[n>>3]}else{nR(k,(c[e>>2]&1|0)==0?e:f,d+(g*40|0)|0);d=c[k>>2]|0;e=c[i>>2]|0}c[o>>2]=g;c[o+4>>2]=d;c[o+8>>2]=e;w4(a,110966,o)|0;g=g+1|0}f=b+4|0;e=b+20|0;d=0;while(1){if((d|0)>=(c[f>>2]|0))break;o=c[e>>2]|0;b=c[o+(d*24|0)+16>>2]|0;r=+h[o+(d*24|0)>>3];c[p>>2]=c[o+(d*24|0)+12>>2];c[p+4>>2]=b;h[p+8>>3]=r;w4(a,110986,p)|0;d=d+1|0}T4(111008,a)|0;l=q;return}function tQ(a){a=a|0;var b=0.0,d=0.0,e=0,f=0;f=c[a>>2]&3;e=c[(c[((f|0)==3?a:a+48|0)+40>>2]|0)+16>>2]|0;a=c[(c[((f|0)==2?a:a+-48|0)+40>>2]|0)+16>>2]|0;b=+h[e+16>>3]-+h[a+16>>3];d=+h[e+24>>3]-+h[a+24>>3];return ~~(d*d+b*b)|0}function uQ(a,b){a=a|0;b=b|0;return (c[a>>2]|0)-(c[b>>2]|0)|0}function vQ(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+32|0;j=n;lR(n+16|0,d);k=d+32|0;m=d+36|0;g=0;while(1){if((g|0)>=(c[k>>2]|0))break;h=c[(c[m>>2]|0)+(g<<2)>>2]|0;do if(!(a[h+36>>0]|0)){i=c[h+20>>2]|0;if((i|0)==(d|0)){jR(j,h,c[h+24>>2]|0);ER(b,f,h,0.0)|0;break}else{jR(j,h,i);ER(b,e,h,0.0)|0;break}}while(0);g=g+1|0}c[b>>2]=(c[b>>2]|0)+2;l=n;return}function wQ(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;k=l;l=l+32|0;h=k;lR(k+16|0,b);i=b+32|0;j=b+36|0;f=0;while(1){if((f|0)>=(c[i>>2]|0))break;g=c[(c[j>>2]|0)+(f<<2)>>2]|0;e=c[g+20>>2]|0;if((e|0)==(b|0))e=c[g+24>>2]|0;jR(h,g,e);ER(a,d,g,0.0)|0;f=f+1|0}c[a>>2]=(c[a>>2]|0)+1;c[d+24>>2]=b;c[d+20>>2]=b;l=k;return}function xQ(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,i=0,j=0,k=0.0,m=0.0,n=0,o=0.0,p=0.0,q=0,r=0,s=0,t=0,u=0,v=0,w=0.0,x=0.0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0;H=l;l=l+128|0;C=H+64|0;n=H+48|0;D=H+32|0;E=H+16|0;F=H;g=0;i=e;while(1){if(!i)break;g=g+1|0;i=c[i+8>>2]|0}B=JK((g*56|0)+-112|0)|0;c[C+52>>2]=0;c[C+48>>2]=0;A=e+8|0;e=c[A>>2]|0;i=c[e+8>>2]|0;g=c[e+20>>2]|0;if(c[g>>2]&1)g=c[e+24>>2]|0;jR(n,e,g);j=e;q=e;p=0.0;o=+h[n>>3];z=0;m=0.0;x=+h[n+8>>3];while(1){y=i+8|0;if(!(c[y>>2]|0))break;v=kR(j,i)|0;cV(d,v,c[q+12>>2]|0);t=q+36|0;u=i+36|0;if((a[t>>0]|0)==(a[u>>0]|0))if((c[y>>2]|0)==(f|0)){jR(E,i,v);e=E;G=12}else{j=q;e=z;k=x}else{lR(D,v);e=D;G=12}if((G|0)==12){G=0;w=+h[e>>3];k=+h[e+8>>3];e=a[t>>0]|0;s=e<<24>>24==0;r=(q|0)==(c[A>>2]|0);if(s){if(!(a[u>>0]|0))e=0;else e=(c[i+20>>2]|0)==(v|0)?4:2;n=v+48|0;q=g+48|0;j=g+40|0;g=r?0:p>o?4:2}else{if(e<<24>>24==(a[u>>0]|0))e=0;else e=(c[i+20>>2]|0)==(v|0)?1:3;n=v+40|0;q=g+40|0;j=g+48|0;g=r?0:m>x?1:3}mR(C,s&1,+h[j>>3],+h[q>>3],+h[n>>3],g,e);q=z+1|0;g=B+(z*56|0)|0;e=C;j=g+56|0;do{c[g>>2]=c[e>>2];g=g+4|0;e=e+4|0}while((g|0)<(j|0));if((a[t>>0]|0)!=(a[u>>0]|0)?(c[y>>2]|0)==(f|0):0){jR(F,i,v);n=(a[u>>0]|0)==0;e=v+40|0;g=v+48|0;p=+h[(n?g:e)>>3];mR(C,n&1,+h[(n?e:g)>>3],p,p,n?(o>w?4:2):x>k?1:3,0);n=z+2|0;g=B+(q*56|0)|0;e=C;j=g+56|0;do{c[g>>2]=c[e>>2];g=g+4|0;e=e+4|0}while((g|0)<(j|0));g=v;j=i;p=o;o=w;e=n;m=x}else{g=v;j=i;p=o;o=w;e=q;m=x}}v=i;i=c[y>>2]|0;q=j;z=e;x=k;j=v}i=W1(B,z*56|0)|0;e=z+-1|0;g=0;while(1){if((g|0)>=(z|0))break;if((g|0)>0)c[i+(g*56|0)+48>>2]=i+((g+-1|0)*56|0);if((g|0)<(e|0)){G=g+1|0;c[i+(g*56|0)+52>>2]=i+(G*56|0);g=G;continue}else{g=g+1|0;continue}}c[b>>2]=z;c[b+4>>2]=i;l=H;return}function yQ(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,i=0,j=0,k=0;j=Vz(25692,c[4581]|0)|0;k=a+8|0;i=0;while(1){if((i|0)>=(c[a>>2]|0))break;b=(c[k>>2]|0)+(i*72|0)|0;if(!(c[b>>2]&4)){while(1){d=c[(c[b+36>>2]|0)+8>>2]|0;if(!d)break;d=c[d+20>>2]|0;if(!d)break;if(!(c[d>>2]&1))b=d;else break}g=JK(40)|0;c[g+36>>2]=b;h[g+8>>3]=+h[b+40>>3];f=b;d=c[b>>2]|0;while(1){c[f>>2]=d|4;d=c[c[f+36>>2]>>2]|0;if(!d)break;e=c[d+24>>2]|0;if(!e)break;d=c[e>>2]|0;if(d&1|0)break;else f=e}h[g+16>>3]=+h[f+56>>3];eR(j,g,+h[b+48>>3])}i=i+1|0}return j|0}function zQ(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,i=0,j=0,k=0;j=Vz(25692,c[4581]|0)|0;k=a+8|0;i=0;while(1){if((i|0)>=(c[a>>2]|0))break;b=(c[k>>2]|0)+(i*72|0)|0;if(!(c[b>>2]&2)){while(1){d=c[(c[b+36>>2]|0)+12>>2]|0;if(!d)break;d=c[d+20>>2]|0;if(!d)break;if(!(c[d>>2]&1))b=d;else break}g=JK(40)|0;c[g+36>>2]=b;h[g+8>>3]=+h[b+48>>3];f=b;d=c[b>>2]|0;while(1){c[f>>2]=d|2;d=c[(c[f+36>>2]|0)+4>>2]|0;if(!d)break;e=c[d+24>>2]|0;if(!e)break;d=c[e>>2]|0;if(d&1|0)break;else f=e}h[g+16>>3]=+h[f+64>>3];eR(j,g,+h[b+40>>3])}i=i+1|0}return j|0}function AQ(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;j=e+20|0;i=e+24|0;e=0;while(1){if((e|0)>=(b|0))break;g=c[d+(e<<3)>>2]|0;h=c[d+(e<<3)+4>>2]|0;f=0;while(1){if((f|0)>=(g|0))break;k=h+(f*56|0)|0;dR(JQ(c[((a[k>>0]|0)==0?j:i)>>2]|0,k)|0,k);f=f+1|0}e=e+1|0}return}function BQ(a){a=a|0;var b=0,d=0;d=a+20|0;LQ(c[d>>2]|0);b=a+24|0;LQ(c[b>>2]|0);MQ(c[d>>2]|0);MQ(c[b>>2]|0);NQ(c[d>>2]|0,a);NQ(c[b>>2]|0,a);OQ(c[d>>2]|0);OQ(c[b>>2]|0);return}function CQ(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0.0,B=0.0,C=0.0,D=0,E=0.0;z=l;l=l+224|0;n=z+176|0;m=z+208|0;x=z+160|0;y=z+128|0;k=z+96|0;t=z+64|0;u=z;o=z+32|0;v=u+8|0;h[v>>3]=1797693134862315708145274.0e284;h[u>>3]=1797693134862315708145274.0e284;w=u+24|0;h[w>>3]=-1797693134862315708145274.0e284;p=u+16|0;h[p>>3]=-1797693134862315708145274.0e284;T4(110183,a)|0;c[n>>2]=10;c[n+4>>2]=10;w4(a,110589,n)|0;T4(138265,a)|0;i=b+4|0;j=b+12|0;q=t+8|0;r=t+16|0;s=t+24|0;g=0;while(1){if((g|0)>=(c[i>>2]|0))break;D=(c[j>>2]|0)+(g*72|0)+40|0;c[t>>2]=c[D>>2];c[t+4>>2]=c[D+4>>2];c[t+8>>2]=c[D+8>>2];c[t+12>>2]=c[D+12>>2];c[t+16>>2]=c[D+16>>2];c[t+20>>2]=c[D+20>>2];c[t+24>>2]=c[D+24>>2];c[t+28>>2]=c[D+28>>2];C=+h[q>>3];B=+h[r>>3];A=+h[s>>3];h[k>>3]=+h[t>>3];h[k+8>>3]=C;h[k+16>>3]=B;h[k+24>>3]=A;w4(a,138284,k)|0;g=g+1|0}g=0;while(1){if((g|0)>=(d|0))break;D=c[f+(g<<3)+4>>2]|0;k=e+(g<<3)|0;c[m>>2]=c[k>>2];c[m+4>>2]=c[k+4>>2];c[n>>2]=c[u>>2];c[n+4>>2]=c[u+4>>2];c[n+8>>2]=c[u+8>>2];c[n+12>>2]=c[u+12>>2];c[n+16>>2]=c[u+16>>2];c[n+20>>2]=c[u+20>>2];c[n+24>>2]=c[u+24>>2];c[n+28>>2]=c[u+28>>2];KQ(o,a,D,m,b,n);c[u>>2]=c[o>>2];c[u+4>>2]=c[o+4>>2];c[u+8>>2]=c[o+8>>2];c[u+12>>2]=c[o+12>>2];c[u+16>>2]=c[o+16>>2];c[u+20>>2]=c[o+20>>2];c[u+24>>2]=c[o+24>>2];c[u+28>>2]=c[o+28>>2];g=g+1|0}T4(110606,a)|0;i=b+8|0;g=0;while(1){if((g|0)>=(c[b>>2]|0))break;D=(c[i>>2]|0)+(g*72|0)+40|0;c[t>>2]=c[D>>2];c[t+4>>2]=c[D+4>>2];c[t+8>>2]=c[D+8>>2];c[t+12>>2]=c[D+12>>2];c[t+16>>2]=c[D+16>>2];c[t+20>>2]=c[D+20>>2];c[t+24>>2]=c[D+24>>2];c[t+28>>2]=c[D+28>>2];E=+h[t>>3];A=+h[q>>3];B=+h[r>>3];C=+h[s>>3];h[y>>3]=E;h[y+8>>3]=A;h[y+16>>3]=B;h[y+24>>3]=C;w4(a,138321,y)|0;h[u>>3]=+h[(+h[u>>3]>3];h[v>>3]=+h[(+h[v>>3]>3];h[p>>3]=+h[(+h[p>>3]>B?u:t)+16>>3];h[w>>3]=+h[(+h[w>>3]>C?u:t)+24>>3];g=g+1|0}v=~~(+h[v>>3]+10.0);y=~~(+h[p>>3]+10.0);D=~~(+h[w>>3]+10.0);c[x>>2]=~~(+h[u>>3]+10.0);c[x+4>>2]=v;c[x+8>>2]=y;c[x+12>>2]=D;w4(a,110631,x)|0;l=z;return}function DQ(b,d,e,f,g,i){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;i=i|0;var j=0.0,k=0.0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0;N=l;l=l+112|0;F=N+88|0;E=N+72|0;M=N+32|0;I=N+16|0;J=N;K=N+56|0;L=N+40|0;G=c[15712]|0;w=(i|0)==0;x=J+8|0;y=I+8|0;v=0;m=0;n=0;o=0;p=0;i=0;while(1){if((v|0)>=(e|0))break;z=c[g+(v<<3)+4>>2]|0;A=z+48|0;u=(c[(c[((c[z>>2]&3|0)==3?z:A)+40>>2]|0)+16>>2]|0)+16|0;B=z+16|0;C=(c[B>>2]|0)+16|0;c[E>>2]=c[u>>2];c[E+4>>2]=c[u+4>>2];c[E+8>>2]=c[u+8>>2];c[E+12>>2]=c[u+12>>2];c[F>>2]=c[C>>2];c[F+4>>2]=c[C+4>>2];c[F+8>>2]=c[C+8>>2];c[F+12>>2]=c[C+12>>2];EQ(K,E,F);c[I>>2]=c[K>>2];c[I+4>>2]=c[K+4>>2];c[I+8>>2]=c[K+8>>2];c[I+12>>2]=c[K+12>>2];C=z+-48|0;u=(c[(c[((c[z>>2]&3|0)==2?z:C)+40>>2]|0)+16>>2]|0)+16|0;t=(c[B>>2]|0)+56|0;c[E>>2]=c[u>>2];c[E+4>>2]=c[u+4>>2];c[E+8>>2]=c[u+8>>2];c[E+12>>2]=c[u+12>>2];c[F>>2]=c[t>>2];c[F+4>>2]=c[t+4>>2];c[F+8>>2]=c[t+8>>2];c[F+12>>2]=c[t+12>>2];EQ(L,E,F);c[J>>2]=c[L>>2];c[J+4>>2]=c[L+4>>2];c[J+8>>2]=c[L+8>>2];c[J+12>>2]=c[L+12>>2];t=c[f+(v<<3)>>2]|0;u=c[f+(v<<3)+4>>2]|0;s=t*3|0;D=s+1|0;if((s|0)>=(n|0)){if(m|0)U1(i);p=KK(D<<4)|0;m=p;n=D;o=p;i=p}if(!(a[u>>0]|0)){k=+(GQ(u,d)|0);j=+h[I>>3]}else{j=+FQ(u,d);k=+h[y>>3]}r=m+16|0;h[m+16>>3]=j;h[m+24>>3]=k;c[p>>2]=c[r>>2];c[p+4>>2]=c[r+4>>2];c[p+8>>2]=c[r+8>>2];c[p+12>>2]=c[r+12>>2];r=1;q=u;s=2;while(1){if((r|0)>=(t|0))break;q=u+(r*56|0)|0;if(!(a[q>>0]|0))k=+(GQ(q,d)|0);else j=+FQ(q,d);O=m+(s+2<<4)|0;Q=m+(s+1<<4)|0;P=m+(s<<4)|0;h[P>>3]=j;h[m+(s<<4)+8>>3]=k;c[Q>>2]=c[P>>2];c[Q+4>>2]=c[P+4>>2];c[Q+8>>2]=c[P+8>>2];c[Q+12>>2]=c[P+12>>2];c[O>>2]=c[P>>2];c[O+4>>2]=c[P+4>>2];c[O+8>>2]=c[P+8>>2];c[O+12>>2]=c[P+12>>2];r=r+1|0;s=s+3|0}if(!(a[q>>0]|0)){k=+(GQ(q,d)|0);j=+h[J>>3]}else{j=+FQ(q,d);k=+h[x>>3]}Q=m+(s<<4)|0;O=s+1|0;P=m+(O<<4)|0;h[P>>3]=j;h[m+(O<<4)+8>>3]=k;c[Q>>2]=c[P>>2];c[Q+4>>2]=c[P+4>>2];c[Q+8>>2]=c[P+8>>2];c[Q+12>>2]=c[P+12>>2];if(0>1){P=KB(c[((c[z>>2]&3|0)==3?z:A)+40>>2]|0)|0;Q=KB(c[((c[z>>2]&3|0)==2?z:C)+40>>2]|0)|0;c[M>>2]=P;c[M+4>>2]=Q;w4(G,110142,M)|0}dO(z,c[((c[z>>2]&3|0)==2?z:C)+40>>2]|0,m,D,25680);if((!w?(H=c[(c[B>>2]|0)+96>>2]|0,H|0):0)?(a[H+81>>0]|0)==0:0){c[E>>2]=c[I>>2];c[E+4>>2]=c[I+4>>2];c[E+8>>2]=c[I+8>>2];c[E+12>>2]=c[I+12>>2];c[F>>2]=c[J>>2];c[F+4>>2]=c[J+4>>2];c[F+8>>2]=c[J+8>>2];c[F+12>>2]=c[J+12>>2];yO(b,z,E,F)}v=v+1|0}U1(o);l=N;return}function EQ(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;h[b>>3]=+h[b>>3]+ +h[d>>3];e=b+8|0;h[e>>3]=+h[e>>3]+ +h[d+8>>3];c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];return}function FQ(a,b){a=a|0;b=b|0;var d=0.0,e=0;b=JQ(c[b+24>>2]|0,a)|0;e=c[b+36>>2]|0;d=+h[e+40>>3];return +((+h[e+56>>3]-d)*(+(c[a+44>>2]|0)/+((c[b+24>>2]|0)+1|0))+d)}function GQ(a,b){a=a|0;b=b|0;var d=0.0,e=0;e=JQ(c[b+20>>2]|0,a)|0;b=c[e+36>>2]|0;d=+h[b+48>>3];return ~~((1.0-+(c[a+44>>2]|0)/+((c[e+24>>2]|0)+1|0))*(+h[b+64>>3]-d)+d)|0}function HQ(a){a=a|0;return 0}function IQ(a){a=a|0;return 0}function JQ(a,b){a=a|0;b=b|0;a=nb[c[a>>2]&63](a,b+8|0,512)|0;if(!a)qa(110155,110161,423,110169);a=c[a+16>>2]|0;a=nb[c[a>>2]&63](a,b+16|0,512)|0;if(!a)qa(110180,110161,425,110169);else return a|0;return 0}function KQ(b,d,e,f,g,i){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;i=i|0;var j=0,k=0.0,m=0,n=0,o=0,p=0.0,q=0.0,r=0.0,s=0.0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0.0,C=0.0,D=0.0;z=l;l=l+32|0;y=z+16|0;u=z+8|0;m=z;j=c[(c[(c[((c[e>>2]&3|0)==3?e:e+48|0)+40>>2]|0)+16>>2]|0)+112>>2]|0;t=c[f+4>>2]|0;if(!(a[t>>0]|0)){k=+h[j+56>>3];s=+h[j+40>>3];j=GQ(t,g)|0;k=(s+k)*.5}else{k=+h[j+64>>3];s=+h[j+48>>3];j=~~((s+k)*.5);k=+FQ(t,g)}A=~~k;p=+h[i>>3];r=+(A|0);p=p>3]=p;v=i+8|0;q=+h[v>>3];s=+(j|0);q=q>3]=q;w=i+16|0;k=+h[w>>3];r=k>r?k:r;h[w>>3]=r;x=i+24|0;k=+h[x>>3];s=k>s?k:s;h[x>>3]=s;c[m>>2]=A;c[m+4>>2]=j;w4(d,110682,m)|0;o=c[f>>2]|0;m=t;n=1;f=A;while(1){if((n|0)>=(o|0))break;m=t+(n*56|0)|0;if(!(a[m>>0]|0))j=GQ(m,g)|0;else f=~~+FQ(m,g);B=+(f|0);D=p>3]=D;k=+(j|0);C=q>3]=C;B=r>B?r:B;h[w>>3]=B;k=s>k?s:k;h[x>>3]=k;c[u>>2]=f;c[u+4>>2]=j;w4(d,110704,u)|0;n=n+1|0;p=D;q=C;r=B;s=k}j=c[(c[(c[((c[e>>2]&3|0)==2?e:e+-48|0)+40>>2]|0)+16>>2]|0)+112>>2]|0;if(!(a[m>>0]|0)){k=+h[j+56>>3];D=+h[j+40>>3];j=GQ(m,g)|0;k=(D+k)*.5}else{k=+h[j+64>>3];D=+h[j+48>>3];j=~~((D+k)*.5);k=+FQ(m,g)}A=~~k;C=+(A|0);h[i>>3]=p>3]=q>3]=r>C?r:C;h[x>>3]=s>D?s:D;c[y>>2]=A;c[y+4>>2]=j;w4(d,110718,y)|0;c[b>>2]=c[i>>2];c[b+4>>2]=c[i+4>>2];c[b+8>>2]=c[i+8>>2];c[b+12>>2]=c[i+12>>2];c[b+16>>2]=c[i+16>>2];c[b+20>>2]=c[i+20>>2];c[b+24>>2]=c[i+24>>2];c[b+28>>2]=c[i+28>>2];l=z;return}function LQ(a){a=a|0;var b=0;a=Tz(a)|0;while(1){if(!a)break;b=Tz(c[a+16>>2]|0)|0;while(1){if(!b)break;c[b+32>>2]=oR(c[b+24>>2]|0)|0;b=c[b>>2]|0}a=c[a>>2]|0}return}function MQ(a){a=a|0;var b=0;a=Tz(a)|0;while(1){if(!a)break;b=Tz(c[a+16>>2]|0)|0;while(1){if(!b)break;if(c[b+24>>2]|0)cR(b);b=c[b>>2]|0}a=c[a>>2]|0}return}function NQ(a,b){a=a|0;b=b|0;var d=0;d=Tz(a)|0;while(1){if(!d)break;a=Tz(c[d+16>>2]|0)|0;while(1){if(!a)break;SQ(a,b);a=c[a>>2]|0}d=c[d>>2]|0}return}function OQ(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,i=0;e=Tz(a)|0;while(1){if(!e)break;i=e+8|0;f=Tz(c[e+16>>2]|0)|0;while(1){if(!f)break;a=f+24|0;a:do if(c[a>>2]|0){if(c[47323]&8|0)PQ(f,~~+h[i>>3]);g=f+32|0;tR(c[g>>2]|0);b=c[a>>2]|0;d=f+28|0;a=0;while(1){if((a|0)>=(b|0))break a;c[(c[(c[d>>2]|0)+(a<<2)>>2]|0)+44>>2]=(c[(c[(c[g>>2]|0)+4>>2]|0)+(a*12|0)+4>>2]|0)+1;a=a+1|0}}while(0);f=c[f>>2]|0}e=c[e>>2]|0}return}function PQ(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0,k=0.0,m=0.0;j=l;l=l+32|0;d=j;g=a+24|0;a:do if((c[g>>2]|0)>=2){i=c[15712]|0;m=+h[a+8>>3];k=+h[a+16>>3];c[d>>2]=b;h[d+8>>3]=m;h[d+16>>3]=k;w4(i,110739,d)|0;f=a+32|0;a=a+28|0;b=0;while(1){if((b|0)>=(c[g>>2]|0))break a;e=c[(c[(c[f>>2]|0)+4>>2]|0)+(b*12|0)+8>>2]|0;b:do if(Xz(e)|0){QQ(i,c[(c[a>>2]|0)+(b<<2)>>2]|0);T4(110759,i)|0;d=nb[c[e>>2]&63](e,0,128)|0;while(1){if(!d)break b;T4(110764,i)|0;QQ(i,c[(c[a>>2]|0)+(c[d>>2]<<2)>>2]|0);T4(153599,i)|0;d=nb[c[e>>2]&63](e,d,8)|0}}while(0);b=b+1|0}}while(0);l=j;return}function QQ(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,i=0,j=0.0,k=0.0,m=0.0;g=l;l=l+80|0;f=g+40|0;e=g;if(!(a[d>>0]|0)){m=+h[d+16>>3];j=+h[d+8>>3];k=+h[d+24>>3];i=RQ(c[d+32>>2]|0)|0;e=RQ(c[d+36>>2]|0)|0;h[f>>3]=m;h[f+8>>3]=j;h[f+16>>3]=k;h[f+24>>3]=j;c[f+32>>2]=i;c[f+36>>2]=e;w4(b,110770,f)|0}else{k=+h[d+8>>3];j=+h[d+16>>3];m=+h[d+24>>3];f=RQ(c[d+32>>2]|0)|0;i=RQ(c[d+36>>2]|0)|0;h[e>>3]=k;h[e+8>>3]=j;h[e+16>>3]=k;h[e+24>>3]=m;c[e+32>>2]=f;c[e+36>>2]=i;w4(b,110770,e)|0}l=g;return}function RQ(a){a=a|0;switch(a|0){case 0:{a=110821;break}case 1:{a=110816;break}case 2:{a=110809;break}case 3:{a=110802;break}case 4:{a=110794;break}default:a=0}return a|0}function SQ(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;w=l;l=l+16|0;r=w+8|0;t=w;u=c[a+32>>2]|0;v=c[a+28>>2]|0;p=a+24|0;m=r+4|0;n=t+4|0;j=0;a=c[p>>2]|0;a:while(1){q=j+1|0;if((q|0)>=(a|0))break;o=v+(j<<2)|0;k=q;while(1){if((k|0)>=(a|0)){j=q;continue a}b:do if(((sR(u,j,k)|0)==0?(sR(u,k,j)|0)==0:0)?(s=v+(k<<2)|0,TQ(c[o>>2]|0,c[s>>2]|0)|0):0){f=c[o>>2]|0;a=c[f+48>>2]|0;i=c[s>>2]|0;d=c[i+48>>2]|0;e=(d|0)==0;if(a)if(e)a=1;else a=+h[a+8>>3]!=+h[d+8>>3];else a=e^1;g=a&1;UQ(r,f,i,0,g);a=c[r>>2]|0;i=c[m>>2]|0;f=g^1;UQ(t,c[o>>2]|0,c[s>>2]|0,1,f);d=c[t>>2]|0;e=c[n>>2]|0;switch(i|0){case -1:{VQ(c[s>>2]|0,c[o>>2]|0,g,0,a,b);VQ(c[s>>2]|0,c[o>>2]|0,f,1,d,b);if((e|0)!=1)break b;WQ(c[o>>2]|0,c[s>>2]|0,f,b);break b}case 0:switch(e|0){case -1:{VQ(c[s>>2]|0,c[o>>2]|0,g,0,a,b);VQ(c[s>>2]|0,c[o>>2]|0,f,1,d,b);break b}case 0:{VQ(c[o>>2]|0,c[s>>2]|0,0,g,a,b);VQ(c[o>>2]|0,c[s>>2]|0,1,f,d,b);break b}case 1:{VQ(c[o>>2]|0,c[s>>2]|0,0,g,a,b);VQ(c[o>>2]|0,c[s>>2]|0,1,f,d,b);break b}default:break b}case 1:{VQ(c[o>>2]|0,c[s>>2]|0,0,g,a,b);VQ(c[o>>2]|0,c[s>>2]|0,1,f,d,b);if((e|0)!=-1)break b;WQ(c[o>>2]|0,c[s>>2]|0,f,b);break b}default:break b}}while(0);k=k+1|0;a=c[p>>2]|0}}l=w;return}function TQ(a,b){a=a|0;b=b|0;if(!(+h[a+8>>3]==+h[b+8>>3]))qa(110892,110161,843,110923);if((+h[a+16>>3]==+h[b+16>>3]?+h[a+24>>3]==+h[b+24>>3]:0)?(c[a+32>>2]|0)==(c[b+32>>2]|0):0)a=(c[a+36>>2]|0)==(c[b+36>>2]|0)&1;else a=0;return a|0}function UQ(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=0;while(1){b=XQ(b,e)|0;if(!b){h=0;break}d=XQ(d,f)|0;if(!d){i=6;break}if(!(TQ(b,d)|0)){i=7;break}g=g+1|0}if((i|0)==6)qa(138394,110161,871,110841);else if((i|0)==7)h=ZQ(b,YQ(b,d)|0,g+1|0,1-e|0)|0;c[a>>2]=g;c[a+4>>2]=h;return}function VQ(b,d,e,f,g,i){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0;o=i+20|0;n=i+24|0;i=JQ(c[((a[b>>0]|0)==0?o:n)>>2]|0,b)|0;qR(c[i+32>>2]|0,c[b+40>>2]|0,c[d+40>>2]|0);k=1;while(1){if((k|0)>(g|0))break;l=XQ(b,e)|0;m=XQ(d,f)|0;do if(!(a[b>>0]|0)){j=JQ(c[n>>2]|0,l)|0;if(+h[l+8>>3]==+h[b+16>>3]){p=(c[b+32>>2]|0)==1;i=(sR(c[i+32>>2]|0,c[b+40>>2]|0,c[d+40>>2]|0)|0)!=0;b=c[j+32>>2]|0;if(p)if(i){qR(b,c[m+40>>2]|0,c[l+40>>2]|0);i=j;break}else{qR(b,c[l+40>>2]|0,c[m+40>>2]|0);i=j;break}else if(i){qR(b,c[l+40>>2]|0,c[m+40>>2]|0);i=j;break}else{qR(b,c[m+40>>2]|0,c[l+40>>2]|0);i=j;break}}else{p=(c[b+36>>2]|0)==1;i=(sR(c[i+32>>2]|0,c[b+40>>2]|0,c[d+40>>2]|0)|0)!=0;b=c[j+32>>2]|0;if(p)if(i){qR(b,c[l+40>>2]|0,c[m+40>>2]|0);i=j;break}else{qR(b,c[m+40>>2]|0,c[l+40>>2]|0);i=j;break}else if(i){qR(b,c[m+40>>2]|0,c[l+40>>2]|0);i=j;break}else{qR(b,c[l+40>>2]|0,c[m+40>>2]|0);i=j;break}}}else{j=JQ(c[o>>2]|0,l)|0;if(+h[l+8>>3]==+h[b+16>>3]){p=(c[b+32>>2]|0)==2;i=(sR(c[i+32>>2]|0,c[b+40>>2]|0,c[d+40>>2]|0)|0)!=0;b=c[j+32>>2]|0;if(p)if(i){qR(b,c[l+40>>2]|0,c[m+40>>2]|0);i=j;break}else{qR(b,c[m+40>>2]|0,c[l+40>>2]|0);i=j;break}else if(i){qR(b,c[m+40>>2]|0,c[l+40>>2]|0);i=j;break}else{qR(b,c[l+40>>2]|0,c[m+40>>2]|0);i=j;break}}else{p=(c[b+36>>2]|0)==2;i=(sR(c[i+32>>2]|0,c[b+40>>2]|0,c[d+40>>2]|0)|0)!=0;b=c[j+32>>2]|0;if(p)if(i){qR(b,c[m+40>>2]|0,c[l+40>>2]|0);i=j;break}else{qR(b,c[l+40>>2]|0,c[m+40>>2]|0);i=j;break}else if(i){qR(b,c[l+40>>2]|0,c[m+40>>2]|0);i=j;break}else{qR(b,c[m+40>>2]|0,c[l+40>>2]|0);i=j;break}}}while(0);b=l;d=m;k=k+1|0}return}function WQ(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0;while(1){if(!(TQ(b,d)|0))break;g=XQ(b,1)|0;d=XQ(d,e)|0;b=g}g=c[(JQ(c[((a[b>>0]|0)==0?f+20|0:f+24|0)>>2]|0,b)|0)+32>>2]|0;rR(g,c[b+40>>2]|0,c[d+40>>2]|0);return}function XQ(a,b){a=a|0;b=b|0;if(!a)qa(110828,110161,798,110832);else return c[((b|0)==0?a+48|0:a+52|0)>>2]|0;return 0}function YQ(b,c){b=b|0;c=c|0;var d=0,e=0,f=0;f=l;l=l+16|0;e=f;d=a[b>>0]|0;if(d<<24>>24==(a[c>>0]|0)?!(+h[b+8>>3]!=+h[c+8>>3]):0){if(!(d<<24>>24))b=_Q(b,c,3,1)|0;else b=_Q(b,c,4,2)|0;l=f;return b|0}gA(1,110854,e)|0;bb(189296,1);return 0}function ZQ(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,i=0,j=0;j=1;while(1){if((j|0)>(e|0))break;i=XQ(b,f)|0;g=+h[i+8>>3]==+h[b+16>>3];do if(!(a[b>>0]|0))if(g){g=(c[b+32>>2]|0)==1;break}else{g=(c[b+36>>2]|0)==3;break}else if(g){g=(c[b+32>>2]|0)==4;break}else{g=(c[b+36>>2]|0)==2;break}while(0);b=i;j=j+1|0;d=g?0-d|0:d}return d|0}function _Q(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0.0,i=0.0,j=0.0,k=0.0,l=0,m=0,n=0,o=0;j=+h[a+24>>3];k=+h[b+16>>3];do if(!(j>3],i=+h[b+24>>3],!(g>i)):0){if(k>2]|0;return ((d|0)==(c[b+32>>2]|0)?0:(d|0)==(e|0)?1:-1)|0}else{d=c[a+32>>2]|0;b=(d|0)==(c[b+36>>2]|0)?0:(d|0)==(e|0)?1:-1;break}if(!(j==i))if(j>2]|0)==(d|0);d=bR(c[b+32>>2]|0,c[a+32>>2]|0,d,e)|0;return (o?d:0-d|0)|0}else{o=(c[b+36>>2]|0)==(e|0);b=bR(c[a+32>>2]|0,c[b+32>>2]|0,d,e)|0;b=o?b:0-b|0;break}o=c[a+32>>2]|0;n=c[b+32>>2]|0;if((o|0)==(n|0)){b=c[b+36>>2]|0;if((c[a+36>>2]|0)==(b|0)){b=0;break}}else b=c[b+36>>2]|0;m=(n|0)==(d|0);if((n|0)==(b|0)){if(m){b=1;break}if((n|0)==(e|0)){b=-1;break}if((o|0)!=(d|0)?(c[a+36>>2]|0)!=(d|0):0){b=1;break}if((o|0)!=(e|0)?(c[a+36>>2]|0)!=(e|0):0){b=-1;break}b=0;break}f=(b|0)==(e|0);if(m&f){b=(c[a+36>>2]|0)==(e|0);if((o|0)==(d|0)){if(!b){b=-1;break}}else if(b){b=1;break}b=0;break}l=(b|0)==(d|0);if((n|0)==(e|0)&l){b=(o|0)==(e|0);if((c[a+36>>2]|0)==(d|0)){if(!b){b=-1;break}}else if(b){b=1;break}b=0;break}if(!n){if(l){b=aR(o,c[a+36>>2]|0,d)|0;break}if(f){b=0-(aR(o,c[a+36>>2]|0,e)|0)|0;break}}f=c[a+36>>2]|0;if(m&(b|0)==0){b=aR(f,o,d)|0;break}else{b=0-(aR(f,o,e)|0)|0;break}}else b=0;while(0);return b|0}function $Q(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0.0,j=0.0;i=+h[a+24>>3];j=+h[b+24>>3];do if(i>2]|0;if((a|0)==(d|0)?(c[b+32>>2]|0)==(e|0):0){a=-1;break}if((a|0)==(e|0)?(c[b+32>>2]|0)==(d|0):0){a=1;break}a=0}else{f=c[b+32>>2]|0;g=(f|0)==(e|0);if(i==j)if(g){a=bR(c[a+36>>2]|0,c[b+36>>2]|0,d,e)|0;break}else{a=0-(bR(c[b+36>>2]|0,c[a+36>>2]|0,d,e)|0)|0;break}if(g?(c[b+36>>2]|0)==(e|0):0){a=-1;break}if((f|0)==(d|0)?(c[b+36>>2]|0)==(d|0):0){a=1;break}a=0}while(0);return a|0}function aR(a,b,c){a=a|0;b=b|0;c=c|0;return ((a|0)==(c|0)?((b|0)==(c|0))<<31>>31:1)|0}function bR(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;if((a|0)==(d|0)){b=(a|0)==0;if(b)return 0;else b=b&1}return ((a|0)!=0|(b|0)!=(c|0))<<31>>31|0}function cR(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;g=c[a+28>>2]|0;h=c[a+24>>2]|0;d=c[a+32>>2]|0;a=0;a:while(1){e=a+1|0;if((e|0)>=(h|0))break;f=g+(a<<2)|0;b=e;while(1){if((b|0)==(h|0)){a=e;continue a}switch(YQ(c[f>>2]|0,c[g+(b<<2)>>2]|0)|0){case 1:{qR(d,a,b);break}case -1:{qR(d,b,a);break}default:{}}b=b+1|0}}return}function dR(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=a+24|0;e=c[f>>2]|0;d=e+1|0;c[f>>2]=d;c[b+40>>2]=e;e=a+28|0;a=c[e>>2]|0;if(!a)a=KK(d<<2)|0;else a=MK(a,d<<2)|0;c[e>>2]=a;c[a+((c[f>>2]|0)+-1<<2)>>2]=b;return}function eR(a,b,d){a=a|0;b=b|0;d=+d;var e=0,f=0,g=0;g=l;l=l+16|0;f=g;h[f>>3]=d;e=nb[c[a>>2]&63](a,f,512)|0;if(!e){e=JK(24)|0;h[e+8>>3]=+h[f>>3];c[e+16>>2]=Vz(25728,c[4581]|0)|0;nb[c[a>>2]&63](a,e,1)|0}f=c[e+16>>2]|0;nb[c[f>>2]&63](f,b,1)|0;l=g;return}function fR(a,b,d){a=a|0;b=b|0;d=d|0;pR(c[b+32>>2]|0);U1(c[b+28>>2]|0);U1(b);return}function gR(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0.0,f=0.0;e=+h[b>>3];f=+h[c>>3];if(!(e>f))if(e>3]>=+h[c+8>>3])<<31>>31;else a=0;else a=!(+h[b+8>>3]<=+h[c+8>>3])&1;return a|0}function hR(a,b,d){a=a|0;b=b|0;d=d|0;Rz(c[b+16>>2]|0)|0;U1(b);return}function iR(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0.0,f=0.0;f=+h[b>>3];e=+h[c>>3];return (f>e?1:(f>31)|0}function jR(b,d,e){b=b|0;d=d|0;e=e|0;var f=0.0,g=0.0,i=0,j=0;i=(a[d+36>>0]|0)!=0;j=e+40|0;do if((c[d+24>>2]|0)==(e|0)){f=+h[j>>3];if(i){g=(+h[e+64>>3]+ +h[e+48>>3])*.5;break}else{g=+h[e+48>>3];f=(+h[e+56>>3]+f)*.5;break}}else if(i){g=(+h[e+64>>3]+ +h[e+48>>3])*.5;f=+h[e+56>>3];break}else{g=+h[e+64>>3];f=(+h[e+56>>3]+ +h[j>>3])*.5;break}while(0);h[b>>3]=f;h[b+8>>3]=g;return}function kR(a,b){a=a|0;b=b|0;var d=0;d=c[a+20>>2]|0;if((d|0)!=(c[b+20>>2]|0)?(d|0)!=(c[b+24>>2]|0):0)d=c[a+24>>2]|0;return d|0}function lR(a,b){a=a|0;b=b|0;var c=0.0;c=(+h[b+64>>3]+ +h[b+48>>3])*.5;h[a>>3]=(+h[b+56>>3]+ +h[b+40>>3])*.5;h[a+8>>3]=c;return}function mR(b,d,e,f,g,i,j){b=b|0;d=d|0;e=+e;f=+f;g=+g;i=i|0;j=j|0;var k=0,l=0;a[b>>0]=d;h[b+8>>3]=e;if(f>3]=f;h[b+16>>3]=e;c[b+36>>2]=d;c[b+32>>2]=l;a[b+1>>0]=k;return}function nR(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=c[b+36>>2]|0;do if((c[e+4>>2]|0)!=(d|0)){if((c[e+12>>2]|0)==(d|0)){e=~~((+h[b+56>>3]+ +h[b+40>>3])*.5);d=~~+h[b+48>>3];break}if((c[e+8>>2]|0)==(d|0)){e=~~+h[b+40>>3];d=~~((+h[b+64>>3]+ +h[b+48>>3])*.5);break}if((c[e>>2]|0)==(d|0)){e=~~+h[b+56>>3];d=~~((+h[b+64>>3]+ +h[b+48>>3])*.5)}else{e=0;d=0}}else{e=~~((+h[b+56>>3]+ +h[b+40>>3])*.5);d=~~+h[b+64>>3]}while(0);c[a>>2]=e;c[a+4>>2]=d;return}function oR(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;d=JK(8)|0;c[d>>2]=a;e=d+4|0;c[e>>2]=JK(a*12|0)|0;b=0;while(1){if((b|0)>=(a|0))break;g=PU()|0;f=c[e>>2]|0;c[f+(b*12|0)+8>>2]=g;c[f+(b*12|0)>>2]=0;b=b+1|0}return d|0}function pR(a){a=a|0;var b=0,d=0,e=0;d=a+4|0;b=0;while(1){e=c[d>>2]|0;if((b|0)>=(c[a>>2]|0))break;Rz(c[e+(b*12|0)+8>>2]|0)|0;b=b+1|0}U1(e);U1(a);return}function qR(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=d;d=c[(c[a+4>>2]|0)+(b*12|0)+8>>2]|0;nb[c[d>>2]&63](d,f,1)|0;l=e;return}function rR(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e;c[f>>2]=d;a=a+4|0;g=c[(c[a>>2]|0)+(b*12|0)+8>>2]|0;nb[c[g>>2]&63](g,f,2)|0;c[f>>2]=b;d=c[(c[a>>2]|0)+(d*12|0)+8>>2]|0;nb[c[d>>2]&63](d,f,2)|0;l=e;return}function sR(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=d;d=c[(c[a+4>>2]|0)+(b*12|0)+8>>2]|0;d=(nb[c[d>>2]&63](d,f,512)|0)!=0&1;l=e;return d|0}function tR(a){a=a|0;var b=0,d=0,e=0,f=0;b=c[a>>2]|0;switch(b|0){case 0:break;case 1:{c[(c[a+4>>2]|0)+4>>2]=0;break}default:{e=uR(b)|0;f=a+4|0;d=0;b=0;while(1){if((d|0)>=(c[a>>2]|0)){b=0;break}if(!(c[(c[f>>2]|0)+(d*12|0)>>2]|0))b=vR(a,d,b,e)|0;d=d+1|0}while(1){d=wR(e)|0;if((d|0)<=-1)break;c[(c[f>>2]|0)+(d*12|0)+4>>2]=b;b=b+1|0}xR(e)}}return}function uR(a){a=a|0;var b=0;b=JK(8)|0;c[b+4>>2]=JK(a<<2)|0;c[b>>2]=-1;return b|0}function vR(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;i=a+4|0;g=c[i>>2]|0;j=g+(b*12|0)|0;c[j>>2]=1;g=c[g+(b*12|0)+8>>2]|0;h=g+4|0;d=d+1|0;g=Tz(g)|0;while(1){if(!g)break;f=c[(c[h>>2]|0)+8>>2]|0;if((f|0)<0)f=c[g+8>>2]|0;else f=g+(0-f)|0;f=c[f>>2]|0;if(!(c[(c[i>>2]|0)+(f*12|0)>>2]|0))d=vR(a,f,d,e)|0;g=c[g>>2]|0}c[j>>2]=2;yR(e,b);return d+1|0}function wR(a){a=a|0;var b=0,d=0;b=c[a>>2]|0;if((b|0)==-1)a=-1;else{d=c[(c[a+4>>2]|0)+(b<<2)>>2]|0;c[a>>2]=b+-1;a=d}return a|0}function xR(a){a=a|0;U1(c[a+4>>2]|0);U1(a);return}function yR(a,b){a=a|0;b=b|0;var d=0;d=(c[a>>2]|0)+1|0;c[a>>2]=d;c[(c[a+4>>2]|0)+(d<<2)>>2]=b;return}function zR(a){a=a|0;var d=0,e=0,f=0;e=c[a>>2]|0;c[a+8>>2]=e;c[a+12>>2]=c[a+4>>2];d=a+16|0;a=0;while(1){if((a|0)>=(e|0))break;f=c[d>>2]|0;b[f+(a*40|0)+18>>1]=b[f+(a*40|0)+16>>1]|0;a=a+1|0}return}function AR(a){a=a|0;var d=0,e=0,f=0;d=c[a+8>>2]|0;c[a>>2]=d;c[a+4>>2]=c[a+12>>2];e=a+16|0;a=0;while(1){if((a|0)>=(d|0))break;f=c[e>>2]|0;b[f+(a*40|0)+16>>1]=b[f+(a*40|0)+18>>1]|0;a=a+1|0}d=d+2|0;while(1){if((a|0)>=(d|0))break;b[(c[e>>2]|0)+(a*40|0)+16>>1]=0;a=a+1|0}return}function BR(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=JK(((c[a>>2]|0)*6|0)+(b<<1)<<2)|0;c[a+20>>2]=JK((((c[a>>2]|0)*3|0)+b|0)*24|0)|0;e=c[a>>2]|0;f=a+16|0;a=0;while(1){if((a|0)>=(e|0))break;c[(c[f>>2]|0)+(a*40|0)+28>>2]=d;d=d+24|0;a=a+1|0}e=e+2|0;while(1){if((a|0)>=(e|0))break;c[(c[f>>2]|0)+(a*40|0)+28>>2]=d;d=d+(b<<2)|0;a=a+1|0}return}function CR(a){a=a|0;var b=0;b=JK(24)|0;c[b>>2]=0;c[b+16>>2]=JK(a*40|0)|0;return b|0}function DR(a){a=a|0;var b=0,d=0;d=c[a+16>>2]|0;b=c[a>>2]|0;c[d+(b*40|0)+32>>2]=b;c[a>>2]=b+1;return d+(b*40|0)|0}function ER(a,b,d,e){a=a|0;b=b|0;d=d|0;e=+e;var f=0,g=0;g=a+4|0;f=c[g>>2]|0;c[g>>2]=f+1;g=c[a+20>>2]|0;a=g+(f*24|0)|0;c[g+(f*24|0)+12>>2]=c[b+32>>2];c[g+(f*24|0)+16>>2]=c[d+32>>2];h[a>>3]=e;c[g+(f*24|0)+8>>2]=0;FR(b,f);FR(d,f);return a|0}function FR(a,d){a=a|0;d=d|0;var e=0,f=0;e=a+16|0;f=b[e>>1]|0;c[(c[a+28>>2]|0)+(f<<16>>16<<2)>>2]=d;b[e>>1]=f+1<<16>>16;return}function GR(a){a=a|0;var b=0;b=a+16|0;U1(c[(c[b>>2]|0)+28>>2]|0);U1(c[b>>2]|0);U1(c[a+20>>2]|0);U1(a);return}function HR(a,d,e){a=a|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0,k=0,l=0,m=0,n=0;g=c[a>>2]|0;i=a+16|0;f=0;while(1){if((f|0)>=(g|0))break;c[(c[i>>2]|0)+(f*40|0)>>2]=-2147483648;f=f+1|0}XU();a:do if(!(_U(d)|0)){c[d+8>>2]=0;c[d>>2]=0;d=a+20|0;b:while(1){g=aV()|0;if(!g){f=0;break a}c[g>>2]=0-(c[g>>2]|0);if((g|0)==(e|0)){f=0;break a}i=g+16|0;j=g+28|0;f=0;while(1){if((f|0)>=(b[i>>1]|0))continue b;k=(c[d>>2]|0)+((c[(c[j>>2]|0)+(f<<2)>>2]|0)*24|0)|0;l=IR(a,k,g)|0;m=c[l>>2]|0;do if((m|0)<0){n=~~-(+h[k>>3]+ +(c[g>>2]|0));if((m|0)==-2147483648){c[l>>2]=n;if(_U(l)|0){f=1;break a}c[l+8>>2]=g;c[l+12>>2]=k;break}else{if((m|0)>=(n|0))break;bV(l,n);c[l+8>>2]=g;c[l+12>>2]=k;break}}while(0);f=f+1|0}}}else f=1;while(0);return f|0}function IR(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=c[b+12>>2]|0;if((e|0)==(c[d+32>>2]|0))e=c[b+16>>2]|0;return (c[a+16>>2]|0)+(e*40|0)|0}function JR(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;g=c[a>>2]|0;LF(g,3,b)|0;b=c[g+92>>2]|0;do if(b){d=c[b+16>>2]|0;h=c[d+12>>2]|0;c[a+76>>2]=h;e=c[d+16>>2]|0;c[a+84>>2]=e;f=a+80|0;c[f>>2]=c[d>>2];c[a+88>>2]=c[b+4>>2];d=a+152|0;e=c[d>>2]|c[e>>2];c[d>>2]=e;b=c[g+80>>2]|0;if(!b){c[a+60>>2]=0;b=999;break}else{g=c[b+16>>2]|0;c[a+60>>2]=c[g+12>>2];i=c[g+16>>2]|0;c[a+68>>2]=i;c[a+72>>2]=c[b+4>>2];c[d>>2]=e|c[i>>2];c[a+64>>2]=c[((h|0)==0?f:g)>>2];b=300;break}}else b=999;while(0);return b|0}function KR(a){a=a|0;var b=0,d=0;b=c[a+60>>2]|0;if(!(kF(a)|0))if((b|0)!=0?(d=c[b>>2]|0,(d|0)!=0):0){tb[d&127](a);a=0}else a=0;else a=1;return a|0}function LR(a){a=a|0;var b=0,d=0;b=c[a+60>>2]|0;if(b|0?(d=c[b+4>>2]|0,d|0):0)tb[d&127](a);c[(c[a>>2]|0)+24>>2]=0;sF(a);return}function MR(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0.0,g=0.0,i=0.0;e=+h[b+504>>3];f=+h[b+512>>3];i=+h[b+352>>3];if(!(c[b+360>>2]|0)){g=+h[d>>3]+e;d=d+8|0;e=f}else g=-(f+ +h[d+8>>3]);f=+h[b+528>>3]*i*(+h[d>>3]+e);h[a>>3]=+h[b+520>>3]*i*g;h[a+8>>3]=f;return}function NR(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,g=0.0,i=0.0,j=0.0,k=0.0;f=+h[a+504>>3];g=+h[a+512>>3];i=+h[a+352>>3];j=+h[a+520>>3]*i;i=+h[a+528>>3]*i;a:do if(!(c[a+360>>2]|0)){a=0;while(1){if((a|0)>=(e|0))break a;h[d+(a<<4)>>3]=(+h[b+(a<<4)>>3]+f)*j;h[d+(a<<4)+8>>3]=(+h[b+(a<<4)+8>>3]+g)*i;a=a+1|0}}else{a=0;while(1){if((a|0)>=(e|0))break a;k=-(j*(+h[b+(a<<4)+8>>3]+g));h[d+(a<<4)+8>>3]=(+h[b+(a<<4)>>3]+f)*i;h[d+(a<<4)>>3]=k;a=a+1|0}}while(0);return d|0}function OR(a,b){a=a|0;b=b|0;var d=0;b=c[a+60>>2]|0;if(b|0?(d=c[b+8>>2]|0,d|0):0)tb[d&127](a);return}function PR(a){a=a|0;var b=0,d=0;b=c[a+60>>2]|0;if(b|0?(d=c[b+12>>2]|0,d|0):0)tb[d&127](a);rF(a);return}function QR(a){a=a|0;var b=0,d=0;b=c[a+60>>2]|0;if(b|0?(d=c[b+24>>2]|0,d|0):0)tb[d&127](a);return}function RR(a){a=a|0;var b=0,d=0;b=c[a+60>>2]|0;if(b|0?(d=c[b+28>>2]|0,d|0):0)tb[d&127](a);return}function SR(a){a=a|0;var b=0,d=0;b=c[a+60>>2]|0;if(b|0?(d=c[b+16>>2]|0,d|0):0){b=c[a+160>>2]|0;xb[d&31](a,c[(c[(c[a>>2]|0)+308>>2]|0)+(b<<2)>>2]|0,b,c[a+156>>2]|0)}return}function TR(a){a=a|0;var b=0,d=0;b=c[a+60>>2]|0;if(b|0?(d=c[b+20>>2]|0,d|0):0)tb[d&127](a);return}function UR(a,b){a=a|0;b=b|0;var d=0;b=c[a+60>>2]|0;if(b|0?(d=c[b+32>>2]|0,d|0):0)tb[d&127](a);return}function VR(a,b){a=a|0;b=b|0;var d=0;b=c[a+60>>2]|0;if(b|0?(d=c[b+36>>2]|0,d|0):0)tb[d&127](a);return}function WR(a){a=a|0;var b=0,d=0;b=c[a+60>>2]|0;if(b|0?(d=c[b+40>>2]|0,d|0):0)tb[d&127](a);return}function XR(a){a=a|0;var b=0,d=0;b=c[a+60>>2]|0;if(b|0?(d=c[b+44>>2]|0,d|0):0)tb[d&127](a);return}function YR(a){a=a|0;var b=0,d=0;b=c[a+60>>2]|0;if(b|0?(d=c[b+48>>2]|0,d|0):0)tb[d&127](a);return}function ZR(a){a=a|0;var b=0,d=0;b=c[a+60>>2]|0;if(b|0?(d=c[b+52>>2]|0,d|0):0)tb[d&127](a);return}function _R(a,b){a=a|0;b=b|0;var d=0;b=c[a+60>>2]|0;if(b|0?(d=c[b+56>>2]|0,d|0):0)tb[d&127](a);return}function $R(a){a=a|0;var b=0,d=0;b=c[a+60>>2]|0;if(b|0?(d=c[b+60>>2]|0,d|0):0)tb[d&127](a);return}function aS(a,b){a=a|0;b=b|0;var d=0;b=c[a+60>>2]|0;if(b|0?(d=c[b+64>>2]|0,d|0):0)tb[d&127](a);return}function bS(a){a=a|0;var b=0,d=0;b=c[a+60>>2]|0;if(b|0?(d=c[b+68>>2]|0,d|0):0)tb[d&127](a);return}function cS(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;g=c[a+60>>2]|0;if(g|0?(h=c[g+72>>2]|0,h|0):0)yb[h&15](a,b,d,e,f);return}function dS(a){a=a|0;var b=0,d=0;b=c[a+60>>2]|0;if(b|0?(d=c[b+76>>2]|0,d|0):0)tb[d&127](a);return}function eS(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a+60>>2]|0;if(d|0?(e=c[d+80>>2]|0,e|0):0)ub[e&63](a,b);return}function fS(a){a=a|0;var b=0,d=0;b=c[a+60>>2]|0;if(b|0?(d=c[b+84>>2]|0,d|0):0)tb[d&127](a);return}function gS(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0;k=l;l=l+48|0;f=k+32|0;h=k;i=k+16|0;j=c[b+60>>2]|0;m=c[e>>2]|0;do if(m|0?a[m>>0]|0:0){m=c[b+16>>2]|0;if(m|0?(c[m+144>>2]|0)==0:0)break;if(!(c[b+152>>2]&8192)){c[f>>2]=c[d>>2];c[f+4>>2]=c[d+4>>2];c[f+8>>2]=c[d+8>>2];c[f+12>>2]=c[d+12>>2];MR(i,b,f);c[h>>2]=c[i>>2];c[h+4>>2]=c[i+4>>2];c[h+8>>2]=c[i+8>>2];c[h+12>>2]=c[i+12>>2]}else{c[h>>2]=c[d>>2];c[h+4>>2]=c[d+4>>2];c[h+8>>2]=c[d+8>>2];c[h+12>>2]=c[d+12>>2]}if(j|0?(g=c[j+88>>2]|0,g|0):0){c[f>>2]=c[h>>2];c[f+4>>2]=c[h+4>>2];c[f+8>>2]=c[h+8>>2];c[f+12>>2]=c[h+12>>2];vb[g&127](b,f,e)}}while(0);l=k;return}function hS(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;f=c[b+60>>2]|0;g=(c[b+16>>2]|0)+16|0;i=R2(d,58)|0;h=(i|0)!=0;if(h)a[i>>0]=0;if(f|0?(iS(c[b+68>>2]|0,d,g),e=c[f+92>>2]|0,e|0):0)ub[e&63](b,g);if(h)a[i>>0]=58;return}function iS(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;k=l;l=l+32|0;g=k+16|0;j=k+8|0;i=k;c[d>>2]=b;c[d+32>>2]=5;e=zT(b)|0;f=c[a+16>>2]|0;if(!((f|0)!=0?(u5(e,f,c[a+20>>2]|0,4,102)|0)!=0:0))h=3;a:do if((h|0)==3){switch(AT(b,d,c[a+24>>2]|0)|0){case 0:break a;case 1:break;default:{gA(1,111046,g)|0;break a}}a=KK((l2(b)|0)+16|0)|0;c[i>>2]=b;m4(a,111011,i)|0;if(PJ(a)|0){c[j>>2]=b;gA(0,111020,j)|0}U1(a)}while(0);l=k;return}function jS(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;f=c[b+60>>2]|0;g=(c[b+16>>2]|0)+56|0;i=R2(d,58)|0;h=(i|0)!=0;if(h)a[i>>0]=0;if(f|0?(iS(c[b+68>>2]|0,d,g),e=c[f+92>>2]|0,e|0):0)ub[e&63](b,g);if(h)a[i>>0]=58;return}function kS(a,b,d,e){a=a|0;b=b|0;d=d|0;e=+e;var f=0,h=0,i=0,j=0;h=c[a+60>>2]|0;i=a+16|0;j=(c[i>>2]|0)+96|0;if(h|0?(iS(c[a+68>>2]|0,b,j),f=c[h+92>>2]|0,f|0):0)ub[f&63](a,j);j=c[i>>2]|0;c[j+136>>2]=d;g[j+140>>2]=e;return}function lS(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,i=0,j=0,k=0,m=0;m=l;l=l+16|0;k=m;j=c[b+60>>2]|0;b=c[b+16>>2]|0;c[b+160>>2]=d;a:do if((d|0)!=0&(j|0)!=0){j=b+144|0;i=b+152|0;g=b+148|0;b=d;b:while(1){f=b+4|0;b=c[b>>2]|0;if(!b)break a;c:do switch(a[b>>0]|0){case 115:{if(!(s2(b,111067)|0)){c[j>>2]=3;b=f;continue b}if(!(s2(b,111088)|0)){e=115;while(1){d=b+1|0;if(!(e<<24>>24))break;b=d;e=a[d>>0]|0}h[i>>3]=+r5(d);b=f;continue b}break}case 100:{if(!(s2(b,137327)|0)){c[j>>2]=1;b=f;continue b}if(!(s2(b,137320)|0)){c[j>>2]=2;b=f;continue b}break}case 105:{if(s2(b,134335)|0?s2(b,111073)|0:0)break c;c[j>>2]=0;b=f;continue b}case 98:{if(!(s2(b,111083)|0)){h[i>>3]=2.0;b=f;continue b}break}case 102:{if(!(s2(b,111101)|0)){c[g>>2]=1;b=f;continue b}break}case 117:{if(!(s2(b,111108)|0)){c[g>>2]=0;b=f;continue b}break}case 116:{if(!(s2(b,111117)|0)){b=f;continue b}break}default:{}}while(0);c[k>>2]=b;gA(0,111125,k)|0;b=f}}while(0);l=m;return}function mS(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0;j=l;l=l+32|0;g=j;d=c[a+60>>2]|0;if((d|0?(i=d+96|0,f=c[i>>2]|0,f|0):0)?c[(c[a+16>>2]|0)+144>>2]|0:0){d=b+16|0;h[g>>3]=(+h[d>>3]+ +h[b>>3])*.5;h[g+8>>3]=(+h[b+24>>3]+ +h[b+8>>3])*.5;b=g+16|0;c[b>>2]=c[d>>2];c[b+4>>2]=c[d+4>>2];c[b+8>>2]=c[d+8>>2];c[b+12>>2]=c[d+12>>2];if(!(c[a+152>>2]&8192)){NR(a,g,g,2)|0;f=c[i>>2]|0}vb[f&127](a,g,e)}l=j;return}function nS(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;o=l;l=l+48|0;m=o;f=c[a+60>>2]|0;if((f|0?(n=f+100|0,c[n>>2]|0):0)?(k=a+16|0,j=c[k>>2]|0,c[j+144>>2]|0):0){if(!(e&4)){f=e;g=0}else{f=e&-5;e=j+16|0;g=m;h=e;i=g+40|0;do{c[g>>2]=c[h>>2];g=g+4|0;h=h+4|0}while((g|0)<(i|0));g=e;h=j+56|0;i=g+40|0;do{c[g>>2]=c[h>>2];g=g+4|0;h=h+4|0}while((g|0)<(i|0));g=1}if(!(c[a+152>>2]&8192)){e=d+10|0;if((c[47363]|0)<(d|0)){c[47363]=e;e=MK(c[47364]|0,e<<4)|0;c[47364]=e}else e=c[47364]|0;NR(a,b,e,d)|0;xb[c[n>>2]&31](a,e,d,f)}else xb[c[n>>2]&31](a,b,d,f);if(g|0){g=(c[k>>2]|0)+16|0;h=m;i=g+40|0;do{c[g>>2]=c[h>>2];g=g+4|0;h=h+4|0}while((g|0)<(i|0))}}l=o;return}function oS(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+64|0;f=e;c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];g=f+32|0;b=b+16|0;c[g>>2]=c[b>>2];c[g+4>>2]=c[b+4>>2];c[g+8>>2]=c[b+8>>2];c[g+12>>2]=c[b+12>>2];h[f+16>>3]=+h[f>>3];h[f+24>>3]=+h[f+40>>3];h[f+48>>3]=+h[g>>3];h[f+56>>3]=+h[f+8>>3];nS(a,f,4,d);l=e;return}function pS(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0;i=c[a+60>>2]|0;do if((i|0?(j=i+104|0,h=c[j>>2]|0,h|0):0)?c[(c[a+16>>2]|0)+144>>2]|0:0){if(c[a+152>>2]&8192|0){zb[h&15](a,b,d,e,f,g&255);break}h=d+10|0;if((c[47363]|0)<(d|0)){c[47363]=h;h=MK(c[47364]|0,h<<4)|0;c[47364]=h}else h=c[47364]|0;NR(a,b,h,d)|0;zb[c[j>>2]&15](a,h,d,e,f,g&255)}while(0);return}function qS(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;e=c[a+60>>2]|0;do if((e|0?(g=e+108|0,f=c[g>>2]|0,f|0):0)?c[(c[a+16>>2]|0)+144>>2]|0:0){if(c[a+152>>2]&8192|0){vb[f&127](a,b,d);break}e=d+10|0;if((c[47363]|0)<(d|0)){c[47363]=e;e=MK(c[47364]|0,e<<4)|0;c[47364]=e}else e=c[47364]|0;NR(a,b,e,d)|0;vb[c[g>>2]&127](a,e,d)}while(0);return}function rS(b,d){b=b|0;d=d|0;var e=0,f=0;e=c[b+60>>2]|0;if((d|0?!((e|0)==0|(a[d>>0]|0)==0):0)?(f=c[e+112>>2]|0,f|0):0)ub[f&63](b,d);return}function sS(b,d,e,f,g,i){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;i=i|0;var j=0.0,k=0.0,m=0,n=0,o=0.0,p=0.0,q=0.0,r=0.0,s=0,t=0.0,u=0.0,v=0.0,w=0.0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0;F=l;l=l+112|0;B=F+64|0;E=F;n=F+96|0;x=F+48|0;y=F+32|0;C=c[b+60>>2]|0;if(!b)qa(111282,111178,691,111189);if(!d)qa(111208,111178,692,111189);if(!(a[d>>0]|0))qa(111213,111178,693,111189);D=NF(d)|0;if(!D){if((C|0)!=0&(iN(d)|0)!=0?(m=c[C+116>>2]|0,m|0):0)yb[m&15](b,d,e,f,g&255)}else{s=b+432|0;c[B>>2]=c[s>>2];c[B+4>>2]=c[s+4>>2];c[B+8>>2]=c[s+8>>2];c[B+12>>2]=c[s+12>>2];QF(n,D,B);s=c[n>>2]|0;m=c[n+4>>2]|0;if(!((s|0)<1&(m|0)<1)){n=E+16|0;c[n>>2]=c[e>>2];c[n+4>>2]=c[e+4>>2];c[n+8>>2]=c[e+8>>2];c[n+12>>2]=c[e+12>>2];c[E>>2]=c[e>>2];c[E+4>>2]=c[e+4>>2];c[E+8>>2]=c[e+8>>2];c[E+12>>2]=c[e+12>>2];z=E+8|0;A=E+24|0;d=1;while(1){if((d|0)>=(f|0))break;G=e+(d<<4)|0;v=+h[G>>3];h[E>>3]=+h[(+h[E>>3]>3];w=+h[e+(d<<4)+8>>3];h[z>>3]=+h[(+h[z>>3]>3];h[n>>3]=+h[(+h[n>>3]>v?n:G)>>3];h[A>>3]=+h[(+h[A>>3]>w?n:G)+8>>3];d=d+1|0}k=+h[n>>3];j=+h[E>>3];t=k-j;u=+h[A>>3];v=+h[z>>3];w=u-v;o=+(m|0);p=+(s|0);q=t/p;r=w/o;a:do switch(tS(i)|0){case 1:if(q>3]=j;k=k-t;h[n>>3]=k}if(o>3]=v+w;h[A>>3]=u-w}if(!(c[b+152>>2]&8192)){c[B>>2]=c[E>>2];c[B+4>>2]=c[E+4>>2];c[B+8>>2]=c[E+8>>2];c[B+12>>2]=c[E+12>>2];MR(x,b,B);c[E>>2]=c[x>>2];c[E+4>>2]=c[x+4>>2];c[E+8>>2]=c[x+8>>2];c[E+12>>2]=c[x+12>>2];c[B>>2]=c[n>>2];c[B+4>>2]=c[n+4>>2];c[B+8>>2]=c[n+8>>2];c[B+12>>2]=c[n+12>>2];MR(y,b,B);c[n>>2]=c[y>>2];c[n+4>>2]=c[y+4>>2];c[n+8>>2]=c[y+8>>2];c[n+12>>2]=c[y+12>>2];k=+h[n>>3];j=+h[E>>3]}if(j>k){h[E>>3]=k;h[n>>3]=j}j=+h[z>>3];k=+h[A>>3];if(j>k){h[z>>3]=k;h[A>>3]=j}if(C|0){G=c[b+72>>2]|0;c[B>>2]=c[E>>2];c[B+4>>2]=c[E+4>>2];c[B+8>>2]=c[E+8>>2];c[B+12>>2]=c[E+12>>2];c[B+16>>2]=c[E+16>>2];c[B+20>>2]=c[E+20>>2];c[B+24>>2]=c[E+24>>2];c[B+28>>2]=c[E+28>>2];xS(b,D,B,g,G)}}}l=F;return}function tS(b){b=b|0;if(a[b>>0]|0)if(c3(b,141116)|0)if(c3(b,141048)|0)if(!(c3(b,111221)|0))b=4;else b=(dP(b)|0)<<24>>24!=0&1;else b=3;else b=2;else b=0;return b|0}function uS(a,b){a=a|0;b=+b;if(c[a+60>>2]|0)h[(c[a+16>>2]|0)+152>>3]=b;return}function vS(a,b){a=a|0;b=b|0;b=LF(a,1,b)|0;if(!b)b=999;else{b=c[b+16>>2]|0;c[a+184>>2]=c[b+4>>2];c[a+172>>2]=c[b+12>>2];c[a+176>>2]=c[b>>2];c[a+180>>2]=c[b+16>>2];b=300}return b|0}function wS(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=l;l=l+16|0;f=i;TC(b,137483,280,1)|0;g=b+16|0;c[(c[g>>2]|0)+144>>2]=a;if((yC(b)|0)!=(b|0))c[(c[(yC(b)|0)+16>>2]|0)+144>>2]=a;e=QA(b,111226)|0;d=a+172|0;if((e|0)!=0?(c[d>>2]=0,(vS(a,e)|0)==999):0){d=MF(a,1,e)|0;c[f>>2]=e;c[f+4>>2]=d;gA(1,111233,f)|0;d=-1}else{e=c[d>>2]|0;if(!e)d=-1;else{RJ(1);qK(b,c[c[a+180>>2]>>2]&1);d=c[(c[g>>2]|0)+8>>2]|0;c[(c[(yC(b)|0)+16>>2]|0)+8>>2]=d;_N();d=c[e>>2]|0;if(d|0?(tb[d&127](b),h=c[e+4>>2]|0,h|0):0)c[(c[g>>2]|0)+148>>2]=h;RJ(0);d=0}}l=i;return d|0}function xS(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+176|0;k=n+8|0;j=n;h=n+40|0;if(!b)qa(111282,111286,52,111300);if(!d)qa(111312,111286,53,111300);i=c[d+8>>2]|0;if(!i)qa(111315,111286,54,111300);if(!(a[i>>0]|0))qa(111324,111286,55,111300);r3(h,c[d+28>>2]|0)|0;i=h+(l2(h)|0)|0;a[i>>0]=58;a[i+1>>0]=0;F4(h,g)|0;if((yS(b,h)|0)==999){c[j>>2]=h;gA(0,111336,j)|0}g=c[b+92>>2]|0;if(g|0?(m=c[g>>2]|0,m|0):0){c[k>>2]=c[e>>2];c[k+4>>2]=c[e+4>>2];c[k+8>>2]=c[e+8>>2];c[k+12>>2]=c[e+12>>2];c[k+16>>2]=c[e+16>>2];c[k+20>>2]=c[e+20>>2];c[k+24>>2]=c[e+24>>2];c[k+28>>2]=c[e+28>>2];xb[m&31](b,d,k,f)}l=n;return}function yS(a,b){a=a|0;b=b|0;b=LF(c[a>>2]|0,4,b)|0;if(!b)b=999;else{b=c[b+16>>2]|0;c[a+92>>2]=c[b+12>>2];c[a+96>>2]=c[b>>2];b=300}return b|0}function zS(a){a=a|0;return 1}function AS(b){b=b|0;var c=0;a[b+536>>0]=0;c=b+336|0;h[c>>3]=+h[c>>3]+10.0/+h[b+352>>3];a[b+537>>0]=1;return 0}function BS(b){b=b|0;var c=0;a[b+536>>0]=0;c=b+336|0;h[c>>3]=+h[c>>3]-10.0/+h[b+352>>3];a[b+537>>0]=1;return 0}function CS(b){b=b|0;var c=0;a[b+536>>0]=0;c=b+344|0;h[c>>3]=+h[c>>3]-10.0/+h[b+352>>3];a[b+537>>0]=1;return 0}function DS(b){b=b|0;var c=0;a[b+536>>0]=0;c=b+344|0;h[c>>3]=+h[c>>3]+10.0/+h[b+352>>3];a[b+537>>0]=1;return 0}function ES(b){b=b|0;var c=0;a[b+536>>0]=0;c=b+352|0;h[c>>3]=+h[c>>3]*1.1;a[b+537>>0]=1;return 0}function FS(b){b=b|0;var c=0;a[b+536>>0]=0;c=b+352|0;h[c>>3]=+h[c>>3]*.9090909090909091;a[b+537>>0]=1;return 0}function GS(b){b=b|0;var d=0,e=0,f=0,g=0.0,i=0.0;e=b+536|0;d=(a[e>>0]|0)==0;a[e>>0]=d&1;if(d){d=c[b+448>>2]|0;e=c[b+452>>2]|0;i=+(d>>>0);g=+(e>>>0);f=i/+(d|0)>3]=(f?i:g)/+((f?d:e)|0);e=b+336|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;a[b+537>>0]=1}return 0}function HS(b){b=b|0;var d=0,e=0;d=c[(c[b>>2]|0)+168>>2]|0;e=b+580|0;if(!(c[e>>2]|0)){c[e>>2]=d;e=(c[d+16>>2]|0)+112|0;a[e>>0]=a[e>>0]|2;XS(b,d)}sI(b,d);a[b+540>>0]=1;return}function IS(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0.0,i=0.0,j=0,k=0;k=l;l=l+16|0;f=k;switch(d|0){case 1:{c[f>>2]=c[e>>2];c[f+4>>2]=c[e+4>>2];c[f+8>>2]=c[e+8>>2];c[f+12>>2]=c[e+12>>2];QS(b,f);WS(b);a[b+538>>0]=1;a[b+541>>0]=1;j=13;break}case 2:{a[b+538>>0]=1;a[b+541>>0]=2;j=13;break}case 3:{c[f>>2]=c[e>>2];c[f+4>>2]=c[e+4>>2];c[f+8>>2]=c[e+8>>2];c[f+12>>2]=c[e+12>>2];QS(b,f);a[b+538>>0]=1;a[b+541>>0]=3;j=13;break}case 4:{a[b+536>>0]=0;if(!(c[b+360>>2]|0)){f=b+352|0;i=+h[f>>3];d=b+336|0;h[d>>3]=(+h[e>>3]-+((c[b+448>>2]|0)>>>0)*.5)*.10000000000000009/(+h[b+520>>3]*i)+ +h[d>>3];g=+h[e+8>>3]-+((c[b+452>>2]|0)>>>0)*.5;d=b+528|0}else{f=b+352|0;i=+h[f>>3];d=b+336|0;h[d>>3]=+h[d>>3]-(+h[e+8>>3]-+((c[b+452>>2]|0)>>>0)*.5)*.10000000000000009/(+h[b+528>>3]*i);g=+h[e>>3]-+((c[b+448>>2]|0)>>>0)*.5;d=b+520|0}j=b+344|0;h[j>>3]=g*.10000000000000009/(+h[d>>3]*i)+ +h[j>>3];h[f>>3]=i*1.1;j=13;break}case 5:{a[b+536>>0]=0;j=b+352|0;i=+h[j>>3]*.9090909090909091;h[j>>3]=i;if(!(c[b+360>>2]|0)){f=b+336|0;h[f>>3]=+h[f>>3]-(+h[e>>3]-+((c[b+448>>2]|0)>>>0)*.5)*.10000000000000009/(+h[b+520>>3]*i);g=+h[e+8>>3]-+((c[b+452>>2]|0)>>>0)*.5;f=b+528|0}else{f=b+336|0;h[f>>3]=(+h[e+8>>3]-+((c[b+452>>2]|0)>>>0)*.5)*.10000000000000009/(+h[b+528>>3]*i)+ +h[f>>3];g=+h[e>>3]-+((c[b+448>>2]|0)>>>0)*.5;f=b+520|0}j=b+344|0;h[j>>3]=+h[j>>3]-g*.10000000000000009/(+h[f>>3]*i);j=13;break}default:{}}if((j|0)==13)a[b+537>>0]=1;b=b+560|0;c[b>>2]=c[e>>2];c[b+4>>2]=c[e+4>>2];c[b+8>>2]=c[e+8>>2];c[b+12>>2]=c[e+12>>2];l=k;return}function JS(b,c,d){b=b|0;c=c|0;d=d|0;a[b+538>>0]=0;a[b+541>>0]=0;return}function KS(b,d){b=b|0;d=d|0;var e=0,f=0.0,g=0.0,i=0,j=0.0,k=0;k=l;l=l+16|0;e=k;i=b+560|0;j=(+h[d>>3]-+h[i>>3])/+h[b+520>>3];g=(+h[d+8>>3]-+h[b+568>>3])/+h[b+528>>3];if(!(+B(+j)<.0001&+B(+g)<.0001)){switch(a[b+541>>0]|0){case 0:{c[e>>2]=c[d>>2];c[e+4>>2]=c[d+4>>2];c[e+8>>2]=c[d+8>>2];c[e+12>>2]=c[d+12>>2];QS(b,e);break}case 2:{f=+h[b+352>>3];if(!(c[b+360>>2]|0)){e=b+336|0;h[e>>3]=+h[e>>3]-j/f;e=b+344|0;h[e>>3]=+h[e>>3]-g/f}else{e=b+336|0;h[e>>3]=+h[e>>3]-g/f;e=b+344|0;h[e>>3]=+h[e>>3]+j/f}a[b+537>>0]=1;break}default:{}}c[i>>2]=c[d>>2];c[i+4>>2]=c[d+4>>2];c[i+8>>2]=c[d+8>>2];c[i+12>>2]=c[d+12>>2]}l=k;return}function LS(a,b,c){a=a|0;b=b|0;c=c|0;return}function MS(a){a=a|0;return}function NS(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;j=c[b>>2]|0;if(d){d=$4(d,138821)|0;if(d|0){i=jF(d,0)|0;I4(d)|0;f=5}}else{i=jF(c[15647]|0,0)|0;f=5}if((f|0)==5?i|0:0){g=j+168|0;d=c[g>>2]|0;if(d|0){f=c[j+172>>2]|0;if((f|0)!=0?(h=c[f+4>>2]|0,(h|0)!=0):0){tb[h&127](d);d=c[g>>2]|0}vK(d);sB(c[g>>2]|0)|0}YC(i,0,137483,280,1);YC(i,1,137447,304,1);YC(i,2,137460,176,1);c[g>>2]=i;c[(c[i+16>>2]|0)+144>>2]=j;if((nG(j,i,e)|0)!=-1){c[b+580>>2]=0;c[b+576>>2]=0;a[b+537>>0]=1}}return}function OS(a,b){a=a|0;b=b|0;a=c[a>>2]|0;nG(a,c[a+168>>2]|0,b)|0;return}function PS(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;g=c[a>>2]|0;f=g+160|0;e=c[f>>2]|0;if((e|0)!=0?(c[g+164>>2]|0)==0:0){i=g+192|0;h=c[i>>2]|0;c[f>>2]=0;c[i>>2]=0;f=h}else{f=0;e=0}pG(g,c[g+168>>2]|0,b,d)|0;if(e|0){i=c[a>>2]|0;c[i+160>>2]=e;c[i+192>>2]=f}return}function QS(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,i=0.0,j=0.0,k=0.0,m=0;f=l;l=l+80|0;e=f+48|0;g=f;m=f+32|0;c[e>>2]=c[d>>2];c[e+4>>2]=c[d+4>>2];c[e+8>>2]=c[d+8>>2];c[e+12>>2]=c[d+12>>2];RS(m,b,e);k=+h[m>>3];j=+h[m+8>>3];i=1.0/+h[b+352>>3];h[g+16>>3]=i+k;h[g+24>>3]=i+j;h[g>>3]=k-i;h[g+8>>3]=j-i;d=c[(c[b>>2]|0)+168>>2]|0;c[e>>2]=c[g>>2];c[e+4>>2]=c[g+4>>2];c[e+8>>2]=c[g+8>>2];c[e+12>>2]=c[g+12>>2];c[e+16>>2]=c[g+16>>2];c[e+20>>2]=c[g+20>>2];c[e+24>>2]=c[g+24>>2];c[e+28>>2]=c[g+28>>2];d=SS(d,e)|0;e=b+576|0;if((d|0)!=(c[e>>2]|0)){TS(b);c[e>>2]=d;US(b);a[b+537>>0]=1}l=f;return}function RS(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0.0,g=0.0,i=0;if(!(c[b+360>>2]|0)){e=+h[b+352>>3];f=+h[d+8>>3];g=e;i=b+528|0;e=+h[d>>3]/(+h[b+520>>3]*e)-+h[b+504>>3]}else{e=+h[b+352>>3];f=-+h[d>>3];g=e;i=b+520|0;e=+h[d+8>>3]/(+h[b+528>>3]*e)-+h[b+504>>3]}g=f/(+h[i>>3]*g)-+h[b+512>>3];h[a>>3]=e;h[a+8>>3]=g;return}function SS(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;g=l;l=l+32|0;f=g;e=jC(a)|0;a:while(1){if(!e){e=9;break}d=XA(a,e)|0;while(1){if(!d)break;c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];c[f+16>>2]=c[b+16>>2];c[f+20>>2]=c[b+20>>2];c[f+24>>2]=c[b+24>>2];c[f+28>>2]=c[b+28>>2];if((jQ(d,f)|0)<<24>>24){e=6;break a}d=ZA(a,d)|0}e=kC(a,e)|0}do if((e|0)!=6)if((e|0)==9){d=lC(a)|0;while(1){if(!d)break;c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];c[f+16>>2]=c[b+16>>2];c[f+20>>2]=c[b+20>>2];c[f+24>>2]=c[b+24>>2];c[f+28>>2]=c[b+28>>2];if((gQ(d,f)|0)<<24>>24){e=12;break}d=mC(a,d)|0}if((e|0)==12)break;c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];c[f+16>>2]=c[b+16>>2];c[f+20>>2]=c[b+20>>2];c[f+24>>2]=c[b+24>>2];c[f+28>>2]=c[b+28>>2];d=VS(a,f)|0;if(!d){d=a;break}else break}while(0);l=g;return d|0}function TS(b){b=b|0;var d=0;d=c[b+576>>2]|0;a:do if(d|0)switch(IC(d)|0){case 0:{d=(c[d+16>>2]|0)+112|0;a[d>>0]=a[d>>0]&-2;break a}case 1:{d=(c[d+16>>2]|0)+117|0;a[d>>0]=a[d>>0]&-2;break a}case 2:{d=(c[d+16>>2]|0)+115|0;a[d>>0]=a[d>>0]&-2;break a}default:break a}while(0);c[b+584>>2]=0;return}function US(b){b=b|0;var d=0,e=0;e=b+584|0;d=c[e>>2]|0;if(d|0){U1(d);c[e>>2]=0}d=c[b+576>>2]|0;a:do if(d|0)switch(IC(d)|0){case 0:{b=(c[d+16>>2]|0)+112|0;a[b>>0]=a[b>>0]|1;b=GA(d,0,141101,0)|0;if(!b)break a;c[e>>2]=EK(RA(d,b)|0,d)|0;break a}case 1:{b=(c[d+16>>2]|0)+117|0;a[b>>0]=a[b>>0]|1;b=GA(xC(d)|0,1,141101,0)|0;if(!b)break a;c[e>>2]=EK(RA(d,b)|0,d)|0;break a}case 2:{b=(c[d+16>>2]|0)+115|0;a[b>>0]=a[b>>0]|1;b=GA(xC(c[((c[d>>2]&3|0)==2?d:d+-48|0)+40>>2]|0)|0,2,141101,0)|0;if(!b)break a;c[e>>2]=EK(RA(d,b)|0,d)|0;break a}default:break a}while(0);return}function VS(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0,k=0,m=0,n=0.0,o=0.0;m=l;l=l+32|0;e=m;g=c[a+16>>2]|0;i=c[g+180>>2]|0;j=g+184|0;d=1;while(1){if((d|0)>(i|0)){k=4;break}f=c[(c[j>>2]|0)+(d<<2)>>2]|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];c[e+16>>2]=c[b+16>>2];c[e+20>>2]=c[b+20>>2];c[e+24>>2]=c[b+24>>2];c[e+28>>2]=c[b+28>>2];f=VS(f,e)|0;if(!f)d=d+1|0;else{a=f;break}}do if((k|0)==4){o=+h[g+24>>3];n=+h[g+40>>3];if(((+h[b+16>>3]>=+h[g+16>>3]?+h[g+32>>3]>=+h[b>>3]:0)?+h[b+24>>3]>=o:0)?n>=+h[b+8>>3]:0)break;a=0}while(0);l=m;return a|0}function WS(b){b=b|0;var d=0,e=0,f=0;f=b+580|0;d=c[f>>2]|0;a:do if(d|0)switch(IC(d)|0){case 0:{e=(c[d+16>>2]|0)+112|0;a[e>>0]=a[e>>0]&-7|4;break a}case 1:{e=(c[d+16>>2]|0)+117|0;a[e>>0]=a[e>>0]&-7|4;break a}case 2:{e=(c[d+16>>2]|0)+115|0;a[e>>0]=a[e>>0]&-7|4;break a}default:break a}while(0);d=b+588|0;e=c[d>>2]|0;if(e|0){U1(e);c[d>>2]=0}d=c[b+576>>2]|0;c[f>>2]=d;b:do if(d|0)switch(IC(d)|0){case 0:{f=(c[d+16>>2]|0)+112|0;a[f>>0]=a[f>>0]|2;XS(b,d);break b}case 1:{f=(c[d+16>>2]|0)+117|0;a[f>>0]=a[f>>0]|2;YS(b,d);break b}case 2:{f=(c[d+16>>2]|0)+115|0;a[f>>0]=a[f>>0]|2;ZS(b,d);break b}default:break b}while(0);return}function XS(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;d=a+592|0;do if((yC(b)|0)==(b|0))if(!(xB(b)|0)){GF(d,0,111494);break}else{GF(d,0,111486);break}else GF(d,0,111500);while(0);GF(d,1,KB(b)|0);c[a+596>>2]=2;f=a+604|0;d=0;e=2;while(1){d=LA(b,0,d)|0;if(!d)break;GF(f,e,c[d+8>>2]|0);GF(f,e+1|0,RA(b,d)|0);GF(f,e+2|0,0);e=e+3|0}c[a+608>>2]=e;d=GA(b,0,141055,0)|0;if(!d){d=GA(b,0,111477,0)|0;if(d|0)g=11}else g=11;if((g|0)==11)c[a+588>>2]=EK(RA(b,d)|0,b)|0;return}function YS(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;f=a+592|0;GF(f,0,111481);GF(f,1,KB(b)|0);c[a+596>>2]=2;f=a+604|0;g=yC(xC(b)|0)|0;e=2;d=0;while(1){d=LA(g,1,d)|0;if(!d)break;GF(f,e,c[d+8>>2]|0);GF(f,e|1,RA(b,d)|0);e=e+2|0}c[a+608>>2]=e;d=GA(xC(b)|0,1,141055,0)|0;if(!d){d=GA(xC(b)|0,1,111477,0)|0;if(d|0)h=6}else h=6;if((h|0)==6)c[a+588>>2]=EK(RA(b,d)|0,b)|0;return}function ZS(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;h=a+592|0;GF(h,0,111450);k=b+48|0;GF(h,1,KB(c[((c[b>>2]&3|0)==3?b:k)+40>>2]|0)|0);k=(xB(xC(c[((c[b>>2]&3|0)==3?b:k)+40>>2]|0)|0)|0)!=0;GF(h,3,k?137738:141747);k=b+-48|0;GF(h,4,KB(c[((c[b>>2]&3|0)==2?b:k)+40>>2]|0)|0);c[a+596>>2]=7;i=a+604|0;j=yC(xC(c[((c[b>>2]&3|0)==2?b:k)+40>>2]|0)|0)|0;g=7;d=0;a:while(1){while(1){d=LA(j,2,d)|0;if(!d)break a;e=d+8|0;f=c[e>>2]|0;if(!(s2(f,111455)|0)){l=5;break}if(!(s2(f,111464)|0)){l=7;break}if(s2(f,111473)|0)break;GF(h,6,RA(b,d)|0)}if((l|0)==5){l=0;GF(h,2,RA(b,d)|0)}else if((l|0)==7){l=0;GF(h,5,RA(b,d)|0)}GF(i,g,c[e>>2]|0);GF(i,g+1|0,RA(b,d)|0);g=g+2|0}c[a+608>>2]=g;d=GA(xC(c[((c[b>>2]&3|0)==2?b:k)+40>>2]|0)|0,2,141055,0)|0;if(!d){d=GA(xC(c[((c[b>>2]&3|0)==2?b:k)+40>>2]|0)|0,2,111477,0)|0;if(d|0)l=13}else l=13;if((l|0)==13)c[a+588>>2]=EK(RA(b,d)|0,b)|0;return}function _S(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;g=$S(a,b,c[d>>2]|0)|0;d=c[d+4>>2]|0;while(1){f=c[d+4>>2]|0;if(!f)break;b=0;while(1){e=c[f+(b*20|0)+4>>2]|0;if(!e)break;JF(a,c[d>>2]|0,e,c[f+(b*20|0)+8>>2]|0,g,f+(b*20|0)|0)|0;b=b+1|0}d=d+8|0}return}function $S(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=KK(12)|0;if(!b)b=0;else b=D4(b)|0;c[e+4>>2]=b;c[e+8>>2]=D4(d)|0;d=a+100|0;c[e>>2]=c[d>>2];c[d>>2]=e;return e|0}function aT(b,c){b=b|0;c=c|0;bT(b);a[b+44>>0]=0;cT(b)|0;PO(b)|0;return}function bT(b){b=b|0;var d=0,e=0;d=c[b+32>>2]|0;a:do if(d|0)while(1){e=c[d>>2]|0;if(!e)break a;if((a[e>>0]|0)==103?d4(e,111509)|0:0)_S(b,0,c[d+4>>2]|0);d=d+8|0}while(0);return}function cT(a){a=a|0;var b=0;b=LF(a,2,111522)|0;if(!b)a=999;else{c[a+148>>2]=c[(c[b+16>>2]|0)+12>>2];a=300}return a|0}function dT(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;a=c[a+148>>2]|0;if((a|0)!=0?(e=c[a>>2]|0,(e|0)!=0):0)a=lb[e&127](b,d)|0;else a=0;return a|0}function eT(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;return (c[b>>2]|0)-(c[d>>2]|0)|0}function fT(a){a=a|0;var b=0.0,d=0.0;a=c[a+16>>2]|0;d=+h[a+16>>3];b=+h[a+24>>3];return (gT(~~(d>b?d:b)>>>0)|0)+1|0}function gT(a){a=a|0;var b=0,c=0;if(!a)a=-1;else{c=a>>>0>65535;a=c?a>>>16:a;c=c?16:0;b=a>>>0>255;a=b?a>>>8:a;c=b?c|8:c;b=a>>>0>15;a=b?a>>>4:a;c=b?c|4:c;b=a>>>0>3;a=(b?c|2:c)+((b?a>>>2:a)>>>0>1&1)|0}return a|0}function hT(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var i=0.0,j=0.0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;r=l;l=l+32|0;q=r;p=iT(b,d,e,f,g)|0;e=jT(p)|0;if((e|0)>=0){n=q+16|0;o=q+24|0;m=q+8|0;k=g+32|0;e=0;g=0;while(1){if((g|0)>=(d|0))break;f=b+(g*40|0)+32|0;do if(c[f>>2]|0){kT(q,p,b+(g*40|0)|0);i=+h[n>>3];j=+h[o>>3];if(!(c[q>>2]|0)){a[(c[f>>2]|0)+36>>0]=1;break}if(+h[m>>3]==0.0){f=c[f>>2]|0;h[f+16>>3]=i;h[f+24>>3]=j;a[f+36>>0]=1;break}if((a[k>>0]|0)==1){f=c[f>>2]|0;h[f+16>>3]=i;h[f+24>>3]=j;a[f+36>>0]=1}else e=1}while(0);g=g+1|0}lT(p)}l=r;return e|0}function iT(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0;g=JK(28)|0;j=Vz(25912,c[4584]|0)|0;h=g+20|0;c[h>>2]=j;do if(j){j=TV()|0;c[g+24>>2]=j;if(!j){U4(111740,14,1,c[15712]|0)|0;i=6;break}else{c[g>>2]=a;c[g+4>>2]=b;c[g+8>>2]=d;c[g+12>>2]=e;c[g+16>>2]=f;break}}else{U4(111740,14,1,c[15712]|0)|0;i=6}while(0);if((i|0)==6){a=c[h>>2]|0;if(a|0)Rz(a)|0;a=c[g+24>>2]|0;if(a|0)VV(a)|0;U1(g);g=0}return g|0}function jT(a){a=a|0;var b=0;b=uT(a)|0;if((b|0)>=0){vT(a);wT(a);b=Rz(c[a+20>>2]|0)|0}return b|0}function kT(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0,g=0,i=0.0,j=0,k=0.0,m=0,n=0,o=0,p=0,q=0.0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0.0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0.0,L=0,M=0;M=l;l=l+464|0;J=M+416|0;L=M+400|0;G=M+384|0;m=M+352|0;n=M+320|0;o=M+288|0;p=M+256|0;r=M+224|0;s=M+192|0;t=M+160|0;u=M+128|0;v=M+96|0;x=M+64|0;y=M+32|0;H=M;z=c[d+32>>2]|0;e=+h[z>>3];C=d+16|0;A=(e*2.0+ +h[C>>3])*.125;D=z+8|0;I=d+24|0;i=+h[I>>3];K=(+h[D>>3]*2.0+i)*.5;if(!z)qa(111533,111543,445,111553);f=J;g=f+36|0;do{c[f>>2]=0;f=f+4|0}while((f|0)<(g|0));B=z+16|0;h[B>>3]=+h[d>>3]-e;E=d+8|0;F=z+24|0;h[F>>3]=i+ +h[E>>3];mT(m,b,d,J);j=c[m>>2]|0;f=c[m+4>>2]|0;e=+h[m+8>>3];m=m+16|0;c[L>>2]=c[m>>2];c[L+4>>2]=c[m+4>>2];c[L+8>>2]=c[m+8>>2];c[L+12>>2]=c[m+12>>2];a:do if(!j){c[a>>2]=0;c[a+4>>2]=f;h[a+8>>3]=e;a=a+16|0;c[a>>2]=c[L>>2];c[a+4>>2]=c[L+4>>2];c[a+8>>2]=c[L+8>>2];c[a+12>>2]=c[L+12>>2]}else{h[F>>3]=+h[E>>3];mT(n,b,d,J);g=c[n>>2]|0;m=c[n+4>>2]|0;i=+h[n+8>>3];n=n+16|0;c[G>>2]=c[n>>2];c[G+4>>2]=c[n+4>>2];c[G+8>>2]=c[n+8>>2];c[G+12>>2]=c[n+12>>2];if(!g){c[a>>2]=0;c[a+4>>2]=m;h[a+8>>3]=i;a=a+16|0;c[a>>2]=c[G>>2];c[a+4>>2]=c[G+4>>2];c[a+8>>2]=c[G+8>>2];c[a+12>>2]=c[G+12>>2];break}if(i>2]=c[G>>2];c[L+4>>2]=c[G+4>>2];c[L+8>>2]=c[G+8>>2];c[L+12>>2]=c[G+12>>2];f=m;e=i}else g=j;h[F>>3]=+h[E>>3]-+h[D>>3];mT(o,b,d,J);m=c[o>>2]|0;j=c[o+4>>2]|0;i=+h[o+8>>3];o=o+16|0;c[G>>2]=c[o>>2];c[G+4>>2]=c[o+4>>2];c[G+8>>2]=c[o+8>>2];c[G+12>>2]=c[o+12>>2];if(!m){c[a>>2]=0;c[a+4>>2]=j;h[a+8>>3]=i;a=a+16|0;c[a>>2]=c[G>>2];c[a+4>>2]=c[G+4>>2];c[a+8>>2]=c[G+8>>2];c[a+12>>2]=c[G+12>>2];break}if(i>2]=c[G>>2];c[L+4>>2]=c[G+4>>2];c[L+8>>2]=c[G+8>>2];c[L+12>>2]=c[G+12>>2];f=j;e=i}else m=g;h[B>>3]=+h[d>>3];h[F>>3]=+h[I>>3]+ +h[E>>3];mT(p,b,d,J);g=c[p>>2]|0;j=c[p+4>>2]|0;i=+h[p+8>>3];p=p+16|0;c[G>>2]=c[p>>2];c[G+4>>2]=c[p+4>>2];c[G+8>>2]=c[p+8>>2];c[G+12>>2]=c[p+12>>2];if(!g){c[a>>2]=0;c[a+4>>2]=j;h[a+8>>3]=i;a=a+16|0;c[a>>2]=c[G>>2];c[a+4>>2]=c[G+4>>2];c[a+8>>2]=c[G+8>>2];c[a+12>>2]=c[G+12>>2];break}if(i>2]=c[G>>2];c[L+4>>2]=c[G+4>>2];c[L+8>>2]=c[G+8>>2];c[L+12>>2]=c[G+12>>2];m=g;f=j;e=i}h[F>>3]=+h[E>>3]-+h[D>>3];mT(r,b,d,J);g=c[r>>2]|0;j=c[r+4>>2]|0;i=+h[r+8>>3];r=r+16|0;c[G>>2]=c[r>>2];c[G+4>>2]=c[r+4>>2];c[G+8>>2]=c[r+8>>2];c[G+12>>2]=c[r+12>>2];if(!g){c[a>>2]=0;c[a+4>>2]=j;h[a+8>>3]=i;a=a+16|0;c[a>>2]=c[G>>2];c[a+4>>2]=c[G+4>>2];c[a+8>>2]=c[G+8>>2];c[a+12>>2]=c[G+12>>2];break}if(i>2]=c[G>>2];c[L+4>>2]=c[G+4>>2];c[L+8>>2]=c[G+8>>2];c[L+12>>2]=c[G+12>>2];m=g;f=j;e=i}h[B>>3]=+h[C>>3]+ +h[d>>3];h[F>>3]=+h[I>>3]+ +h[E>>3];mT(s,b,d,J);g=c[s>>2]|0;j=c[s+4>>2]|0;i=+h[s+8>>3];s=s+16|0;c[G>>2]=c[s>>2];c[G+4>>2]=c[s+4>>2];c[G+8>>2]=c[s+8>>2];c[G+12>>2]=c[s+12>>2];if(!g){c[a>>2]=0;c[a+4>>2]=j;h[a+8>>3]=i;a=a+16|0;c[a>>2]=c[G>>2];c[a+4>>2]=c[G+4>>2];c[a+8>>2]=c[G+8>>2];c[a+12>>2]=c[G+12>>2];break}if(i>2]=c[G>>2];c[L+4>>2]=c[G+4>>2];c[L+8>>2]=c[G+8>>2];c[L+12>>2]=c[G+12>>2];m=g;f=j;e=i}h[F>>3]=+h[E>>3];mT(t,b,d,J);g=c[t>>2]|0;j=c[t+4>>2]|0;i=+h[t+8>>3];t=t+16|0;c[G>>2]=c[t>>2];c[G+4>>2]=c[t+4>>2];c[G+8>>2]=c[t+8>>2];c[G+12>>2]=c[t+12>>2];if(!g){c[a>>2]=0;c[a+4>>2]=j;h[a+8>>3]=i;a=a+16|0;c[a>>2]=c[G>>2];c[a+4>>2]=c[G+4>>2];c[a+8>>2]=c[G+8>>2];c[a+12>>2]=c[G+12>>2];break}if(i>2]=c[G>>2];c[L+4>>2]=c[G+4>>2];c[L+8>>2]=c[G+8>>2];c[L+12>>2]=c[G+12>>2];m=g;f=j;e=i}h[F>>3]=+h[E>>3]-+h[D>>3];mT(u,b,d,J);g=c[u>>2]|0;j=c[u+4>>2]|0;i=+h[u+8>>3];u=u+16|0;c[G>>2]=c[u>>2];c[G+4>>2]=c[u+4>>2];c[G+8>>2]=c[u+8>>2];c[G+12>>2]=c[u+12>>2];if(!g){c[a>>2]=0;c[a+4>>2]=j;h[a+8>>3]=i;a=a+16|0;c[a>>2]=c[G>>2];c[a+4>>2]=c[G+4>>2];c[a+8>>2]=c[G+8>>2];c[a+12>>2]=c[G+12>>2];break}if(i>2]=c[G>>2];c[L+4>>2]=c[G+4>>2];c[L+8>>2]=c[G+8>>2];c[L+12>>2]=c[G+12>>2];f=j;e=i}else g=m;j=(c[J+28>>2]|0)==0;do if(!(c[J+24>>2]|0))if(j){if(c[J+32>>2]|0){w=38;break}if(!((c[J+12>>2]|0)==0&(c[J>>2]|0)==0))w=38}else w=46;else if(j)w=38;else w=46;while(0);b:do if((w|0)==38)if(!(c[J+32>>2]|0)){h[B>>3]=+h[d>>3]-+h[z>>3];p=v+4|0;r=v+8|0;s=v+16|0;m=F;j=E;i=+h[I>>3];c:while(1){while(1){h[m>>3]=+h[j>>3]+i;if(!(+h[B>>3]<=+h[C>>3]+ +h[d>>3])){w=46;break b}mT(v,b,d,J);n=c[v>>2]|0;o=c[p>>2]|0;k=+h[r>>3];c[G>>2]=c[s>>2];c[G+4>>2]=c[s+4>>2];c[G+8>>2]=c[s+8>>2];c[G+12>>2]=c[s+12>>2];if(!n)break c;if(k>2]=c[G>>2];c[L+4>>2]=c[G+4>>2];c[L+8>>2]=c[G+8>>2];c[L+12>>2]=c[G+12>>2];m=B;j=B;i=A;g=n;f=o;e=k}c[a>>2]=0;c[a+4>>2]=o;h[a+8>>3]=k;a=a+16|0;c[a>>2]=c[G>>2];c[a+4>>2]=c[G+4>>2];c[a+8>>2]=c[G+8>>2];c[a+12>>2]=c[G+12>>2];break a}else w=46;while(0);d:do if((w|0)==46)if((c[J+12>>2]|0)==0&(c[J>>2]|0)==0){h[B>>3]=+h[d>>3]-+h[z>>3];k=+h[E>>3];n=x+4|0;o=x+8|0;p=x+16|0;i=k;k=+h[I>>3]+k;while(1){h[F>>3]=k;if(!(k>=i-+h[D>>3]))break d;mT(x,b,d,J);j=c[x>>2]|0;m=c[n>>2]|0;i=+h[o>>3];c[G>>2]=c[p>>2];c[G+4>>2]=c[p+4>>2];c[G+8>>2]=c[p+8>>2];c[G+12>>2]=c[p+12>>2];if(!j)break;if(i>2]=c[G>>2];c[L+4>>2]=c[G+4>>2];c[L+8>>2]=c[G+8>>2];c[L+12>>2]=c[G+12>>2];g=j;f=m;e=i}i=+h[E>>3];k=+h[F>>3]-K}c[a>>2]=0;c[a+4>>2]=m;h[a+8>>3]=i;a=a+16|0;c[a>>2]=c[G>>2];c[a+4>>2]=c[G+4>>2];c[a+8>>2]=c[G+8>>2];c[a+12>>2]=c[G+12>>2];break a}while(0);i=+h[d>>3];k=+h[C>>3]+i;h[B>>3]=k;q=+h[D>>3];h[F>>3]=+h[E>>3]-q;j=c[J+4>>2]|0;do if(!(c[J+8>>2]|0)){m=c[J>>2]|0;if(!((j|0)==0&(m|0)==0)){w=59;break}if(c[J+20>>2]|0){j=0;m=0;w=59;break}if(c[J+32>>2]|0){j=0;m=0;w=59}}else{m=c[J>>2]|0;w=59}while(0);e:do if((w|0)==59){f:do if((j|0)==0&(m|0)==0){h[B>>3]=k;p=y+4|0;r=y+8|0;s=y+16|0;m=F;j=E;i=q;g:while(1){while(1){h[m>>3]=+h[j>>3]-i;i=+h[d>>3];if(!(+h[B>>3]>=i-+h[z>>3]))break f;mT(y,b,d,J);n=c[y>>2]|0;o=c[p>>2]|0;k=+h[r>>3];c[G>>2]=c[s>>2];c[G+4>>2]=c[s+4>>2];c[G+8>>2]=c[s+8>>2];c[G+12>>2]=c[s+12>>2];if(!n)break g;if(k>2]=c[G>>2];c[L+4>>2]=c[G+4>>2];c[L+8>>2]=c[G+8>>2];c[L+12>>2]=c[G+12>>2];m=B;j=B;i=A;g=n;f=o;e=k}c[a>>2]=0;c[a+4>>2]=o;h[a+8>>3]=k;a=a+16|0;c[a>>2]=c[G>>2];c[a+4>>2]=c[G+4>>2];c[a+8>>2]=c[G+8>>2];c[a+12>>2]=c[G+12>>2];break a}while(0);if(c[J+20>>2]|0)break;if(c[J+32>>2]|0)break;h[B>>3]=+h[C>>3]+i;i=+h[E>>3];n=H+4|0;o=H+8|0;p=H+16|0;k=i;i=i-+h[D>>3];while(1){h[F>>3]=i;if(!(i<=+h[I>>3]+k))break e;mT(H,b,d,J);j=c[H>>2]|0;m=c[n>>2]|0;i=+h[o>>3];c[G>>2]=c[p>>2];c[G+4>>2]=c[p+4>>2];c[G+8>>2]=c[p+8>>2];c[G+12>>2]=c[p+12>>2];if(!j)break;if(i>2]=c[G>>2];c[L+4>>2]=c[G+4>>2];c[L+8>>2]=c[G+8>>2];c[L+12>>2]=c[G+12>>2];g=j;f=m;e=i}k=+h[E>>3];i=+h[F>>3]+K}c[a>>2]=0;c[a+4>>2]=m;h[a+8>>3]=i;a=a+16|0;c[a>>2]=c[G>>2];c[a+4>>2]=c[G+4>>2];c[a+8>>2]=c[G+8>>2];c[a+12>>2]=c[G+12>>2];break a}while(0);c[a>>2]=g;c[a+4>>2]=f;h[a+8>>3]=e;a=a+16|0;c[a>>2]=c[L>>2];c[a+4>>2]=c[L+4>>2];c[a+8>>2]=c[L+8>>2];c[a+12>>2]=c[L+12>>2]}while(0);l=M;return}function lT(a){a=a|0;VV(c[a+24>>2]|0)|0;U1(a);return}function mT(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,i=0.0,j=0,k=0,m=0,n=0.0,o=0,p=0,q=0,r=0.0,s=0,t=0;t=l;l=l+48|0;q=t+32|0;s=t+16|0;p=t;g=c[e+32>>2]|0;if(!g)qa(111533,111543,382,111562);o=g+16|0;c[p>>2]=c[o>>2];c[p+4>>2]=c[o+4>>2];c[p+8>>2]=c[o+8>>2];c[p+12>>2]=c[o+12>>2];o=d+4|0;m=0;g=0;while(1){if((m|0)>=(c[o>>2]|0))break;j=c[d>>2]|0;k=j+(m*40|0)|0;do if((k|0)!=(e|0)){if(+h[j+(m*40|0)+16>>3]>0.0?+h[j+(m*40|0)+24>>3]>0.0:0)break;g=g+((nT(e,k)|0)!=0&1)|0}while(0);m=m+1|0}oT(e,q);m=c[d+24>>2]|0;m=XV(m,c[m>>2]|0,q)|0;if(!m){c[b>>2]=g;h[b+8>>3]=0.0;s=b+16|0;c[s>>2]=c[p>>2];c[s+4>>2]=c[p+4>>2];c[s+8>>2]=c[p+8>>2];c[s+12>>2]=c[p+12>>2]}else{k=m;i=0.0;while(1){if(!k)break;j=c[(c[k+4>>2]|0)+16>>2]|0;if((j|0)!=(e|0)){pT(j,s);n=+qT(q,s);if(n>0.0){g=g+1|0;i=+rT(e,j,q,n,f)+i}d=c[j+32>>2]|0;if(((d|0)!=0?(a[d+36>>0]|0)!=0:0)?(oT(j,s),r=+qT(q,s),r>0.0):0){g=g+1|0;i=+sT(e,j,q,r,f)+i}}k=c[k>>2]|0}SV(m);c[b>>2]=g;h[b+8>>3]=i;s=b+16|0;c[s>>2]=c[p>>2];c[s+4>>2]=c[p+4>>2];c[s+8>>2]=c[p+8>>2];c[s+12>>2]=c[p+12>>2]}l=t;return}function nT(a,b){a=a|0;b=b|0;var d=0.0,e=0.0,f=0.0,g=0.0;a=c[a+32>>2]|0;if(+h[b+16>>3]==0.0?+h[b+24>>3]==0.0:0){if((((a|0)!=0?(d=+h[b>>3],e=+h[a+16>>3],d>e):0)?d<+h[a>>3]+e:0)?(f=+h[b+8>>3],g=+h[a+24>>3],f>g):0)a=f<+h[a+8>>3]+g&1;else a=0;return a|0}qa(111599,111543,219,111636);return 0}function oT(a,b){a=a|0;b=b|0;var d=0.0,e=0.0;a=c[a+32>>2]|0;e=+h[a+16>>3];c[b>>2]=~~e;d=+h[a+24>>3];c[b+4>>2]=~~d;c[b+8>>2]=~~(+h[a>>3]+e);c[b+12>>2]=~~(+h[a+8>>3]+d);return}function pT(a,b){a=a|0;b=b|0;var d=0.0,e=0.0;e=+h[a>>3];c[b>>2]=~~e;d=+h[a+8>>3];c[b+4>>2]=~~d;c[b+8>>2]=~~(+h[a+16>>3]+e);c[b+12>>2]=~~(+h[a+24>>3]+d);return}function qT(a,b){a=a|0;b=b|0;var d=0.0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;i=c[a+8>>2]|0;j=c[b>>2]|0;if((((i|0)>=(j|0)?(k=c[a>>2]|0,l=c[b+8>>2]|0,(k|0)<=(l|0)):0)?(e=c[a+12>>2]|0,f=c[b+4>>2]|0,(e|0)>=(f|0)):0)?(g=c[a+4>>2]|0,h=c[b+12>>2]|0,(g|0)<=(h|0)):0)d=(+(c[((e|0)<(h|0)?a:b)+12>>2]|0)-+(c[((g|0)>(f|0)?a:b)+4>>2]|0))*(+(c[((i|0)<(l|0)?a:b)+8>>2]|0)-+(c[((k|0)>(j|0)?a:b)>>2]|0));else d=0.0;return +d}function rT(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=+e;f=f|0;var g=0.0,h=0.0,i=0,j=0;j=l;l=l+16|0;i=j;a=tT(a,b)|0;f=f+(((a|0)<0?5:a)<<2)|0;a=c[f>>2]|0;if(!a){c[f>>2]=b;g=e}else{pT(a,i);g=+qT(d,i);g=g>e?g:0.0;a=c[f>>2]|0;if((c[a+32>>2]|0)!=0?(oT(a,i),h=+qT(d,i),h>e):0)g=h>g?h:g;if(!(g>0.0)){c[f>>2]=b;g=e}}l=j;return +g}function sT(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=+e;f=f|0;var g=0.0,h=0.0,i=0,j=0;j=l;l=l+16|0;i=j;a=tT(a,b)|0;f=f+(((a|0)<0?5:a)<<2)|0;a=c[f>>2]|0;if(!a){c[f>>2]=b;g=e}else{pT(a,i);g=+qT(d,i);g=g>e?g:0.0;a=c[f>>2]|0;if((c[a+32>>2]|0)!=0?(oT(a,i),h=+qT(d,i),h>e):0)g=h>g?h:g;if(!(g>0.0)){c[f>>2]=b;g=e}}l=j;return +g}function tT(b,d){b=b|0;d=d|0;var e=0,f=0,g=0.0,i=0.0,j=0.0,k=0.0;e=c[b+32>>2]|0;f=c[d+32>>2]|0;if((e|0)==(f|0))qa(111578,111543,276,111588);do if((a[e+36>>0]|0)!=0?(a[f+36>>0]|0)!=0:0){j=+h[b>>3];if(j==0.0?+h[b+8>>3]==0.0:0){e=-1;break}k=+h[d>>3];i=+h[d+8>>3];if(!(k==0.0&i==0.0)){g=+h[b+8>>3];if(ij?2:1;break}e=kg){if(e){e=6;break}e=k>j?8:7;break}if(!e)if(k>j)e=5;else e=-1;else e=3}else e=-1}else e=-1;while(0);return e|0}function uT(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;k=l;l=l+32|0;d=k+24|0;e=k+16|0;f=k;g=fT(a)|0;h=a+4|0;i=e+4|0;j=a+20|0;b=0;while(1){if((b|0)>=(c[h>>2]|0)){b=0;break}m=JK(32)|0;o=(c[a>>2]|0)+(b*40|0)|0;n=m+12|0;c[m+28>>2]=o;xT(f,o);c[n>>2]=c[f>>2];c[n+4>>2]=c[f+4>>2];c[n+8>>2]=c[f+8>>2];c[n+12>>2]=c[f+12>>2];n=c[n>>2]|0;c[e>>2]=(((c[m+20>>2]|0)-n|0)/2|0)+n;n=c[m+16>>2]|0;c[i>>2]=(((c[m+24>>2]|0)-n|0)/2|0)+n;c[d>>2]=c[e>>2];c[d+4>>2]=c[e+4>>2];c[m+8>>2]=yT(d,g)|0;n=c[j>>2]|0;if(!(nb[c[n>>2]&63](n,m,1)|0)){b=-1;break}else b=b+1|0}l=k;return b|0}function vT(a){a=a|0;var b=0,d=0,e=0;d=a+20|0;e=c[d>>2]|0;b=a+24|0;a=nb[c[e>>2]&63](e,0,128)|0;while(1){if(!a)break;e=c[b>>2]|0;YV(e,a+12|0,c[a+28>>2]|0,e,0)|0;e=c[d>>2]|0;a=nb[c[e>>2]&63](e,a,8)|0}return}function wT(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;e=a+20|0;f=Xz(c[e>>2]|0)|0;d=0;while(1){if(!(Xz(c[e>>2]|0)|0))break;g=c[e>>2]|0;a=c[(c[g+8>>2]|0)+4>>2]|0;if(!a){h=8;break}b=c[(c[g+4>>2]|0)+8>>2]|0;if((b|0)<0)a=c[a+8>>2]|0;else a=a+(0-b)|0;if(!a){h=8;break}nb[c[g>>2]&63](g,a,4096)|0;U1(a);d=d+1|0}if((h|0)==8)qa(111649,111543,616,111652);if((f|0)==(d|0))return;else qa(111664,111543,623,111652)}function xT(a,b){a=a|0;b=b|0;var d=0,e=0.0,f=0.0,g=0.0,i=0,j=0,k=0,l=0.0;d=c[b+32>>2]|0;if(!d){e=0.0;f=0.0}else{e=+h[d>>3];f=+h[d+8>>3]}l=+h[b>>3];k=~~+A(+(l-e));g=+h[b+8>>3];j=~~+A(+(g-f));i=~~+N(+(l+e+ +h[b+16>>3]));if((i|0)==2147483647)qa(111676,111543,264,111703);d=~~+N(+(g+f+ +h[b+24>>3]));if((d|0)==2147483647)qa(111713,111543,266,111703);else{c[a>>2]=k;c[a+4>>2]=j;c[a+8>>2]=i;c[a+12>>2]=d;return}}function yT(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;f=0;e=c[a>>2]|0;d=c[a+4>>2]|0;while(1){a=b+-1|0;if((b|0)<=0)break;i=e>>>a&1;b=d>>>a&1;g=b+-1|0;h=g&(e^d);g=g&0-i;f=i<<1|f<<2|i^b;b=a;e=h^e^g;d=h^d^g}return f|0}function zT(b){b=b|0;var d=0,e=0,f=0,g=0;d=l2(b)|0;if(d>>>0>=(c[47365]|0)>>>0){d=d+11|0;c[47365]=d;d=MK(c[47366]|0,d)|0;c[47366]=d;if(!d)d=0;else e=4}else{d=c[47366]|0;e=4}if((e|0)==4){g=d;while(1){e=a[b>>0]|0;if(!(e<<24>>24))break;f=e&255;if(e3(f)|0)e=(d3(f)|0)&255;a[g>>0]=e;g=g+1|0;b=b+1|0}a[g>>0]=0}return d|0}function AT(b,e,f){b=b|0;e=e|0;f=f|0;var g=0.0,i=0,j=0.0,k=0.0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0.0;F=l;l=l+144|0;s=F+96|0;p=F+80|0;v=F+124|0;t=F+72|0;w=F+64|0;x=F+56|0;C=F+48|0;D=F+40|0;E=F+32|0;y=F+24|0;z=F+16|0;A=F+8|0;B=F;i=F+120|0;m=F+116|0;n=F+112|0;o=F+108|0;c[e+32>>2]=f;r=b;while(1)if((a[r>>0]|0)==32)r=r+1|0;else break;c[o>>2]=255;b=a[r>>0]|0;a:do if(b<<24>>24==35){c[p>>2]=i;c[p+4>>2]=m;c[p+8>>2]=n;c[p+12>>2]=o;if((b5(r,111755,p)|0)<=2){b=a[r>>0]|0;q=12;break}switch(f|0){case 0:{G=+((c[i>>2]|0)>>>0)*.00392156862745098;h[C>>3]=G;g=+((c[m>>2]|0)>>>0)*.00392156862745098;h[D>>3]=g;j=+((c[n>>2]|0)>>>0)*.00392156862745098;h[E>>3]=j;k=+((c[o>>2]|0)>>>0)*.00392156862745098;BT(G,g,j,t,w,x);h[e>>3]=+h[t>>3];h[e+8>>3]=+h[w>>3];h[e+16>>3]=+h[x>>3];h[e+24>>3]=k;b=0;break a}case 1:{a[e>>0]=c[i>>2];a[e+1>>0]=c[m>>2];a[e+2>>0]=c[n>>2];a[e+3>>0]=c[o>>2];b=0;break a}case 3:{j=+((c[i>>2]|0)>>>0)*.00392156862745098;h[C>>3]=j;k=+((c[m>>2]|0)>>>0)*.00392156862745098;h[D>>3]=k;G=+((c[n>>2]|0)>>>0)*.00392156862745098;h[E>>3]=G;CT(j,k,G,y,z,A,B);a[e>>0]=~~+h[y>>3]*255;a[e+1>>0]=~~+h[z>>3]*255;a[e+2>>0]=~~+h[A>>3]*255;a[e+3>>0]=~~+h[B>>3]*255;b=0;break a}case 2:{c[e>>2]=(((c[i>>2]|0)*65535|0)>>>0)/255|0;c[e+4>>2]=(((c[m>>2]|0)*65535|0)>>>0)/255|0;c[e+8>>2]=(((c[n>>2]|0)*65535|0)>>>0)/255|0;c[e+12>>2]=(((c[o>>2]|0)*65535|0)>>>0)/255|0;b=0;break a}case 4:{h[e>>3]=+((c[i>>2]|0)>>>0)*.00392156862745098;h[e+8>>3]=+((c[m>>2]|0)>>>0)*.00392156862745098;h[e+16>>3]=+((c[n>>2]|0)>>>0)*.00392156862745098;h[e+24>>3]=+((c[o>>2]|0)>>>0)*.00392156862745098;b=0;break a}default:{b=0;break a}}}else q=12;while(0);b:do if((q|0)==12){if(!(b<<24>>24!=46?((b&255)+-48|0)>>>0>=10:0)){b=l2(r)|0;if(b>>>0>=(c[47367]|0)>>>0){b=b+11|0;c[47367]=b;b=MK(c[47368]|0,b)|0;c[47368]=b;if(!b){b=-1;break}}else b=c[47368]|0;m=b;i=r;c:while(1){n=i+1|0;i=a[i>>0]|0;switch(i<<24>>24){case 0:break c;case 44:{i=32;break}default:{}}a[m>>0]=i;m=m+1|0;i=n}a[m>>0]=0;c[s>>2]=t;c[s+4>>2]=w;c[s+8>>2]=x;if((b5(b,111769,s)|0)==3){k=+h[t>>3];k=k<1.0?k:1.0;k=k>0.0?k:0.0;h[t>>3]=k;j=+h[w>>3];j=j<1.0?j:1.0;j=j>0.0?j:0.0;h[w>>3]=j;g=+h[x>>3];g=g<1.0?g:1.0;g=g>0.0?g:0.0;h[x>>3]=g;switch(f|0){case 0:{h[e>>3]=k;h[e+8>>3]=j;h[e+16>>3]=g;h[e+24>>3]=1.0;b=0;break b}case 1:{DT(k,j,g,C,D,E);a[e>>0]=~~(+h[C>>3]*255.0);a[e+1>>0]=~~(+h[D>>3]*255.0);a[e+2>>0]=~~(+h[E>>3]*255.0);a[e+3>>0]=-1;b=0;break b}case 3:{DT(k,j,g,C,D,E);CT(+h[C>>3],+h[D>>3],+h[E>>3],y,z,A,B);a[e>>0]=~~+h[y>>3]*255;a[e+1>>0]=~~+h[z>>3]*255;a[e+2>>0]=~~+h[A>>3]*255;a[e+3>>0]=~~+h[B>>3]*255;b=0;break b}case 2:{DT(k,j,g,C,D,E);c[e>>2]=~~(+h[C>>3]*65535.0);c[e+4>>2]=~~(+h[D>>3]*65535.0);c[e+8>>2]=~~(+h[E>>3]*65535.0);c[e+12>>2]=65535;b=0;break b}case 4:{DT(k,j,g,C,D,E);h[e>>3]=+h[C>>3];h[e+8>>3]=+h[D>>3];h[e+16>>3]=+h[E>>3];h[e+24>>3]=1.0;b=0;break b}default:{b=0;break b}}}}i=ET(r)|0;c[v>>2]=i;if(!i)b=-1;else{b=c[47369]|0;if(!(((b|0)!=0?(u=c[b>>2]|0,(a[u>>0]|0)==(a[i>>0]|0)):0)?(s2(u,i)|0)==0:0)){b=u5(v,25948,2491,12,103)|0;c[47369]=b;if(!b)switch(f|0){case 0:{c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;c[e+16>>2]=0;c[e+20>>2]=0;h[e+24>>3]=1.0;b=1;break b}case 1:{a[e+2>>0]=0;a[e+1>>0]=0;a[e>>0]=0;a[e+3>>0]=-1;b=1;break b}case 3:{c[e>>2]=0;b=1;break b}case 2:{c[e+8>>2]=0;c[e+4>>2]=0;c[e>>2]=0;c[e+12>>2]=65535;b=1;break b}case 4:{c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;c[e+16>>2]=0;c[e+20>>2]=0;h[e+24>>3]=1.0;b=1;break b}default:{b=1;break b}}}switch(f|0){case 0:{h[e>>3]=+(d[b+4>>0]|0)*.00392156862745098;h[e+8>>3]=+(d[b+5>>0]|0)*.00392156862745098;h[e+16>>3]=+(d[b+6>>0]|0)*.00392156862745098;h[e+24>>3]=+(d[b+10>>0]|0)*.00392156862745098;b=0;break b}case 1:{a[e>>0]=a[b+7>>0]|0;a[e+1>>0]=a[b+8>>0]|0;a[e+2>>0]=a[b+9>>0]|0;a[e+3>>0]=a[b+10>>0]|0;b=0;break b}case 3:{j=+(d[b+7>>0]|0)*.00392156862745098;h[C>>3]=j;k=+(d[b+8>>0]|0)*.00392156862745098;h[D>>3]=k;G=+(d[b+9>>0]|0)*.00392156862745098;h[E>>3]=G;CT(j,k,G,y,z,A,B);a[e>>0]=~~+h[y>>3]*255;a[e+1>>0]=~~+h[z>>3]*255;a[e+2>>0]=~~+h[A>>3]*255;a[e+3>>0]=~~+h[B>>3]*255;b=0;break b}case 2:{c[e>>2]=(d[b+7>>0]|0)*257;c[e+4>>2]=(d[b+8>>0]|0)*257;c[e+8>>2]=(d[b+9>>0]|0)*257;c[e+12>>2]=(d[b+10>>0]|0)*257;b=0;break b}case 4:{h[e>>3]=+(d[b+7>>0]|0)*.00392156862745098;h[e+8>>3]=+(d[b+8>>0]|0)*.00392156862745098;h[e+16>>3]=+(d[b+9>>0]|0)*.00392156862745098;h[e+24>>3]=+(d[b+10>>0]|0)*.00392156862745098;b=0;break b}default:{b=0;break b}}}}while(0);l=F;return b|0}function BT(a,b,c,d,e,f){a=+a;b=+b;c=+c;d=d|0;e=e|0;f=f|0;var g=0.0,i=0.0,j=0.0,k=0.0,l=0.0,m=0.0;i=bc?b:c;m=ma?a:i);g=i/m;if(m>0.0)if(g>0.0){j=(m-a)/i;k=(m-b)/i;l=(m-c)/i;do if(!(m==a)){if(m==b){a=j+2.0-l;break}if(m==c)a=k+4.0-j;else a=0.0}else a=(b-c)/i;while(0);a=a*60.0;if(a<0.0)a=a+360.0}else a=0.0;else{g=0.0;a=0.0}h[d>>3]=a*.002777777777777778;h[f>>3]=m;h[e>>3]=g;return}function CT(a,b,c,d,e,f,g){a=+a;b=+b;c=+c;d=d|0;e=e|0;f=f|0;g=g|0;h[d>>3]=1.0-a;h[e>>3]=1.0-b;h[f>>3]=1.0-c;b=+h[d>>3];c=+h[e>>3];c=b>3]=c;b=+h[f>>3];c=b>3]=c;h[d>>3]=+h[d>>3]-c;h[e>>3]=+h[e>>3]-+h[g>>3];h[f>>3]=+h[f>>3]-+h[g>>3];return}function DT(a,b,c,d,e,f){a=+a;b=+b;c=+c;d=d|0;e=e|0;f=f|0;var g=0.0,i=0.0,j=0.0,k=0,l=0;a:do if(!(b<=0.0)){i=!(a>=1.0)?a*6.0:0.0;l=~~i;i=i-+(l|0);a=(1.0-b)*c;j=(1.0-i*b)*c;b=(1.0-(1.0-i)*b)*c;switch(l|0){case 0:{g=a;i=b;a=c;k=8;break a}case 1:{g=a;i=c;a=j;k=8;break a}case 2:{g=b;i=c;k=8;break a}case 3:{g=c;i=j;k=8;break a}case 4:{g=c;i=a;a=b;k=8;break a}case 5:{g=j;i=a;a=c;k=8;break a}default:break a}}else{g=c;i=c;a=c;k=8}while(0);if((k|0)==8){h[d>>3]=a;h[e>>3]=i;h[f>>3]=g}return}function ET(b){b=b|0;var d=0,e=0;d=a[b>>0]|0;if(((d<<24>>24!=98?(e=b+1|0,!(d<<24>>24==119|(Q2(e,137266,4)|0)==0)):0)?!(d<<24>>24==108|(Q2(e,137271,4)|0)==0):0)?(Q2(e,137276,8)|0)!=0:0){do if(d<<24>>24==47){d=R2(e,47)|0;if(!d)b=e;else{if((a[e>>0]|0)!=47){e=(j3(137285,e,4)|0)==0;b=e?d+1|0:b;break}d=c[47370]|0;if((d|0?a[d>>0]|0:0)?j3(137285,d,3)|0:0){b=GT(d,b+2|0)|0;break}b=b+2|0}}else{d=c[47370]|0;if(((d|0)!=0?(a[d>>0]|0)!=0:0)?(j3(137285,d,3)|0)!=0:0)b=GT(d,b)|0}while(0);b=zT(b)|0}return b|0}function FT(a,b){a=a|0;b=b|0;return c3(c[a>>2]|0,c[b>>2]|0)|0}function GT(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=l;l=l+16|0;e=f;g=l2(a)|0;g=(l2(b)|0)+g|0;d=g+13|0;if((g+3|0)>>>0<(c[47371]|0)>>>0)d=c[47372]|0;else{c[47371]=d;d=MK(c[47372]|0,d)|0;c[47372]=d}c[e>>2]=a;c[e+4>>2]=b;m4(d,137290,e)|0;l=f;return c[47372]|0}function HT(a){a=a|0;c[47370]=a;return}function IT(a,b,c,d,e){a=a|0;b=+b;c=+c;d=+d;e=+e;var f=0,g=0;f=l;l=l+208|0;g=f;JT(g,+h[a>>3],+h[a+8>>3],b,c,d,e);a=KT(g)|0;l=f;return a|0}function JT(a,b,c,d,e,f,g){a=a|0;b=+b;c=+c;d=+d;e=+e;f=+f;g=+g;var i=0,j=0;h[a>>3]=b;h[a+8>>3]=c;j=a+16|0;h[j>>3]=d;i=a+24|0;h[i>>3]=e;h[a+32>>3]=0.0;c=+K(+(+F(+f)/e),+(+E(+f)/d));h[a+56>>3]=c;e=+K(+(+F(+g)/e),+(+E(+g)/d));h[a+40>>3]=1.0;h[a+48>>3]=0.0;e=e-+A(+((e-c)*.15915494309189535))*6.283185307179586;h[a+64>>3]=g-f>3.141592653589793&e-c<3.141592653589793?e+6.283185307179586:e;QT(a);RT(a);ST(a);g=+h[j>>3];g=(g-+h[i>>3])/g;h[a+168>>3]=g;h[a+176>>3]=(2.0-g)*g;g=1.0-g;h[a+184>>3]=g;h[a+192>>3]=g*g;return}function KT(a){a=a|0;var b=0,c=0.0,d=0,e=0.0,f=0.0,g=0.0,i=0.0,j=0,k=0,l=0,m=0,n=0.0,o=0.0,p=0,q=0,r=0.0,s=0.0,t=0.0,u=0.0,v=0.0,w=0.0,x=0.0,y=0.0,z=0.0;q=JK(8)|0;f=+h[a+56>>3];e=+h[a+64>>3]-f;p=1;b=0;while(1){o=e/+(p|0);if(!(b<<24>>24==0&(p|0)<1024))break;a:do if(!(o<=1.5707963267948966))b=0;else{c=f;d=0;b=1;while(1){if(!(b<<24>>24!=0&(d|0)<(p|0)))break a;n=c+o;b=+LT(a,c,n)<=1.0e-05&1;c=n;d=d+1|0}}while(0);p=p<<1}i=+E(+f);u=+F(+f);d=a+16|0;s=+h[d>>3];v=s*i;j=a+24|0;c=+h[j>>3];g=c*u;i=c*i;c=+h[a>>3];k=a+40|0;t=+h[k>>3];l=a+48|0;r=+h[l>>3];e=t*v+c-r*g;m=a+8|0;n=+h[m>>3];g=r*v+t*g+n;s=-(u*s);MT(q,c,n);NT(q,e,g);n=+G(+(o*.5));n=+F(+o)*.3333333333333333*(+C(+(n*n*3.0+4.0))+-1.0);c=f;f=g;g=r*s+t*i;i=t*s-r*i;b=0;while(1){if((b|0)>=(p|0))break;r=c+o;u=+E(+r);v=+F(+r);x=+h[d>>3];z=x*u;w=+h[j>>3];t=w*v;u=w*u;w=+h[k>>3];y=+h[l>>3];s=w*z+ +h[a>>3]-y*t;t=y*z+w*t+ +h[m>>3];x=-(v*x);v=w*x-y*u;u=y*x+w*u;OT(q,e+i*n,f+g*n,s-v*n,t-u*n,s,t);c=r;e=s;f=t;g=u;i=v;b=b+1|0}PT(q);return q|0}function LT(a,b,c){a=a|0;b=+b;c=+c;var d=0.0,e=0.0,f=0.0,g=0.0,i=0.0;d=c+b;i=+h[a+16>>3];e=+h[a+24>>3]/i;g=+E(+d);f=+E(+(d*2.0));d=+E(+(d*3.0));a=e<.25?10392:10648;return +(((e*.001+4.98)*e+.207)/(e+.0067)*i*+L(+(((+h[a+32>>3]*e+ +h[a+40>>3])*e+ +h[a+48>>3])/(+h[a+56>>3]+e)*g+((+h[a>>3]*e+ +h[a+8>>3])*e+ +h[a+16>>3])/(+h[a+24>>3]+e)+((+h[a+64>>3]*e+ +h[a+72>>3])*e+ +h[a+80>>3])/(+h[a+88>>3]+e)*f+((+h[a+96>>3]*e+ +h[a+104>>3])*e+ +h[a+112>>3])/(+h[a+120>>3]+e)*d+(((+h[a+160>>3]*e+ +h[a+168>>3])*e+ +h[a+176>>3])/(+h[a+184>>3]+e)*g+((+h[a+128>>3]*e+ +h[a+136>>3])*e+ +h[a+144>>3])/(+h[a+152>>3]+e)+((+h[a+192>>3]*e+ +h[a+200>>3])*e+ +h[a+208>>3])/(+h[a+216>>3]+e)*f+((+h[a+224>>3]*e+ +h[a+232>>3])*e+ +h[a+240>>3])/(+h[a+248>>3]+e)*d)*(c-b))))}function MT(a,b,d){a=a|0;b=+b;d=+d;var e=0;c[47373]=100;e=JK(1600)|0;c[a>>2]=e;h[e>>3]=b;h[e+8>>3]=d;c[a+4>>2]=1;return}function NT(a,b,d){a=a|0;b=+b;d=+d;var e=0,f=0;f=c[a>>2]|0;e=(c[a+4>>2]|0)+-1|0;OT(a,+h[f+(e<<4)>>3],+h[f+(e<<4)+8>>3],b,d,b,d);return}function OT(a,b,d,e,f,g,i){a=a|0;b=+b;d=+d;e=+e;f=+f;g=+g;i=+i;var j=0,k=0,l=0,m=0;l=a+4|0;j=c[l>>2]|0;k=c[47373]|0;if((j+3|0)<(k|0))a=c[a>>2]|0;else{c[47373]=k<<1;j=W1(c[a>>2]|0,k<<5)|0;c[a>>2]=j;a=j;j=c[l>>2]|0}h[a+(j<<4)>>3]=b;m=j+1|0;h[a+(j<<4)+8>>3]=d;h[a+(m<<4)>>3]=e;k=j+2|0;h[a+(m<<4)+8>>3]=f;h[a+(k<<4)>>3]=g;c[l>>2]=j+3;h[a+(k<<4)+8>>3]=i;return}function PT(a){a=a|0;var b=0;b=c[a>>2]|0;NT(a,+h[b>>3],+h[b+8>>3]);c[a>>2]=W1(c[a>>2]|0,c[a+4>>2]<<4)|0;c[47373]=0;return}function QT(a){a=a|0;var b=0.0,c=0.0,d=0.0,e=0.0;d=+h[a+16>>3];b=+h[a+24>>3];b=+C(+(d*d-b*b));d=b*+h[a+40>>3];b=b*+h[a+48>>3];e=+h[a>>3];h[a+104>>3]=e-d;c=+h[a+8>>3];h[a+112>>3]=c-b;h[a+120>>3]=e+d;h[a+128>>3]=c+b;return}function RT(a){a=a|0;var b=0.0,c=0.0,d=0.0,e=0.0,f=0.0,g=0.0,i=0.0,j=0.0;d=+h[a+16>>3];i=+h[a+56>>3];j=+E(+i)*d;b=+h[a+24>>3];i=+F(+i)*b;g=+h[a+64>>3];d=+E(+g)*d;b=+F(+g)*b;g=+h[a>>3];c=+h[a+40>>3];e=+h[a+48>>3];h[a+72>>3]=c*j+g-e*i;f=+h[a+8>>3];h[a+80>>3]=e*j+f+c*i;h[a+88>>3]=g+c*d-e*b;h[a+96>>3]=f+e*d+c*b;return}function ST(a){a=a|0;var b=0.0,c=0.0,d=0.0,e=0.0,f=0.0,g=0.0,i=0.0,j=0.0,k=0.0,l=0.0,m=0.0,n=0;k=+h[a+24>>3];l=+h[a+16>>3];e=k/l;m=+h[a+48>>3];n=+B(+m)<.1;j=+h[a+40>>3];do if(n){b=m/j;c=+J(+(b*e));d=-c;if(j<0.0){b=+J(+(b/e));e=d;d=3.141592653589793-c;c=4.71238898038469-b;b=1.5707963267948966-b;break}else{b=+J(+(b/e));e=-3.141592653589793-c;c=1.5707963267948966-b;b=-1.5707963267948966-b;break}}else{b=j/m;c=+J(+(b/e));d=c+1.5707963267948966;if(m<0.0){b=+J(+(b*e));e=c+-1.5707963267948966;c=b+3.141592653589793;break}else{b=+J(+(b*e));e=d;d=c+4.71238898038469;c=b;b=b+-3.141592653589793;break}}while(0);g=+h[a+56>>3];e=e-+A(+((e-g)*.15915494309189535))*6.283185307179586;b=b-+A(+((b-g)*.15915494309189535))*6.283185307179586;f=d-+A(+((d-g)*.15915494309189535))*6.283185307179586;g=c-+A(+((c-g)*.15915494309189535))*6.283185307179586;i=+h[a+64>>3];if(!(e<=i)){e=+h[a+72>>3];c=+h[a+88>>3];c=e>3]-k*+F(+e)*m;h[a+136>>3]=c;if(!(b<=i)){e=+h[a+80>>3];d=+h[a+96>>3];d=e>3]+ +F(+b)*k*j;h[a+144>>3]=d;if(!(f<=i)){f=+h[a+72>>3];b=+h[a+88>>3];b=f>b?f:b}else b=+E(+f)*l*j+ +h[a>>3]-k*+F(+f)*m;h[a+152>>3]=b-c;if(!(g<=i)){m=+h[a+80>>3];b=+h[a+96>>3];b=m>b?m:b}else b=+E(+g)*l*m+ +h[a+8>>3]+ +F(+g)*k*j;h[a+160>>3]=b-d;return}function TT(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0.0,i=0,j=0,k=0.0,m=0,n=0;n=l;l=l+80|0;m=n;UT(b);k=+h[e+56>>3];g=+h[e+64>>3];switch(a[e+80>>0]|0){case 116:{g=(+h[e+48>>3]-+VT(d))*.5+g;f=4;break}case 98:{g=g-(+h[e+48>>3]-+VT(d))*.5;f=4;break}default:{}}if((f|0)==4)g=g+-1.0;h[m>>3]=k;h[m+8>>3]=g;c[m+20>>2]=c[e+8>>2];c[m+16>>2]=c[e+4>>2];h[m+32>>3]=+h[e+16>>3];j=b+16|0;f=QA(c[(c[j>>2]|0)+8>>2]|0,137297)|0;e=m+56|0;c[e>>2]=f;i=m+60|0;c[i>>2]=c[(c[j>>2]|0)+212>>2];j=m+64|0;a[j>>0]=0;if(!((f|0)!=0?(a[f>>0]|0)!=0:0))c[e>>2]=137308;if((a[d+4>>0]|0)==1){e=c[d>>2]|0;lS(b,c[(c[b>>2]|0)+336>>2]|0);f=c[e+24>>2]|0;if(!f)hS(b,137314);else hS(b,f);XT(b,e,m);if(a[j>>0]|0)U1(c[i>>2]|0)}else WT(b,c[d>>2]|0,m);YT(b);l=n;return}function UT(a){a=a|0;var d=0,e=0,f=0;d=aI(a)|0;e=c[d>>2]|0;a=c[e+4>>2]|0;c[d+4>>2]=a;c[d+12>>2]=c[e+12>>2];switch(a|0){case 2:{a=e+8|0;f=6;break}case 0:{a=e+8|0;f=6;break}case 1:{a=e+8|0;f=6;break}case 3:{a=e+8|0;f=6;break}default:{}}if((f|0)==6)c[d+8>>2]=c[a>>2];c[d+208>>2]=c[e+208>>2];c[d+228>>2]=c[e+228>>2];c[d+244>>2]=c[e+244>>2];f=d+260|0;b[f>>1]=b[f>>1]&-2|b[e+260>>1]&1;return}function VT(b){b=b|0;var d=0.0,e=0,f=0;switch(a[b+4>>0]|0){case 1:{e=c[b>>2]|0;b=e+72|0;e=e+56|0;f=5;break}case 3:{e=c[b>>2]|0;b=e+24|0;e=e+8|0;f=5;break}case 2:{e=c[b>>2]|0;b=e+32|0;e=e+16|0;f=5;break}default:d=0.0}if((f|0)==5)d=+h[b>>3]-+h[e>>3];return +d}function WT(d,e,f){d=d|0;e=e|0;f=f|0;var g=0,i=0,j=0,k=0,m=0,n=0,o=0.0,p=0.0,q=0,r=0,s=0;n=l;l=l+96|0;j=n+64|0;i=n+32|0;g=n+16|0;k=n;m=b[e+4>>1]|0;if(m<<16>>16>=1){r=e+8|0;p=+h[e+24>>3];o=+h[r>>3];h[k>>3]=(o+p)*.5+ +h[f>>3];h[k+8>>3]=(+h[e+16>>3]+ +h[e+32>>3])*.5+ +h[f+8>>3];q=c[e>>2]|0;s=f+16|0;f=a[e+6>>0]|0;c[g>>2]=c[k>>2];c[g+4>>2]=c[k+4>>2];c[g+8>>2]=c[k+8>>2];c[g+12>>2]=c[k+12>>2];c[i>>2]=c[s>>2];c[i+4>>2]=c[s+4>>2];c[i+8>>2]=c[s+8>>2];c[i+12>>2]=c[s+12>>2];c[i+16>>2]=c[s+16>>2];c[i+20>>2]=c[s+20>>2];c[i+24>>2]=c[s+24>>2];c[i+28>>2]=c[s+28>>2];c[j>>2]=c[r>>2];c[j+4>>2]=c[r+4>>2];c[j+8>>2]=c[r+8>>2];c[j+12>>2]=c[r+12>>2];c[j+16>>2]=c[r+16>>2];c[j+20>>2]=c[r+20>>2];c[j+24>>2]=c[r+24>>2];c[j+28>>2]=c[r+28>>2];iU(d,m<<16>>16,q,g,(p-o)*.5,i,j,f)}l=n;return}function XT(e,f,g){e=e|0;f=f|0;g=g|0;var i=0,j=0,k=0,m=0.0,n=0.0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;y=l;l=l+176|0;t=y+96|0;v=y+64|0;w=y+136|0;p=y;q=y+128|0;r=f+48|0;c[v>>2]=c[r>>2];c[v+4>>2]=c[r+4>>2];c[v+8>>2]=c[r+8>>2];c[v+12>>2]=c[r+12>>2];c[v+16>>2]=c[r+16>>2];c[v+20>>2]=c[r+20>>2];c[v+24>>2]=c[r+24>>2];c[v+28>>2]=c[r+28>>2];m=+h[g>>3];n=+h[g+8>>3];r=f+84|0;i=c[r>>2]|0;if(!(c[f>>2]|0))x=(c[f+8>>2]|0)!=0;else x=1;u=f+108|0;j=c[u>>2]|0;if(j|0)ZT(g,j,186544);h[v>>3]=+h[v>>3]+m;s=v+16|0;h[s>>3]=+h[s>>3]+m;s=v+8|0;h[s>>3]=+h[s>>3]+n;s=v+24|0;h[s>>3]=+h[s>>3]+n;if(x?(c[e+152>>2]&4|0)==0:0){c[t>>2]=c[v>>2];c[t+4>>2]=c[v+4>>2];c[t+8>>2]=c[v+8>>2];c[t+12>>2]=c[v+12>>2];c[t+16>>2]=c[v+16>>2];c[t+20>>2]=c[v+20>>2];c[t+24>>2]=c[v+24>>2];c[t+28>>2]=c[v+28>>2];s=_T(e,g,f,t,w)|0}else s=0;o=f+42|0;j=b[o>>1]|0;if(!(j&32)){k=c[f+20>>2]|0;if(k){j=$T(e,k,c[f+28>>2]|0,j&65535,q)|0;if(!(b[o>>1]&4)){c[t>>2]=c[v>>2];c[t+4>>2]=c[v+4>>2];c[t+8>>2]=c[v+8>>2];c[t+12>>2]=c[v+12>>2];c[t+16>>2]=c[v+16>>2];c[t+20>>2]=c[v+20>>2];c[t+24>>2]=c[v+24>>2];c[t+28>>2]=c[v+28>>2];oS(e,t,j)}else{o=d[f+33>>0]|0;c[t>>2]=c[v>>2];c[t+4>>2]=c[v+4>>2];c[t+8>>2]=c[v+8>>2];c[t+12>>2]=c[v+12>>2];c[t+16>>2]=c[v+16>>2];c[t+20>>2]=c[v+20>>2];c[t+24>>2]=c[v+24>>2];c[t+28>>2]=c[v+28>>2];TM(e,aU(p,t,o)|0,4,4,j)}U1(c[q>>2]|0)}while(1){j=c[i>>2]|0;if(!j)break;bU(e,j,g);i=i+4|0}i=c[r>>2]|0;uS(e,1.0);j=f+24|0;while(1){k=i+4|0;i=c[i>>2]|0;if(!i)break;if(!(a[i+100>>0]|0)){i=k;continue}cU(e,i,g,c[j>>2]|0,c[k>>2]|0);i=k}if(a[f+33>>0]|0){c[t>>2]=c[v>>2];c[t+4>>2]=c[v+4>>2];c[t+8>>2]=c[v+8>>2];c[t+12>>2]=c[v+12>>2];c[t+16>>2]=c[v+16>>2];c[t+20>>2]=c[v+20>>2];c[t+24>>2]=c[v+24>>2];c[t+28>>2]=c[v+28>>2];dU(e,f,t)}}if(s|0)eU(e,w);if((x?c[e+152>>2]&4|0:0)?(c[t>>2]=c[v>>2],c[t+4>>2]=c[v+4>>2],c[t+8>>2]=c[v+8>>2],c[t+12>>2]=c[v+12>>2],c[t+16>>2]=c[v+16>>2],c[t+20>>2]=c[v+20>>2],c[t+24>>2]=c[v+24>>2],c[t+28>>2]=c[v+28>>2],_T(e,g,f,t,w)|0):0)eU(e,w);if(c[u>>2]|0)fU(g,186544);l=y;return}function YT(a){a=a|0;var b=0;b=c[a+16>>2]|0;c[b+208>>2]=0;c[b+228>>2]=0;c[b+244>>2]=0;c[b+212>>2]=0;bI(a);return}function ZT(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0,g=0,i=0;i=a+16|0;f=c[i>>2]|0;if(f|0){if(!(c[b>>2]|0)){f=0;g=d}else{c[d>>2]=f;f=c[b>>2]|0;g=i}c[g>>2]=f}f=c[a+20>>2]|0;if(f|0){g=b+4|0;if(!(c[g>>2]|0)){f=0;g=d}else{c[d+4>>2]=f;f=c[g>>2]|0;g=i}c[g+4>>2]=f}e=+h[a+32>>3];if(e>=0.0){f=b+16|0;if(!(+h[f>>3]>=0.0))e=-1.0;else{h[d+16>>3]=e;e=+h[f>>3];d=i}h[d+16>>3]=e}return}function _T(d,e,f,g,h){d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;u=l;l=l+224|0;n=u+8|0;k=u;t=u+40|0;j=u+184|0;i=u+56|0;m=c[d+16>>2]|0;o=m+208|0;c[h>>2]=c[o>>2];p=m+228|0;c[h+4>>2]=c[p>>2];q=m+244|0;c[h+8>>2]=c[q>>2];r=m+212|0;c[h+12>>2]=c[r>>2];s=m+260|0;a[h+16>>0]=(b[s>>1]<<15&65535)<<16>>16>>15;h=c[f+16>>2]|0;if((h|0)!=0?(a[h>>0]|0)!=0:0)i=0;else{kA(t,128,i);i=e+60|0;h=c[i>>2]|0;if(!h){h=D4(dI(d,c[m+8>>2]|0,t)|0)|0;c[i>>2]=h;a[e+64>>0]=1}nA(t,h)|0;i=c[47374]|0;c[47374]=i+1;c[k>>2]=i;m4(j,137391,k)|0;nA(t,j)|0;i=t+4|0;h=c[i>>2]|0;if(h>>>0>=(c[t+8>>2]|0)>>>0){lA(t,1)|0;h=c[i>>2]|0}a[h>>0]=0;h=c[t>>2]|0;c[i>>2]=h;i=1}h=cI(d,0,c[f>>2]|0,c[f+12>>2]|0,c[f+8>>2]|0,h,c[m+8>>2]|0)|0;if(i)oA(t);do if(h|0){if((c[o>>2]|0)==0?(b[s>>1]&1)==0:0)break;c[n>>2]=c[g>>2];c[n+4>>2]=c[g+4>>2];c[n+8>>2]=c[g+8>>2];c[n+12>>2]=c[g+12>>2];c[n+16>>2]=c[g+16>>2];c[n+20>>2]=c[g+20>>2];c[n+24>>2]=c[g+24>>2];c[n+28>>2]=c[g+28>>2];kI(d,n);cS(d,c[o>>2]|0,c[p>>2]|0,c[q>>2]|0,c[r>>2]|0)}while(0);l=u;return h|0}function $T(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var h=0.0,i=0,j=0;j=l;l=l+16|0;i=j;if(!((JJ(b,f,i)|0)<<24>>24)){jS(a,b);b=1}else{jS(a,c[f>>2]|0);b=c[f+4>>2]|0;h=+g[i>>2];if(!b)kS(a,137314,d,h);else kS(a,b,d,h);b=e>>>1&1|2}hS(a,137379);l=j;return b|0}function aU(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0.0,g=0.0,i=0.0,j=0.0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];e=a+32|0;b=b+16|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];if((d|0)>1){j=+(d|0)*.5;i=+h[a>>3]+j;h[a>>3]=i;d=a+8|0;g=+h[d>>3]+j;h[d>>3]=g;f=+h[e>>3]-j;h[e>>3]=f;e=a+40|0;j=+h[e>>3]-j;h[e>>3]=j}else{f=+h[e>>3];g=+h[a+8>>3];i=+h[a>>3];j=+h[a+40>>3]}h[a+16>>3]=f;h[a+24>>3]=g;h[a+48>>3]=i;h[a+56>>3]=j;return a|0}function bU(e,f,g){e=e|0;f=f|0;g=g|0;var i=0,j=0.0,k=0.0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;v=l;l=l+176|0;r=v+96|0;s=v+136|0;t=v+64|0;p=v;q=v+128|0;u=f+48|0;c[t>>2]=c[u>>2];c[t+4>>2]=c[u+4>>2];c[t+8>>2]=c[u+8>>2];c[t+12>>2]=c[u+12>>2];c[t+16>>2]=c[u+16>>2];c[t+20>>2]=c[u+20>>2];c[t+24>>2]=c[u+24>>2];c[t+28>>2]=c[u+28>>2];j=+h[g>>3];k=+h[g+8>>3];if(!(c[f>>2]|0))u=(c[f+8>>2]|0)!=0;else u=1;h[t>>3]=+h[t>>3]+j;o=t+16|0;h[o>>3]=+h[o>>3]+j;o=t+8|0;h[o>>3]=+h[o>>3]+k;o=t+24|0;h[o>>3]=+h[o>>3]+k;if(u?(c[e+152>>2]&4|0)==0:0){c[r>>2]=c[t>>2];c[r+4>>2]=c[t+4>>2];c[r+8>>2]=c[t+8>>2];c[r+12>>2]=c[t+12>>2];c[r+16>>2]=c[t+16>>2];c[r+20>>2]=c[t+20>>2];c[r+24>>2]=c[t+24>>2];c[r+28>>2]=c[t+28>>2];o=_T(e,g,f,r,s)|0}else o=0;n=f+42|0;i=b[n>>1]|0;a:do if(!(i&32)){m=c[f+20>>2]|0;if(m|0){i=$T(e,m,c[f+28>>2]|0,i&65535,q)|0;if(!(b[n>>1]&4)){c[r>>2]=c[t>>2];c[r+4>>2]=c[t+4>>2];c[r+8>>2]=c[t+8>>2];c[r+12>>2]=c[t+12>>2];c[r+16>>2]=c[t+16>>2];c[r+20>>2]=c[t+20>>2];c[r+24>>2]=c[t+24>>2];c[r+28>>2]=c[t+28>>2];oS(e,r,i)}else{n=d[f+33>>0]|0;c[r>>2]=c[t>>2];c[r+4>>2]=c[t+4>>2];c[r+8>>2]=c[t+8>>2];c[r+12>>2]=c[t+12>>2];c[r+16>>2]=c[t+16>>2];c[r+20>>2]=c[t+20>>2];c[r+24>>2]=c[t+24>>2];c[r+28>>2]=c[t+28>>2];TM(e,aU(p,r,n)|0,4,4,i)}U1(c[q>>2]|0)}if(a[f+33>>0]|0){c[r>>2]=c[t>>2];c[r+4>>2]=c[t+4>>2];c[r+8>>2]=c[t+8>>2];c[r+12>>2]=c[t+12>>2];c[r+16>>2]=c[t+16>>2];c[r+20>>2]=c[t+20>>2];c[r+24>>2]=c[t+24>>2];c[r+28>>2]=c[t+28>>2];dU(e,f,r)}i=f+88|0;switch(a[f+92>>0]|0){case 1:{XT(e,c[i>>2]|0,g);break a}case 3:{hU(e,c[i>>2]|0,g);break a}default:{WT(e,c[i>>2]|0,g);break a}}}while(0);if(o|0)eU(e,s);if((u?c[e+152>>2]&4|0:0)?(c[r>>2]=c[t>>2],c[r+4>>2]=c[t+4>>2],c[r+8>>2]=c[t+8>>2],c[r+12>>2]=c[t+12>>2],c[r+16>>2]=c[t+16>>2],c[r+20>>2]=c[t+20>>2],c[r+24>>2]=c[t+24>>2],c[r+28>>2]=c[t+28>>2],_T(e,g,f,r,s)|0):0)eU(e,s);l=v;return}function cU(f,g,i,j,k){f=f|0;g=g|0;i=i|0;j=j|0;k=k|0;var m=0.0,n=0,o=0.0,p=0.0,q=0,r=0.0,s=0.0,t=0.0,u=0.0,v=0,w=0,x=0.0,y=0,z=0,A=0,B=0,C=0;A=l;l=l+32|0;y=A+16|0;z=A;r=+h[i>>3];x=+h[i+8>>3];q=(j|0)==0?137314:j;jS(f,q);hS(f,q);t=+h[g+48>>3];o=+h[g+56>>3];u=+h[g+64>>3];p=+h[g+72>>3];s=t+r;r=u+r;x=o+x;q=g+100|0;i=a[q>>0]|0;if((i&1)!=0?(n=c[g+96>>2]|0,((e[g+80>>1]|0)+(e[g+84>>1]|0)|0)<(c[n+104>>2]|0)):0){i=b[g+86>>1]|0;do if(i<<16>>16)if(((e[g+82>>1]|0)+(i&65535)|0)==(c[n+100>>2]|0)){B=a[n+32>>0]|0;C=(B<<24>>24)/2|0;j=(C<<24>>24)+(d[n+33>>0]|0)|0;i=j;j=j&255;m=x-+(C<<24>>24);n=B;break}else{n=a[n+32>>0]|0;i=0;j=((n<<24>>24)/2|0)<<24>>24;m=x;break}else{C=a[n+32>>0]|0;j=((C<<24>>24)/2|0)<<24>>24;i=j+(d[n+33>>0]|0)|0;m=x;n=C}while(0);h[z+8>>3]=m-+(j|0);h[z>>3]=r+ +(((n<<24>>24)/2|0)<<24>>24);c[y>>2]=c[z>>2];c[y+4>>2]=c[z+4>>2];c[y+8>>2]=c[z+8>>2];c[y+12>>2]=c[z+12>>2];gU(f,y,0.0,p-o+ +(i&255|0)+ +(n<<24>>24));i=a[q>>0]|0}if(i&2?(v=b[g+86>>1]|0,w=c[g+96>>2]|0,((e[g+82>>1]|0)+(v&65535)|0)<(c[w+100>>2]|0)):0){i=b[g+84>>1]|0;do if(!(i<<16>>16)){i=a[w+32>>0]|0;C=(i<<24>>24)/2|0;n=(C<<24>>24)+(d[w+33>>0]|0)|0;j=n&255;n=n&255;m=+(C<<24>>24);h[z>>3]=s-m-+(n|0);if((c[w+104>>2]|0)==(e[g+80>>1]|0)){j=n<<1&255;break}if((k|0)!=0?(b[k+86>>1]|0)!=v<<16>>16:0)j=~~(+(j&255)-u+ +h[w+64>>3]-m)&255}else{if(((e[g+80>>1]|0)+(i&65535)|0)==(c[w+104>>2]|0)){i=a[w+32>>0]|0;C=(i<<24>>24)/2|0;j=(C&255)+(d[w+33>>0]|0)&255;h[z>>3]=s-+(C<<24>>24);break}i=a[w+32>>0]|0;m=+(((i<<24>>24)/2|0)<<24>>24);h[z>>3]=s-m;if((k|0)!=0?(b[k+86>>1]|0)!=v<<16>>16:0)j=~~(+h[w+64>>3]-u-m)&255;else j=0}while(0);h[z+8>>3]=x-+(((i<<24>>24)/2|0)<<24>>24);c[y>>2]=c[z>>2];c[y+4>>2]=c[z+4>>2];c[y+8>>2]=c[z+8>>2];c[y+12>>2]=c[z+12>>2];gU(f,y,u-t+ +(j&255)+ +(i<<24>>24),0.0)}l=A;return}function dU(e,f,g){e=e|0;f=f|0;g=g|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0.0;p=l;l=l+160|0;o=p+112|0;n=p;j=p+144|0;m=c[f+24>>2]|0;hS(e,(m|0)==0?137314:m);m=f+42|0;i=b[m>>1]|0;if(!(i&384))lS(e,c[(c[e>>2]|0)+336>>2]|0);else{c[j+4>>2]=0;c[j>>2]=0;i=i&65535;if(!(i&256)){if(i&128|0){i=137320;k=4}}else{i=137327;k=4}if((k|0)==4)c[j>>2]=i;lS(e,j)}k=f+33|0;uS(e,+(d[k>>0]|0));a:do if(!(b[m>>1]&4)){i=b[f+36>>1]&15360;if(!(i<<16>>16)){i=a[k>>0]|0;if((i&255)>1){q=+(i&255)*.5;h[g>>3]=+h[g>>3]+q;n=g+8|0;h[n>>3]=+h[n>>3]+q;n=g+16|0;h[n>>3]=+h[n>>3]-q;n=g+24|0;h[n>>3]=+h[n>>3]-q};c[o>>2]=c[g>>2];c[o+4>>2]=c[g+4>>2];c[o+8>>2]=c[g+8>>2];c[o+12>>2]=c[g+12>>2];c[o+16>>2]=c[g+16>>2];c[o+20>>2]=c[g+20>>2];c[o+24>>2]=c[g+24>>2];c[o+28>>2]=c[g+28>>2];oS(e,o,0);break}j=n+16|0;m=d[k>>0]|0;c[o>>2]=c[g>>2];c[o+4>>2]=c[g+4>>2];c[o+8>>2]=c[g+8>>2];c[o+12>>2]=c[g+12>>2];c[o+16>>2]=c[g+16>>2];c[o+20>>2]=c[g+20>>2];c[o+24>>2]=c[g+24>>2];c[o+28>>2]=c[g+28>>2];aU(j,o,m)|0;do switch(((i&65535)+-1024|0)>>>10&4194303|0){case 7:{qS(e,j,2);break a}case 3:{qS(e,n+32|0,2);break a}case 1:{qS(e,n+48|0,2);break a}case 0:{g=n+64|0;c[n>>2]=c[g>>2];c[n+4>>2]=c[g+4>>2];c[n+8>>2]=c[g+8>>2];c[n+12>>2]=c[g+12>>2];qS(e,n,2);break a}case 11:{qS(e,j,3);break a}case 5:{qS(e,n+32|0,3);break a}case 2:{g=n+80|0;c[g>>2]=c[j>>2];c[g+4>>2]=c[j+4>>2];c[g+8>>2]=c[j+8>>2];c[g+12>>2]=c[j+12>>2];qS(e,n+48|0,3);break a}case 8:{g=n+64|0;c[n>>2]=c[g>>2];c[n+4>>2]=c[g+4>>2];c[n+8>>2]=c[g+8>>2];c[n+12>>2]=c[g+12>>2];qS(e,n,3);break a}case 13:{qS(e,j,4);break a}case 6:{g=n+80|0;c[g>>2]=c[j>>2];c[g+4>>2]=c[j+4>>2];c[g+8>>2]=c[j+8>>2];c[g+12>>2]=c[j+12>>2];qS(e,n+32|0,4);break a}case 10:{g=n+80|0;c[g>>2]=c[j>>2];c[g+4>>2]=c[j+4>>2];c[g+8>>2]=c[j+8>>2];c[g+12>>2]=c[j+12>>2];g=n+96|0;o=n+32|0;c[g>>2]=c[o>>2];c[g+4>>2]=c[o+4>>2];c[g+8>>2]=c[o+8>>2];c[g+12>>2]=c[o+12>>2];qS(e,n+48|0,4);break a}case 12:{g=n+64|0;c[n>>2]=c[g>>2];c[n+4>>2]=c[g+4>>2];c[n+8>>2]=c[g+8>>2];c[n+12>>2]=c[g+12>>2];qS(e,n,4);break a}case 9:{qS(e,j,2);qS(e,n+48|0,2);break a}case 4:{g=n+64|0;c[n>>2]=c[g>>2];c[n+4>>2]=c[g+4>>2];c[n+8>>2]=c[g+8>>2];c[n+12>>2]=c[g+12>>2];qS(e,n,2);qS(e,n+32|0,2);break a}default:break a}while(0)}else{m=d[k>>0]|0;c[o>>2]=c[g>>2];c[o+4>>2]=c[g+4>>2];c[o+8>>2]=c[g+8>>2];c[o+12>>2]=c[g+12>>2];c[o+16>>2]=c[g+16>>2];c[o+20>>2]=c[g+20>>2];c[o+24>>2]=c[g+24>>2];c[o+28>>2]=c[g+28>>2];TM(e,aU(n,o,m)|0,4,4,0)}while(0);l=p;return}function eU(d,e){d=d|0;e=e|0;var f=0,g=0,h=0;h=c[d+16>>2]|0;f=h+208|0;if((c[f>>2]|0)==0?(b[h+260>>1]&1)==0:0)d=0;else{dS(d);d=c[f>>2]|0}if((d|0)!=(c[e>>2]|0)){U1(d);c[f>>2]=c[e>>2]}d=h+228|0;f=c[d>>2]|0;g=e+4|0;if((f|0)!=(c[g>>2]|0)){U1(f);c[d>>2]=c[g>>2]}d=h+244|0;f=c[d>>2]|0;g=e+8|0;if((f|0)!=(c[g>>2]|0)){U1(f);c[d>>2]=c[g>>2]}d=h+212|0;f=c[d>>2]|0;g=e+12|0;if((f|0)!=(c[g>>2]|0)){U1(f);c[d>>2]=c[g>>2]}h=h+260|0;b[h>>1]=b[h>>1]&-2|a[e+16>>0]&1;return}function fU(a,b){a=a|0;b=b|0;var d=0.0,e=0;e=c[b>>2]|0;if(e|0)c[a+16>>2]=e;e=c[b+4>>2]|0;if(e|0)c[a+20>>2]=e;d=+h[b+16>>3];if(d>=0.0)h[a+32>>3]=d;return}function gU(a,b,d,e){a=a|0;b=b|0;d=+d;e=+e;var f=0,g=0,i=0;f=l;l=l+64|0;g=f+32|0;i=f;c[i>>2]=c[b>>2];c[i+4>>2]=c[b+4>>2];c[i+8>>2]=c[b+8>>2];c[i+12>>2]=c[b+12>>2];h[i+16>>3]=+h[b>>3]+d;h[i+24>>3]=+h[b+8>>3]+e;c[g>>2]=c[i>>2];c[g+4>>2]=c[i+4>>2];c[g+8>>2]=c[i+8>>2];c[g+12>>2]=c[i+12>>2];c[g+16>>2]=c[i+16>>2];c[g+20>>2]=c[i+20>>2];c[g+24>>2]=c[i+24>>2];c[g+28>>2]=c[i+28>>2];oS(a,g,1);l=f;return}function hU(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0.0,k=0.0,m=0.0,n=0.0;i=l;l=l+64|0;g=i;k=+h[e>>3];n=k+ +h[d>>3];m=+h[e+8>>3];j=m+ +h[d+8>>3];k=k+ +h[d+16>>3];m=m+ +h[d+24>>3];h[g>>3]=k;h[g+8>>3]=m;h[g+32>>3]=n;h[g+40>>3]=j;h[g+16>>3]=n;h[g+24>>3]=m;h[g+48>>3]=k;h[g+56>>3]=j;f=c[d+36>>2]|0;if(!f)f=c[e+56>>2]|0;e=c[d+32>>2]|0;if(!e)qa(137334,137342,623,137354);if(!(a[e>>0]|0))qa(137368,137342,624,137354);else{sS(b,e,g,4,1,f);l=i;return}}function iU(d,e,f,g,i,j,k,m){d=d|0;e=e|0;f=f|0;g=g|0;i=+i;j=j|0;k=k|0;m=m|0;var n=0.0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0.0,J=0,K=0,L=0,M=0.0,N=0.0,O=0,P=0,Q=0,R=0;R=l;l=l+128|0;K=R+104|0;O=R+48|0;P=R+16|0;L=R;J=L;c[J>>2]=0;c[J+4>>2]=0;M=+h[g>>3];N=M-i;I=M+i;J=L+8|0;h[J>>3]=(+h[k+24>>3]-+h[k+8>>3])*.5+ +h[g+8>>3];eS(d,1);D=P+16|0;E=P+4|0;F=P+24|0;G=O+4|0;H=O+16|0;s=(m|0)==0;t=O+24|0;u=O+8|0;v=O+32|0;w=O+40|0;x=O+48|0;y=j+16|0;z=j+4|0;A=P+8|0;q=0;while(1){if((q|0)>=(e|0))break;switch(a[f+(q*24|0)+6>>0]|0){case 108:{i=N;break}case 114:{i=I-+h[f+(q*24|0)+8>>3];break}default:i=M-+h[f+(q*24|0)+8>>3]*.5}h[g>>3]=i;B=f+(q*24|0)+16|0;h[J>>3]=+h[J>>3]-+h[B>>3];C=f+(q*24|0)+4|0;p=c[f+(q*24|0)>>2]|0;r=0;while(1){if((r|0)>=(b[C>>1]|0))break;o=p+4|0;m=c[o>>2]|0;if(m){h[D>>3]=+h[(+h[m+16>>3]>0.0?m:j)+16>>3];c[P>>2]=c[((c[m>>2]|0)==0?j:m)>>2];k=c[((c[m+4>>2]|0)==0?j:m)+4>>2]|0;c[E>>2]=k;m=c[m+24>>2]&127;if(!m)Q=12;else m=c[F>>2]&-128|m}else{h[D>>3]=+h[y>>3];c[P>>2]=c[j>>2];k=c[z>>2]|0;c[E>>2]=k;Q=12}if((Q|0)==12){Q=0;m=c[F>>2]&-128}c[F>>2]=m;hS(d,k);c[O>>2]=c[p>>2];c[G>>2]=P;h[H>>3]=+h[p+16>>3];if(s)n=1.0;else n=+h[p+24>>3];h[t>>3]=n;c[A>>2]=c[(c[o>>2]|0)+8>>2];c[u>>2]=c[p+8>>2];o=p+32|0;h[v>>3]=+h[o>>3];h[w>>3]=+h[B>>3];a[x>>0]=108;h[L>>3]=i;c[K>>2]=c[L>>2];c[K+4>>2]=c[L+4>>2];c[K+8>>2]=c[L+8>>2];c[K+12>>2]=c[L+12>>2];gS(d,K,O);n=+h[o>>3]+i;h[g>>3]=n;p=p+56|0;r=r+1|0;i=n}q=q+1|0}fS(d);l=R;return}function jU(a){a=a|0;U1(c[a>>2]|0);U1(c[a+4>>2]|0);U1(c[a+8>>2]|0);U1(c[a+16>>2]|0);U1(c[a+12>>2]|0);U1(c[a+20>>2]|0);U1(c[a+24>>2]|0);return}function kU(a){a=a|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;if(a|0){j=a+4|0;e=0;g=c[a>>2]|0;while(1){if((e|0)>=(b[j>>1]|0))break;k=g+4|0;d=0;f=c[g>>2]|0;while(1){if((d|0)>=(b[k>>1]|0))break;U1(c[f>>2]|0);h=c[f+8>>2]|0;if(h|0?(i=c[f+12>>2]|0,i|0):0)tb[i&127](h);d=d+1|0;f=f+56|0}e=e+1|0;g=g+24|0}d=c[a>>2]|0;if(d|0)U1(d);U1(a)}return}function lU(a){a=a|0;U1(c[a+32>>2]|0);U1(a);return}function mU(b,d){b=b|0;d=d|0;switch(a[b+4>>0]|0){case 1:{nU(c[b>>2]|0);break}case 3:{lU(c[b>>2]|0);break}default:kU(c[b>>2]|0)}if(d|0)U1(b);return}function nU(a){a=a|0;var b=0,d=0,e=0;e=a+84|0;if((c[a+100>>2]|0)==-1)Rz(c[e>>2]|0)|0;else{b=c[e>>2]|0;U1(c[a+92>>2]|0);U1(c[a+96>>2]|0);while(1){d=c[b>>2]|0;if(!d)break;oU(d);b=b+4|0}U1(c[e>>2]|0)}jU(a);U1(a);return}function oU(a){a=a|0;mU(a+88|0,0);jU(a);U1(a);return}function pU(b,e,f){b=b|0;e=e|0;f=f|0;var g=0;b=c[(c[(c[b+16>>2]|0)+104>>2]|0)+72>>2]|0;if((a[b+4>>0]|0)!=2?(g=qU(c[b>>2]|0,e)|0,(g|0)!=0):0){c[f>>2]=d[g+35>>0];b=g+48|0}else b=0;return b|0}function qU(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a+4>>2]|0;if(!((d|0)!=0?(c3(d,b)|0)==0:0))e=3;a:do if((e|0)==3){d=c[a+84>>2]|0;while(1){a=c[d>>2]|0;if(!a){a=0;break a}a=rU(a,b)|0;if(!a)d=d+4|0;else break}}while(0);return a|0}function rU(b,d){b=b|0;d=d|0;var e=0;e=c[b+4>>2]|0;if(!((e|0)!=0?(c3(e,d)|0)==0:0))if((a[b+92>>0]|0)==1)b=qU(c[b+88>>2]|0,d)|0;else b=0;return b|0}function sU(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return 0}function tU(d){d=d|0;var f=0.0,g=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;p=d+92|0;c[p>>2]=JK((c[d+100>>2]<<2)+4|0)|0;n=JK((c[d+104>>2]<<2)+4|0)|0;c[d+96>>2]=n;o=d+32|0;m=c[d+84>>2]|0;while(1){l=c[m>>2]|0;if(!l)break;d=b[l+82>>1]|0;f=+h[l+72>>3];if(d<<16>>16==1)i=~~f;else{i=~~((f-+(O((a[o>>0]|0)+-1|0,(d&65535)+-1|0)|0))/+(d&65535));i=(i|0)>1?i:1}j=b[l+80>>1]|0;f=+h[l+64>>3];if(j<<16>>16==1)k=~~f;else{k=~~((f-+(O((a[o>>0]|0)+-1|0,(j&65535)+-1|0)|0))/+(j&65535));k=(k|0)>1?k:1}q=e[l+86>>1]|0;g=(d&65535)+q|0;d=q;while(1){if((d|0)>=(g|0))break;q=(c[p>>2]|0)+(d<<2)|0;r=c[q>>2]|0;c[q>>2]=(r|0)>(i|0)?r:i;d=d+1|0}d=e[l+84>>1]|0;g=(j&65535)+d|0;while(1){if((d|0)>=(g|0))break;r=n+(d<<2)|0;q=c[r>>2]|0;c[r>>2]=(q|0)>(k|0)?q:k;d=d+1|0}m=m+4|0}return}function uU(a){a=a|0;var b=0,d=0;d=l;l=l+16|0;b=d;if(a>>>0<21)a=c[55840+(a<<2)>>2]|0;else{c[b>>2]=a;m4(194959,137395,b)|0;a=194959}l=d;return a|0}function vU(a,b,d){a=a|0;b=b|0;d=d|0;var f=0,g=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;k=a+104|0;l=a+100|0;j=d+16|0;f=0;g=0;while(1){if((f|0)>(c[k>>2]|0))break;i=tC(d,uU(f)|0,1)|0;TC(i,137447,304,1)|0;m=i+16|0;c[(c[m>>2]|0)+176>>2]=0;o=JK((c[l>>2]<<2)+4|0)|0;n=c[m>>2]|0;c[n+172>>2]=o;c[n+184>>2]=0;n=JK((c[l>>2]<<2)+4|0)|0;c[(c[m>>2]|0)+180>>2]=n;if(!g)c[(c[j>>2]|0)+192>>2]=i;else c[(c[g+16>>2]|0)+164>>2]=i;f=f+1|0;g=i}j=b+16|0;f=0;g=0;while(1){if((f|0)>(c[l>>2]|0))break;i=tC(b,uU(f)|0,1)|0;TC(i,137447,304,1)|0;o=i+16|0;c[(c[o>>2]|0)+176>>2]=0;m=JK((c[k>>2]<<2)+4|0)|0;n=c[o>>2]|0;c[n+172>>2]=m;c[n+184>>2]=0;n=JK((c[k>>2]<<2)+4|0)|0;c[(c[o>>2]|0)+180>>2]=n;if(!g)c[(c[j>>2]|0)+192>>2]=i;else c[(c[g+16>>2]|0)+164>>2]=i;f=f+1|0;g=i}f=c[a+84>>2]|0;while(1){g=c[f>>2]|0;if(!g)break;o=g+84|0;n=tC(d,uU(e[o>>1]|0)|0,0)|0;o=tC(d,uU((e[g+80>>1]|0)+(e[o>>1]|0)|0)|0,0)|0;wU(d,n,o,~~+h[g+64>>3]);o=g+86|0;n=tC(b,uU(e[o>>1]|0)|0,0)|0;o=tC(b,uU((e[g+82>>1]|0)+(e[o>>1]|0)|0)|0,0)|0;wU(b,n,o,~~+h[g+72>>3]);f=f+4|0}xU(d);xU(b);return}function wU(a,d,f,g){a=a|0;d=d|0;f=f|0;g=g|0;var h=0,i=0;h=iB(a,d,f,0,0)|0;if(!h){i=iB(a,d,f,0,1)|0;TC(i,137460,176,1)|0;b[(c[i+16>>2]|0)+170>>1]=g;d=d+16|0;a=c[d>>2]|0;h=c[a+180>>2]|0;if(!h)a=KK((c[a+184>>2]<<2)+8|0)|0;else a=MK(h,(c[a+184>>2]<<2)+8|0)|0;g=c[d>>2]|0;c[g+180>>2]=a;g=g+184|0;h=c[g>>2]|0;c[g>>2]=h+1;c[a+(h<<2)>>2]=i;d=c[d>>2]|0;c[(c[d+180>>2]|0)+(c[d+184>>2]<<2)>>2]=0;d=f+16|0;a=c[d>>2]|0;h=c[a+172>>2]|0;if(!h)a=KK((c[a+176>>2]<<2)+8|0)|0;else a=MK(h,(c[a+176>>2]<<2)+8|0)|0;g=c[d>>2]|0;c[g+172>>2]=a;g=g+176|0;f=c[g>>2]|0;c[g>>2]=f+1;c[a+(f<<2)>>2]=i;i=c[d>>2]|0;c[(c[i+172>>2]|0)+(c[i+176>>2]<<2)>>2]=0}else{i=(c[h+16>>2]|0)+170|0;f=e[i>>1]|0;b[i>>1]=(f|0)>(g|0)?f:g}return}function xU(a){a=a|0;var d=0,e=0,f=0,g=0,h=0,i=0;d=c[(c[a+16>>2]|0)+192>>2]|0;while(1){f=d+16|0;h=c[(c[f>>2]|0)+164>>2]|0;if(!h)break;if(iB(a,d,h,0,0)|0){d=h;continue}g=iB(a,d,h,0,1)|0;TC(g,137460,176,1)|0;b[(c[g+16>>2]|0)+170>>1]=0;d=c[f>>2]|0;e=c[d+180>>2]|0;if(!e)d=KK((c[d+184>>2]<<2)+8|0)|0;else d=MK(e,(c[d+184>>2]<<2)+8|0)|0;i=c[f>>2]|0;c[i+180>>2]=d;i=i+184|0;e=c[i>>2]|0;c[i>>2]=e+1;c[d+(e<<2)>>2]=g;f=c[f>>2]|0;c[(c[f+180>>2]|0)+(c[f+184>>2]<<2)>>2]=0;f=h+16|0;d=c[f>>2]|0;e=c[d+172>>2]|0;if(!e)d=KK((c[d+176>>2]<<2)+8|0)|0;else d=MK(e,(c[d+176>>2]<<2)+8|0)|0;e=c[f>>2]|0;c[e+172>>2]=d;e=e+176|0;i=c[e>>2]|0;c[e>>2]=i+1;c[d+(i<<2)>>2]=g;d=c[f>>2]|0;c[(c[d+172>>2]|0)+(c[d+176>>2]<<2)>>2]=0;d=h}return}function yU(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;g=a+92|0;e=0;f=0;b=c[(c[(c[b+16>>2]|0)+192>>2]|0)+16>>2]|0;while(1){b=c[b+164>>2]|0;if(!b)break;b=c[b+16>>2]|0;h=b+232|0;c[(c[g>>2]|0)+(f<<2)>>2]=(c[h>>2]|0)-e;e=c[h>>2]|0;f=f+1|0}a=a+96|0;e=0;f=0;b=c[(c[(c[d+16>>2]|0)+192>>2]|0)+16>>2]|0;while(1){b=c[b+164>>2]|0;if(!b)break;b=c[b+16>>2]|0;h=b+232|0;c[(c[a>>2]|0)+(f<<2)>>2]=(c[h>>2]|0)-e;e=c[h>>2]|0;f=f+1|0}return}function zU(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;h=l;l=l+16|0;g=h+4|0;d=h;c[d>>2]=c[4647];e=c[b+100>>2]|0;if((e|0)!=1?(f=b+104|0,(c[f>>2]|0)!=1):0){c[b+92>>2]=JK((e<<2)+4|0)|0;c[b+96>>2]=JK((c[f>>2]<<2)+4|0)|0;a[g>>0]=a[d>>0]|0;a[g+1>>0]=a[d+1>>0]|0;a[g+2>>0]=a[d+2>>0]|0;a[g+3>>0]=a[d+3>>0]|0;f=oB(137473,g,0)|0;a[g>>0]=a[d>>0]|0;a[g+1>>0]=a[d+1>>0]|0;a[g+2>>0]=a[d+2>>0]|0;a[g+3>>0]=a[d+3>>0]|0;g=oB(137478,g,0)|0;TC(f,137483,280,1)|0;TC(g,137483,280,1)|0;vU(b,f,g);uL(f,2,2147483647)|0;uL(g,2,2147483647)|0;yU(b,f,g);AU(f,g)}else tU(b);l=h;return}function AU(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=(c[b+16>>2]|0)+192|0;while(1){d=c[d>>2]|0;if(!d)break;f=d+16|0;d=c[f>>2]|0;e=c[d+172>>2]|0;if(e){U1(e);d=c[f>>2]|0}e=c[d+180>>2]|0;if(e){U1(e);d=c[f>>2]|0}d=d+164|0}sB(a)|0;sB(b)|0;return}function BU(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0.0,r=0.0;p=l;l=l+272|0;n=p+104|0;o=p+136|0;j=p+72|0;k=p;g=p+144|0;c[k+48>>2]=b;switch(IC(b)|0){case 0:{e=c[b+60>>2]|0;break}case 1:{e=xC(b)|0;break}case 2:{e=xC(c[((c[b>>2]&3|0)==2?b:b+-48|0)+40>>2]|0)|0;break}default:{}}i=k+52|0;c[i>>2]=e;m=c[e+60>>2]|0;h[k+32>>3]=+h[d+16>>3];c[k+16>>2]=c[d+4>>2];c[k+20>>2]=c[d+8>>2];c[k+40>>2]=0;f=LW(c[d>>2]|0,o,k)|0;if(!f){kA(n,128,g);a[d+82>>0]=0;e=D4(CU(b,n)|0)|0;c[d>>2]=e;if((c[d+12>>2]|0)==1)e=eQ(e)|0;else e=bQ(e,c[i>>2]|0)|0;U1(c[d>>2]|0);c[d>>2]=e;xK(c[(c[m+16>>2]|0)+144>>2]|0,d);oA(n);e=c[o>>2]|0}else{e=f+4|0;if((a[e>>0]|0)==1){if((c[(c[f>>2]|0)+24>>2]|0)==0?DU(b)|0:0){i=D4(DU(b)|0)|0;c[(c[f>>2]|0)+24>>2]=i}m=EU(m,c[f>>2]|0,0,k)|0;c[o>>2]=c[o>>2]|m;m=c[f>>2]|0;r=+h[m+64>>3]*.5;q=+h[m+72>>3]*.5;FU(j,-r,-q,r,q);m=c[f>>2]|0;c[n>>2]=c[j>>2];c[n+4>>2]=c[j+4>>2];c[n+8>>2]=c[j+8>>2];c[n+12>>2]=c[j+12>>2];c[n+16>>2]=c[j+16>>2];c[n+20>>2]=c[j+20>>2];c[n+24>>2]=c[j+24>>2];c[n+28>>2]=c[j+28>>2];GU(m,n,15)}else{HU(c[(c[m+16>>2]|0)+144>>2]|0,c[f>>2]|0,k);n=c[f>>2]|0;q=+h[n+24>>3]*.5;r=+h[n+32>>3]*.5;FU(j,-q,-r,q,r);n=(c[f>>2]|0)+8|0;c[n>>2]=c[j>>2];c[n+4>>2]=c[j+4>>2];c[n+8>>2]=c[j+8>>2];c[n+12>>2]=c[j+12>>2];c[n+16>>2]=c[j+16>>2];c[n+20>>2]=c[j+20>>2];c[n+24>>2]=c[j+24>>2];c[n+28>>2]=c[j+28>>2]}h[d+24>>3]=+h[j+16>>3]-+h[j>>3];h[d+32>>3]=+h[j+24>>3]-+h[j+8>>3];c[d+72>>2]=f;if((a[e>>0]|0)==1){U1(c[d>>2]|0);c[d>>2]=D4(141611)|0}e=c[o>>2]|0}l=p;return e|0}function CU(b,d){b=b|0;d=d|0;var e=0;a:do switch(IC(b)|0){case 0:{nA(d,KB(b)|0)|0;break}case 1:{nA(d,KB(b)|0)|0;break}case 2:{nA(d,KB(c[((c[b>>2]&3|0)==3?b:b+48|0)+40>>2]|0)|0)|0;e=b+-48|0;nA(d,KB(c[((c[b>>2]&3|0)==2?b:e)+40>>2]|0)|0)|0;if(!(xB(xC(c[((c[b>>2]&3|0)==2?b:e)+40>>2]|0)|0)|0)){nA(d,141747)|0;break a}else{nA(d,137738)|0;break a}}default:{}}while(0);e=d+4|0;b=c[e>>2]|0;if(b>>>0>=(c[d+8>>2]|0)>>>0){lA(d,1)|0;b=c[e>>2]|0}a[b>>0]=0;d=c[d>>2]|0;c[e>>2]=d;return d|0}function DU(b){b=b|0;var c=0,d=0;c=QA(b,137729)|0;if(!((c|0)!=0?(a[c>>0]|0)!=0:0))d=3;do if((d|0)==3){c=QA(b,140823)|0;if(c|0?a[c>>0]|0:0)break;c=0}while(0);return c|0}function EU(f,g,i,j){f=f|0;g=g|0;i=i|0;j=j|0;var k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;w=l;l=l+16|0;u=w+8|0;t=w;v=g+108|0;k=c[v>>2]|0;if(k|0)ZT(j,k,186576);c[g+80>>2]=i;k=LU(f,g,j)|0;r=g+36|0;f=b[r>>1]|0;if(!(f&128))a[g+32>>0]=2;i=g+33|0;if(!(f&32))a[i>>0]=1;zU(g);n=c[g+104>>2]|0;p=a[g+32>>0]|0;f=O(n+1|0,p)|0;o=d[i>>0]<<1;q=c[g+100>>2]|0;p=O(q+1|0,p)|0;m=g+96|0;f=o+f|0;i=0;while(1){if((i|0)>=(n|0))break;f=(c[(c[m>>2]|0)+(i<<2)>>2]|0)+f|0;i=i+1|0}n=g+92|0;i=p+o|0;m=0;while(1){if((m|0)>=(q|0))break;i=(c[(c[n>>2]|0)+(m<<2)>>2]|0)+i|0;m=m+1|0}n=g+38|0;do if(b[r>>1]&1){r=b[n>>1]|0;m=r&65535;if(r<<16>>16?(s=b[g+40>>1]|0,s<<16>>16):0){if(!((f|0)>(m|0)|(i|0)>(s&65535|0))){i=0;f=0;break}gA(0,137529,t)|0;k=1;i=0;f=0;break}gA(0,137563,u)|0;k=1}while(0);u=e[n>>1]|0;h[g+64>>3]=+(((f|0)>(u|0)?f:u)|0);u=e[g+40>>1]|0;h[g+72>>3]=+(((i|0)>(u|0)?i:u)|0);if(c[v>>2]|0)fU(j,186576);l=w;return k|0}function FU(a,b,c,d,e){a=a|0;b=+b;c=+c;d=+d;e=+e;h[a>>3]=b;h[a+8>>3]=c;h[a+16>>3]=d;h[a+24>>3]=e;return}function GU(e,f,g){e=e|0;f=f|0;g=g|0;var i=0,j=0,k=0,m=0.0,n=0.0,o=0,p=0,q=0.0,r=0.0,s=0,t=0,u=0,v=0,w=0,x=0,y=0.0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0.0,K=0;I=l;l=l+64|0;G=I+32|0;H=I;E=c[e+84>>2]|0;k=c[e+80>>2]|0;if((k|0?(i=c[k+24>>2]|0,i|0):0)?(j=e+24|0,(c[j>>2]|0)==0):0)c[j>>2]=D4(i)|0;F=e+48|0;i=f+16|0;n=+h[i>>3];m=+h[f>>3];k=~~(n-m-+(~~+h[e+64>>3]|0));if((k|0)<=-1)qa(137496,137342,1761,137506);o=f+24|0;y=+h[o>>3];p=f+8|0;q=+h[p>>3];r=+(~~+h[e+72>>3]|0);s=~~(y-q-r);if((s|0)<=-1)qa(137519,137342,1764,137506);t=b[e+36>>1]|0;j=t&65535;a:do if(j&1){b:do if((k|0)>0)switch(j&6){case 4:{h[i>>3]=m+r;break b}case 2:{J=+(k|0);h[i>>3]=n+J;m=m+J;h[f>>3]=m;break b}default:{J=+(k>>>1|0);m=m+J;h[f>>3]=m;h[i>>3]=n-J;break b}}while(0);if((s|0)>0)switch(t&24){case 16:{y=q+r;h[o>>3]=y;s=0;i=0;break a}case 8:{J=+(s|0);y=y+J;h[o>>3]=y;h[p>>3]=q+J;s=0;i=0;break a}default:{J=+(s>>>1|0);h[p>>3]=q+J;y=y-J;h[o>>3]=y;s=0;i=0;break a}}else{s=0;i=0}}else i=k;while(0);n=+(d[e+33>>0]|0);C=e+32|0;u=a[C>>0]|0;q=+(u<<24>>24);D=e+104|0;k=c[D>>2]|0;t=(i|0)/(k|0)|0;o=i-(O(t,k)|0)|0;o=~~(((o|0)>-1?.5:-.5)+ +(o|0));B=e+96|0;p=u<<24>>24;i=~~(m+n+q);j=0;while(1){if((j|0)>(k|0))break;A=(c[B>>2]|0)+(j<<2)|0;k=c[A>>2]|0;c[A>>2]=i;i=i+t+((j|0)<(o|0)&1)+k+p|0;j=j+1|0;k=c[D>>2]|0}A=e+100|0;k=c[A>>2]|0;t=(s|0)/(k|0)|0;p=s-(O(t,k)|0)|0;p=~~(((p|0)>-1?.5:-.5)+ +(p|0));z=e+92|0;o=u<<24>>24;i=~~(y-n-q);j=0;while(1){if((j|0)>(k|0))break;x=(c[z>>2]|0)+(j<<2)|0;k=c[x>>2]|0;c[x>>2]=i;i=i-t+(((j|0)<(p|0))<<31>>31)-k-o|0;j=j+1|0;k=c[A>>2]|0}u=(g|0)==0;v=H+16|0;w=H+24|0;x=H+8|0;i=E;while(1){o=c[i>>2]|0;if(!o)break;k=b[o+84>>1]|0;if(u){j=0;p=b[o+80>>1]|0;s=b[o+86>>1]|0;t=b[o+82>>1]|0}else{j=k<<16>>16==0?8:0;s=b[o+86>>1]|0;j=s<<16>>16==0?j|4:j;p=b[o+80>>1]|0;t=b[o+82>>1]|0;j=(((p&65535)+(k&65535)|0)==(c[D>>2]|0)?j|2:j)|((t&65535)+(s&65535)|0)==(c[A>>2]|0)}K=c[B>>2]|0;k=k&65535;h[H>>3]=+(c[K+(k<<2)>>2]|0);E=a[C>>0]|0;h[v>>3]=+((c[K+((p&65535)+k<<2)>>2]|0)-E|0);p=c[z>>2]|0;h[w>>3]=+(c[p+((s&65535)<<2)>>2]|0);h[x>>3]=+((c[p+((t&65535)+(s&65535)<<2)>>2]|0)+E|0);c[G>>2]=c[H>>2];c[G+4>>2]=c[H+4>>2];c[G+8>>2]=c[H+8>>2];c[G+12>>2]=c[H+12>>2];c[G+16>>2]=c[H+16>>2];c[G+20>>2]=c[H+20>>2];c[G+24>>2]=c[H+24>>2];c[G+28>>2]=c[H+28>>2];IU(o,G,j&g);i=i+4|0}a[e+35>>0]=g;c[F>>2]=c[f>>2];c[F+4>>2]=c[f+4>>2];c[F+8>>2]=c[f+8>>2];c[F+12>>2]=c[f+12>>2];c[F+16>>2]=c[f+16>>2];c[F+20>>2]=c[f+20>>2];c[F+24>>2]=c[f+24>>2];c[F+28>>2]=c[f+28>>2];l=I;return}function HU(d,e,f){d=d|0;e=e|0;f=f|0;var g=0,i=0,j=0.0,k=0.0,m=0,n=0,o=0.0,p=0.0,q=0.0,r=0,s=0.0,t=0.0,u=0.0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0.0,Q=0.0,R=0.0;O=l;l=l+112|0;H=O+48|0;I=O+16|0;J=O;c[I>>2]=0;c[I+4>>2]=0;c[I+8>>2]=0;c[I+12>>2]=0;c[I+16>>2]=0;c[I+20>>2]=0;c[I+24>>2]=0;c[I+28>>2]=0;K=e+4|0;L=f+16|0;M=f+32|0;N=I+16|0;r=b[K>>1]|0;n=r<<16>>16;g=0;j=-1.0;m=0;while(1){if((m|0)>=(n|0)){g=1;break}i=c[e>>2]|0;if((b[i+(m*24|0)+4>>1]|0)>1){g=0;break}i=c[(c[i+(m*24|0)>>2]|0)+4>>2]|0;if(!i){k=+h[M>>3];h[N>>3]=k;i=L}else{if(c[i+24>>2]&127|0){g=0;break}k=+h[(+h[i+16>>3]>0.0?i:L)+16>>3];h[N>>3]=k;i=(c[i>>2]|0)==0?L:i}i=c[i>>2]|0;c[I>>2]=i;if(!(j==-1.0)){if(k!=j){g=0;break}}else j=k;if(g){if(s2(i,g)|0){g=0;break}}else g=i;m=m+1|0}a[e+6>>0]=g;E=f+48|0;F=f+20|0;G=I+4|0;w=f+40|0;x=I+24|0;y=d+144|0;z=H+4|0;v=J+8|0;A=H+16|0;B=H+24|0;C=H+8|0;D=H+12|0;f=(g|0)==0;j=0.0;s=0.0;t=0.0;u=0.0;n=0;g=r;while(1){if((n|0)>=(g<<16>>16|0))break;k=0.0;q=0.0;m=0;p=0.0;j=0.0;i=c[e>>2]|0;while(1){if((m|0)>=(b[i+(n*24|0)+4>>1]|0))break;c[H>>2]=EK(c[(c[i+(n*24|0)>>2]|0)+(m*56|0)>>2]|0,c[E>>2]|0)|0;i=(c[e>>2]|0)+(n*24|0)|0;g=c[(c[i>>2]|0)+(m*56|0)+4>>2]|0;if(!g){h[N>>3]=+h[M>>3];c[I>>2]=c[L>>2];c[G>>2]=c[F>>2];c[x>>2]=c[x>>2]&-128|c[w>>2]&127}else{g=c[g+24>>2]&127;if(!g)g=c[w>>2]&127;c[x>>2]=c[x>>2]&-128|g;r=c[(c[i>>2]|0)+(m*56|0)+4>>2]|0;h[N>>3]=+h[(+h[r+16>>3]>0.0?r:L)+16>>3];c[I>>2]=c[((c[r>>2]|0)==0?L:r)>>2];c[G>>2]=c[((c[r+4>>2]|0)==0?L:r)+4>>2]}i=c[y>>2]|0;c[z>>2]=nb[c[i>>2]&63](i,I,1)|0;LO(J,d,H);Q=+h[J>>3];o=+h[v>>3];U1(c[(c[(c[e>>2]|0)+(n*24|0)>>2]|0)+(m*56|0)>>2]|0);i=c[e>>2]|0;r=c[i+(n*24|0)>>2]|0;c[r+(m*56|0)>>2]=c[H>>2];h[r+(m*56|0)+32>>3]=Q;h[r+(m*56|0)+16>>3]=+h[A>>3];h[r+(m*56|0)+24>>3]=+h[B>>3];c[r+(m*56|0)+4>>2]=c[z>>2];c[r+(m*56|0)+8>>2]=c[C>>2];c[r+(m*56|0)+12>>2]=c[D>>2];P=+h[N>>3];R=+h[B>>3];k=R>k?R:k;q=Q+q;m=m+1|0;p=P>p?P:p;j=o>j?o:j}h[i+(n*24|0)+8>>3]=q;g=(n|0)==0;do if(f)if(g){o=p;k=p-k;g=i;break}else{o=p;k=t-u+p-k;g=i+(n*24|0)|0;break}else{o=j;k=g?p:j;g=i+(n*24|0)|0}while(0);h[g+16>>3]=k;s=q>s?q:s;t=o+t;u=+h[i+(n*24|0)+16>>3]+u;n=n+1|0;g=b[K>>1]|0}h[e+24>>3]=s;h[e+32>>3]=g<<16>>16==1?j:t;l=O;return}function IU(e,f,g){e=e|0;f=f|0;g=g|0;var i=0,j=0,k=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0.0,A=0.0;y=l;l=l+64|0;v=y+32|0;x=y;j=e+24|0;if((c[j>>2]|0)==0?(i=c[(c[e+96>>2]|0)+24>>2]|0,i|0):0)c[j>>2]=D4(i)|0;t=e+36|0;w=b[t>>1]|0;i=w&65535;a:do if(i&1){k=+h[e+64>>3];q=+h[e+72>>3];j=f+16|0;m=+h[j>>3];o=+h[f>>3];n=m-o-k;b:do if(n>0.0)switch(i&6){case 4:{m=o+k;h[j>>3]=m;k=o;break b}case 2:{m=n+m;h[j>>3]=m;k=o+n;h[f>>3]=k;break b}default:{p=n*.5;k=p+o;h[f>>3]=k;m=m-p;h[j>>3]=m;break b}}else k=o;while(0);i=f+24|0;p=+h[i>>3];j=f+8|0;n=+h[j>>3];o=p-n-q;if(o>0.0)switch(w&24){case 16:{o=n+q;h[i>>3]=o;break a}case 8:{q=o+p;h[i>>3]=q;n=n+o;h[j>>3]=n;o=q;break a}default:{o=o*.5;n=o+n;h[j>>3]=n;o=p-o;h[i>>3]=o;break a}}else o=p}else{k=+h[f>>3];n=+h[f+8>>3];m=+h[f+16>>3];o=+h[f+24>>3]}while(0);s=e+48|0;c[s>>2]=c[f>>2];c[s+4>>2]=c[f+4>>2];c[s+8>>2]=c[f+8>>2];c[s+12>>2]=c[f+12>>2];c[s+16>>2]=c[f+16>>2];c[s+20>>2]=c[f+20>>2];c[s+24>>2]=c[f+24>>2];c[s+28>>2]=c[f+28>>2];a[e+35>>0]=g;A=+(d[e+33>>0]|0);z=+(d[e+34>>0]|0);p=k+A+z;h[x>>3]=p;q=n+A+z;s=x+8|0;h[s>>3]=q;n=m-A-z;f=x+16|0;h[f>>3]=n;o=o-A-z;r=x+24|0;h[r>>3]=o;j=e+88|0;switch(a[e+92>>0]|0){case 1:{w=c[j>>2]|0;c[v>>2]=c[x>>2];c[v+4>>2]=c[x+4>>2];c[v+8>>2]=c[x+8>>2];c[v+12>>2]=c[x+12>>2];c[v+16>>2]=c[x+16>>2];c[v+20>>2]=c[x+20>>2];c[v+24>>2]=c[x+24>>2];c[v+28>>2]=c[x+28>>2];GU(w,v,g);break}case 3:{i=c[j>>2]|0;k=+h[i+24>>3];m=n-p-+h[i+16>>3];c:do if(m>0.0)switch(w&6){case 4:{h[f>>3]=n-m;break c}case 2:{h[x>>3]=m+p;break c}default:break c}while(0);k=o-q-k;d:do if(k>0.0)switch(w&24){case 16:{h[r>>3]=o-k;break d}case 8:{h[s>>3]=k+q;break d}default:break d}while(0);c[v>>2]=c[x>>2];c[v+4>>2]=c[x+4>>2];c[v+8>>2]=c[x+8>>2];c[v+12>>2]=c[x+12>>2];c[v+16>>2]=c[x+16>>2];c[v+20>>2]=c[x+20>>2];c[v+24>>2]=c[x+24>>2];c[v+28>>2]=c[x+28>>2];JU(i,v);break}default:{i=c[j>>2]|0;k=+h[i+32>>3];m=n-p-+h[i+24>>3];e:do if(m>0.0?(u=w&6,u<<16>>16!=6):0)switch(u&7){case 4:{h[f>>3]=n-m;break e}case 2:{h[x>>3]=m+p;break e}default:{A=m*.5;h[x>>3]=A+p;h[f>>3]=n-A;break e}}while(0);k=o-q-k;f:do if(k>0.0)switch(w&24){case 16:{h[r>>3]=o-k;break f}case 8:{h[s>>3]=k+q;break f}default:{A=k*.5;h[s>>3]=A+q;h[r>>3]=o-A;break f}}while(0);w=i+8|0;c[w>>2]=c[x>>2];c[w+4>>2]=c[x+4>>2];c[w+8>>2]=c[x+8>>2];c[w+12>>2]=c[x+12>>2];c[w+16>>2]=c[x+16>>2];c[w+20>>2]=c[x+20>>2];c[w+24>>2]=c[x+24>>2];c[w+28>>2]=c[x+28>>2];x=b[t>>1]&768;KU(c[j>>2]|0,(x&1023)==512?108:(x&1023)==256?114:110)}}l=y;return}function JU(a,b){a=a|0;b=b|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];c[a+16>>2]=c[b+16>>2];c[a+20>>2]=c[b+20>>2];c[a+24>>2]=c[b+24>>2];c[a+28>>2]=c[b+28>>2];return}function KU(d,e){d=d|0;e=e|0;var f=0,g=0,h=0;g=b[d+4>>1]|0;f=0;while(1){if((f|0)>=(g|0))break;h=(c[d>>2]|0)+(f*24|0)+6|0;if(!(a[h>>0]|0))a[h>>0]=e;f=f+1|0}return}function LU(d,f,g){d=d|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;l=f+84|0;t=c[l>>2]|0;u=KL()|0;v=PU()|0;i=0;h=0;k=Tz(t)|0;while(1){if(!k)break;j=Tz(c[k+8>>2]|0)|0;while(1){if(!j)break;j=c[j>>2]|0;i=i+1|0}h=h+1|0;if(a[k+12>>0]|0)TU(v,h);k=c[k>>2]|0}h=JK((i<<2)+4|0)|0;c[l>>2]=h;i=0;j=0;k=0;q=0;r=Tz(t)|0;while(1){if(!r)break;s=q&65535;p=0;o=Tz(c[r+8>>2]|0)|0;while(1){if(!o)break;n=c[o+8>>2]|0;c[h>>2]=n;k=MU(d,n,f,g)|0|k;l=NU(u,q,p,n)|0;b[n+86>>1]=s;b[n+84>>1]=l;l=l+(e[n+80>>1]|0)|0;m=q+(e[n+82>>1]|0)|0;if(UU(v,m)|0){p=n+100|0;a[p>>0]=a[p>>0]|2}p=l;h=h+4|0;o=c[o>>2]|0;i=(l|0)>(i|0)?l:i;j=(m|0)>(j|0)?m:j}q=q+1|0;r=c[r>>2]|0}c[f+100>>2]=j;c[f+104>>2]=i;Rz(t)|0;Rz(v)|0;NL(u);return k|0}function MU(f,g,i,j){f=f|0;g=g|0;i=i|0;j=j|0;var k=0.0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0.0;u=l;l=l+16|0;t=u+8|0;s=u;c[g+96>>2]=i;q=g+36|0;o=b[q>>1]|0;if(!(o&64)){if(!(b[i+36>>1]&64))n=2;else n=a[i+34>>0]|0;a[g+34>>0]=n}if(!(o&32)){n=a[i+88>>0]|0;if(n<<24>>24<=-1)if(!(b[i+36>>1]&32))n=1;else n=a[i+33>>0]|0;a[g+33>>0]=n}n=g+88|0;p=g+92|0;switch(a[p>>0]|0){case 1:{o=EU(f,c[n>>2]|0,g,j)|0;i=c[n>>2]|0;n=o;o=i+64|0;i=i+72|0;break}case 3:{o=OU(c[n>>2]|0,j)|0;i=c[n>>2]|0;n=o;o=i+16|0;i=i+24|0;break}default:{HU(c[(c[f+16>>2]|0)+144>>2]|0,c[n>>2]|0,j);i=c[n>>2]|0;n=0;o=i+24|0;i=i+32|0}}k=+((d[g+33>>0]|0)+(d[g+34>>0]|0)<<1|0);m=+h[o>>3]+k;k=+h[i>>3]+k;i=g+38|0;do if(b[q>>1]&1){o=b[i>>1]|0;if(o<<16>>16?(r=b[g+40>>1]|0,r<<16>>16):0){if(!(m>+(o&65535)|k>+(r&65535))){m=0.0;k=0.0;break}if((a[p>>0]|0)==3){m=0.0;k=0.0;break}gA(0,137614,s)|0;n=1;m=0.0;k=0.0;break}gA(0,137647,t)|0;n=1}while(0);v=+(e[i>>1]|0);h[g+64>>3]=m>v?m:v;m=+(e[g+40>>1]|0);h[g+72>>3]=k>m?k:m;l=u;return n|0}function NU(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var f=0,g=0,h=0,i=0,j=0;j=d+80|0;i=(e[j>>1]|0)+-1|0;h=0;a:while(1){f=c;while(1){if(h)break a;g=i+f|0;while(1){if((g|0)<(f|0)){c=f;h=1;continue a}if(SL(a,g,b)|0)break;g=g+-1|0}f=g+1|0}}h=d+82|0;f=c;while(1){if((f|0)<(c+(e[j>>1]|0)|0))g=b;else break;while(1){if((g|0)>=((e[h>>1]|0)+b|0))break;QL(a,f,g);g=g+1|0}f=f+1|0}return c|0}function OU(b,d){b=b|0;d=d|0;var e=0.0,f=0.0,g=0,i=0,j=0,k=0,m=0;m=l;l=l+16|0;j=m;i=m+8|0;d=d+52|0;g=b+32|0;RF(i,c[d>>2]|0,c[g>>2]|0);k=c[i>>2]|0;i=c[i+4>>2]|0;if((i&k|0)==-1){c[j>>2]=c[g>>2];gA(1,137697,j)|0;d=1;f=0.0;e=0.0}else{a[(c[(c[d>>2]|0)+16>>2]|0)+114>>0]=1;d=0;f=+(i|0);e=+(k|0)}c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;c[b+12>>2]=0;h[b+16>>3]=e;h[b+24>>3]=f;l=m;return d|0}function PU(){return Vz(55924,c[4581]|0)|0}function QU(a,b,d){a=a|0;b=b|0;d=d|0;d=JK(12)|0;c[d>>2]=c[b>>2];return d|0}function RU(a,b,c){a=a|0;b=b|0;c=c|0;U1(b);return}function SU(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;b=c[b>>2]|0;e=c[d>>2]|0;return ((b|0)>(e|0)?1:((b|0)<(e|0))<<31>>31)|0}function TU(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;nb[c[a>>2]&63](a,e,1)|0;l=d;return}function UU(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;b=(nb[c[a>>2]&63](a,e,512)|0)!=0&1;l=d;return b|0}function VU(a){a=a|0;var b=0;if(!(c[47375]|0)){b=JK((a<<2)+4|0)|0;c[47375]=b;c[b>>2]=189504;c[47386]=a}c[47387]=0;return}function WU(){U1(c[47375]|0);c[47375]=0;c[47387]=0;return}function XU(){c[47387]=0;return}function YU(){var a=0,b=0,d=0;b=c[47387]|0;d=c[47375]|0;a=1;while(1){if((a|0)>(b|0)){a=5;break}if((c[(c[d+(a<<2)>>2]|0)+4>>2]|0)==(a|0))a=a+1|0;else{a=4;break}}if((a|0)==4)qa(138394,137741,59,137747);else if((a|0)==5)return}function ZU(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;f=c[47375]|0;g=c[f+(a<<2)>>2]|0;h=c[g>>2]|0;while(1){b=(a|0)/2|0;d=c[f+(b<<2)>>2]|0;e=f+(a<<2)|0;if((c[d>>2]|0)>=(h|0))break;c[e>>2]=d;c[d+4>>2]=a;a=b}c[e>>2]=g;c[g+4>>2]=a;return}function _U(a){a=a|0;var b=0,d=0;d=l;l=l+16|0;b=c[47387]|0;if((b|0)==(c[47386]|0)){gA(1,137755,d)|0;a=1}else{b=b+1|0;c[47387]=b;c[(c[47375]|0)+(b<<2)>>2]=a;ZU(b);YU();a=0}l=d;return a|0}function $U(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;e=c[47375]|0;f=c[e+(a<<2)>>2]|0;g=c[f>>2]|0;h=c[47387]|0;i=(h|0)/2|0;while(1){if((a|0)>(i|0))break;d=a<<1;b=c[e+(d<<2)>>2]|0;if((d|0)<(h|0)){l=d|1;j=c[e+(l<<2)>>2]|0;k=(c[b>>2]|0)<(c[j>>2]|0);d=k?l:d;b=k?j:b}if((g|0)>=(c[b>>2]|0))break;c[e+(a<<2)>>2]=b;c[b+4>>2]=a;a=d}c[e+(a<<2)>>2]=f;c[f+4>>2]=a;return}function aV(){var a=0,b=0,d=0,e=0;b=c[47387]|0;if(!b)a=0;else{e=c[47375]|0;d=e+4|0;a=c[d>>2]|0;c[d>>2]=c[e+(b<<2)>>2];b=b+-1|0;c[47387]=b;if(b|0)$U(1);YU()}return a|0}function bV(a,b){a=a|0;b=b|0;c[a>>2]=b;ZU(c[a+4>>2]|0);YU();return}function cV(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;m=b+16|0;j=c[m>>2]|0;j=(a[j+((c[e+12>>2]|0)*40|0)+36>>0]|0)!=(a[j+((c[e+16>>2]|0)*40|0)+36>>0]|0);k=~~((+h[d+64>>3]+-3.0-+h[d+48>>3])*.5);l=~~((+h[d+56>>3]+-3.0-+h[d+40>>3])*.5);g=(k|0)<(l|0)?k:l;n=d+4|0;f=0;while(1){b=c[n>>2]|0;if((f|0)>=(b|0)){g=f;break}i=c[d+8+(f<<2)>>2]|0;o=c[m>>2]|0;if((a[o+((c[i+12>>2]|0)*40|0)+36>>0]|0)==(a[o+((c[i+16>>2]|0)*40|0)+36>>0]|0)){g=f;break}dV(i,g);f=f+1|0}while(1){if((g|0)>=(b|0))break;f=c[d+8+(g<<2)>>2]|0;if(j|(f|0)==(e|0)){dV(f,a[(c[m>>2]|0)+((c[f+12>>2]|0)*40|0)+36>>0]|0?k:l);b=c[n>>2]|0}g=g+1|0}return}function dV(a,b){a=a|0;b=b|0;var d=0,e=0;d=a+8|0;e=c[d>>2]|0;c[d>>2]=e+1;if((e|0)>=(b|0)){c[d>>2]=0;h[a>>3]=+h[a>>3]+16384.0}return}function eV(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0,k=0,m=0,n=0.0,o=0.0,p=0.0,q=0.0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0.0,z=0.0,A=0.0,B=0.0,C=0,D=0,E=0.0;x=l;l=l+112|0;u=x+64|0;t=x+96|0;m=x+32|0;v=x;w=JK(28)|0;b=tB(a)|0;s=w+4|0;c[s>>2]=b;b=JK(b*72|0)|0;r=w+12|0;c[r>>2]=b;e=v+8|0;h[e>>3]=1797693134862315708145274.0e284;h[v>>3]=1797693134862315708145274.0e284;f=v+24|0;h[f>>3]=-1797693134862315708145274.0e284;g=v+16|0;h[g>>3]=-1797693134862315708145274.0e284;i=m+16|0;j=m+8|0;k=m+24|0;d=jC(a)|0;n=1797693134862315708145274.0e284;o=1797693134862315708145274.0e284;p=-1797693134862315708145274.0e284;q=-1797693134862315708145274.0e284;while(1){if(!d)break;C=d+16|0;D=c[C>>2]|0;z=(+h[D+96>>3]+ +h[D+88>>3])*.5;z=z<1.0?1.0:z;y=+h[D+80>>3]*.5;y=y<1.0?1.0:y;E=+h[D+16>>3];B=E-z;h[m>>3]=B;z=E+z;h[i>>3]=z;E=+h[D+24>>3];A=E-y;h[j>>3]=A;y=E+y;h[k>>3]=y;B=+h[(n>3];h[v>>3]=B;A=+h[(o>3];h[e>>3]=A;z=+h[(p>z?v:m)+16>>3];h[g>>3]=z;y=+h[(q>y?v:m)+24>>3];h[f>>3]=y;D=b+40|0;c[D>>2]=c[m>>2];c[D+4>>2]=c[m+4>>2];c[D+8>>2]=c[m+8>>2];c[D+12>>2]=c[m+12>>2];c[D+16>>2]=c[m+16>>2];c[D+20>>2]=c[m+20>>2];c[D+24>>2]=c[m+24>>2];c[D+28>>2]=c[m+28>>2];c[b>>2]=c[b>>2]|1;c[(c[C>>2]|0)+112>>2]=b;b=b+72|0;d=kC(a,d)|0;n=B;o=A;p=z;q=y}h[v>>3]=n+-36.0;h[e>>3]=o+-36.0;h[g>>3]=p+36.0;h[f>>3]=q+36.0;D=c[r>>2]|0;f=c[s>>2]|0;c[u>>2]=c[v>>2];c[u+4>>2]=c[v+4>>2];c[u+8>>2]=c[v+8>>2];c[u+12>>2]=c[v+12>>2];c[u+16>>2]=c[v+16>>2];c[u+20>>2]=c[v+20>>2];c[u+24>>2]=c[v+24>>2];c[u+28>>2]=c[v+28>>2];f=oV(D,f,t,u)|0;if(c[47323]&1|0){r=c[r>>2]|0;C=c[s>>2]|0;D=c[t>>2]|0;c[u>>2]=c[v>>2];c[u+4>>2]=c[v+4>>2];c[u+8>>2]=c[v+8>>2];c[u+12>>2]=c[v+12>>2];c[u+16>>2]=c[v+16>>2];c[u+20>>2]=c[v+20>>2];c[u+24>>2]=c[v+24>>2];c[u+28>>2]=c[v+28>>2];fV(r,C,u,f,D)}e=w+8|0;c[e>>2]=JK((c[t>>2]|0)*72|0)|0;c[w>>2]=c[t>>2];d=c[t>>2]|0;b=0;while(1){if((b|0)>=(d|0))break;D=(c[e>>2]|0)+(b*72|0)+40|0;C=f+(b<<5)|0;c[D>>2]=c[C>>2];c[D+4>>2]=c[C+4>>2];c[D+8>>2]=c[C+8>>2];c[D+12>>2]=c[C+12>>2];c[D+16>>2]=c[C+16>>2];c[D+20>>2]=c[C+20>>2];c[D+24>>2]=c[C+24>>2];c[D+28>>2]=c[C+28>>2];b=b+1|0}U1(f);c[u>>2]=c[v>>2];c[u+4>>2]=c[v+4>>2];c[u+8>>2]=c[v+8>>2];c[u+12>>2]=c[v+12>>2];c[u+16>>2]=c[v+16>>2];c[u+20>>2]=c[v+20>>2];c[u+24>>2]=c[v+24>>2];c[u+28>>2]=c[v+28>>2];c[w+16>>2]=gV(w,u)|0;l=x;return w|0}function fV(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0.0,i=0,j=0,k=0.0,m=0.0,n=0.0,o=0,p=0,q=0,r=0,s=0,t=0.0,u=0.0,v=0.0;q=l;l=l+128|0;p=q+96|0;o=q+64|0;j=q+32|0;r=q+16|0;s=q;m=+h[d+16>>3];n=+h[d>>3];k=+h[d+24>>3];g=+h[d+8>>3];i=c[15712]|0;T4(137770,i)|0;c[s>>2]=10;c[s+4>>2]=10;c[s+8>>2]=~~(m+10.0-n);c[s+12>>2]=~~(k+10.0-g);w4(i,138200,s)|0;h[r>>3]=10.0-n;h[r+8>>3]=10.0-g;w4(i,138248,r)|0;T4(138265,i)|0;d=0;while(1){if((d|0)>=(b|0))break;v=+h[a+(d*72|0)+48>>3];u=+h[a+(d*72|0)+56>>3];t=+h[a+(d*72|0)+64>>3];h[j>>3]=+h[a+(d*72|0)+40>>3];h[j+8>>3]=v;h[j+16>>3]=u;h[j+24>>3]=t;w4(i,138284,j)|0;d=d+1|0}T4(138302,i)|0;d=0;while(1){if((d|0)>=(f|0))break;t=+h[e+(d<<5)+8>>3];u=+h[e+(d<<5)+16>>3];v=+h[e+(d<<5)+24>>3];h[o>>3]=+h[e+(d<<5)>>3];h[o+8>>3]=t;h[o+16>>3]=u;h[o+24>>3]=v;w4(i,138321,o)|0;d=d+1|0}T4(138339,i)|0;h[p>>3]=n;h[p+8>>3]=g;h[p+16>>3]=m;h[p+24>>3]=k;w4(i,138321,p)|0;T4(138086,i)|0;l=q;return}function gV(a,b){a=a|0;b=b|0;var d=0,e=0.0,f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0;A=l;l=l+32|0;t=A+16|0;k=A;w=c[a>>2]|0;y=CR(w<<2|2)|0;z=Vz(55960,c[4581]|0)|0;v=Vz(55996,c[4581]|0)|0;w=JK(w<<7)|0;f=JK(c[a>>2]<<4)|0;x=a+8|0;g=b+16|0;i=k+8|0;j=b+24|0;m=b+8|0;d=0;while(1){if((d|0)>=(c[a>>2]|0))break;n=c[x>>2]|0;o=n+(d*72|0)|0;c[n+(d*72|0)+32>>2]=4;p=n+(d*72|0)+36|0;c[p>>2]=f+(d<<2<<2);q=n+(d*72|0)+40|0;e=+h[n+(d*72|0)+56>>3];if(e<+h[g>>3]){h[k>>3]=e;h[i>>3]=+h[n+(d*72|0)+48>>3];c[t>>2]=c[k>>2];c[t+4>>2]=c[k+4>>2];c[t+8>>2]=c[k+8>>2];c[t+12>>2]=c[k+12>>2];s=hV(y,z,t,w,1)|0;c[s+20>>2]=o;c[c[p>>2]>>2]=s}e=+h[n+(d*72|0)+64>>3];if(e<+h[j>>3]){h[k>>3]=+h[q>>3];h[i>>3]=e;c[t>>2]=c[k>>2];c[t+4>>2]=c[k+4>>2];c[t+8>>2]=c[k+8>>2];c[t+12>>2]=c[k+12>>2];s=hV(y,v,t,w,0)|0;c[s+20>>2]=o;c[(c[p>>2]|0)+4>>2]=s}if(+h[q>>3]>+h[b>>3]){c[t>>2]=c[q>>2];c[t+4>>2]=c[q+4>>2];c[t+8>>2]=c[q+8>>2];c[t+12>>2]=c[q+12>>2];s=hV(y,z,t,w,1)|0;c[s+24>>2]=o;c[(c[p>>2]|0)+8>>2]=s}if(+h[n+(d*72|0)+48>>3]>+h[m>>3]){c[t>>2]=c[q>>2];c[t+4>>2]=c[q+4>>2];c[t+8>>2]=c[q+8>>2];c[t+12>>2]=c[q+12>>2];s=hV(y,v,t,w,0)|0;c[s+24>>2]=o;c[(c[p>>2]|0)+12>>2]=s}d=d+1|0}o=JK(c[y>>2]<<2)|0;r=a+4|0;s=a+12|0;p=t+8|0;m=0;q=0;n=0;while(1){d=c[r>>2]|0;if((n|0)>=(d|0)){b=0;break}g=c[s>>2]|0;i=g+(n*72|0)|0;j=g+(n*72|0)+36|0;c[j>>2]=o+(m<<2);b=g+(n*72|0)+40|0;c[t>>2]=c[b>>2];c[t+4>>2]=c[b+4>>2];c[t+8>>2]=c[b+8>>2];c[t+12>>2]=c[b+12>>2];b=g+(n*72|0)+56|0;k=g+(n*72|0)+32|0;d=nb[c[v>>2]&63](v,t,512)|0;while(1){if(!d)break;if(!(+h[d+8>>3]<+h[b>>3]))break;C=c[d>>2]|0;B=c[j>>2]|0;f=c[k>>2]|0;c[k>>2]=f+1;c[B+(f<<2)>>2]=C;c[(c[d>>2]|0)+24>>2]=i;d=nb[c[v>>2]&63](v,d,8)|0}f=g+(n*72|0)+64|0;d=nb[c[z>>2]&63](z,t,512)|0;while(1){if(!d){u=20;break}e=+h[f>>3];if(!(+h[d+16>>3]>2]|0;B=c[j>>2]|0;C=c[k>>2]|0;c[k>>2]=C+1;c[B+(C<<2)>>2]=b;c[(c[d>>2]|0)+24>>2]=i;d=nb[c[z>>2]&63](z,d,8)|0}if((u|0)==20){u=0;e=+h[f>>3]}h[p>>3]=e;b=g+(n*72|0)+56|0;d=nb[c[v>>2]&63](v,t,512)|0;while(1){if(!d){u=25;break}e=+h[b>>3];if(!(+h[d+8>>3]>2]|0;B=c[j>>2]|0;C=c[k>>2]|0;c[k>>2]=C+1;c[B+(C<<2)>>2]=D;c[(c[d>>2]|0)+20>>2]=i;d=nb[c[v>>2]&63](v,d,8)|0}if((u|0)==25){u=0;e=+h[b>>3]}h[t>>3]=e;h[p>>3]=+h[g+(n*72|0)+48>>3];d=nb[c[z>>2]&63](z,t,512)|0;while(1){if(!d)break;if(!(+h[d+16>>3]<+h[f>>3]))break;B=c[d>>2]|0;C=c[j>>2]|0;D=c[k>>2]|0;c[k>>2]=D+1;c[C+(D<<2)>>2]=B;c[(c[d>>2]|0)+20>>2]=i;d=nb[c[z>>2]&63](z,d,8)|0}D=c[k>>2]|0;m=D+m|0;q=(D|0)>(q|0)?D:q;n=n+1|0}while(1){if((b|0)>=(d|0))break;iV((c[s>>2]|0)+(b*72|0)|0);b=b+1|0;d=c[r>>2]|0}d=c[y>>2]|0;D=c[y+16>>2]|0;c[D+(d*40|0)+32>>2]=d;d=d+1|0;c[D+(d*40|0)+32>>2]=d;BR(y,q);d=0;while(1){if((d|0)>=(c[a>>2]|0))break;jV((c[x>>2]|0)+(d*72|0)|0,y);d=d+1|0}Rz(z)|0;Rz(v)|0;U1(w);kV(y);zR(y);l=A;return y|0}function hV(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0;h=nb[c[d>>2]&63](d,e,512)|0;do if(!h){b=DR(b)|0;if(!f)qa(138183,138131,291,138190);else{h=c[b+32>>2]|0;i=f+(h<<5)|0;f=f+(h<<5)+8|0;c[f>>2]=c[e>>2];c[f+4>>2]=c[e+4>>2];c[f+8>>2]=c[e+8>>2];c[f+12>>2]=c[e+12>>2];c[i>>2]=b;a[b+36>>0]=g;nb[c[d>>2]&63](d,i,1)|0;break}}else i=h;while(0);return c[i>>2]|0}function iV(b){b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0;a:do if((+h[b+64>>3]+-3.0-+h[b+48>>3])*.5<2.0){i=c[b+32>>2]|0;j=b+36|0;g=0;while(1){if((g|0)>=(i|0))break a;d=c[(c[j>>2]|0)+(g<<2)>>2]|0;b:do if(a[d+36>>0]|0){f=c[d+20>>2]|0;if((f|0)==(b|0)){e=c[d+24>>2]|0;d=e;e=c[e>>2]|0;do{c[d>>2]=e|8;d=c[c[d+36>>2]>>2]|0;if(!d)break b;d=c[d+24>>2]|0;e=c[d>>2]|0}while(!(e&1|0))}else{e=f;d=c[f>>2]|0;do{c[e>>2]=d|8;d=c[(c[e+36>>2]|0)+8>>2]|0;if(!d)break b;e=c[d+20>>2]|0;d=c[e>>2]|0}while(!(d&1|0))}}while(0);g=g+1|0}}while(0);c:do if((+h[b+56>>3]+-3.0-+h[b+40>>3])*.5<2.0){i=c[b+32>>2]|0;j=b+36|0;g=0;while(1){if((g|0)>=(i|0))break c;d=c[(c[j>>2]|0)+(g<<2)>>2]|0;d:do if(!(a[d+36>>0]|0)){f=c[d+20>>2]|0;if((f|0)==(b|0)){e=c[d+24>>2]|0;d=e;e=c[e>>2]|0;do{c[d>>2]=e|16;d=c[(c[d+36>>2]|0)+4>>2]|0;if(!d)break d;d=c[d+24>>2]|0;e=c[d>>2]|0}while(!(e&1|0))}else{e=f;d=c[f>>2]|0;do{c[e>>2]=d|16;d=c[(c[e+36>>2]|0)+12>>2]|0;if(!d)break d;e=c[d+20>>2]|0;d=c[e>>2]|0}while(!(d&1|0))}}while(0);g=g+1|0}}while(0);return}function jV(a,b){a=a|0;b=b|0;var d=0,e=0,f=0.0,g=0.0,i=0.0,j=0,k=0,l=0,m=0,n=0,o=0,p=0.0,q=0;g=+h[a+56>>3]-+h[a+40>>3];i=+h[a+64>>3]-+h[a+48>>3];f=(i+g)*.5+500.0;if((i+-3.0)*.5<2.0){l=(c[a>>2]&8|0)==0;f=l?16384.0:f;p=l?16384.0:g}else p=g;if((g+-3.0)*.5<2.0){l=(c[a>>2]&16|0)==0;i=l?16384.0:i;f=l?16384.0:f}l=a+36|0;d=c[l>>2]|0;e=c[d+8>>2]|0;if((e|0)!=0?(j=c[d+4>>2]|0,(j|0)!=0):0){j=ER(b,e,j,f)|0;e=a+4|0;d=c[e>>2]|0;c[e>>2]=d+1;c[a+8+(d<<2)>>2]=j;d=c[l>>2]|0}e=c[d+4>>2]|0;if((e|0)!=0?(k=c[d>>2]|0,(k|0)!=0):0){k=ER(b,e,k,f)|0;j=a+4|0;d=c[j>>2]|0;c[j>>2]=d+1;c[a+8+(d<<2)>>2]=k;d=c[l>>2]|0}e=c[d+8>>2]|0;if((e|0)!=0?(m=c[d+12>>2]|0,(m|0)!=0):0){m=ER(b,e,m,f)|0;k=a+4|0;d=c[k>>2]|0;c[k>>2]=d+1;c[a+8+(d<<2)>>2]=m;d=c[l>>2]|0}e=c[d+12>>2]|0;if((e|0)!=0?(n=c[d>>2]|0,(n|0)!=0):0){n=ER(b,e,n,f)|0;m=a+4|0;d=c[m>>2]|0;c[m>>2]=d+1;c[a+8+(d<<2)>>2]=n;d=c[l>>2]|0}e=c[d+4>>2]|0;if((e|0)!=0?(o=c[d+12>>2]|0,(o|0)!=0):0){o=ER(b,e,o,i)|0;n=a+4|0;d=c[n>>2]|0;c[n>>2]=d+1;c[a+8+(d<<2)>>2]=o;d=c[l>>2]|0}e=c[d+8>>2]|0;if(e|0?(q=c[d>>2]|0,q|0):0){b=ER(b,e,q,p)|0;o=a+4|0;q=c[o>>2]|0;c[o>>2]=q+1;c[a+8+(q<<2)>>2]=b}return}function kV(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;j=l;l=l+16|0;i=j+8|0;h=j;f=a+16|0;g=c[15712]|0;e=0;while(1){if((e|0)>=(c[a>>2]|0)){b=10;break}b=c[f>>2]|0;d=b+(e*40|0)+20|0;if((c[d>>2]|0)==0?(c[h>>2]=e,w4(g,138096,h)|0,(c[d>>2]|0)==0):0){b=5;break}b=b+(e*40|0)+24|0;if((c[b>>2]|0)==0?(c[i>>2]=e,w4(g,138148,i)|0,(c[b>>2]|0)==0):0){b=8;break}e=e+1|0}if((b|0)==5)qa(138118,138131,311,138138);else if((b|0)==8)qa(138170,138131,313,138138);else if((b|0)==10){l=j;return}}function lV(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0.0,f=0.0;e=+h[b+8>>3];f=+h[c+8>>3];if(!(e>f))if(!(e>3];e=+h[c>>3];if(f>e)a=1;else a=(f>31}else a=-1;else a=1;return a|0}function mV(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0.0,f=0.0;e=+h[b>>3];f=+h[c>>3];if(!(e>f))if(!(e>3];e=+h[c+8>>3];if(f>e)a=1;else a=(f>31}else a=-1;else a=1;return a|0}function nV(a){a=a|0;var b=0,d=0;d=a+8|0;U1(c[(c[d>>2]|0)+36>>2]|0);b=a+12|0;U1(c[(c[b>>2]|0)+36>>2]|0);U1(c[d>>2]|0);U1(c[b>>2]|0);GR(c[a+16>>2]|0);Rz(c[a+20>>2]|0)|0;Rz(c[a+24>>2]|0)|0;U1(a);return}function oV(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;p=l;l=l+32|0;h=p;i=b<<2;f=i+4|0;i=i+5|0;o=KK(i*56|0)|0;i=JK(i<<2)|0;g=f*5|1;j=KK(g*72|0)|0;m=g<<5;k=JK(m)|0;m=JK(m)|0;c[h>>2]=c[e>>2];c[h+4>>2]=c[e+4>>2];c[h+8>>2]=c[e+8>>2];c[h+12>>2]=c[e+12>>2];c[h+16>>2]=c[e+16>>2];c[h+20>>2]=c[e+20>>2];c[h+24>>2]=c[e+24>>2];c[h+28>>2]=c[e+28>>2];pV(a,b,h,o,0);z5(173);qV(f,i);AV(f,o,i,g,j)|0;n=rV(f,o,j,0,k)|0;c[h>>2]=c[e>>2];c[h+4>>2]=c[e+4>>2];c[h+8>>2]=c[e+8>>2];c[h+12>>2]=c[e+12>>2];c[h+16>>2]=c[e+16>>2];c[h+20>>2]=c[e+20>>2];c[h+24>>2]=c[e+24>>2];c[h+28>>2]=c[e+28>>2];pV(a,b,h,o,1);qV(f,i);AV(f,o,i,g,j)|0;f=rV(f,o,j,1,m)|0;g=JK(O(n<<5,f)|0)|0;b=0;a=0;while(1){if((b|0)>=(f|0))break;h=m+(b<<5)|0;e=0;while(1){if((e|0)>=(n|0))break;q=a+((sV(g+(a<<5)|0,h,k+(e<<5)|0)|0)!=0&1)|0;e=e+1|0;a=q}b=b+1|0}q=MK(g,a<<5)|0;U1(o);U1(i);U1(j);U1(k);U1(m);c[d>>2]=a;l=p;return q|0}function pV(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0;j=l;l=l+96|0;h=j+64|0;i=j;c[h>>2]=c[d>>2];c[h+4>>2]=c[d+4>>2];c[h+8>>2]=c[d+8>>2];c[h+12>>2]=c[d+12>>2];c[h+16>>2]=c[d+16>>2];c[h+20>>2]=c[d+20>>2];c[h+24>>2]=c[d+24>>2];c[h+28>>2]=c[d+28>>2];yV(h,f,1,i);d=zV(e,1,i)|0;g=0;while(1){if((g|0)>=(b|0))break;k=a+(g*72|0)+40|0;c[h>>2]=c[k>>2];c[h+4>>2]=c[k+4>>2];c[h+8>>2]=c[k+8>>2];c[h+12>>2]=c[k+12>>2];c[h+16>>2]=c[k+16>>2];c[h+20>>2]=c[k+20>>2];c[h+24>>2]=c[k+24>>2];c[h+28>>2]=c[k+28>>2];yV(h,f,0,i);d=zV(e,d,i)|0;g=g+1|0}l=j;return}function qV(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;d=0;while(1){if((d|0)>(a|0))break;c[b+(d<<2)>>2]=d;d=d+1|0}g=a+1|0;d=1;while(1){if((d|0)>(a|0))break;h=~~(+B5()*+(g-d|0)+ +(d|0));e=b+(d<<2)|0;f=b+(h<<2)|0;if((d|0)!=(h|0)){h=c[e>>2]|0;c[e>>2]=c[f>>2];c[f>>2]=h}d=d+1|0}return}function rV(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;g=a*5|0;j=g+1|0;l=JK(j<<2)|0;c[47388]=JK(j<<4)|0;c[47389]=JK((a*56|0)+56|0)|0;j=JK(a<<2)|0;c[47390]=j;k=0;while(1){if((k|0)>(g|0))break;if(tV(d+(k*72|0)|0,b)|0)break;k=k+1|0}h=c[47388]|0;i=c[47389]|0;g=1;while(1){if((g|0)>(a|0))break;c[h+(g<<4)+8>>2]=c[b+(g*56|0)+48>>2];m=b+(g*56|0)+44|0;c[h+(g<<4)+4>>2]=c[m>>2];c[h+(g<<4)>>2]=g;n=i+(g*56|0)|0;o=b+(g*56|0)|0;c[n>>2]=c[o>>2];c[n+4>>2]=c[o+4>>2];c[n+8>>2]=c[o+8>>2];c[n+12>>2]=c[o+12>>2];c[i+(g*56|0)+16>>2]=c[m>>2];c[i+(g*56|0)+32>>2]=g;c[i+(g*56|0)+48>>2]=1;g=g+1|0}c[47391]=a;c[47392]=0;c[j>>2]=1;g=c[d+(k*72|0)+40>>2]|0;if((g|0)<=0){g=c[d+(k*72|0)+48>>2]|0;if((g|0)>0)g=uV(l,f,0,b,d,0,k,g,e,2)|0;else g=0}else g=uV(l,f,0,b,d,0,k,g,e,1)|0;U1(l);U1(c[47388]|0);U1(c[47389]|0);U1(c[47390]|0);return g|0}function sV(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0,e=0.0,f=0.0,g=0.0;g=+h[(+h[b>>3]>+h[c>>3]?b:c)>>3];f=+h[(+h[b+16>>3]<+h[c+16>>3]?b:c)+16>>3];h[a+16>>3]=f;h[a>>3]=g;e=+h[(+h[b+8>>3]>+h[c+8>>3]?b:c)+8>>3];d=+h[(+h[b+24>>3]<+h[c+24>>3]?b:c)+24>>3];h[a+24>>3]=d;h[a+8>>3]=e;return !(g>=f)&!(e>=d)&1|0}function tV(a,b){a=a|0;b=b|0;var d=0.0,e=0.0,f=0;f=c[a+4>>2]|0;do if((c[a+68>>2]|0)!=2?!((f|0)<1|(c[a>>2]|0)<1):0){if(!((c[a+40>>2]|0)<1?(c[a+44>>2]|0)<1:0)){if((c[a+48>>2]|0)>=1){a=0;break}if((c[a+52>>2]|0)>=1){a=0;break}}d=+h[b+(f*56|0)+24>>3];e=+h[b+(f*56|0)+8>>3];if(!(d>e+1.0e-07))if(d>3]>+h[b+(f*56|0)>>3]&1;else a=1}else a=0;while(0);return a|0}function uV(a,b,d,e,f,g,i,j,k,l){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;i=i|0;j=j|0;k=k|0;l=l|0;var m=0,n=0,o=0.0,p=0.0,q=0.0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0.0,J=0,K=0.0,L=0,M=0,N=0,O=0,P=0;D=(k|0)==0;C=i;a:while(1){y=f+(C*72|0)|0;if((C|0)<1)break;i=a+(C<<2)|0;if(c[i>>2]|0)break;c[i>>2]=1;v=f+(C*72|0)+8|0;t=f+(C*72|0)+16|0;p=+h[t>>3];w=f+(C*72|0)+24|0;x=f+(C*72|0)+32|0;o=+h[x>>3];if((p>o?(A=c[y>>2]|0,I=+h[e+(A*56|0)>>3],I==+h[e+(A*56|0)+16>>3]):0)?(A=c[f+(C*72|0)+4>>2]|0,K=+h[e+(A*56|0)>>3],K==+h[e+(A*56|0)+16>>3]):0){i=b+(d<<5)|0;if(D){h[i>>3]=I;q=p;p=K}else{h[i>>3]=o;q=-I;o=-K}h[b+(d<<5)+8>>3]=o;h[b+(d<<5)+16>>3]=p;h[b+(d<<5)+24>>3]=q;d=d+1|0}i=f+(C*72|0)+40|0;z=c[i>>2]|0;do if((z|0)<1?(L=f+(C*72|0)+44|0,(c[L>>2]|0)<1):0){i=f+(C*72|0)+48|0;n=f+(C*72|0)+52|0;if((c[i>>2]|0)>0?(M=c[n>>2]|0,(M|0)>0):0){m=c[f+(M*72|0)>>2]|0;l=c[y>>2]|0;if((M|0)==(j|0)){l=vV(g,l,m)|0;d=uV(a,b,d,e,f,g,c[n>>2]|0,C,k,1)|0;g=l;l=1;break}else{l=vV(g,m,l)|0;d=uV(a,b,d,e,f,g,c[i>>2]|0,C,k,1)|0;g=l;i=n;l=1;break}}d=uV(a,b,d,e,f,g,z,C,k,2)|0;d=uV(a,b,d,e,f,g,c[L>>2]|0,C,k,2)|0;d=uV(a,b,d,e,f,g,c[i>>2]|0,C,k,1)|0;i=n;l=1}else P=19;while(0);do if((P|0)==19){P=0;A=f+(C*72|0)+48|0;r=c[A>>2]|0;if((r|0)<1?(N=f+(C*72|0)+52|0,(c[N>>2]|0)<1):0){n=f+(C*72|0)+44|0;if((z|0)>0?(O=c[n>>2]|0,(O|0)>0):0){m=c[f+(C*72|0)+4>>2]|0;l=c[f+(z*72|0)+4>>2]|0;if((O|0)==(j|0)){l=vV(g,l,m)|0;d=uV(a,b,d,e,f,g,c[n>>2]|0,C,k,2)|0;g=l;l=2;break}else{l=vV(g,m,l)|0;d=uV(a,b,d,e,f,g,c[i>>2]|0,C,k,2)|0;g=l;i=n;l=2;break}}d=uV(a,b,d,e,f,g,z,C,k,2)|0;d=uV(a,b,d,e,f,g,c[n>>2]|0,C,k,2)|0;d=uV(a,b,d,e,f,g,c[A>>2]|0,C,k,1)|0;i=N;l=1;break}u=f+(C*72|0)+44|0;s=c[u>>2]|0;m=(s|0)>0;if((z|0)>0){if(m){if((r|0)>0?(E=f+(C*72|0)+52|0,F=c[E>>2]|0,(F|0)>0):0){n=c[f+(F*72|0)>>2]|0;m=c[f+(z*72|0)+4>>2]|0;if(!((l|0)==2&(F|0)==(j|0))?!((l|0)==1&(s|0)==(j|0)):0){l=vV(g,n,m)|0;d=uV(a,b,d,e,f,g,c[i>>2]|0,C,k,2)|0;d=uV(a,b,d,e,f,g,c[A>>2]|0,C,k,1)|0;d=uV(a,b,d,e,f,l,c[u>>2]|0,C,k,2)|0;g=l;i=E;l=1;break}l=vV(g,m,n)|0;d=uV(a,b,d,e,f,g,c[u>>2]|0,C,k,2)|0;d=uV(a,b,d,e,f,g,c[E>>2]|0,C,k,1)|0;d=uV(a,b,d,e,f,l,c[i>>2]|0,C,k,2)|0;g=l;i=A;l=1;break}m=c[y>>2]|0;if(+B(+(+h[x>>3]-+h[e+(m*56|0)+24>>3]))<=1.0e-07?+B(+(+h[w>>3]-+h[e+(m*56|0)+16>>3]))<=1.0e-07:0){n=c[f+(z*72|0)+4>>2]|0;m=c[e+(m*56|0)+44>>2]|0;if((l|0)==1&(z|0)==(j|0)){l=vV(g,m,n)|0;d=uV(a,b,d,e,f,g,c[i>>2]|0,C,k,2)|0;d=uV(a,b,d,e,f,l,c[A>>2]|0,C,k,1)|0;d=uV(a,b,d,e,f,l,c[u>>2]|0,C,k,2)|0;g=l;i=f+(C*72|0)+52|0;l=1;break}else{l=vV(g,n,m)|0;d=uV(a,b,d,e,f,g,c[u>>2]|0,C,k,2)|0;d=uV(a,b,d,e,f,g,c[A>>2]|0,C,k,1)|0;d=uV(a,b,d,e,f,g,c[f+(C*72|0)+52>>2]|0,C,k,1)|0;g=l;l=2;break}}n=c[f+(C*72|0)+4>>2]|0;m=c[f+(z*72|0)+4>>2]|0;if((l|0)==1&(s|0)==(j|0)){l=vV(g,m,n)|0;d=uV(a,b,d,e,f,g,c[u>>2]|0,C,k,2)|0;d=uV(a,b,d,e,f,l,c[f+(C*72|0)+52>>2]|0,C,k,1)|0;d=uV(a,b,d,e,f,l,c[A>>2]|0,C,k,1)|0;g=l;l=2;break}else{l=vV(g,n,m)|0;d=uV(a,b,d,e,f,g,c[i>>2]|0,C,k,2)|0;d=uV(a,b,d,e,f,g,c[A>>2]|0,C,k,1)|0;d=uV(a,b,d,e,f,g,c[f+(C*72|0)+52>>2]|0,C,k,1)|0;g=l;i=u;l=2;break}}}else if(!m)break a;if((r|0)>0?(G=f+(C*72|0)+52|0,H=c[G>>2]|0,(H|0)>0):0){n=c[y>>2]|0;if(+B(+(+h[t>>3]-+h[e+(n*56|0)+8>>3]))<=1.0e-07?+B(+(+h[v>>3]-+h[e+(n*56|0)>>3]))<=1.0e-07:0){m=c[f+(H*72|0)>>2]|0;if((l|0)==2&(r|0)==(j|0)){l=vV(g,m,n)|0;d=uV(a,b,d,e,f,g,c[A>>2]|0,C,k,1)|0;d=uV(a,b,d,e,f,l,c[i>>2]|0,C,k,2)|0;d=uV(a,b,d,e,f,l,c[f+(C*72|0)+44>>2]|0,C,k,2)|0;g=l;i=G;l=1;break}else{l=vV(g,n,m)|0;d=uV(a,b,d,e,f,g,c[f+(C*72|0)+44>>2]|0,C,k,2)|0;d=uV(a,b,d,e,f,g,c[G>>2]|0,C,k,1)|0;d=uV(a,b,d,e,f,g,c[i>>2]|0,C,k,2)|0;g=l;i=A;l=1;break}}m=c[f+(H*72|0)>>2]|0;n=c[e+((c[f+(C*72|0)+4>>2]|0)*56|0)+44>>2]|0;if((l|0)==2&(H|0)==(j|0)){l=vV(g,n,m)|0;d=uV(a,b,d,e,f,g,c[G>>2]|0,C,k,1)|0;d=uV(a,b,d,e,f,l,c[f+(C*72|0)+44>>2]|0,C,k,2)|0;d=uV(a,b,d,e,f,l,c[i>>2]|0,C,k,2)|0;g=l;i=A;l=1;break}else{l=vV(g,m,n)|0;d=uV(a,b,d,e,f,g,c[i>>2]|0,C,k,2)|0;d=uV(a,b,d,e,f,g,c[A>>2]|0,C,k,1)|0;d=uV(a,b,d,e,f,g,c[f+(C*72|0)+44>>2]|0,C,k,2)|0;g=l;i=G;l=1;break}}o=+h[t>>3];n=c[y>>2]|0;if(((+B(+(o-+h[e+(n*56|0)+8>>3]))<=1.0e-07?+B(+(+h[v>>3]-+h[e+(n*56|0)>>3]))<=1.0e-07:0)?(J=c[f+(C*72|0)+4>>2]|0,+B(+(+h[x>>3]-+h[e+(J*56|0)+8>>3]))<=1.0e-07):0)?+B(+(+h[w>>3]-+h[e+(J*56|0)>>3]))<=1.0e-07:0)if((l|0)==1){l=vV(g,n,J)|0;d=uV(a,b,d,e,f,g,c[i>>2]|0,C,k,2)|0;d=uV(a,b,d,e,f,g,c[f+(C*72|0)+44>>2]|0,C,k,2)|0;d=uV(a,b,d,e,f,l,c[f+(C*72|0)+52>>2]|0,C,k,1)|0;g=l;i=A;l=1;break}else{l=vV(g,J,n)|0;d=uV(a,b,d,e,f,g,c[f+(C*72|0)+52>>2]|0,C,k,1)|0;d=uV(a,b,d,e,f,g,c[A>>2]|0,C,k,1)|0;d=uV(a,b,d,e,f,l,c[i>>2]|0,C,k,2)|0;g=l;i=f+(C*72|0)+44|0;l=2;break}j=c[f+(C*72|0)+4>>2]|0;if(((+B(+(o-+h[e+(j*56|0)+24>>3]))<=1.0e-07?+B(+(+h[v>>3]-+h[e+(j*56|0)+16>>3]))<=1.0e-07:0)?+B(+(+h[x>>3]-+h[e+(n*56|0)+24>>3]))<=1.0e-07:0)?+B(+(+h[w>>3]-+h[e+(n*56|0)+16>>3]))<=1.0e-07:0){m=c[e+(j*56|0)+44>>2]|0;j=c[e+(n*56|0)+44>>2]|0;if((l|0)==1){l=vV(g,j,m)|0;d=uV(a,b,d,e,f,g,c[i>>2]|0,C,k,2)|0;d=uV(a,b,d,e,f,g,c[f+(C*72|0)+44>>2]|0,C,k,2)|0;d=uV(a,b,d,e,f,l,c[f+(C*72|0)+52>>2]|0,C,k,1)|0;g=l;i=A;l=1;break}else{l=vV(g,m,j)|0;d=uV(a,b,d,e,f,g,c[f+(C*72|0)+52>>2]|0,C,k,1)|0;d=uV(a,b,d,e,f,g,c[A>>2]|0,C,k,1)|0;d=uV(a,b,d,e,f,l,c[i>>2]|0,C,k,2)|0;g=l;i=f+(C*72|0)+44|0;l=2;break}}d=uV(a,b,d,e,f,g,z,C,k,2)|0;d=uV(a,b,d,e,f,g,c[A>>2]|0,C,k,1)|0;d=uV(a,b,d,e,f,g,c[f+(C*72|0)+44>>2]|0,C,k,2)|0;i=f+(C*72|0)+52|0;l=1}while(0);j=C;C=c[i>>2]|0}return d|0}function vV(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;f=l;l=l+16|0;r=f+4|0;i=f;e=(c[47392]|0)+1|0;c[47392]=e;m=c[47389]|0;wV(b,d,r,i);r=c[r>>2]|0;h=c[m+(b*56|0)+32+(r<<2)>>2]|0;i=c[m+(d*56|0)+32+(c[i>>2]<<2)>>2]|0;n=c[47391]|0;g=n+1|0;n=n+2|0;c[47391]=n;q=c[47388]|0;c[q+(g<<4)>>2]=b;c[q+(n<<4)>>2]=d;o=q+(h<<4)+4|0;p=q+(g<<4)+4|0;c[p>>2]=c[o>>2];c[q+(c[o>>2]<<4)+8>>2]=g;c[q+(g<<4)+8>>2]=n;c[q+(n<<4)+4>>2]=g;j=q+(i<<4)+8|0;c[q+(n<<4)+8>>2]=c[j>>2];c[q+(c[j>>2]<<4)+4>>2]=n;c[o>>2]=i;c[j>>2]=h;j=m+(b*56|0)+48|0;o=c[j>>2]|0;i=m+(d*56|0)+48|0;k=c[i>>2]|0;c[m+(b*56|0)+16+(r<<2)>>2]=d;c[m+(b*56|0)+32+(o<<2)>>2]=g;c[m+(b*56|0)+16+(o<<2)>>2]=c[q+(c[p>>2]<<4)>>2];c[m+(d*56|0)+32+(k<<2)>>2]=n;c[m+(d*56|0)+16+(k<<2)>>2]=b;c[j>>2]=(c[j>>2]|0)+1;c[i>>2]=(c[i>>2]|0)+1;d=c[47390]|0;c[d+(a<<2)>>2]=h;c[d+(e<<2)>>2]=g;l=f;return e|0}function wV(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0.0,h=0,i=0,j=0.0,k=0.0,l=0,m=0,n=0;l=c[47389]|0;m=l+(a*56|0)|0;n=l+(b*56|0)|0;f=0;g=-4.0;i=0;while(1){if((i|0)==4)break;h=c[l+(a*56|0)+16+(i<<2)>>2]|0;if((h|0)>=1?(j=+xV(m,l+(h*56|0)|0,n),j>g):0){f=i;g=j}i=i+1|0}c[d>>2]=f;f=0;i=0;g=-4.0;while(1){if((i|0)==4)break;h=c[l+(b*56|0)+16+(i<<2)>>2]|0;if((h|0)>=1?(k=+xV(n,l+(h*56|0)|0,m),k>g):0){f=i;g=k}i=i+1|0}c[e>>2]=f;return}function xV(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0,e=0.0,f=0.0,g=0.0,i=0.0;g=+h[a>>3];i=+h[b>>3]-g;d=+h[a+8>>3];f=+h[b+8>>3]-d;g=+h[c>>3]-g;d=+h[c+8>>3]-d;e=d*f+g*i;if(!(d*i-g*f>=0.0))d=-e/(+C(+(d*d+g*g))*+C(+(f*f+i*i)))+-2.0;else d=e/(+C(+(d*d+g*g))*+C(+(f*f+i*i)));return +d}function yV(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0,k=0.0,l=0.0;c[e>>2]=c[a>>2];c[e+4>>2]=c[a+4>>2];c[e+8>>2]=c[a+8>>2];c[e+12>>2]=c[a+12>>2];i=e+32|0;j=a+16|0;c[i>>2]=c[j>>2];c[i+4>>2]=c[j+4>>2];c[i+8>>2]=c[j+8>>2];c[i+12>>2]=c[j+12>>2];if(!d){f=a+8|0;g=j;i=a+24|0;d=a}else{f=a+24|0;g=a;i=a+8|0;d=j}k=+h[g>>3];l=+h[i>>3];h[e+16>>3]=+h[d>>3];h[e+24>>3]=l;h[e+48>>3]=k;h[e+56>>3]=+h[f>>3];a:do if(b|0){d=0;while(1){if((d|0)==4)break a;j=e+(d<<4)+8|0;l=+h[j>>3];b=e+(d<<4)|0;h[j>>3]=+h[b>>3];h[b>>3]=-l;d=d+1|0}}while(0);return}function zV(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;h=b+3|0;i=b+1|0;j=b+2|0;k=a+(b*56|0)+44|0;l=a+(h*56|0)+44|0;e=0;f=b;while(1){if((f|0)>(h|0))break;do if((f|0)!=(b|0))if((f|0)==(h|0)){c[l>>2]=b;g=j;break}else{c[a+(f*56|0)+44>>2]=f+1;g=f+-1|0;break}else{c[k>>2]=i;g=h}while(0);c[a+(f*56|0)+48>>2]=g;c[a+(f*56|0)+32>>2]=0;n=a+(f*56|0)|0;m=d+(e<<4)|0;c[n>>2]=c[m>>2];c[n+4>>2]=c[m+4>>2];c[n+8>>2]=c[m+8>>2];c[n+12>>2]=c[m+12>>2];X6(a+(g*56|0)+16|0,m|0,16)|0;e=e+1|0;f=f+1|0}return b+4|0}function AV(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0;c[47393]=e<<1;c[47394]=e;k=JK(e*80|0)|0;c[47395]=1;c[47396]=1;Y6(f|0,0,e*72|0)|0;g=BV(c[d+4>>2]|0,b,f,k)|0;e=1;while(1){if((e|0)>(a|0))break;c[b+(e*56|0)+40>>2]=g;c[b+(e*56|0)+36>>2]=g;e=e+1|0}j=CV(a)|0;g=2;i=1;while(1){if((i|0)>(j|0))break;e=DV(a,i+-1|0)|0;h=DV(a,i)|0;while(1){if((e|0)>=(h|0)){e=1;break}EV(c[d+(g<<2)>>2]|0,b,f,k);e=e+1|0;g=g+1|0}while(1){if((e|0)>(a|0))break;FV(e,b,f,k);e=e+1|0}i=i+1|0}e=DV(a,j)|0;while(1){if((e|0)>=(a|0))break;EV(c[d+(g<<2)>>2]|0,b,f,k);g=g+1|0;e=e+1|0}U1(k);return c[47395]|0}function BV(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;f=KV()|0;c[e+(f*40|0)>>2]=2;s=e+(f*40|0)+8|0;k=b+(a*56|0)|0;l=b+(a*56|0)+16|0;OV(s,k,l);n=KV()|0;c[e+(f*40|0)+36>>2]=n;c[e+(n*40|0)>>2]=3;c[e+(n*40|0)+28>>2]=f;j=KV()|0;c[e+(f*40|0)+32>>2]=j;c[e+(j*40|0)>>2]=2;r=e+(j*40|0)+8|0;PV(r,k,l);c[e+(j*40|0)+28>>2]=f;l=KV()|0;c[e+(j*40|0)+32>>2]=l;c[e+(l*40|0)>>2]=3;c[e+(l*40|0)+28>>2]=j;k=KV()|0;c[e+(j*40|0)+36>>2]=k;c[e+(k*40|0)>>2]=1;c[e+(k*40|0)+4>>2]=a;c[e+(k*40|0)+28>>2]=j;j=KV()|0;c[e+(k*40|0)+32>>2]=j;c[e+(j*40|0)>>2]=3;c[e+(j*40|0)+28>>2]=k;g=KV()|0;c[e+(k*40|0)+36>>2]=g;c[e+(g*40|0)>>2]=3;c[e+(g*40|0)+28>>2]=k;k=JV(d)|0;i=JV(d)|0;m=JV(d)|0;o=JV(d)|0;p=d+(k*72|0)+8|0;q=d+(i*72|0)+8|0;t=d+(o*72|0)+24|0;c[t>>2]=c[s>>2];c[t+4>>2]=c[s+4>>2];c[t+8>>2]=c[s+8>>2];c[t+12>>2]=c[s+12>>2];X6(q|0,s|0,16)|0;c[p>>2]=c[q>>2];c[p+4>>2]=c[q+4>>2];c[p+8>>2]=c[q+8>>2];c[p+12>>2]=c[q+12>>2];p=d+(k*72|0)+24|0;q=d+(i*72|0)+24|0;s=d+(m*72|0)+8|0;c[s>>2]=c[r>>2];c[s+4>>2]=c[r+4>>2];c[s+8>>2]=c[r+8>>2];c[s+12>>2]=c[r+12>>2];X6(q|0,r|0,16)|0;c[p>>2]=c[q>>2];c[p+4>>2]=c[q+4>>2];c[p+8>>2]=c[q+8>>2];c[p+12>>2]=c[q+12>>2];h[d+(o*72|0)+16>>3]=1073741824.0;h[d+(o*72|0)+8>>3]=1073741824.0;h[d+(m*72|0)+32>>3]=-1073741824.0;h[d+(m*72|0)+24>>3]=-1073741824.0;c[d+(i*72|0)>>2]=a;c[d+(k*72|0)+4>>2]=a;c[d+(i*72|0)+40>>2]=o;c[d+(k*72|0)+40>>2]=o;c[d+(i*72|0)+48>>2]=m;c[d+(k*72|0)+48>>2]=m;c[d+(m*72|0)+40>>2]=k;c[d+(o*72|0)+48>>2]=k;c[d+(m*72|0)+44>>2]=i;c[d+(o*72|0)+52>>2]=i;c[d+(k*72|0)+56>>2]=j;c[d+(i*72|0)+56>>2]=g;c[d+(m*72|0)+56>>2]=l;c[d+(o*72|0)+56>>2]=n;c[d+(i*72|0)+68>>2]=1;c[d+(k*72|0)+68>>2]=1;c[d+(o*72|0)+68>>2]=1;c[d+(m*72|0)+68>>2]=1;c[e+(n*40|0)+24>>2]=o;c[e+(l*40|0)+24>>2]=m;c[e+(j*40|0)+24>>2]=k;c[e+(g*40|0)+24>>2]=i;c[b+(a*56|0)+32>>2]=1;return f|0}function CV(a){a=a|0;var b=0.0;b=+(a|0);a=0;while(1){if(!(b>=1.0))break;b=+x2(b);a=a+1|0}return a+-1|0}function DV(a,b){a=a|0;b=b|0;var c=0.0,d=0.0;d=+(a|0);c=d;a=0;while(1){if((a|0)>=(b|0))break;c=+x2(c);a=a+1|0}return ~~+N(+(d/c))|0}function EV(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0.0,j=0.0,k=0,m=0,n=0,o=0,p=0,q=0.0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0;W=l;l=l+96|0;S=W+32|0;f=W+16|0;T=W;s=S;k=b+(a*56|0)|0;r=s+56|0;do{c[s>>2]=c[k>>2];s=s+4|0;k=k+4|0}while((s|0)<(r|0));U=S+16|0;V=S+24|0;i=+h[V>>3];H=S+8|0;j=+h[H>>3];do if(!(i>j+1.0e-07)){if(!(i>3]>+h[S>>3]:0){G=4;break}G=(IV(a,b,1)|0)==0;f=c[S+36>>2]|0;if(G){n=0;G=7}else{f=GV(S,U,f,b,e)|0;G=20}}else G=4;while(0);if((G|0)==4){c[f>>2]=c[S>>2];c[f+4>>2]=c[S+4>>2];c[f+8>>2]=c[S+8>>2];c[f+12>>2]=c[S+12>>2];c[S>>2]=c[U>>2];c[S+4>>2]=c[U+4>>2];c[S+8>>2]=c[U+8>>2];c[S+12>>2]=c[U+12>>2];c[U>>2]=c[f>>2];c[U+4>>2]=c[f+4>>2];c[U+8>>2]=c[f+8>>2];c[U+12>>2]=c[f+12>>2];E=S+36|0;F=c[E>>2]|0;G=S+40|0;f=c[G>>2]|0;c[E>>2]=f;c[G>>2]=F;if(!(IV(a,b,2)|0)){n=1;G=7}else{f=GV(S,U,f,b,e)|0;G=19}}if((G|0)==7){m=GV(S,U,f,b,e)|0;f=JV(d)|0;c[d+(f*72|0)+68>>2]=1;s=d+(f*72|0)|0;k=d+(m*72|0)|0;r=s+72|0;do{c[s>>2]=c[k>>2];s=s+4|0;k=k+4|0}while((s|0)<(r|0));q=+h[H>>3];h[d+(f*72|0)+16>>3]=q;h[d+(m*72|0)+32>>3]=q;q=+h[S>>3];h[d+(f*72|0)+8>>3]=q;h[d+(m*72|0)+24>>3]=q;c[d+(m*72|0)+48>>2]=f;c[d+(m*72|0)+52>>2]=0;c[d+(f*72|0)+40>>2]=m;c[d+(f*72|0)+44>>2]=0;g=c[d+(f*72|0)+48>>2]|0;if((g|0)>0){k=d+(g*72|0)+40|0;if((c[k>>2]|0)==(m|0))c[k>>2]=f;g=d+(g*72|0)+44|0;if((c[g>>2]|0)==(m|0))c[g>>2]=f}g=c[d+(f*72|0)+52>>2]|0;if((g|0)>0){k=d+(g*72|0)+40|0;if((c[k>>2]|0)==(m|0))c[k>>2]=f;g=d+(g*72|0)+44|0;if((c[g>>2]|0)==(m|0))c[g>>2]=f}E=KV()|0;G=KV()|0;F=d+(m*72|0)+56|0;D=c[F>>2]|0;c[e+(D*40|0)>>2]=2;C=e+(D*40|0)+8|0;c[C>>2]=c[S>>2];c[C+4>>2]=c[S+4>>2];c[C+8>>2]=c[S+8>>2];c[C+12>>2]=c[S+12>>2];c[e+(D*40|0)+4>>2]=a;c[e+(D*40|0)+32>>2]=G;c[e+(D*40|0)+36>>2]=E;c[e+(E*40|0)>>2]=3;c[e+(E*40|0)+24>>2]=m;c[e+(E*40|0)+28>>2]=D;c[e+(G*40|0)>>2]=3;c[e+(G*40|0)+24>>2]=f;c[e+(G*40|0)+28>>2]=D;c[F>>2]=E;c[d+(f*72|0)+56>>2]=G;if(n)G=19;else G=20}if((G|0)==19)if(!(IV(a,b,1)|0)){g=1;G=21}else{g=1;G=32}else if((G|0)==20)if(!(IV(a,b,2)|0)){g=0;G=21}else{g=0;G=32}if((G|0)==21){o=GV(U,S,c[S+40>>2]|0,b,e)|0;n=JV(d)|0;c[d+(n*72|0)+68>>2]=1;s=d+(n*72|0)|0;k=d+(o*72|0)|0;r=s+72|0;do{c[s>>2]=c[k>>2];s=s+4|0;k=k+4|0}while((s|0)<(r|0));q=+h[V>>3];h[d+(n*72|0)+16>>3]=q;h[d+(o*72|0)+32>>3]=q;q=+h[U>>3];h[d+(n*72|0)+8>>3]=q;h[d+(o*72|0)+24>>3]=q;c[d+(o*72|0)+48>>2]=n;c[d+(o*72|0)+52>>2]=0;c[d+(n*72|0)+40>>2]=o;c[d+(n*72|0)+44>>2]=0;k=c[d+(n*72|0)+48>>2]|0;if((k|0)>0){m=d+(k*72|0)+40|0;if((c[m>>2]|0)==(o|0))c[m>>2]=n;k=d+(k*72|0)+44|0;if((c[k>>2]|0)==(o|0))c[k>>2]=n}k=c[d+(n*72|0)+52>>2]|0;if((k|0)>0){m=d+(k*72|0)+40|0;if((c[m>>2]|0)==(o|0))c[m>>2]=n;k=d+(k*72|0)+44|0;if((c[k>>2]|0)==(o|0))c[k>>2]=n}D=KV()|0;F=KV()|0;E=d+(o*72|0)+56|0;C=c[E>>2]|0;c[e+(C*40|0)>>2]=2;A=e+(C*40|0)+8|0;c[A>>2]=c[U>>2];c[A+4>>2]=c[U+4>>2];c[A+8>>2]=c[U+8>>2];c[A+12>>2]=c[U+12>>2];c[e+(C*40|0)+4>>2]=a;c[e+(C*40|0)+32>>2]=F;c[e+(C*40|0)+36>>2]=D;c[e+(D*40|0)>>2]=3;c[e+(D*40|0)+24>>2]=o;c[e+(D*40|0)+28>>2]=C;c[e+(F*40|0)>>2]=3;c[e+(F*40|0)+24>>2]=n;c[e+(F*40|0)+28>>2]=C;c[E>>2]=D;c[d+(n*72|0)+56>>2]=F;F=f;f=0}else if((G|0)==32){F=f;o=GV(U,S,c[S+40>>2]|0,b,e)|0;f=1}a:do if((F|0)>0){D=d+(o*72|0)+24|0;E=d+(o*72|0)+32|0;C=(f|0)!=0;y=g?b+(a*56|0)+48|0:b+(a*56|0)+44|0;z=T+8|0;g=0;f=0;x=F;b:while(1){k=d+(x*72|0)|0;v=d+(x*72|0)+24|0;if(!(LV(v,D)|0))break a;m=d+(x*72|0)+56|0;u=c[m>>2]|0;n=KV()|0;p=KV()|0;c[e+(u*40|0)>>2]=1;c[e+(u*40|0)+4>>2]=a;c[e+(u*40|0)+32>>2]=n;c[e+(u*40|0)+36>>2]=p;c[e+(n*40|0)>>2]=3;c[e+(n*40|0)+24>>2]=x;c[e+(n*40|0)+28>>2]=u;c[e+(p*40|0)>>2]=3;w=JV(d)|0;c[e+(p*40|0)+24>>2]=w;A=d+(w*72|0)|0;c[d+(w*72|0)+68>>2]=1;c[e+(p*40|0)+28>>2]=u;g=(x|0)==(F|0)?w:g;u=d+(x*72|0)+32|0;if(+B(+(+h[u>>3]-+h[E>>3]))<=1.0e-07?+B(+(+h[v>>3]-+h[D>>3]))<=1.0e-07:0)f=w;s=A;r=s+72|0;do{c[s>>2]=c[k>>2];s=s+4|0;k=k+4|0}while((s|0)<(r|0));c[m>>2]=n;c[d+(w*72|0)+56>>2]=p;t=d+(x*72|0)+48|0;m=d+(x*72|0)+52|0;k=(c[m>>2]|0)<1;do if((c[t>>2]|0)<1){if(k)break b;s=d+(x*72|0)+40|0;k=c[s>>2]|0;do if((k|0)>0?(M=d+(x*72|0)+44|0,N=c[M>>2]|0,(N|0)>0):0){r=d+(x*72|0)+60|0;k=c[r>>2]|0;if((k|0)<=0){c[d+(w*72|0)+40>>2]=N;c[d+(w*72|0)+44>>2]=-1;c[M>>2]=-1;c[d+(N*72|0)+48>>2]=w;break}if((c[d+(x*72|0)+64>>2]|0)==1){c[d+(w*72|0)+40>>2]=N;c[M>>2]=-1;c[d+(w*72|0)+44>>2]=k;c[d+((c[s>>2]|0)*72|0)+48>>2]=x;p=w;n=N}else{c[d+(w*72|0)+44>>2]=-1;t=d+(w*72|0)+40|0;c[t>>2]=c[M>>2];n=c[s>>2]|0;c[M>>2]=n;c[s>>2]=k;c[d+(k*72|0)+48>>2]=x;p=x;k=c[t>>2]|0}c[d+(n*72|0)+48>>2]=p;c[d+(k*72|0)+48>>2]=w;c[d+(w*72|0)+60>>2]=0;c[r>>2]=0}else G=77;while(0);do if((G|0)==77){G=0;n=d+(k*72|0)+48|0;p=c[n>>2]|0;k=d+(k*72|0)+52|0;if((p|0)>0?(c[k>>2]|0)>0:0){k=c[d+(p*72|0)+4>>2]|0;if((k|0)>0?(HV(k,b,U)|0)==0:0){c[d+(w*72|0)+44>>2]=-1;c[d+(x*72|0)+44>>2]=-1;c[s>>2]=-1;c[d+((c[d+(w*72|0)+40>>2]|0)*72|0)+52>>2]=w;break}c[d+(x*72|0)+44>>2]=-1;c[d+(w*72|0)+44>>2]=-1;c[d+(w*72|0)+40>>2]=-1;c[d+((c[s>>2]|0)*72|0)+48>>2]=x;break}c[n>>2]=x;c[k>>2]=w}while(0);if(+B(+(+h[u>>3]-+h[E>>3]))<=1.0e-07?C&+B(+(+h[v>>3]-+h[D>>3]))<=1.0e-07:0){k=c[y>>2]|0;if((k|0)>0?(HV(k,b,S)|0)!=0:0){c[d+((c[m>>2]|0)*72|0)+40>>2]=x;n=d+(w*72|0)+52|0;k=w}else{c[d+((c[d+(w*72|0)+52>>2]|0)*72|0)+44>>2]=w;n=m;k=x}c[n>>2]=-1;c[d+(k*72|0)+48>>2]=-1;k=c[m>>2]|0;break}k=c[m>>2]|0;m=d+(k*72|0)+40|0;n=c[m>>2]|0;p=d+(k*72|0)+44|0;if((n|0)>0?(O=c[p>>2]|0,P=(n|0)==(x|0),(O|0)>0):0){c[d+(k*72|0)+60>>2]=P?O:n;c[d+(k*72|0)+64>>2]=P?1:2}c[m>>2]=x;c[p>>2]=w}else{if(!k){i=+h[u>>3];j=+h[H>>3];q=i-j;if(!(+B(+q)<=1.0e-07)){h[z>>3]=i;i=+h[S>>3];h[T>>3]=(+h[U>>3]-i)*(q/(+h[V>>3]-j))+i;s=(MV(T,v)|0)!=0}else s=+h[v>>3]>+h[S>>3];r=d+(x*72|0)+40|0;k=c[r>>2]|0;do if((k|0)>0?(Q=d+(x*72|0)+44|0,R=c[Q>>2]|0,(R|0)>0):0){p=d+(x*72|0)+60|0;k=c[p>>2]|0;if((k|0)<=0){c[d+(w*72|0)+40>>2]=R;c[d+(w*72|0)+44>>2]=-1;c[Q>>2]=-1;c[d+(R*72|0)+48>>2]=w;break}if((c[d+(x*72|0)+64>>2]|0)==1){c[d+(w*72|0)+40>>2]=R;c[Q>>2]=-1;c[d+(w*72|0)+44>>2]=k;c[d+((c[r>>2]|0)*72|0)+48>>2]=x;n=w;m=R}else{c[d+(w*72|0)+44>>2]=-1;X=d+(w*72|0)+40|0;c[X>>2]=c[Q>>2];m=c[r>>2]|0;c[Q>>2]=m;c[r>>2]=k;c[d+(k*72|0)+48>>2]=x;n=x;k=c[X>>2]|0}c[d+(m*72|0)+48>>2]=n;c[d+(k*72|0)+48>>2]=w;c[d+(w*72|0)+60>>2]=0;c[p>>2]=0}else G=106;while(0);do if((G|0)==106){G=0;m=d+(k*72|0)+48|0;n=c[m>>2]|0;k=d+(k*72|0)+52|0;if((n|0)>0?(c[k>>2]|0)>0:0){k=c[d+(n*72|0)+4>>2]|0;if((k|0)>0?(HV(k,b,U)|0)==0:0){c[d+(w*72|0)+44>>2]=-1;c[d+(x*72|0)+44>>2]=-1;c[r>>2]=-1;c[d+((c[d+(w*72|0)+40>>2]|0)*72|0)+52>>2]=w;break}c[d+(x*72|0)+44>>2]=-1;c[d+(w*72|0)+44>>2]=-1;c[d+(w*72|0)+40>>2]=-1;c[d+((c[r>>2]|0)*72|0)+48>>2]=x;break}c[m>>2]=x;c[k>>2]=w}while(0);if(+B(+(+h[u>>3]-+h[E>>3]))<=1.0e-07?C&+B(+(+h[v>>3]-+h[D>>3]))<=1.0e-07:0){k=c[t>>2]|0;c[d+(k*72|0)+40>>2]=x;c[d+(k*72|0)+44>>2]=-1;k=d+(x*72|0)+52|0;X=c[k>>2]|0;c[d+(X*72|0)+40>>2]=w;c[d+(X*72|0)+44>>2]=-1;c[d+(w*72|0)+48>>2]=X;c[d+(w*72|0)+52>>2]=-1;c[k>>2]=-1;k=-1}else G=116;do if((G|0)==116){G=0;k=c[t>>2]|0;c[d+(k*72|0)+40>>2]=x;m=d+(k*72|0)+44|0;if(s){c[m>>2]=w;X=d+(x*72|0)+52|0;v=c[X>>2]|0;c[d+(v*72|0)+40>>2]=w;c[d+(v*72|0)+44>>2]=-1;c[X>>2]=-1;break}else{c[m>>2]=-1;k=d+(x*72|0)+52|0;X=c[k>>2]|0;c[d+(X*72|0)+40>>2]=x;c[d+(X*72|0)+44>>2]=w;c[d+(w*72|0)+48>>2]=X;c[d+(w*72|0)+52>>2]=-1;k=c[k>>2]|0;break}}while(0);break}s=d+(x*72|0)+40|0;k=c[s>>2]|0;do if((k|0)>0?(I=d+(x*72|0)+44|0,J=c[I>>2]|0,(J|0)>0):0){r=d+(x*72|0)+60|0;k=c[r>>2]|0;if((k|0)<=0){c[d+(w*72|0)+40>>2]=J;c[d+(w*72|0)+44>>2]=-1;c[I>>2]=-1;c[d+(J*72|0)+48>>2]=w;break}if((c[d+(x*72|0)+64>>2]|0)==1){c[d+(w*72|0)+40>>2]=J;c[I>>2]=-1;c[d+(w*72|0)+44>>2]=k;c[d+((c[s>>2]|0)*72|0)+48>>2]=x;p=w;n=J}else{c[d+(w*72|0)+44>>2]=-1;X=d+(w*72|0)+40|0;c[X>>2]=c[I>>2];n=c[s>>2]|0;c[I>>2]=n;c[s>>2]=k;c[d+(k*72|0)+48>>2]=x;p=x;k=c[X>>2]|0}c[d+(n*72|0)+48>>2]=p;c[d+(k*72|0)+48>>2]=w;c[d+(w*72|0)+60>>2]=0;c[r>>2]=0}else G=51;while(0);do if((G|0)==51){G=0;n=d+(k*72|0)+48|0;p=c[n>>2]|0;k=d+(k*72|0)+52|0;if((p|0)>0?(c[k>>2]|0)>0:0){k=c[d+(p*72|0)+4>>2]|0;if((k|0)>0?(HV(k,b,U)|0)==0:0){c[d+(w*72|0)+44>>2]=-1;c[d+(x*72|0)+44>>2]=-1;c[s>>2]=-1;c[d+((c[d+(w*72|0)+40>>2]|0)*72|0)+52>>2]=w;break}c[d+(x*72|0)+44>>2]=-1;c[d+(w*72|0)+44>>2]=-1;c[d+(w*72|0)+40>>2]=-1;c[d+((c[s>>2]|0)*72|0)+48>>2]=x;break}c[n>>2]=x;c[k>>2]=w}while(0);if(+B(+(+h[u>>3]-+h[E>>3]))<=1.0e-07?C&+B(+(+h[v>>3]-+h[D>>3]))<=1.0e-07:0){k=c[y>>2]|0;if((k|0)>0?(HV(k,b,S)|0)!=0:0){c[d+((c[t>>2]|0)*72|0)+40>>2]=x;m=d+(w*72|0)+52|0;k=w}else{c[d+((c[d+(w*72|0)+48>>2]|0)*72|0)+44>>2]=w;k=x}c[m>>2]=-1;c[d+(k*72|0)+48>>2]=-1;k=c[t>>2]|0;break}k=c[t>>2]|0;m=d+(k*72|0)+40|0;n=c[m>>2]|0;p=d+(k*72|0)+44|0;if((n|0)>0?(K=c[p>>2]|0,L=(n|0)==(x|0),(K|0)>0):0){c[d+(k*72|0)+60>>2]=L?K:n;c[d+(k*72|0)+64>>2]=L?1:2}c[m>>2]=x;c[p>>2]=w}while(0);c[A>>2]=a;c[d+(x*72|0)+4>>2]=a;if((k|0)>0)x=k;else break a}U4(138424,19,1,c[15712]|0)|0}else{g=0;f=0}while(0);NV(a,F,o,1,d,e);NV(a,g,f,2,d,e);c[b+(a*56|0)+32>>2]=1;l=W;return}function FV(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;if(!(c[b+(a*56|0)+32>>2]|0)){f=b+(a*56|0)|0;g=b+(a*56|0)+16|0;h=b+(a*56|0)+36|0;c[h>>2]=c[d+((GV(f,g,c[h>>2]|0,b,e)|0)*72|0)+56>>2];a=b+(a*56|0)+40|0;c[a>>2]=c[d+((GV(g,f,c[a>>2]|0,b,e)|0)*72|0)+56>>2]}return}function GV(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0.0,i=0,j=0.0,k=0.0,l=0.0,m=0.0,n=0.0,o=0,p=0.0,q=0,r=0;o=a+8|0;q=b+8|0;a:while(1){b:do switch(c[f+(d*40|0)>>2]|0){case 3:{r=3;break a}case 2:{g=+h[o>>3];i=f+(d*40|0)+8|0;j=+h[f+(d*40|0)+16>>3];k=j+1.0e-07;do if(!(g>k)){l=j+-1.0e-07;if(!(g>3]>+h[i>>3]:0)break;if(+B(+(g-j))<=1.0e-07?(m=+h[i>>3],+B(+(+h[a>>3]-m))<=1.0e-07):0){g=+h[q>>3];do if(!(g>k)){if(!(g>3]>m:0)break;d=f+(d*40|0)+32|0;break b}while(0);d=f+(d*40|0)+36|0;break b}d=f+(d*40|0)+32|0;break b}while(0);d=f+(d*40|0)+36|0;break}case 1:{g=+h[o>>3];i=c[f+(d*40|0)+4>>2]|0;if(+B(+(g-+h[e+(i*56|0)+8>>3]))<=1.0e-07?(n=+h[a>>3],+B(+(n-+h[e+(i*56|0)>>3]))<=1.0e-07):0)j=n;else r=19;do if((r|0)==19){r=0;if(+B(+(g-+h[e+(i*56|0)+24>>3]))<=1.0e-07?(p=+h[a>>3],+B(+(p-+h[e+(i*56|0)+16>>3]))<=1.0e-07):0){j=p;break}if(!(HV(i,e,a)|0)){d=f+(d*40|0)+36|0;break b}else{d=f+(d*40|0)+32|0;break b}}while(0);if(!(+B(+(g-+h[q>>3]))<=1.0e-07))if(!(HV(i,e,b)|0)){d=f+(d*40|0)+36|0;break b}else{d=f+(d*40|0)+32|0;break b}else if(+h[b>>3]>2]|0}if((r|0)==3)return c[f+(d*40|0)+24>>2]|0;else if((r|0)==31){U4(138358,35,1,c[15712]|0)|0;qa(138394,138396,349,138408)}return 0}function HV(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0,e=0.0,f=0,g=0.0,i=0,j=0,k=0.0;f=b+(a*56|0)+16|0;g=+h[b+(a*56|0)+24>>3];i=b+(a*56|0)|0;e=+h[b+(a*56|0)+8>>3];do if(!(g>e+1.0e-07)){if(!(g>3]>+h[i>>3]:0){j=4;break}d=+h[c+8>>3];if(+B(+(g-d))<=1.0e-07){d=+h[c>>3]<+h[f>>3]?1.0:-1.0;break}if(!(+B(+(e-d))<=1.0e-07)){k=+h[f>>3];d=(+h[i>>3]-k)*(d-g)-(+h[c>>3]-k)*(e-g);break}else{d=+h[c>>3]<+h[i>>3]?1.0:-1.0;break}}else j=4;while(0);do if((j|0)==4){d=+h[c+8>>3];if(+B(+(g-d))<=1.0e-07){d=+h[c>>3]<+h[f>>3]?1.0:-1.0;break}if(!(+B(+(e-d))<=1.0e-07)){k=+h[i>>3];d=(+h[f>>3]-k)*(d-e)-(+h[c>>3]-k)*(g-e);break}else{d=+h[c>>3]<+h[i>>3]?1.0:-1.0;break}}while(0);return d>0.0|0}function IV(a,b,d){a=a|0;b=b|0;d=d|0;return c[b+((c[((d|0)==1?b+(a*56|0)+48|0:b+(a*56|0)+44|0)>>2]|0)*56|0)+32>>2]|0}function JV(a){a=a|0;var b=0,d=0,e=0;e=l;l=l+16|0;d=e;b=c[47395]|0;if((b|0)<(c[47394]|0)){c[a+(b*72|0)>>2]=-1;c[a+(b*72|0)+4>>2]=-1;c[a+(b*72|0)+68>>2]=1;c[47395]=b+1;l=e;return b|0}else{e=c[15712]|0;c[d>>2]=b;w4(e,138483,d)|0;qa(138394,138396,88,138521)}return 0}function KV(){var a=0;a=c[47396]|0;if((a|0)<(c[47393]|0)){c[47396]=a+1;return a|0}else{U4(138444,30,1,c[15712]|0)|0;qa(138394,138396,72,138475)}return 0}function LV(a,b){a=a|0;b=b|0;var c=0.0,d=0.0;c=+h[a+8>>3];d=+h[b+8>>3];if(!(c>d+1.0e-07))if(c>3]>=+h[b>>3]&1;else a=1;return a|0}function MV(a,b){a=a|0;b=b|0;var c=0.0,d=0.0;c=+h[a+8>>3];d=+h[b+8>>3];if(!(cd+1.0e-07)a=0;else a=+h[a>>3]<+h[b>>3]&1;else a=1;return a|0}function NV(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;q=f+(d*72|0)+24|0;p=(e|0)==1;a:while(1){o=f+(b*72|0)+24|0;j=f+(b*72|0)+48|0;k=f+(b*72|0)+52|0;l=f+(b*72|0)|0;m=f+(b*72|0)+4|0;n=f+(b*72|0)+56|0;if((b|0)<=0)break;while(1){if(!(LV(o,q)|0))break a;d=c[j>>2]|0;e=(d|0)>0;do if(p){if(e?(c[f+(d*72|0)+4>>2]|0)==(a|0):0)break;d=c[k>>2]|0;if((d|0)<=0){b=d;continue a}if((c[f+(d*72|0)+4>>2]|0)!=(a|0)){b=d;continue a}}else{if(e?(c[f+(d*72|0)>>2]|0)==(a|0):0)break;d=c[k>>2]|0;if((d|0)<=0){b=d;continue a}if((c[f+(d*72|0)>>2]|0)!=(a|0)){b=d;continue a}}while(0);if((c[l>>2]|0)!=(c[f+(d*72|0)>>2]|0)){b=d;continue a}if((c[m>>2]|0)!=(c[f+(d*72|0)+4>>2]|0)){b=d;continue a}r=c[f+(d*72|0)+56>>2]|0;e=c[g+(r*40|0)+28>>2]|0;h=g+(e*40|0)+32|0;i=c[n>>2]|0;if((c[h>>2]|0)==(r|0))c[h>>2]=i;else c[g+(e*40|0)+36>>2]=i;e=c[f+(d*72|0)+48>>2]|0;c[j>>2]=e;do if((e|0)>0){h=f+(e*72|0)+40|0;if((c[h>>2]|0)==(d|0)){c[h>>2]=b;break}e=f+(e*72|0)+44|0;if((c[e>>2]|0)==(d|0))c[e>>2]=b}while(0);e=c[f+(d*72|0)+52>>2]|0;c[k>>2]=e;do if((e|0)>0){h=f+(e*72|0)+40|0;if((c[h>>2]|0)==(d|0)){c[h>>2]=b;break}e=f+(e*72|0)+44|0;if((c[e>>2]|0)==(d|0))c[e>>2]=b}while(0);r=f+(d*72|0)+24|0;c[o>>2]=c[r>>2];c[o+4>>2]=c[r+4>>2];c[o+8>>2]=c[r+8>>2];c[o+12>>2]=c[r+12>>2];c[f+(d*72|0)+68>>2]=2}}return}function OV(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0.0;e=+h[b+8>>3];f=+h[d+8>>3];do if(!(e>f+1.0e-07)){if(!(+B(+(e-f))<=1.0e-07)){c[a>>2]=c[d>>2];c[a+4>>2]=c[d+4>>2];c[a+8>>2]=c[d+8>>2];c[a+12>>2]=c[d+12>>2];break}if(+h[b>>3]>+h[d>>3]+1.0e-07){c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];break}else{c[a>>2]=c[d>>2];c[a+4>>2]=c[d+4>>2];c[a+8>>2]=c[d+8>>2];c[a+12>>2]=c[d+12>>2];break}}else{c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2]}while(0);return}function PV(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0.0;e=+h[b+8>>3];f=+h[d+8>>3];do if(!(e>2]=c[d>>2];c[a+4>>2]=c[d+4>>2];c[a+8>>2]=c[d+8>>2];c[a+12>>2]=c[d+12>>2];break}if(+h[b>>3]<+h[d>>3]){c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];break}else{c[a>>2]=c[d>>2];c[a+4>>2]=c[d+4>>2];c[a+8>>2]=c[d+8>>2];c[a+12>>2]=c[d+12>>2];break}}else{c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2]}while(0);return}function QV(a){a=a|0;var b=0;b=JK(8)|0;if(b|0){c[b+4>>2]=a;c[b>>2]=0}return b|0}function RV(a,b){a=a|0;b=b|0;if(b){b=QV(b)|0;c[b>>2]=a;a=b}return a|0}function SV(a){a=a|0;var b=0;do{b=a;a=c[a>>2]|0;U1(b)}while((a|0)!=0);return}function TV(){var a=0;a=JK(1992)|0;if(a|0)c[a>>2]=UV(a)|0;return a|0}function UV(a){a=a|0;var b=0;b=_V(a)|0;c[b+4>>2]=0;a=a+1972|0;c[a>>2]=(c[a>>2]|0)+1;return b|0}function VV(a){a=a|0;WV(a,c[a>>2]|0);U1(c[a>>2]|0);U1(a);return 0}function WV(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;g=a+1980|0;h=a+1912|0;i=a+1936|0;a:do if((c[b+4>>2]|0)>0){d=0;while(1){if((d|0)==64)break a;e=b+8+(d*20|0)+16|0;f=c[e>>2]|0;if(f|0?(WV(a,f),U1(c[e>>2]|0),eW(b,d),c[g>>2]=(c[g>>2]|0)+-1,c[h>>2]|0):0)c[i>>2]=(c[i>>2]|0)+1;d=d+1|0}}else{d=0;while(1){if((d|0)==64)break a;if(c[b+8+(d*20|0)+16>>2]|0?(eW(b,d),c[g>>2]=(c[g>>2]|0)+-1,c[h>>2]|0):0)c[i>>2]=(c[i>>2]|0)+1;d=d+1|0}}while(0);return}function XV(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;if(!b)qa(138879,138529,194,138537);e=c[b+4>>2]|0;if((e|0)<=-1)qa(138549,138529,195,138537);if(!d)qa(138821,138529,196,138537);i=a+1952|0;c[i>>2]=(c[i>>2]|0)+1;a:do if((e|0)>0){i=0;e=0;while(1){if((i|0)==64)break a;f=b+8+(i*20|0)+16|0;if((c[f>>2]|0)!=0?(jW(d,b+8+(i*20|0)|0)|0)!=0:0){g=XV(a,c[f>>2]|0,d)|0;if(!e)e=g;else{f=e;while(1){h=c[f>>2]|0;if(!h)break;else f=h}c[f>>2]=g}}i=i+1|0}}else{g=0;e=0;while(1){if((g|0)==64)break a;f=b+8+(g*20|0)|0;if((c[b+8+(g*20|0)+16>>2]|0)!=0?(jW(d,f)|0)!=0:0)e=RV(e,f)|0;g=g+1|0}}while(0);return e|0}function YV(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;p=l;l=l+64|0;k=p+52|0;m=p+32|0;n=p+16|0;o=p;c[k>>2]=0;if(!((b|0)!=0&(e|0)!=0))qa(138735,138529,247,138563);if((f|0)>-1?(j=c[e>>2]|0,(c[j+4>>2]|0)>=(f|0)):0){g=0;while(1){if((g|0)>=2)break;if((c[b+(g<<2)>>2]|0)>(c[b+(g+2<<2)>>2]|0)){h=8;break}else g=g+1|0}if((h|0)==8)qa(138610,138529,250,138563);i=a+1912|0;g=a+1908|0;h=c[g>>2]|0;if(c[i>>2]|0){q=h|0?a+1924|0:a+1916|0;c[q>>2]=(c[q>>2]|0)+1}if(!h){q=a+1964|0;c[q>>2]=(c[q>>2]|0)+1}if(!(ZV(a,b,d,j,k,f)|0))g=0;else{if(c[i>>2]|0){q=c[g>>2]|0?a+1948|0:a+1944|0;c[q>>2]=(c[q>>2]|0)+1}g=_V(a)|0;q=a+1976|0;c[q>>2]=(c[q>>2]|0)+1;q=c[e>>2]|0;c[g+4>>2]=(c[q+4>>2]|0)+1;bW(n,q);c[m>>2]=c[n>>2];c[m+4>>2]=c[n+4>>2];c[m+8>>2]=c[n+8>>2];c[m+12>>2]=c[n+12>>2];q=m+16|0;c[q>>2]=c[e>>2];dW(a,m,g,0)|0;bW(o,c[k>>2]|0);c[m>>2]=c[o>>2];c[m+4>>2]=c[o+4>>2];c[m+8>>2]=c[o+8>>2];c[m+12>>2]=c[o+12>>2];c[q>>2]=c[k>>2];dW(a,m,g,0)|0;c[e>>2]=g;g=a+1980|0;c[g>>2]=(c[g>>2]|0)+2;g=1}l=p;return g|0}qa(138575,138529,248,138563);return 0}function ZV(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;q=l;l=l+80|0;m=q+52|0;n=q+48|0;o=q+32|0;p=q+16|0;k=q;c[n>>2]=0;if(!((b|0)!=0&(e|0)!=0&(f|0)!=0))qa(138653,138529,311,138667);if((g|0)>-1?(i=e+4|0,h=c[i>>2]|0,(h|0)>=(g|0)):0){if(c[a+1912>>2]|0){h=c[a+1908>>2]|0?a+1948|0:a+1944|0;c[h>>2]=(c[h>>2]|0)+1;h=c[i>>2]|0}do if((h|0)>(g|0)){i=cW(b,e)|0;h=e+8+(i*20|0)+16|0;i=e+8+(i*20|0)|0;if(!(ZV(a,b,d,c[h>>2]|0,n,g)|0)){iW(o,b,i);c[i>>2]=c[o>>2];c[i+4>>2]=c[o+4>>2];c[i+8>>2]=c[o+8>>2];c[i+12>>2]=c[o+12>>2];j=0;break}else{bW(p,c[h>>2]|0);c[i>>2]=c[p>>2];c[i+4>>2]=c[p+4>>2];c[i+8>>2]=c[p+8>>2];c[i+12>>2]=c[p+12>>2];j=c[n>>2]|0;c[m+16>>2]=j;bW(k,j);c[m>>2]=c[k>>2];c[m+4>>2]=c[k+4>>2];c[m+8>>2]=c[k+8>>2];c[m+12>>2]=c[k+12>>2];j=a+1980|0;c[j>>2]=(c[j>>2]|0)+1;j=dW(a,m,e,f)|0;break}}else if((h|0)==(g|0)){c[m>>2]=c[b>>2];c[m+4>>2]=c[b+4>>2];c[m+8>>2]=c[b+8>>2];c[m+12>>2]=c[b+12>>2];c[m+16>>2]=d;j=a+1980|0;c[j>>2]=(c[j>>2]|0)+1;j=dW(a,m,e,f)|0;break}else qa(138712,138529,341,138667);while(0);l=q;return j|0}qa(138680,138529,312,138667);return 0}function _V(a){a=a|0;a=a+1968|0;c[a>>2]=(c[a>>2]|0)+1;a=T1(1288)|0;$V(a);return a|0}function $V(a){a=a|0;var b=0;c[a>>2]=0;c[a+4>>2]=-1;b=0;while(1){if((b|0)==64)break;aW(a+8+(b*20|0)|0);b=b+1|0}return}function aW(a){a=a|0;fW(a);c[a+16>>2]=0;return}function bW(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=l;l=l+32|0;g=i+16|0;h=i;if(!b)qa(138879,138718,99,138725);fW(g);d=1;f=0;while(1){if((f|0)==64)break;do if(c[b+8+(f*20|0)+16>>2]|0){e=b+8+(f*20|0)|0;if(!d){iW(h,g,e);c[g>>2]=c[h>>2];c[g+4>>2]=c[h+4>>2];c[g+8>>2]=c[h+8>>2];c[g+12>>2]=c[h+12>>2];d=0;break}else{c[g>>2]=c[e>>2];c[g+4>>2]=c[e+4>>2];c[g+8>>2]=c[e+8>>2];c[g+12>>2]=c[e+12>>2];d=0;break}}while(0);f=f+1|0}c[a>>2]=c[g>>2];c[a+4>>2]=c[g+4>>2];c[a+8>>2]=c[g+8>>2];c[a+12>>2]=c[g+12>>2];l=i;return}function cW(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;k=l;l=l+32|0;i=k+16|0;j=k;if(!((a|0)!=0&(b|0)!=0))qa(138735,138718,125,138742);d=0;e=0;f=0;g=1;h=0;while(1){if((h|0)==64)break;if(c[b+8+(h*20|0)+16>>2]|0){n=b+8+(h*20|0)|0;p=hW(n)|0;iW(j,a,n);c[i>>2]=c[j>>2];c[i+4>>2]=c[j+4>>2];c[i+8>>2]=c[j+8>>2];c[i+12>>2]=c[j+12>>2];n=(hW(i)|0)-p|0;m=(g|0)!=0|(n|0)<(f|0);o=m|(p|0)<(e|0)&(n|0)==(f|0);d=o?h:d;e=o?p:e;f=o?n:f;g=m?0:g}h=h+1|0}l=k;return d|0}function dW(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;if(!b)qa(138901,138718,167,138753);if(!d)qa(138879,138718,168,138753);do if((c[d>>2]|0)<64){a=0;while(1){if((a|0)>=64){e=10;break}if(!(c[d+8+(a*20|0)+16>>2]|0)){e=8;break}a=a+1|0}if((e|0)==8){f=d+8+(a*20|0)|0;c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];c[f+16>>2]=c[b+16>>2];f=0;g=d;break}else if((e|0)==10)qa(138763,138718,178,138753)}else{if(c[a+1912>>2]|0){h=c[a+1908>>2]|0?a+1948|0:a+1944|0;c[h>>2]=(c[h>>2]|0)+1}if(!e)qa(138776,138718,187,138753);else{kW(a,d,b,e);f=1;g=(c[d+4>>2]|0)==0?a+1972|0:a+1976|0;break}}while(0);c[g>>2]=(c[g>>2]|0)+1;return f|0}function eW(a,b){a=a|0;b=b|0;if(!((a|0)!=0&b>>>0<64))qa(138780,138718,201,138808);if(!(c[a+8+(b*20|0)+16>>2]|0))qa(139302,138718,202,138808);else{aW(a+8+(b*20|0)|0);c[a>>2]=(c[a>>2]|0)+-1;return}}function fW(a){a=a|0;var b=0;b=0;while(1){if((b|0)==4)break;c[a+(b<<2)>>2]=0;b=b+1|0}return}function gW(a){a=a|0;var b=0,d=0,e=0;e=l;l=l+16|0;d=e;c[d>>2]=1;c[d+8>>2]=-1;b=1;while(1){if((b|0)==2)break;c[d+(b+2<<2)>>2]=0;c[d+(b<<2)>>2]=0;b=b+1|0}c[a>>2]=c[d>>2];c[a+4>>2]=c[d+4>>2];c[a+8>>2]=c[d+8>>2];c[a+12>>2]=c[d+12>>2];l=e;return}function hW(a){a=a|0;var b=0,d=0,e=0;if(!a)qa(138821,138823,128,138835);a:do if((c[a>>2]|0)>(c[a+8>>2]|0))b=0;else{b=1;d=0;while(1){if((d|0)==2)break a;e=O(c[a+(d+2<<2)>>2]|0,b)|0;b=e-(c[a+(d<<2)>>2]|0)|0;d=d+1|0}}while(0);return b|0}function iW(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;g=l;l=l+16|0;f=g;if(!((b|0)!=0&(d|0)!=0))qa(138844,138823,195,138852);do if((c[b>>2]|0)>(c[b+8>>2]|0)){c[a>>2]=c[d>>2];c[a+4>>2]=c[d+4>>2];c[a+8>>2]=c[d+8>>2];c[a+12>>2]=c[d+12>>2]}else{if((c[d>>2]|0)>(c[d+8>>2]|0)){c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];break}else e=0;while(1){if((e|0)==2)break;j=c[b+(e<<2)>>2]|0;h=c[d+(e<<2)>>2]|0;c[f+(e<<2)>>2]=(j|0)<(h|0)?j:h;h=e+2|0;j=c[b+(h<<2)>>2]|0;i=c[d+(h<<2)>>2]|0;c[f+(h<<2)>>2]=(j|0)>(i|0)?j:i;e=e+1|0}c[a>>2]=c[f>>2];c[a+4>>2]=c[f+4>>2];c[a+8>>2]=c[f+8>>2];c[a+12>>2]=c[f+12>>2]}while(0);l=g;return}function jW(a,b){a=a|0;b=b|0;var d=0,e=0;if((a|0)!=0&(b|0)!=0)d=0;else qa(138864,138823,216,138871);while(1){if((d|0)>=2){d=1;break}e=d+2|0;if((c[a+(d<<2)>>2]|0)>(c[b+(e<<2)>>2]|0)){d=0;break}if((c[b+(d<<2)>>2]|0)>(c[a+(e<<2)>>2]|0)){d=0;break}else d=d+1|0}return d|0}function kW(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0;if(!b)qa(138879,138881,40,138891);if(!d)qa(138901,138881,41,138891);j=a+1912|0;if(c[j>>2]|0){i=c[a+1908>>2]|0?a+1932|0:a+1928|0;c[i>>2]=(c[i>>2]|0)+1}h=b+4|0;i=c[h>>2]|0;lW(a,b,d);d=a+1324|0;mW(a);f=hW(a+1852|0)|0;f=(hW(a+1868|0)|0)+f|0;if(c[j>>2]|0?(f|0)!=0&(c[a+1908>>2]|0)==0:0){j=a+1960|0;g[j>>2]=+((c[a+1320>>2]|0)>>>0)/+(f|0)+ +g[j>>2]}j=_V(a)|0;c[e>>2]=j;c[h>>2]=i;c[j+4>>2]=i;nW(a,b,j,d);if(((c[c[e>>2]>>2]|0)+(c[b>>2]|0)|0)==65)return;else qa(138903,138881,86,138891)}function lW(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;h=l;l=l+16|0;g=h;if(!b)qa(138879,138881,106,139290);if(!d)qa(138901,138881,107,139290);else e=0;while(1){if((e|0)>=64)break;if(!(c[b+8+(e*20|0)+16>>2]|0)){f=7;break}j=b+8+(e*20|0)|0;i=a+4+(e*20|0)|0;c[i>>2]=c[j>>2];c[i+4>>2]=c[j+4>>2];c[i+8>>2]=c[j+8>>2];c[i+12>>2]=c[j+12>>2];c[i+16>>2]=c[j+16>>2];e=e+1|0}if((f|0)==7)qa(139302,138881,111,139290);e=a+4|0;j=a+1284|0;c[j>>2]=c[d>>2];c[j+4>>2]=c[d+4>>2];c[j+8>>2]=c[d+8>>2];c[j+12>>2]=c[d+12>>2];c[j+16>>2]=c[d+16>>2];d=a+1304|0;c[d>>2]=c[e>>2];c[d+4>>2]=c[e+4>>2];c[d+8>>2]=c[e+8>>2];c[d+12>>2]=c[e+12>>2];e=1;while(1){if((e|0)==65)break;iW(g,d,a+4+(e*20|0)|0);c[d>>2]=c[g>>2];c[d+4>>2]=c[g+4>>2];c[d+8>>2]=c[g+8>>2];c[d+12>>2]=c[g+12>>2];e=e+1|0}c[a+1320>>2]=hW(d)|0;$V(b);l=h;return}function mW(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;u=l;l=l+48|0;i=u+32|0;k=u+16|0;m=u;oW(a);pW(a);q=a+1844|0;s=a+1848|0;t=a+1892|0;n=a+1852|0;o=a+1884|0;p=a+1868|0;j=a+1888|0;f=0;e=0;while(1){d=c[q>>2]|0;b=c[s>>2]|0;if((b+d|0)>=65)break;h=65-(c[t>>2]|0)|0;if((d|0)<(h|0)&(b|0)<(h|0)){g=-1;h=0}else{r=12;break}while(1){if((h|0)==65)break;if(!(c[a+1584+(h<<2)>>2]|0)){v=a+4+(h*20|0)|0;iW(k,v,n);c[i>>2]=c[k>>2];c[i+4>>2]=c[k+4>>2];c[i+8>>2]=c[k+8>>2];c[i+12>>2]=c[k+12>>2];b=hW(i)|0;d=c[o>>2]|0;iW(m,v,p);c[i>>2]=c[m>>2];c[i+4>>2]=c[m+4>>2];c[i+8>>2]=c[m+8>>2];c[i+12>>2]=c[m+12>>2];v=hW(i)|0;b=v-(c[j>>2]|0)+(d-b)|0;d=(b|0)>-1;b=d?b:0-b|0;d=(d^1)&1;if((b|0)<=(g|0))if((b|0)==(g|0)){v=(c[a+1844+(d<<2)>>2]|0)<(c[a+1844+(f<<2)>>2]|0);b=g;d=v?d:f;e=v?h:e}else{b=g;d=f}else e=h}else{b=g;d=f}g=b;h=h+1|0;f=d}qW(a,e,f)}if((r|0)==12){b=(d|0)>=(65-(c[t>>2]|0)|0)&1;d=0;while(1){if((d|0)==65)break;if(!(c[a+1584+(d<<2)>>2]|0))qW(a,d,b);d=d+1|0}d=c[q>>2]|0;b=c[s>>2]|0}if((b+d|0)!=65)qa(139046,138881,210,139132);v=c[t>>2]|0;if((d|0)<(v|0)|(b|0)<(v|0))qa(139143,138881,212,139132);else{l=u;return}}function nW(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0;if(!b)qa(138879,138881,297,138943);if(!d)qa(138953,138881,298,138943);if(!e)qa(138955,138881,299,138943);else f=0;while(1){if((f|0)>=65){e=14;break}e=c[a+1324+(f<<2)>>2]|0;if(e>>>0>=2){e=9;break}switch(e|0){case 0:{dW(a,a+4+(f*20|0)|0,b,0)|0;break}case 1:{dW(a,a+4+(f*20|0)|0,d,0)|0;break}default:{}}f=f+1|0}if((e|0)==9)qa(138957,138881,303,138943);else if((e|0)==14)return}function oW(a){a=a|0;var b=0,d=0,e=0,f=0;d=l;l=l+16|0;e=d;c[a+1848>>2]=0;c[a+1844>>2]=0;b=a+1852|0;f=a+1868|0;gW(e);c[f>>2]=c[e>>2];c[f+4>>2]=c[e+4>>2];c[f+8>>2]=c[e+8>>2];c[f+12>>2]=c[e+12>>2];c[b>>2]=c[e>>2];c[b+4>>2]=c[e+4>>2];c[b+8>>2]=c[e+8>>2];c[b+12>>2]=c[e+12>>2];c[a+1888>>2]=0;c[a+1884>>2]=0;b=0;while(1){if((b|0)==65)break;c[a+1584+(b<<2)>>2]=0;c[a+1324+(b<<2)>>2]=-1;b=b+1|0}l=d;return}function pW(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;o=l;l=l+304|0;k=o+32|0;m=o+16|0;n=o;b=0;while(1){if((b|0)==65)break;c[k+(b<<2)>>2]=hW(a+4+(b*20|0)|0)|0;b=b+1|0}b=0;d=0;e=0;g=0;a:while(1){if((g|0)==64)break;i=g+1|0;j=a+4+(g*20|0)|0;h=k+(g<<2)|0;f=i;while(1){if((f|0)==65){g=i;continue a}iW(n,j,a+4+(f*20|0)|0);c[m>>2]=c[n>>2];c[m+4>>2]=c[n+4>>2];c[m+8>>2]=c[n+8>>2];c[m+12>>2]=c[n+12>>2];p=hW(m)|0;p=p-(c[h>>2]|0)-(c[k+(f<<2)>>2]|0)|0;q=p>>>0>e>>>0;r=q?f:b;f=f+1|0;b=r;d=q?g:d;e=q?p:e}}qW(a,d,0);qW(a,b,1);l=o;return}function qW(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;i=l;l=l+16|0;h=i;e=a+1584+(b<<2)|0;if(c[e>>2]|0)qa(139246,138881,257,139281);c[a+1324+(b<<2)>>2]=d;c[e>>2]=1;g=a+1844+(d<<2)|0;f=a+1852+(d<<4)|0;e=a+4+(b*20|0)|0;if(!(c[g>>2]|0)){c[f>>2]=c[e>>2];c[f+4>>2]=c[e+4>>2];c[f+8>>2]=c[e+8>>2];c[f+12>>2]=c[e+12>>2]}else{iW(h,e,f);c[f>>2]=c[h>>2];c[f+4>>2]=c[h+4>>2];c[f+8>>2]=c[h+8>>2];c[f+12>>2]=c[h+12>>2]}c[a+1884+(d<<2)>>2]=hW(f)|0;c[g>>2]=(c[g>>2]|0)+1;l=i;return}function rW(){var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;t=l;l=l+1200|0;r=t+800|0;g=t;c[47397]=0;c[47398]=-2;f=r;i=200;n=g;p=0;q=0;o=r;a:while(1){b[o>>1]=p;if((f+(i<<1)+-2|0)>>>0>o>>>0)k=i;else{m=o-f>>1;e=m+1|0;if(i>>>0>9999){s=95;break}k=i<<1;k=k>>>0<1e4?k:1e4;h=T1(k*6|3)|0;if(h){W6(h|0,f|0,e<<1|0)|0;i=h+(k>>>1<<2)|0;W6(i|0,n|0,e<<2|0)|0;if((f|0)==(r|0)){e=0;f=h}else{U1(f);e=0;f=h}}else{e=4;i=n}j=(e|0)==0;h=f+(m<<1)|0;switch((j?((f+(k<<1)+-2|0)>>>0>h>>>0?0:9):e)&15){case 9:{e=1;s=96;break a}case 4:{s=95;break a}case 0:{g=j?i+(m<<2)|0:g;n=i;o=j?h:o;break}default:{e=0;break a}}}if((p|0)==31){e=0;s=96;break}e=b[65534+(p<<1)>>1]|0;j=e<<16>>16;do if(e<<16>>16!=-82){h=c[47398]|0;if((h|0)==-2){h=GX()|0;c[47398]=h}if((h|0)>=1)if(h>>>0<296)i=d[139321+h>>0]|0;else i=2;else{c[47398]=0;i=0}h=i+j|0;if(h>>>0<=271?(i|0)==(a[139617+h>>0]|0):0){p=a[139889+h>>0]|0;e=p<<24>>24;if(p<<24>>24<1){h=0-e|0;s=23;break}else{c[47398]=-2;g=g+4|0;c[g>>2]=c[47399];j=(q|0)==0?0:q+-1|0;h=o;break}}else s=22}else s=22;while(0);if((s|0)==22){s=0;p=a[140161+p>>0]|0;h=p&255;if(!(p<<24>>24)){h=c[47398]|0;b:do switch(q|0){case 0:{c[47397]=(c[47397]|0)+1;MW(143761);h=o;break}case 3:if((h|0)<1)if(!h){e=1;s=96;break a}else{h=o;break b}else{c[47398]=-2;h=o;break b}default:h=o}while(0);while(1){if(e<<16>>16==8)break;if((h|0)==(f|0)){e=1;s=96;break a}e=h+-2|0;g=g+-4|0;h=e;e=b[65534+(b[e>>1]<<1)>>1]|0}g=g+4|0;c[g>>2]=c[47399];e=1;j=3}else s=23}do if((s|0)==23){s=0;j=d[140277+h>>0]|0;e=c[g+(1-j<<2)>>2]|0;do switch(h|0){case 4:{s=26;break a}case 2:{c[47400]=sW(c[g+-4>>2]|0,2)|0;break}case 3:{c[47400]=sW(c[g+-4>>2]|0,1)|0;break}case 5:{e=uW()|0;break}case 8:{vW(c[47401]|0);break}case 9:{wW(c[g>>2]|0);break}case 18:{xW(c[g>>2]|0);break}case 19:{yW();break}case 20:{xW(c[g>>2]|0);break}case 21:{yW();break}case 22:{xW(c[g>>2]|0);break}case 23:{yW();break}case 24:{xW(c[g>>2]|0);break}case 25:{yW();break}case 26:{xW(c[g>>2]|0);break}case 27:{yW();break}case 28:{xW(c[g>>2]|0);break}case 29:{yW();break}case 30:{xW(c[g>>2]|0);break}case 31:{yW();break}case 32:{xW(c[g>>2]|0);break}case 33:{yW();break}case 34:{e=c[g+-4>>2]|0;break}case 35:{e=c[g>>2]|0;break}case 38:{e=c[47401]|0;i=c[e+4>>2]|0;if(i>>>0>=(c[e+8>>2]|0)>>>0){lA(e,1)|0;i=c[47401]|0;e=i;i=c[i+4>>2]|0}a[i>>0]=0;p=c[e>>2]|0;c[e+4>>2]=p;if(zW(p)|0){s=51;break a}c[(c[g>>2]|0)+80>>2]=c[47402];e=Vz(56032,c[4580]|0)|0;c[(c[g>>2]|0)+84>>2]=e;c[47402]=c[g>>2];c[(c[g>>2]|0)+108>>2]=c[c[47403]>>2];e=c[g>>2]|0;break}case 39:{e=c[47401]|0;i=c[e+4>>2]|0;if(i>>>0>=(c[e+8>>2]|0)>>>0){lA(e,1)|0;i=c[47401]|0;e=i;i=c[i+4>>2]|0}a[i>>0]=0;p=c[e>>2]|0;c[e+4>>2]=p;if(zW(p)|0){s=56;break a}e=c[47402]|0;c[47402]=c[e+80>>2];break}case 40:{e=c[g>>2]|0;break}case 41:{e=c[g+-4>>2]|0;break}case 42:{e=c[g+-4>>2]|0;break}case 43:{e=c[g+-4>>2]|0;break}case 44:{e=c[g+-4>>2]|0;break}case 45:{e=c[g+-4>>2]|0;break}case 48:{e=c[g>>2]|0;break}case 49:{e=c[g>>2]|0;break}case 50:{a[(c[g+-8>>2]|0)+12>>0]=1;e=c[g>>2]|0;break}case 51:{AW();break}case 52:{e=BW()|0;break}case 53:{e=c[g>>2]|0;break}case 54:{e=c[g>>2]|0;break}case 55:{e=(c[g+-8>>2]|0)+100|0;a[e>>0]=a[e>>0]|1;e=c[g>>2]|0;break}case 56:{CW(c[g+-4>>2]|0,c[g>>2]|0,1);break}case 57:{e=c[g+-12>>2]|0;break}case 58:{CW(c[g+-4>>2]|0,c[g>>2]|0,2);break}case 59:{e=c[g+-12>>2]|0;break}case 60:{CW(c[g+-4>>2]|0,c[g>>2]|0,3);break}case 61:{e=c[g+-12>>2]|0;break}case 62:{CW(c[g>>2]|0,uW()|0,2);break}case 63:{e=c[g+-8>>2]|0;break}case 64:{e=c[g+-4>>2]|0;break}case 65:{e=c[g>>2]|0;break}default:{}}while(0);i=0-j|0;p=g+(i<<2)|0;i=o+(i<<1)|0;g=p+4|0;c[p+4>>2]=e;e=(d[140449+h>>0]|0)+-41|0;p=b[i>>1]|0;h=p+(b[65766+(e<<1)>>1]|0)|0;if(h>>>0<272?(a[139617+h>>0]|0)==(p|0):0){e=a[139889+h>>0]|0;j=q;h=i;break}e=a[140519+e>>0]|0;j=q;h=i}while(0);i=k;p=e;q=j;o=h+2|0}if((s|0)==26){tW();e=1;s=96}else if((s|0)==51){MW(140347);tW();e=1;s=96}else if((s|0)==56){MW(140398);tW();e=1;s=96}else if((s|0)==95){MW(140558);e=2;s=96}if((s|0)==96)if((f|0)!=(r|0))U1(f);l=t;return e|0}function sW(b,d){b=b|0;d=d|0;var e=0;e=JK(8)|0;a[e+4>>0]=d;c[e>>2]=b;return e|0}function tW(){var a=0,b=0;a=c[47402]|0;b=c[47400]|0;if(b|0){mU(b,1);c[47400]=0}c[14021]=67;while(1){if(!a)break;b=c[a+80>>2]|0;GW(a);a=b}c[14021]=56;c[14030]=68;b=c[47405]|0;nb[c[b>>2]&63](b,0,64)|0;c[14030]=56;c[14039]=69;b=c[47406]|0;nb[c[b>>2]&63](b,0,64)|0;c[14039]=56;JW();return}function uW(){var a=0,d=0,e=0,f=0,g=0,h=0;e=c[47406]|0;f=JK(40)|0;if(Xz(c[47405]|0)|0)wW(0);a=Xz(e)|0;b[f+4>>1]=a;a:do if(!a)a=e;else{c[f>>2]=JK(a*24|0)|0;a=0;d=nb[c[e>>2]&63](e,0,128)|0;while(1){if(!d){a=e;break a}g=(c[f>>2]|0)+(a*24|0)|0;h=d+8|0;c[g>>2]=c[h>>2];c[g+4>>2]=c[h+4>>2];c[g+8>>2]=c[h+8>>2];c[g+12>>2]=c[h+12>>2];c[g+16>>2]=c[h+16>>2];c[g+20>>2]=c[h+20>>2];a=a+1|0;d=nb[c[e>>2]&63](e,d,8)|0}}while(0);nb[c[a>>2]&63](e,0,64)|0;return f|0}function vW(b){b=b|0;var d=0,e=0,f=0;e=JK(64)|0;f=b+4|0;d=c[f>>2]|0;if(d>>>0>=(c[b+8>>2]|0)>>>0){lA(b,1)|0;d=c[f>>2]|0}a[d>>0]=0;b=c[b>>2]|0;c[f>>2]=b;c[e+8>>2]=D4(b)|0;c[e+12>>2]=c[c[47403]>>2];f=c[47405]|0;nb[c[f>>2]&63](f,e,1)|0;return}function wW(d){d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;i=JK(32)|0;j=c[47405]|0;e=Xz(j)|0;k=i+8|0;a[i+14>>0]=d;a:do if(!e){c[k>>2]=JK(56)|0;b[i+12>>1]=1;h=D4(195059)|0;k=c[k>>2]|0;c[k>>2]=h;c[k+4>>2]=c[c[47403]>>2]}else{b[i+12>>1]=e;c[k>>2]=JK(e*56|0)|0;d=0;e=Tz(j)|0;while(1){if(!e)break a;f=(c[k>>2]|0)+(d*56|0)|0;g=e+8|0;h=f+56|0;do{c[f>>2]=c[g>>2];f=f+4|0;g=g+4|0}while((f|0)<(h|0));d=d+1|0;e=c[e>>2]|0}}while(0);nb[c[j>>2]&63](j,0,64)|0;k=c[47406]|0;nb[c[k>>2]&63](k,i,1)|0;return}function xW(a){a=a|0;var b=0,d=0.0,e=0,f=0,g=0,i=0,j=0;j=l;l=l+32|0;g=j;i=JK(8)|0;f=c[c[47403]>>2]|0;c[g>>2]=c[a>>2];c[g+4>>2]=c[a+4>>2];c[g+8>>2]=c[a+8>>2];c[g+12>>2]=c[a+12>>2];c[g+16>>2]=c[a+16>>2];c[g+20>>2]=c[a+20>>2];c[g+24>>2]=c[a+24>>2];c[g+28>>2]=c[a+28>>2];if(f|0){a=g+4|0;if((c[a>>2]|0)==0?(b=c[f+4>>2]|0,b|0):0)c[a>>2]=b;a=g+16|0;if(+h[a>>3]<0.0?(d=+h[f+16>>3],d>=0.0):0)h[a>>3]=d;if((c[g>>2]|0)==0?(e=c[f>>2]|0,e|0):0)c[g>>2]=e;a=c[f+24>>2]&127;if(a|0){f=g+24|0;e=c[f>>2]|0;c[f>>2]=e&127|a|e&-128}}f=c[(c[47404]|0)+144>>2]|0;c[i>>2]=nb[c[f>>2]&63](f,g,1)|0;c[i+4>>2]=c[47403];c[47403]=i;l=j;return}function yW(){var a=0,b=0;b=c[47403]|0;a=c[b+4>>2]|0;U1(b);c[47403]=a;return}function zW(b){b=b|0;var c=0;while(1){c=a[b>>0]|0;if(!(c<<24>>24)){b=0;break}if(c<<24>>24==32)b=b+1|0;else{b=1;break}}return b|0}function AW(){var b=0,d=0,e=0;e=Vz(56068,c[4580]|0)|0;b=c[47402]|0;d=JK(16)|0;c[d+8>>2]=e;if(a[b+112>>0]&2)a[d+12>>0]=1;e=c[b+84>>2]|0;nb[c[e>>2]&63](e,d,1)|0;return}function BW(){var a=0;a=c[(c[47402]|0)+84>>2]|0;return nb[c[a>>2]&63](a,0,256)|0}function CW(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;g=JK(16)|0;f=c[47402]|0;h=c[f+84>>2]|0;h=c[(nb[c[h>>2]&63](h,0,256)|0)+8>>2]|0;c[g+8>>2]=b;nb[c[h>>2]&63](h,g,1)|0;a[b+92>>0]=e;if(a[f+112>>0]&1)a[b+100>>0]=1;c[b+88>>2]=d;return}function DW(a,b,c){a=a|0;b=b|0;c=c|0;U1(b);return}function EW(a,b,d){a=a|0;b=b|0;d=d|0;Rz(c[b+8>>2]|0)|0;U1(b);return}function FW(a,b,d){a=a|0;b=b|0;d=d|0;KW(c[b+8>>2]|0);U1(b);return}function GW(a){a=a|0;Rz(c[a+84>>2]|0)|0;jU(a);U1(a);return}function HW(a,b,d){a=a|0;b=b|0;d=d|0;U1(c[b+8>>2]|0);U1(b);return}function IW(a,d,e){a=a|0;d=d|0;e=e|0;var f=0,g=0,h=0;g=d+12|0;a=b[g>>1]|0;if(a<<16>>16){h=d+8|0;e=0;f=c[h>>2]|0;while(1){if((e|0)>=(a<<16>>16|0))break;U1(c[f>>2]|0);e=e+1|0;f=f+56|0;a=b[g>>1]|0}U1(c[h>>2]|0)}U1(d);return}function JW(){var a=0,b=0;a=c[47403]|0;while(1){b=c[a+4>>2]|0;if(!b)break;U1(a);a=b}return}function KW(b){b=b|0;var d=0;d=b+88|0;switch(a[b+92>>0]|0){case 1:{GW(c[d>>2]|0);break}case 2:{kU(c[d>>2]|0);break}default:{}}jU(b);U1(b);return}function LW(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;f=l;l=l+160|0;e=f+8|0;g=f;c[g>>2]=0;c[g+4>>2]=0;c[47403]=g;c[47402]=0;c[47400]=0;c[47404]=c[(c[(c[d+52>>2]|0)+16>>2]|0)+144>>2];c[47405]=Vz(56104,c[4580]|0)|0;c[47406]=Vz(56140,c[4580]|0)|0;kA(e,128,f+24|0);c[47401]=e;if(!(PW(a,e,d)|0)){rW()|0;c[b>>2]=FX()|0;a=c[47400]|0}else{c[b>>2]=2;a=0}Rz(c[47405]|0)|0;Rz(c[47406]|0)|0;c[47405]=0;c[47406]=0;c[47403]=0;oA(e);l=f;return a|0}function MW(b){b=b|0;var d=0,e=0,f=0;e=l;l=l+16|0;d=e;if(!(a[189661]|0)){a[189661]=1;f=NW()|0;c[d>>2]=b;c[d+4>>2]=f;gA(1,140575,d)|0;OW()}l=e;return}function NW(){return u_(c[47407]|0)|0}function OW(){var b=0,d=0,e=0,f=0;f=l;l=l+16|0;e=f;b=c[47410]|0;c[b+4>>2]=c[b>>2];d=c[47419]|0;if((d|0)>0){mA(b,c[47417]|0,d)|0;b=c[47410]|0}mA(b,c[47416]|0,c[47418]|0)|0;d=c[47410]|0;b=c[d+4>>2]|0;if(b>>>0>=(c[d+8>>2]|0)>>>0){lA(d,1)|0;b=c[47410]|0;d=b;b=c[b+4>>2]|0}c[d+4>>2]=b+1;a[b>>0]=0;b=c[47410]|0;d=c[b>>2]|0;c[b+4>>2]=d;c[e>>2]=d;gA(3,140591,e)|0;l=f;return}function PW(b,e,f){b=b|0;e=e|0;f=f|0;c[47410]=e;kA(189644,128,0);c[47408]=b;a[189663]=0;a[189660]=0;a[189661]=0;c[47418]=0;c[47419]=0;a[189662]=1;f=f+52|0;e=UY(wK(d[(c[(c[f>>2]|0)+16>>2]|0)+115>>0]|0)|0)|0;c[47407]=e;h_(e,c[(c[(c[f>>2]|0)+16>>2]|0)+144>>2]|0);i_(c[47407]|0,70,27);j_(c[47407]|0,71);return 0}function QW(b,d,e){b=b|0;d=d|0;e=e|0;do if(!(c3(d,140603)|0)){c[47399]=UW(e)|0;a[189662]=0;c[47409]=286}else{if(c3(d,140609)|0?c3(d,140612)|0:0){if(!(c3(d,140615)|0)){a[189662]=1;c[47399]=VW(e)|0;c[47409]=287;break}if(!(c3(d,140623)|0)){c[47399]=WW(b,e,0)|0;c[47409]=288;break}if(!(c3(d,140628)|0)){c[47399]=WW(b,0,1)|0;c[47409]=290;break}if(!(c3(d,140644)|0)){c[47399]=WW(b,0,32)|0;c[47409]=295;break}if(!(c3(d,140630)|0)){c[47399]=WW(b,0,4)|0;c[47409]=291;break}if(!(c3(d,140632)|0)){c[47399]=WW(b,0,64)|0;c[47409]=292;break}if(!(c3(d,140634)|0)){c[47399]=WW(b,0,2)|0;c[47409]=289;break}if(!(c3(d,140636)|0)){c[47399]=WW(b,0,8)|0;c[47409]=293;break}if(!(c3(d,140640)|0)){c[47399]=WW(b,0,16)|0;c[47409]=294;break}if(!(c3(d,140646)|0)){XW(e);c[47409]=283;break}if(!(c3(d,140649)|0)){c[47409]=277;break}if(!(c3(d,140652)|0)){c[47409]=280;break}if(!(c3(d,140655)|0)){c[47399]=YW(e)|0;c[47409]=285;break}if(!(c3(d,140618)|0)){c[47409]=262;break}else{TW(d);break}}a[189662]=0;c[47409]=260}while(0);return}function RW(b,d){b=b|0;d=d|0;do if(!(c3(d,140603)|0)){c[47409]=264;a[189662]=1}else{if(c3(d,140609)|0?c3(d,140612)|0:0){if(!(c3(d,140615)|0)){c[47409]=265;a[189662]=0;break}if(!(c3(d,140618)|0)){c[47409]=263;break}if(!(c3(d,140623)|0)){c[47409]=266;break}if(!(c3(d,140628)|0)){c[47409]=270;break}if(!(c3(d,140630)|0)){c[47409]=271;break}if(!(c3(d,140632)|0)){c[47409]=272;break}if(!(c3(d,140634)|0)){c[47409]=269;break}if(!(c3(d,140636)|0)){c[47409]=273;break}if(!(c3(d,140640)|0)){c[47409]=274;break}if(!(c3(d,140644)|0)){c[47409]=275;break}if(!(c3(d,140646)|0)){c[47409]=(c[47409]|0)==283?282:258;break}if(!(c3(d,140649)|0)){c[47409]=(c[47409]|0)==277?276:278;break}if(!(c3(d,140652)|0)){c[47409]=(c[47409]|0)==280?279:281;break}if(!(c3(d,140655)|0)){c[47409]=(c[47409]|0)==285?284:259;break}else{TW(d);break}}c[47409]=261}while(0);return}function SW(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;if(a[189662]|0){b=0;while(1){if(!e)break;h=d+1|0;g=a[d>>0]|0;if((g&255)>31){d=c[47410]|0;f=c[d+4>>2]|0;if(f>>>0>=(c[d+8>>2]|0)>>>0){lA(d,1)|0;f=c[47410]|0;d=f;f=c[f+4>>2]|0}c[d+4>>2]=f+1;a[f>>0]=g;b=b+1|0}d=h;e=e+-1|0}if(b|0)c[47409]=267}return}function TW(b){b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d;c[47409]=268;a[189661]=1;f=NW()|0;c[e>>2]=b;c[e+4>>2]=f;gA(1,140659,e)|0;l=d;return}function UW(b){b=b|0;var d=0;d=JK(120)|0;c[d+100>>2]=-1;a[d+88>>0]=-1;ZW(d,56400,22,b,141611);return d|0}function VW(a){a=a|0;var c=0;c=JK(104)|0;b[c+80>>1]=1;b[c+82>>1]=1;ZW(c,56224,22,a,140965);return c|0}function WW(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;f=l;l=l+32|0;e=f;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;c[e+16>>2]=0;c[e+20>>2]=0;c[e+24>>2]=0;c[e+28>>2]=0;h[e+16>>3]=-1.0;c[e+24>>2]=d&127;if(b|0)ZW(e,56200,3,b,140816);d=c[a+144>>2]|0;e=nb[c[d>>2]&63](d,e,1)|0;l=f;return e|0}function XW(a){a=a|0;c[47399]=0;ZW(189596,56192,1,a,140752);return}function YW(a){a=a|0;var b=0;b=JK(40)|0;ZW(b,56176,2,a,140698);return b|0}function ZW(b,e,f,g,h){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0;o=l;l=l+16|0;n=o;m=o+8|0;while(1){k=c[g>>2]|0;if(!k)break;i=c[g+4>>2]|0;c[m>>2]=k;j=u5(m,e,f,8,104)|0;if(!j){c[n>>2]=k;c[n+4>>2]=h;gA(0,140704,n)|0;i=1}else{i=lb[c[j+4>>2]&127](b,i)|0;i=(i|(d[189660]|0))&255}a[189660]=i;g=g+8|0}l=o;return}function _W(a,b){a=a|0;b=b|0;return c3(c[a>>2]|0,c[b>>2]|0)|0}function $W(a,b){a=a|0;b=b|0;c[a+36>>2]=D4(b)|0;return 0}function aX(a,b){a=a|0;b=b|0;c[a+32>>2]=D4(b)|0;return 0}function bX(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;i=l;l=l+16|0;g=i;f=(Y3(a[d>>0]|0)|0)<<24>>24;switch(f|0){case 82:{e=d+1|0;if(!(c3(e,140763)|0)){c[b>>2]=114;e=0}else h=5;break}case 76:{h=6;break}default:{e=d+1|0;h=5}}do if((h|0)==5)if(!(c3(e,140768)|0))h=6;else{if((f|0)!=67?(c3(e,140772)|0)==0:0){c[g>>2]=d;gA(0,140778,g)|0;e=1;break}c[b>>2]=110;e=0}while(0);if((h|0)==6){c[b>>2]=108;e=0}l=i;return e|0}function cX(a,b){a=a|0;b=b|0;c[a+4>>2]=b;return 0}function dX(a,b){a=a|0;b=b|0;c[a>>2]=b;return 0}function eX(a,b){a=a|0;b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if(!(fX(b,140845,0,255,d)|0)){h[a+16>>3]=+(c[d>>2]|0);a=0}else a=1;l=e;return a|0}function fX(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0;k=l;l=l+48|0;j=k+24|0;i=k+8|0;h=k;m=k+36|0;g=y4(a,m,10)|0;do if((c[m>>2]|0)!=(a|0)){if((g|0)>(e|0)){c[i>>2]=b;c[i+4>>2]=a;c[i+8>>2]=e;gA(0,140887,i)|0;a=1;break}if((g|0)<(d|0)){c[j>>2]=b;c[j+4>>2]=a;c[j+8>>2]=d;gA(0,140926,j)|0;a=1;break}else{c[f>>2]=g;a=0;break}}else{c[h>>2]=b;c[h+4>>2]=a;gA(0,140856,h)|0;a=1}while(0);l=k;return a|0}function gX(d,e){d=d|0;e=e|0;var f=0,g=0,h=0;h=l;l=l+16|0;f=h;switch((Y3(a[e>>0]|0)|0)<<24>>24|0){case 76:{if(!(c3(e+1|0,140768)|0)){d=d+36|0;b[d>>1]=b[d>>1]|4;d=0}else g=9;break}case 82:{if(!(c3(e+1|0,140763)|0)){d=d+36|0;b[d>>1]=b[d>>1]|2;d=0}else g=9;break}case 84:{if(!(c3(e+1|0,141563)|0)){d=d+36|0;b[d>>1]=b[d>>1]|6;d=0}else g=9;break}case 67:{if(!(c3(e+1|0,140772)|0))d=0;else g=9;break}default:g=9}if((g|0)==9){c[f>>2]=e;gA(0,141567,f)|0;d=1}l=h;return d|0}function hX(d,e){d=d|0;e=e|0;var f=0,g=0,h=0;h=l;l=l+16|0;f=h;switch((Y3(a[e>>0]|0)|0)<<24>>24|0){case 76:{if(!(c3(e+1|0,140768)|0)){d=d+36|0;b[d>>1]=b[d>>1]|512;d=0}else g=7;break}case 82:{if(!(c3(e+1|0,140763)|0)){d=d+36|0;b[d>>1]=b[d>>1]|256;d=0}else g=7;break}case 67:{if(!(c3(e+1|0,140772)|0))d=0;else g=7;break}default:g=7}if((g|0)==7){c[f>>2]=e;gA(0,141518,f)|0;d=1}l=h;return d|0}function iX(a,b){a=a|0;b=b|0;c[a+20>>2]=D4(b)|0;return 0}function jX(d,e){d=d|0;e=e|0;var f=0,g=0;g=l;l=l+16|0;f=g;if(!(fX(e,141511,0,255,f)|0)){a[d+33>>0]=c[f>>2];d=d+36|0;b[d>>1]=b[d>>1]|32;d=0}else d=1;l=g;return d|0}function kX(d,e){d=d|0;e=e|0;var f=0,g=0;g=l;l=l+16|0;f=g;if(!(fX(e,141499,0,255,f)|0)){a[d+34>>0]=c[f>>2];d=d+36|0;b[d>>1]=b[d>>1]|64;d=0}else d=1;l=g;return d|0}function lX(d,e){d=d|0;e=e|0;var f=0,g=0;g=l;l=l+16|0;f=g;if(!(fX(e,141487,-128,127,f)|0)){a[d+32>>0]=c[f>>2];d=d+36|0;b[d>>1]=b[d>>1]|128;d=0}else d=1;l=g;return d|0}function mX(a,b){a=a|0;b=b|0;c[a+24>>2]=D4(b)|0;return 0}function nX(a,d){a=a|0;d=d|0;var e=0,f=0,g=0;g=l;l=l+16|0;f=g;e=g+4|0;do if(!(fX(d,141442,0,65535,e)|0)){d=c[e>>2]|0;if(!d){gA(0,141450,f)|0;d=1;break}else{b[a+80>>1]=d;d=0;break}}else d=1;while(0);l=g;return d|0}function oX(a,e){a=a|0;e=e|0;var f=0,g=0,h=0;h=l;l=l+16|0;f=h;switch((Y3(d[e>>0]|0)|0)<<24>>24|0){case 84:{if(!(c3(e+1|0,141391)|0)){a=a+36|0;b[a>>1]=b[a>>1]|1;a=0}else g=5;break}case 70:{if(!(c3(e+1|0,141395)|0))a=0;else g=5;break}default:g=5}if((g|0)==5){c[f>>2]=e;gA(0,141400,f)|0;a=1}l=h;return a|0}function pX(a,b){a=a|0;b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if(!(fX(b,141377,0,360,d)|0)){c[a+28>>2]=c[d>>2]&65535;a=0}else a=1;l=e;return a|0}function qX(a,d){a=a|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;if(!(fX(d,141370,0,65535,e)|0)){b[a+40>>1]=c[e>>2];a=0}else a=1;l=f;return a|0}function rX(a,b){a=a|0;b=b|0;c[a>>2]=D4(b)|0;return 0}function sX(a,b){a=a|0;b=b|0;c[a+16>>2]=D4(b)|0;return 0}function tX(a,b){a=a|0;b=b|0;c[a+4>>2]=D4(b)|0;return 0}function uX(a,d){a=a|0;d=d|0;var e=0,f=0,g=0;g=l;l=l+16|0;f=g;e=g+4|0;do if(!(fX(d,141325,0,65535,e)|0)){d=c[e>>2]|0;if(!d){gA(0,141333,f)|0;d=1;break}else{b[a+82>>1]=d;d=0;break}}else d=1;while(0);l=g;return d|0}function vX(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;k=l;l=l+16|0;i=k;h=0;a:while(1){b:while(1){g=e+1|0;e=a[e>>0]|0;if(!(e<<24>>24))break a;e=e<<24>>24;f=(d3(e)|0)+-98|0;switch(f>>>1|f<<31|0){case 5:{j=5;break b}case 9:{f=2048;break b}case 8:{j=6;break b}case 0:{j=7;break b}default:{}}c[i>>2]=e;c[i+4>>2]=e;gA(0,141272,i)|0;e=g}if((j|0)==5){j=0;f=1024}else if((j|0)==6){j=0;f=4096}else if((j|0)==7){j=0;f=8192}e=g;h=h|f}if(h<<16>>16!=15360){j=d+36|0;b[j>>1]=b[j>>1]|h}l=k;return 0}function wX(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;k=l;l=l+16|0;j=k+8|0;i=k;h=D4(e)|0;g=d+42|0;f=0;e=h;while(1){d=A4(e,141182)|0;if(!d)break;if(((Y3(a[d>>0]|0)|0)&255|0)==82){e=d+1|0;if(!(c3(e,141185)|0)){b[g>>1]=b[g>>1]|4;d=f;e=0;f=d;continue}if(!(c3(e,141192)|0)){b[g>>1]=b[g>>1]|2;d=f;e=0;f=d;continue}else{c[i>>2]=d;gA(0,141198,i)|0;f=1;e=0;continue}}if(!(c3(d,141236)|0)){b[g>>1]=b[g>>1]&-385;d=f;e=0;f=d;continue}if(c3(d,141242)|0?c3(d,141252)|0:0){if(!(c3(d,141258)|0)){b[g>>1]=b[g>>1]|128;d=f;e=0;f=d;continue}if(!(c3(d,141265)|0)){b[g>>1]=b[g>>1]|256;d=f;e=0;f=d;continue}else{c[j>>2]=d;gA(0,141198,j)|0;f=1;e=0;continue}}b[g>>1]=b[g>>1]|32;d=f;e=0;f=d}U1(h);l=k;return f|0}function xX(a,b){a=a|0;b=b|0;c[a+8>>2]=D4(b)|0;return 0}function yX(a,b){a=a|0;b=b|0;c[a+12>>2]=D4(b)|0;return 0}function zX(d,e){d=d|0;e=e|0;var f=0,g=0,h=0;h=l;l=l+16|0;f=h;switch((Y3(a[e>>0]|0)|0)<<24>>24|0){case 66:{if(!(c3(e+1|0,141128)|0)){d=d+36|0;b[d>>1]=b[d>>1]|16;d=0}else g=7;break}case 84:{if(!(c3(e+1|0,141134)|0)){d=d+36|0;b[d>>1]=b[d>>1]|8;d=0}else g=7;break}case 77:{if(!(c3(e+1|0,141137)|0))d=0;else g=7;break}default:g=7}if((g|0)==7){c[f>>2]=e;gA(0,141143,f)|0;d=1}l=h;return d|0}function AX(a,d){a=a|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;if(!(fX(d,141122,0,65535,e)|0)){b[a+38>>1]=c[e>>2];a=0}else a=1;l=f;return a|0}function BX(d,e){d=d|0;e=e|0;var f=0,g=0,h=0;h=l;l=l+16|0;f=h;switch((Y3(a[e>>0]|0)|0)<<24>>24|0){case 76:{if(!(c3(e+1|0,140768)|0)){d=d+36|0;b[d>>1]=b[d>>1]|4;d=0}else g=7;break}case 82:{if(!(c3(e+1|0,140763)|0)){d=d+36|0;b[d>>1]=b[d>>1]|2;d=0}else g=7;break}case 67:{if(!(c3(e+1|0,140772)|0))d=0;else g=7;break}default:g=7}if((g|0)==7){c[f>>2]=e;gA(0,140778,f)|0;d=1}l=h;return d|0}function CX(b,d){b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;if(!(fX(d,141720,0,127,e)|0)){a[b+88>>0]=c[e>>2];b=0}else b=1;l=f;return b|0}function DX(b,d){b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;if((a[d>>0]|0)==42){b=b+112|0;a[b>>0]=a[b>>0]|1;b=0}else{c[e>>2]=d;gA(0,141680,e)|0;b=1}l=f;return b|0}function EX(b,d){b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;if((a[d>>0]|0)==42){b=b+112|0;a[b>>0]=a[b>>0]|2;b=0}else{c[e>>2]=d;gA(0,141643,e)|0;b=1}l=f;return b|0}function FX(){var b=0;b=(a[189661]|a[189660])<<24>>24;_Y(c[47407]|0);oA(189644);return b|0}function GX(){var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;j=l;l=l+16|0;i=j;c[47409]=0;d=0;a:do{b:do switch(a[189663]|0){case 2:{b=-1;break a}case 0:{a[189663]=1;h=6;b=141732;d=0;break}default:{b=c[47408]|0;if(!(a[b>>0]|0)){a[189663]=2;h=7;b=141739;break b}else{d=HX(b)|0;h=d-b|0;break b}}}while(0);c[47417]=c[47416];c[47419]=c[47418];c[47416]=b;c[47418]=h;e=c[47412]|0;f=e-(c[47411]|0)|0;g=c[47407]|0;if(!f)b=k_(g,b,h,(h|0)==0&1)|0;else{if(e>>>0<(c[47413]|0)>>>0)b=e;else{lA(189644,1)|0;b=c[47412]|0}a[b>>0]=0;b=c[47411]|0;c[47412]=b;b=k_(g,b,f,0)|0}if(!((b|0)!=0|(a[189661]|0)!=0)){g=v_(t_(c[47407]|0)|0)|0;h=NW()|0;c[i>>2]=g;c[i+4>>2]=h;gA(1,140575,i)|0;OW();a[189661]=1;c[47409]=268}if(d|0)c[47408]=d;b=c[47409]|0}while((b|0)==0);l=j;return b|0}function HX(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;h=l;l=l+16|0;f=h;d=b+1|0;e=a[b>>0]|0;a:do if(e<<24>>24==60){e=a[d>>0]|0;if(e<<24>>24==33)if(!(Q2(b+2|0,141747,2)|0)){e=IX(b+4|0)|0;d=e;e=a[e>>0]|0;g=8}else{e=d;g=5}else g=6;b:while(1)if((g|0)==5){d=e;e=a[e>>0]|0;g=6;continue}else if((g|0)==6){switch(e<<24>>24){case 62:case 0:{g=8;continue b}default:{}}e=d+1|0;g=5;continue}else if((g|0)==8)if(e<<24>>24==62){g=10;break}else{g=9;break}if((g|0)==9){gA(0,141750,f)|0;a[189660]=1;break}else if((g|0)==10){d=d+1|0;break}}else{d=b;b=e;while(1){switch(b<<24>>24){case 60:case 0:break a;case 38:{e=d+1|0;if((a[e>>0]|0)==35)g=15;else e=$P(e,189644)|0;break}default:g=15}if((g|0)==15){g=0;e=c[47412]|0;if(e>>>0>=(c[47413]|0)>>>0){lA(189644,1)|0;e=c[47412]|0}c[47412]=e+1;a[e>>0]=b;e=d+1|0}d=e;b=a[e>>0]|0}}while(0);l=h;return d|0}function IX(b){b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;j=l;l=l+16|0;i=j;f=1;c=b;a:while(1){e=(f|0)==0;d=c;b:while(1){if(e)break a;g=d+1|0;switch(a[d>>0]|0){case 0:{c=g;break a}case 60:{h=5;break b}case 62:{c=-1;break b}default:d=g}}if((h|0)==5){h=0;c=1}f=f+c|0;c=g}d=c+-1|0;do if(a[d>>0]|0){c=c+-3|0;if(c>>>0>=b>>>0?(Q2(c,141747,2)|0)==0:0)break;gA(0,141791,i)|0;a[189660]=1}while(0);l=j;return d|0}function JX(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;d=T1(28)|0;if(!d)d=0;else{e=0;f=0;while(1){if((e|0)>=(b|0))break;r=(c[(c[a+(e<<2)>>2]|0)+4>>2]|0)+f|0;e=e+1|0;f=r}o=d+8|0;c[o>>2]=KX(f<<4)|0;p=d+12|0;c[p>>2]=KX((b<<2)+4|0)|0;e=f<<2;q=d+16|0;c[q>>2]=KX(e)|0;e=KX(e)|0;r=d+20|0;c[r>>2]=e;c[d+4>>2]=f;c[d>>2]=b;f=0;h=0;while(1){c[(c[p>>2]|0)+(h<<2)>>2]=f;if((h|0)>=(b|0))break;j=a+(h<<2)|0;n=c[j>>2]|0;k=c[n+4>>2]|0;l=f+-1|0;g=0;i=f;m=k;while(1){if((g|0)>=(m|0))break;m=(c[o>>2]|0)+(i<<4)|0;e=(c[n>>2]|0)+(g<<4)|0;c[m>>2]=c[e>>2];c[m+4>>2]=c[e+4>>2];c[m+8>>2]=c[e+8>>2];c[m+12>>2]=c[e+12>>2];m=i+1|0;c[(c[q>>2]|0)+(i<<2)>>2]=m;e=c[r>>2]|0;c[e+(i<<2)>>2]=i+-1;s=c[j>>2]|0;g=g+1|0;i=m;m=c[s+4>>2]|0;n=s}s=l+k|0;c[(c[q>>2]|0)+(s<<2)>>2]=f;c[e+(f<<2)>>2]=s;f=i;h=h+1|0}KY(d)}return d|0}function KX(a){a=a|0;if(!a)a=0;else a=T1(a)|0;return a|0}function LX(a){a=a|0;var b=0,d=0;U1(c[a+8>>2]|0);U1(c[a+12>>2]|0);U1(c[a+16>>2]|0);U1(c[a+20>>2]|0);d=a+24|0;b=c[d>>2]|0;if(b|0){U1(c[b>>2]|0);U1(c[d>>2]|0)}U1(a);return}function MX(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;p=l;l=l+32|0;m=p+16|0;j=p;c[m>>2]=c[b>>2];c[m+4>>2]=c[b+4>>2];c[m+8>>2]=c[b+8>>2];c[m+12>>2]=c[b+12>>2];n=RY(a,d,m)|0;c[m>>2]=c[e>>2];c[m+4>>2]=c[e+4>>2];c[m+8>>2]=c[e+8>>2];c[m+12>>2]=c[e+12>>2];o=RY(a,f,m)|0;c[j>>2]=c[b>>2];c[j+4>>2]=c[b+4>>2];c[j+8>>2]=c[b+8>>2];c[j+12>>2]=c[b+12>>2];c[m>>2]=c[e>>2];c[m+4>>2]=c[e+4>>2];c[m+8>>2]=c[e+8>>2];c[m+12>>2]=c[e+12>>2];m=AY(j,d,n,m,f,o,a)|0;d=c[a+4>>2]|0;j=d+1|0;f=1;h=d;while(1){h=c[m+(h<<2)>>2]|0;k=f+1|0;if((h|0)==(j|0))break;else f=k}i=T1(k<<4)|0;h=i+(f<<4)|0;c[h>>2]=c[e>>2];c[h+4>>2]=c[e+4>>2];c[h+8>>2]=c[e+8>>2];c[h+12>>2]=c[e+12>>2];a=a+8|0;while(1){d=c[m+(d<<2)>>2]|0;f=f+-1|0;h=i+(f<<4)|0;if((d|0)==(j|0))break;e=(c[a>>2]|0)+(d<<4)|0;c[h>>2]=c[e>>2];c[h+4>>2]=c[e+4>>2];c[h+8>>2]=c[e+8>>2];c[h+12>>2]=c[e+12>>2]}c[h>>2]=c[b>>2];c[h+4>>2]=c[b+4>>2];c[h+8>>2]=c[b+8>>2];c[h+12>>2]=c[b+12>>2];if(f|0)qa(141809,141816,148,141822);if(n|0)U1(n);if(o|0)U1(o);c[g+4>>2]=k;c[g>>2]=i;U1(m);l=p;return 1}function NX(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0;j=l;l=l+48|0;h=j+32|0;g=j+16|0;f=j;i=c[a>>2]|0;d=c[a+4>>2]|0;e=d+-1|0;a=0;while(1){if((a|0)>=(d|0)){a=1;break}m=i+(((e+a|0)%(d|0)|0)<<4)|0;k=i+(a<<4)|0;c[f>>2]=c[m>>2];c[f+4>>2]=c[m+4>>2];c[f+8>>2]=c[m+8>>2];c[f+12>>2]=c[m+12>>2];c[g>>2]=c[k>>2];c[g+4>>2]=c[k+4>>2];c[g+8>>2]=c[k+8>>2];c[g+12>>2]=c[k+12>>2];c[h>>2]=c[b>>2];c[h+4>>2]=c[b+4>>2];c[h+8>>2]=c[b+8>>2];c[h+12>>2]=c[b+12>>2];if((GY(f,g,h)|0)==1){a=0;break}else a=a+1|0}l=j;return a|0}function OX(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0;u=l;l=l+64|0;m=u+48|0;k=u+32|0;s=4;j=T1(40)|0;c[j>>2]=0;n=u+16|0;q=u;r=c[d>>2]|0;i=c[d+4>>2]|0;s=U6(189680,1,j|0,s|0)|0;j=z;o=0;d=o;o=0;if((d|0)!=0&(p|0)!=0){g=V6(c[d>>2]|0,s|0,j|0)|0;if(!g)bb(d|0,p|0);z=p}else g=-1;if((g|0)==1)d=z;else d=0;while(1){if(d|0){d=-1;break}o=0;c[m>>2]=c[e>>2];c[m+4>>2]=c[e+4>>2];c[m+8>>2]=c[e+8>>2];c[m+12>>2]=c[e+12>>2];ja(28,n|0,m|0);d=o;o=0;if((d|0)!=0&(p|0)!=0){g=V6(c[d>>2]|0,s|0,j|0)|0;if(!g)bb(d|0,p|0);z=p}else g=-1;if((g|0)==1){d=z;continue};c[e>>2]=c[n>>2];c[e+4>>2]=c[n+4>>2];c[e+8>>2]=c[n+8>>2];c[e+12>>2]=c[n+12>>2];h=e+16|0;o=0;c[m>>2]=c[h>>2];c[m+4>>2]=c[h+4>>2];c[m+8>>2]=c[h+8>>2];c[m+12>>2]=c[h+12>>2];ja(28,q|0,m|0);d=o;o=0;if((d|0)!=0&(p|0)!=0){g=V6(c[d>>2]|0,s|0,j|0)|0;if(!g)bb(d|0,p|0);z=p}else g=-1;if((g|0)==1){d=z;continue};c[h>>2]=c[q>>2];c[h+4>>2]=c[q+4>>2];c[h+8>>2]=c[q+8>>2];c[h+12>>2]=c[q+12>>2];c[47459]=0;o=0;ia(115,4);d=o;o=0;if((d|0)!=0&(p|0)!=0){g=V6(c[d>>2]|0,s|0,j|0)|0;if(!g)bb(d|0,p|0);z=p}else g=-1;if((g|0)==1){d=z;continue}g=c[47460]|0;d=c[47459]|0;c[47459]=d+1;d=g+(d<<4)|0;c[d>>2]=c[r>>2];c[d+4>>2]=c[r+4>>2];c[d+8>>2]=c[r+8>>2];c[d+12>>2]=c[r+12>>2];o=0;c[k>>2]=c[e>>2];c[k+4>>2]=c[e+4>>2];c[k+8>>2]=c[e+8>>2];c[k+12>>2]=c[e+12>>2];c[m>>2]=c[h>>2];c[m+4>>2]=c[h+4>>2];c[m+8>>2]=c[h+8>>2];c[m+12>>2]=c[h+12>>2];d=fa(1,a|0,b|0,r|0,i|0,k|0,m|0)|0;g=o;o=0;if((g|0)!=0&(p|0)!=0){h=V6(c[g>>2]|0,s|0,j|0)|0;if(!h)bb(g|0,p|0);z=p}else h=-1;if((h|0)==1)d=z;else{t=8;break}}if((t|0)==8)if((d|0)==-1)d=-1;else{c[f+4>>2]=c[47459];c[f>>2]=c[47460];d=0}U1(s|0);l=u;return d|0}function PX(a,b){a=a|0;b=b|0;var d=0.0,e=0,f=0.0,g=0.0,i=0.0;d=+h[b>>3];e=b+8|0;f=+h[e>>3];i=f*f+d*d;g=+C(+i);if(i>1.0e-06){h[b>>3]=d/g;h[e>>3]=f/g};c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];return}function QX(a){a=a|0;var b=0,d=0,e=0,f=0;f=l;l=l+32|0;e=f+16|0;d=f;if((c[47463]|0)<(a|0)){b=c[47460]|0;if(!b){e=T1(a<<4)|0;c[47460]=e;if(!e){e=c[15712]|0;c[d>>2]=141831;c[d+4>>2]=531;c[d+8>>2]=141966;w4(e,141839,d)|0;bb(189680,1)}}else{d=W1(b,a<<4)|0;c[47460]=d;if(!d){d=c[15712]|0;c[e>>2]=141831;c[e+4>>2]=537;c[e+8>>2]=141984;w4(d,141839,e)|0;bb(189680,1)}}c[47463]=a}l=f;return}function RX(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var i=0,j=0.0,k=0,m=0.0,n=0,o=0.0,p=0.0,q=0,r=0.0,s=0.0,t=0.0,u=0.0,v=0.0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0.0,U=0.0,V=0.0,W=0.0;R=l;l=l+336|0;J=R+320|0;I=R+304|0;w=R+144|0;q=R+128|0;G=R+112|0;H=R+96|0;Q=R+80|0;A=R+64|0;C=R+48|0;K=R+32|0;L=R+16|0;M=R;x=R+288|0;y=R+272|0;z=R+256|0;B=R+240|0;D=R+224|0;E=R+208|0;N=R+192|0;O=R+176|0;P=R+160|0;i=c[47462]|0;do if((c[47461]|0)<(e|0)){if(!i){i=T1(e*40|0)|0;c[47462]=i;if(!i){i=-1;break}}else{i=W1(i,e*40|0)|0;c[47462]=i;if(!i){i=-1;break}}c[47461]=e;k=6}else k=6;while(0);if((k|0)==6){h[i>>3]=0.0;k=1;j=0.0;while(1){if((k|0)>=(e|0))break;n=d+(k<<4)|0;F=d+(k+-1<<4)|0;c[I>>2]=c[n>>2];c[I+4>>2]=c[n+4>>2];c[I+8>>2]=c[n+8>>2];c[I+12>>2]=c[n+12>>2];c[J>>2]=c[F>>2];c[J+4>>2]=c[F+4>>2];c[J+8>>2]=c[F+8>>2];c[J+12>>2]=c[F+12>>2];v=+SX(I,J)+j;h[i+(k*40|0)>>3]=v;k=k+1|0;j=v}F=e+-1|0;n=i+(F*40|0)|0;k=1;while(1){if((k|0)>=(e|0))break;S=i+(k*40|0)|0;h[S>>3]=+h[S>>3]/+h[n>>3];k=k+1|0}k=0;while(1){if((k|0)>=(e|0))break;S=i+(k*40|0)+8|0;n=i+(k*40|0)|0;v=+TX(+h[n>>3]);c[J>>2]=c[f>>2];c[J+4>>2]=c[f+4>>2];c[J+8>>2]=c[f+8>>2];c[J+12>>2]=c[f+12>>2];UX(x,J,v);c[S>>2]=c[x>>2];c[S+4>>2]=c[x+4>>2];c[S+8>>2]=c[x+8>>2];c[S+12>>2]=c[x+12>>2];S=i+(k*40|0)+24|0;v=+VX(+h[n>>3]);c[J>>2]=c[g>>2];c[J+4>>2]=c[g+4>>2];c[J+8>>2]=c[g+8>>2];c[J+12>>2]=c[g+12>>2];UX(y,J,v);c[S>>2]=c[y>>2];c[S+4>>2]=c[y+4>>2];c[S+8>>2]=c[y+8>>2];c[S+12>>2]=c[y+12>>2];k=k+1|0}c[I>>2]=c[f>>2];c[I+4>>2]=c[f+4>>2];c[I+8>>2]=c[f+8>>2];c[I+12>>2]=c[f+12>>2];c[J>>2]=c[g>>2];c[J+4>>2]=c[g+4>>2];c[J+8>>2]=c[g+8>>2];c[J+12>>2]=c[g+12>>2];WX(d,e,i,I,J,G,A,H,C);c[q>>2]=c[G>>2];c[q+4>>2]=c[G+4>>2];c[q+8>>2]=c[G+8>>2];c[q+12>>2]=c[G+12>>2];c[w>>2]=c[A>>2];c[w+4>>2]=c[A+4>>2];c[w+8>>2]=c[A+8>>2];c[w+12>>2]=c[A+12>>2];c[I>>2]=c[H>>2];c[I+4>>2]=c[H+4>>2];c[I+8>>2]=c[H+8>>2];c[I+12>>2]=c[H+12>>2];c[J>>2]=c[C>>2];c[J+4>>2]=c[C+4>>2];c[J+8>>2]=c[C+8>>2];c[J+12>>2]=c[C+12>>2];if(!(XX(a,b,q,w,I,J,d,e)|0)){c[J>>2]=c[A>>2];c[J+4>>2]=c[A+4>>2];c[J+8>>2]=c[A+8>>2];c[J+12>>2]=c[A+12>>2];UX(z,J,.3333333333333333);c[I>>2]=c[G>>2];c[I+4>>2]=c[G+4>>2];c[I+8>>2]=c[G+8>>2];c[I+12>>2]=c[G+12>>2];c[J>>2]=c[z>>2];c[J+4>>2]=c[z+4>>2];c[J+8>>2]=c[z+8>>2];c[J+12>>2]=c[z+12>>2];YX(B,I,J);v=+h[B>>3];u=+h[B+8>>3];c[J>>2]=c[C>>2];c[J+4>>2]=c[C+4>>2];c[J+8>>2]=c[C+8>>2];c[J+12>>2]=c[C+12>>2];UX(D,J,.3333333333333333);c[I>>2]=c[H>>2];c[I+4>>2]=c[H+4>>2];c[I+8>>2]=c[H+8>>2];c[I+12>>2]=c[H+12>>2];c[J>>2]=c[D>>2];c[J+4>>2]=c[D+4>>2];c[J+8>>2]=c[D+8>>2];c[J+12>>2]=c[D+12>>2];ZX(E,I,J);t=+h[E>>3];p=+h[E+8>>3];q=c[47462]|0;r=+h[G>>3];s=+h[H>>3];o=+h[G+8>>3];m=+h[H+8>>3];n=Q+8|0;i=-1;j=-1.0;k=1;while(1){if((k|0)>=(F|0))break;T=+h[q+(k*40|0)>>3];U=+_X(T);V=+TX(T);W=+VX(T);T=+$X(T);h[Q>>3]=V*v+r*U+W*t+s*T;h[n>>3]=W*p+V*u+o*U+m*T;S=d+(k<<4)|0;c[I>>2]=c[Q>>2];c[I+4>>2]=c[Q+4>>2];c[I+8>>2]=c[Q+8>>2];c[I+12>>2]=c[Q+12>>2];c[J>>2]=c[S>>2];c[J+4>>2]=c[S+4>>2];c[J+8>>2]=c[S+8>>2];c[J+12>>2]=c[S+12>>2];T=+SX(I,J);S=T>j;i=S?k:i;j=S?T:j;k=k+1|0}S=d+(i<<4)|0;Q=d+(i+-1<<4)|0;c[I>>2]=c[S>>2];c[I+4>>2]=c[S+4>>2];c[I+8>>2]=c[S+8>>2];c[I+12>>2]=c[S+12>>2];c[J>>2]=c[Q>>2];c[J+4>>2]=c[Q+4>>2];c[J+8>>2]=c[Q+8>>2];c[J+12>>2]=c[Q+12>>2];ZX(N,I,J);c[J>>2]=c[N>>2];c[J+4>>2]=c[N+4>>2];c[J+8>>2]=c[N+8>>2];c[J+12>>2]=c[N+12>>2];PX(L,J);Q=i+1|0;N=d+(Q<<4)|0;c[I>>2]=c[N>>2];c[I+4>>2]=c[N+4>>2];c[I+8>>2]=c[N+8>>2];c[I+12>>2]=c[N+12>>2];c[J>>2]=c[S>>2];c[J+4>>2]=c[S+4>>2];c[J+8>>2]=c[S+8>>2];c[J+12>>2]=c[S+12>>2];ZX(O,I,J);c[J>>2]=c[O>>2];c[J+4>>2]=c[O+4>>2];c[J+8>>2]=c[O+8>>2];c[J+12>>2]=c[O+12>>2];PX(M,J);c[I>>2]=c[L>>2];c[I+4>>2]=c[L+4>>2];c[I+8>>2]=c[L+8>>2];c[I+12>>2]=c[L+12>>2];c[J>>2]=c[M>>2];c[J+4>>2]=c[M+4>>2];c[J+8>>2]=c[M+8>>2];c[J+12>>2]=c[M+12>>2];YX(P,I,J);c[J>>2]=c[P>>2];c[J+4>>2]=c[P+4>>2];c[J+8>>2]=c[P+8>>2];c[J+12>>2]=c[P+12>>2];PX(K,J);c[I>>2]=c[f>>2];c[I+4>>2]=c[f+4>>2];c[I+8>>2]=c[f+8>>2];c[I+12>>2]=c[f+12>>2];c[J>>2]=c[K>>2];c[J+4>>2]=c[K+4>>2];c[J+8>>2]=c[K+8>>2];c[J+12>>2]=c[K+12>>2];RX(a,b,d,Q,I,J)|0;c[I>>2]=c[K>>2];c[I+4>>2]=c[K+4>>2];c[I+8>>2]=c[K+8>>2];c[I+12>>2]=c[K+12>>2];c[J>>2]=c[g>>2];c[J+4>>2]=c[g+4>>2];c[J+8>>2]=c[g+8>>2];c[J+12>>2]=c[g+12>>2];RX(a,b,S,e-i|0,I,J)|0;i=0}else i=0}l=R;return i|0}function SX(a,b){a=a|0;b=b|0;var c=0.0,d=0.0;c=+h[b>>3]-+h[a>>3];d=+h[b+8>>3]-+h[a+8>>3];return +(+C(+(d*d+c*c)))}function TX(a){a=+a;var b=0.0;b=1.0-a;return +(b*b*(a*3.0))}function UX(a,b,d){a=a|0;b=b|0;d=+d;var e=0;h[b>>3]=+h[b>>3]*d;e=b+8|0;h[e>>3]=+h[e>>3]*d;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];return}function VX(a){a=+a;return +(a*a*3.0*(1.0-a))}function WX(a,b,d,e,f,g,i,j,k){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;i=i|0;j=j|0;k=k|0;var m=0.0,n=0.0,o=0.0,p=0.0,q=0,r=0,s=0,t=0,u=0,v=0,w=0.0,x=0.0,y=0.0,z=0.0,A=0.0,B=0,C=0,D=0,E=0,F=0,G=0,H=0.0,I=0.0,J=0,K=0,L=0,M=0;G=l;l=l+128|0;B=G+112|0;v=G+80|0;u=G;r=G+96|0;s=G+64|0;t=G+48|0;C=G+32|0;D=G+16|0;E=a+(b+-1<<4)|0;q=0;w=0.0;x=0.0;y=0.0;z=0.0;A=0.0;while(1){if((q|0)>=(b|0))break;K=d+(q*40|0)+8|0;c[v>>2]=c[K>>2];c[v+4>>2]=c[K+4>>2];c[v+8>>2]=c[K+8>>2];c[v+12>>2]=c[K+12>>2];c[B>>2]=c[K>>2];c[B+4>>2]=c[K+4>>2];c[B+8>>2]=c[K+8>>2];c[B+12>>2]=c[K+12>>2];H=+fY(v,B)+x;J=d+(q*40|0)+24|0;c[v>>2]=c[K>>2];c[v+4>>2]=c[K+4>>2];c[v+8>>2]=c[K+8>>2];c[v+12>>2]=c[K+12>>2];c[B>>2]=c[J>>2];c[B+4>>2]=c[J+4>>2];c[B+8>>2]=c[J+8>>2];c[B+12>>2]=c[J+12>>2];p=+fY(v,B)+A;c[v>>2]=c[J>>2];c[v+4>>2]=c[J+4>>2];c[v+8>>2]=c[J+8>>2];c[v+12>>2]=c[J+12>>2];c[B>>2]=c[J>>2];c[B+4>>2]=c[J+4>>2];c[B+8>>2]=c[J+8>>2];c[B+12>>2]=c[J+12>>2];o=+fY(v,B)+y;L=a+(q<<4)|0;M=d+(q*40|0)|0;I=+gY(+h[M>>3]);c[B>>2]=c[a>>2];c[B+4>>2]=c[a+4>>2];c[B+8>>2]=c[a+8>>2];c[B+12>>2]=c[a+12>>2];UX(s,B,I);I=+hY(+h[M>>3]);c[B>>2]=c[E>>2];c[B+4>>2]=c[E+4>>2];c[B+8>>2]=c[E+8>>2];c[B+12>>2]=c[E+12>>2];UX(t,B,I);c[v>>2]=c[s>>2];c[v+4>>2]=c[s+4>>2];c[v+8>>2]=c[s+8>>2];c[v+12>>2]=c[s+12>>2];c[B>>2]=c[t>>2];c[B+4>>2]=c[t+4>>2];c[B+8>>2]=c[t+8>>2];c[B+12>>2]=c[t+12>>2];YX(r,v,B);c[v>>2]=c[L>>2];c[v+4>>2]=c[L+4>>2];c[v+8>>2]=c[L+8>>2];c[v+12>>2]=c[L+12>>2];c[B>>2]=c[r>>2];c[B+4>>2]=c[r+4>>2];c[B+8>>2]=c[r+8>>2];c[B+12>>2]=c[r+12>>2];ZX(u,v,B);c[v>>2]=c[K>>2];c[v+4>>2]=c[K+4>>2];c[v+8>>2]=c[K+8>>2];c[v+12>>2]=c[K+12>>2];c[B>>2]=c[u>>2];c[B+4>>2]=c[u+4>>2];c[B+8>>2]=c[u+8>>2];c[B+12>>2]=c[u+12>>2];I=+fY(v,B)+w;c[v>>2]=c[J>>2];c[v+4>>2]=c[J+4>>2];c[v+8>>2]=c[J+8>>2];c[v+12>>2]=c[J+12>>2];c[B>>2]=c[u>>2];c[B+4>>2]=c[u+4>>2];c[B+8>>2]=c[u+8>>2];c[B+12>>2]=c[u+12>>2];q=q+1|0;w=I;x=H;y=o;z=+fY(v,B)+z;A=p}o=y*x-A*A;p=o>=0.0?o:-o;if(!(p>=1.0e-06?(m=(y*w-A*z)/o,n=(x*z-A*w)/o,!(p<1.0e-06|m<=0.0|n<=0.0)):0))F=6;if((F|0)==6){c[v>>2]=c[a>>2];c[v+4>>2]=c[a+4>>2];c[v+8>>2]=c[a+8>>2];c[v+12>>2]=c[a+12>>2];c[B>>2]=c[E>>2];c[B+4>>2]=c[E+4>>2];c[B+8>>2]=c[E+8>>2];c[B+12>>2]=c[E+12>>2];m=+SX(v,B)*.3333333333333333;n=m};c[g>>2]=c[a>>2];c[g+4>>2]=c[a+4>>2];c[g+8>>2]=c[a+8>>2];c[g+12>>2]=c[a+12>>2];c[B>>2]=c[e>>2];c[B+4>>2]=c[e+4>>2];c[B+8>>2]=c[e+8>>2];c[B+12>>2]=c[e+12>>2];UX(C,B,m);c[i>>2]=c[C>>2];c[i+4>>2]=c[C+4>>2];c[i+8>>2]=c[C+8>>2];c[i+12>>2]=c[C+12>>2];c[j>>2]=c[E>>2];c[j+4>>2]=c[E+4>>2];c[j+8>>2]=c[E+8>>2];c[j+12>>2]=c[E+12>>2];c[B>>2]=c[f>>2];c[B+4>>2]=c[f+4>>2];c[B+8>>2]=c[f+8>>2];c[B+12>>2]=c[f+12>>2];UX(D,B,n);c[k>>2]=c[D>>2];c[k+4>>2]=c[D+4>>2];c[k+8>>2]=c[D+8>>2];c[k+12>>2]=c[D+12>>2];l=G;return}function XX(a,b,d,e,f,g,i,j){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;i=i|0;j=j|0;var k=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0,r=0.0,s=0.0,t=0,u=0.0,v=0,w=0.0,x=0,y=0.0,z=0,A=0,B=0,C=0,D=0.0,E=0;C=l;l=l+64|0;B=C;z=(j|0)==2;y=+h[d>>3];u=+h[d+8>>3];v=B+8|0;w=+h[e>>3];x=B+16|0;p=+h[e+8>>3];q=B+24|0;r=+h[f>>3];s=+h[g>>3];t=B+32|0;o=+h[f+8>>3];n=+h[g+8>>3];e=B+40|0;f=B+48|0;g=B+56|0;d=1;k=4.0;m=4.0;while(1){h[B>>3]=y;h[v>>3]=u;D=m*.3333333333333333;h[x>>3]=D*w+y;h[q>>3]=D*p+u;D=k*.3333333333333333;h[t>>3]=r-D*s;h[e>>3]=o-D*n;h[f>>3]=r;h[g>>3]=o;if(d?(D=+aY(B,4),D<+aY(i,j)+-.001):0){d=0;break}if(bY(a,b,B)|0){A=5;break}if(m==0.0&k==0.0){A=9;break}E=m>.01;d=0;k=E?k*.5:0.0;m=E?m*.5:0.0}a:do if((A|0)==5){QX((c[47459]|0)+4|0);e=c[47460]|0;d=1;while(1){if((d|0)==4){d=1;break a}E=c[47459]|0;h[e+(E<<4)>>3]=+h[B+(d<<4)>>3];D=+h[B+(d<<4)+8>>3];c[47459]=E+1;h[e+(E<<4)+8>>3]=D;d=d+1|0}}else if((A|0)==9)if(z){QX((c[47459]|0)+4|0);e=c[47460]|0;d=1;while(1){if((d|0)==4){d=1;break a}E=c[47459]|0;h[e+(E<<4)>>3]=+h[B+(d<<4)>>3];D=+h[B+(d<<4)+8>>3];c[47459]=E+1;h[e+(E<<4)+8>>3]=D;d=d+1|0}}else d=0;while(0);l=C;return d|0}function YX(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;h[b>>3]=+h[b>>3]+ +h[d>>3];e=b+8|0;h[e>>3]=+h[e>>3]+ +h[d+8>>3];c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];return}function ZX(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;h[b>>3]=+h[b>>3]-+h[d>>3];e=b+8|0;h[e>>3]=+h[e>>3]-+h[d+8>>3];c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];return}function _X(a){a=+a;a=1.0-a;return +(a*a*a)}function $X(a){a=+a;return +(a*a*a)}function aY(a,b){a=a|0;b=b|0;var c=0.0,d=0,e=0.0,f=0.0,g=0;c=0.0;d=1;while(1){if((d|0)>=(b|0))break;g=d+-1|0;e=+h[a+(d<<4)>>3]-+h[a+(g<<4)>>3];f=+h[a+(d<<4)+8>>3]-+h[a+(g<<4)+8>>3];c=+C(+(f*f+e*e))+c;d=d+1|0}return +c}function bY(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0,u=0,v=0.0,w=0,x=0.0,y=0,z=0,A=0,B=0,C=0,D=0.0,E=0.0;C=l;l=l+64|0;t=C+32|0;u=C;w=u+16|0;y=d+16|0;z=d+32|0;A=d+48|0;B=d+8|0;g=d+24|0;i=d+40|0;j=d+56|0;k=u+8|0;m=u+24|0;f=0;a:while(1){if((f|0)>=(b|0)){e=1;break}n=a+(f<<5)|0;c[u>>2]=c[n>>2];c[u+4>>2]=c[n+4>>2];c[u+8>>2]=c[n+8>>2];c[u+12>>2]=c[n+12>>2];n=a+(f<<5)+16|0;c[w>>2]=c[n>>2];c[w+4>>2]=c[n+4>>2];c[w+8>>2]=c[n+8>>2];c[w+12>>2]=c[n+12>>2];n=cY(d,u,t)|0;b:do if((n|0)!=4){o=+h[u>>3];p=+h[k>>3];q=+h[w>>3];r=+h[m>>3];e=0;while(1){if((e|0)>=(n|0))break b;s=+h[t+(e<<3)>>3];if((!(s<1.0e-06|s>.999999)?(x=s*s*s,E=s*3.0,D=1.0-s,s=E*s*D,v=D*D,E=v*E,D=v*D,v=+h[y>>3]*E+ +h[d>>3]*D+ +h[z>>3]*s+ +h[A>>3]*x,x=+h[g>>3]*E+ +h[B>>3]*D+ +h[i>>3]*s+ +h[j>>3]*x,s=v-o,D=x-p,!(D*D+s*s<.001)):0)?(E=v-q,D=x-r,!(D*D+E*E<.001)):0){e=0;break a}e=e+1|0}}while(0);f=f+1|0}l=C;return e|0}function cY(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0.0,i=0,j=0.0,k=0,m=0,n=0,o=0,p=0.0,q=0.0,r=0,s=0,t=0,u=0,v=0;v=l;l=l+96|0;s=v+48|0;t=v+24|0;k=v;u=v+80|0;p=+h[b>>3];g=+h[b+16>>3]-p;q=+h[b+8>>3];j=+h[b+24>>3]-q;c[u>>2]=0;a:do if(!(g==0.0)){j=j/g;m=a+16|0;n=a+32|0;o=a+48|0;dY(+h[a+8>>3]-+h[a>>3]*j,+h[a+24>>3]-+h[m>>3]*j,+h[a+40>>3]-+h[n>>3]*j,+h[a+56>>3]-+h[o>>3]*j,s);h[s>>3]=j*p-q+ +h[s>>3];e=BY(s,t)|0;if((e|0)==4)b=4;else{f=s+8|0;i=s+16|0;k=s+24|0;g=1.0/g;b=0;while(1){if((b|0)>=(e|0))break;j=+h[t+(b<<3)>>3];if(j>=0.0&j<=1.0?(dY(+h[a>>3],+h[m>>3],+h[n>>3],+h[o>>3],s),q=(+h[s>>3]-p+((+h[k>>3]*j+ +h[i>>3])*j+ +h[f>>3])*j)*g,q>=0.0&q<=1.0):0)eY(j,d,u);b=b+1|0}b=c[u>>2]|0}}else{dY(+h[a>>3],+h[a+16>>3],+h[a+32>>3],+h[a+48>>3],s);h[s>>3]=+h[s>>3]-p;r=BY(s,t)|0;if(!(j==0.0)){if((r|0)==4){b=4;break}m=a+8|0;n=a+24|0;o=a+40|0;e=a+56|0;f=s+8|0;i=s+16|0;k=s+24|0;g=1.0/j;b=0;while(1){if((b|0)>=(r|0))break;j=+h[t+(b<<3)>>3];if(j>=0.0&j<=1.0?(dY(+h[m>>3],+h[n>>3],+h[o>>3],+h[e>>3],s),p=(+h[s>>3]-q+((+h[k>>3]*j+ +h[i>>3])*j+ +h[f>>3])*j)*g,p>=0.0&p<=1.0):0)eY(j,d,u);b=b+1|0}b=c[u>>2]|0;break}dY(+h[a+8>>3],+h[a+24>>3],+h[a+40>>3],+h[a+56>>3],s);h[s>>3]=+h[s>>3]-q;i=BY(s,k)|0;b=(i|0)==4;b:do if((r|0)==4){if(b){b=4;break a}else b=0;while(1){if((b|0)>=(i|0))break b;eY(+h[k+(b<<3)>>3],d,u);b=b+1|0}}else{if(b){b=0;while(1){if((b|0)>=(r|0))break b;eY(+h[t+(b<<3)>>3],d,u);b=b+1|0}}else e=0;while(1){if((e|0)>=(r|0))break b;f=t+(e<<3)|0;b=0;while(1){if((b|0)>=(i|0))break;g=+h[f>>3];if(g==+h[k+(b<<3)>>3])eY(g,d,u);b=b+1|0}e=e+1|0}}while(0);b=c[u>>2]|0}while(0);l=v;return b|0}function dY(a,b,c,d,e){a=+a;b=+b;c=+c;d=+d;e=e|0;h[e+24>>3]=d-a+(b-c)*3.0;h[e+16>>3]=(c+a)*3.0-b*6.0;h[e+8>>3]=(b-a)*3.0;h[e>>3]=a;return}function eY(a,b,d){a=+a;b=b|0;d=d|0;var e=0;if(a>=0.0&a<=1.0){e=c[d>>2]|0;h[b+(e<<3)>>3]=a;c[d>>2]=e+1}return}function fY(a,b){a=a|0;b=b|0;return +(+h[b+8>>3]*+h[a+8>>3]+ +h[b>>3]*+h[a>>3])}function gY(a){a=+a;var b=0.0;b=1.0-a;return +(b*b*(b+a*3.0))}function hY(a){a=+a;return +(a*a*((1.0-a)*3.0+a))}function iY(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,i=0.0,j=0,k=0,m=0,n=0,q=0,r=0,s=0,u=0,v=0,w=0,x=0,y=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0.0;H=l;l=l+112|0;E=H+80|0;D=H+64|0;C=H+48|0;G=4;F=T1(40)|0;c[F>>2]=0;w=H+32|0;x=H+16|0;y=H;A=H+96|0;G=U6(189856,1,F|0,G|0)|0;F=z;o=0;e=o;o=0;if((e|0)!=0&(p|0)!=0){f=V6(c[e>>2]|0,G|0,F|0)|0;if(!f)bb(e|0,p|0);z=p}else f=-1;if((f|0)==1)e=z;else e=0;a:while(1){if(e|0){e=-2;break}g=a+4|0;o=0;ia(116,c[g>>2]|0);e=o;o=0;if((e|0)!=0&(p|0)!=0){f=V6(c[e>>2]|0,G|0,F|0)|0;if(!f)bb(e|0,p|0);z=p}else f=-1;if((f|0)==1){e=z;continue}c[47503]=0;c[47504]=0;o=0;ia(117,c[g>>2]<<1|0);e=o;o=0;if((e|0)!=0&(p|0)!=0){f=V6(c[e>>2]|0,G|0,F|0)|0;if(!f)bb(e|0,p|0);z=p}else f=-1;if((f|0)==1){e=z;continue}m=(c[47506]|0)/2|0;c[47507]=m;c[47508]=m+-1;m=c[g>>2]|0;g=c[a>>2]|0;e=0;f=-1;i=t;while(1){if((e|0)>=(m|0))break;I=+h[g+(e<<4)>>3];v=i>I;u=v?e:f;e=e+1|0;f=u;i=v?I:i}v=g+(f<<4)|0;c[x>>2]=c[v>>2];c[x+4>>2]=c[v+4>>2];c[x+8>>2]=c[v+8>>2];c[x+12>>2]=c[v+12>>2];v=g+(((f|0)==0?m:f)+-1<<4)|0;c[w>>2]=c[v>>2];c[w+4>>2]=c[v+4>>2];c[w+8>>2]=c[v+8>>2];c[w+12>>2]=c[v+12>>2];v=g+(((f|0)==(m+-1|0)?0:f+1|0)<<4)|0;c[y>>2]=c[v>>2];c[y+4>>2]=c[v+4>>2];c[y+8>>2]=c[v+8>>2];c[y+12>>2]=c[v+12>>2];I=+h[x>>3];if((+h[w>>3]==I?I==+h[y>>3]:0)?+h[y+8>>3]>+h[x+8>>3]:0)v=15;else v=12;b:do if((v|0)==12){v=0;o=0;e=ca(36,w|0,x|0,y|0)|0;f=o;o=0;if((f|0)!=0&(p|0)!=0){g=V6(c[f>>2]|0,G|0,F|0)|0;if(!g)bb(f|0,p|0);z=p}else g=-1;if((g|0)==1){e=z;continue a}if((e|0)==1){g=c[47510]|0;e=c[47511]|0;f=0;while(1){if((f|0)>=(m|0))break b;j=c[a>>2]|0;if(!(((f|0)>0?(B=f+-1|0,+h[j+(f<<4)>>3]==+h[j+(B<<4)>>3]):0)?+h[j+(f<<4)+8>>3]==+h[j+(B<<4)+8>>3]:0)){u=c[47503]|0;c[g+(u<<3)>>2]=j+(f<<4);c[g+(u<<3)+4>>2]=g+(((u|0)%(m|0)|0)<<3);c[e+(u<<2)>>2]=g+(u<<3);c[47503]=u+1}f=f+1|0}}else v=15}while(0);c:do if((v|0)==15){v=0;j=c[47510]|0;e=c[47511]|0;g=m;while(1){f=g+-1|0;if((g|0)<=0)break c;k=c[a>>2]|0;if(((g|0)<(m|0)?+h[k+(f<<4)>>3]==+h[k+(g<<4)>>3]:0)?+h[k+(f<<4)+8>>3]==+h[k+(g<<4)+8>>3]:0){g=f;continue}g=c[47503]|0;c[j+(g<<3)>>2]=k+(f<<4);c[j+(g<<3)+4>>2]=j+(((g|0)%(m|0)|0)<<3);c[e+(g<<2)>>2]=j+(g<<3);c[47503]=g+1;g=f}}while(0);o=0;ja(29,e|0,c[47503]|0);e=o;o=0;if((e|0)!=0&(p|0)!=0){f=V6(c[e>>2]|0,G|0,F|0)|0;if(!f)bb(e|0,p|0);z=p}else f=-1;if((f|0)==1){e=z;continue}j=0;e=c[47504]|0;d:while(1){if((j|0)>=(e|0)){s=0;break}k=j+1|0;g=k;while(1){if((g|0)>=(e|0)){j=k;continue d}o=0;ja(30,j|0,g|0);e=o;o=0;if((e|0)!=0&(p|0)!=0){f=V6(c[e>>2]|0,G|0,F|0)|0;if(!f)bb(e|0,p|0);z=p}else f=-1;if((f|0)==1){e=z;continue a}g=g+1|0;e=c[47504]|0}}while(1){if((s|0)>=(e|0))break;o=0;f=aa(105,s|0,b|0)|0;g=o;o=0;if((g|0)!=0&(p|0)!=0){j=V6(c[g>>2]|0,G|0,F|0)|0;if(!j)bb(g|0,p|0);z=p}else j=-1;if((j|0)==1){e=z;continue a}if(f|0)break;s=s+1|0}if((s|0)==(e|0)){e=c[15712]|0;o=0;c[C>>2]=141858;c[C+4>>2]=192;c[C+8>>2]=141869;ca(32,e|0,141839,C|0)|0;e=o;o=0;if((e|0)!=0&(p|0)!=0){f=V6(c[e>>2]|0,G|0,F|0)|0;if(!f)bb(e|0,p|0);z=p}else f=-1;if((f|0)==1){e=z;continue}else{v=41;break}}u=b+16|0;k=0;while(1){if((k|0)>=(e|0))break;o=0;f=aa(105,k|0,u|0)|0;g=o;o=0;if((g|0)!=0&(p|0)!=0){j=V6(c[g>>2]|0,G|0,F|0)|0;if(!j)bb(g|0,p|0);z=p}else j=-1;if((j|0)==1){e=z;continue a}if(f|0)break;k=k+1|0}if((k|0)==(e|0)){e=c[15712]|0;o=0;c[D>>2]=141858;c[D+4>>2]=200;c[D+8>>2]=141902;ca(32,e|0,141839,D|0)|0;e=o;o=0;if((e|0)!=0&(p|0)!=0){f=V6(c[e>>2]|0,G|0,F|0)|0;if(!f)bb(e|0,p|0);z=p}else f=-1;if((f|0)==1){e=z;continue}else{v=48;break}}o=0;e=aa(106,s|0,k|0)|0;f=o;o=0;if((f|0)!=0&(p|0)!=0){g=V6(c[f>>2]|0,G|0,F|0)|0;if(!g)bb(f|0,p|0);z=p}else g=-1;if((g|0)==1){e=z;continue}if(!e){e=c[15712]|0;o=0;c[E>>2]=141858;c[E+4>>2]=207;c[E+8>>2]=141940;ca(32,e|0,141839,E|0)|0;e=o;o=0;if((e|0)!=0&(p|0)!=0){f=V6(c[e>>2]|0,G|0,F|0)|0;if(!f)bb(e|0,p|0);z=p}else f=-1;if((f|0)==1){e=z;continue}o=0;ia(118,2);e=o;o=0;if((e|0)!=0&(p|0)!=0){f=V6(c[e>>2]|0,G|0,F|0)|0;if(!f)bb(e|0,p|0);z=p}else f=-1;if((f|0)==1){e=z;continue}else{v=53;break}}if((s|0)==(k|0)){o=0;ia(118,2);e=o;o=0;if((e|0)!=0&(p|0)!=0){f=V6(c[e>>2]|0,G|0,F|0)|0;if(!f)bb(e|0,p|0);z=p}else f=-1;if((f|0)==1){e=z;continue}else{v=56;break}}c[A>>2]=b;c[A+4>>2]=0;f=A+8|0;c[f>>2]=u;c[A+12>>2]=0;o=0;ja(31,1,A|0);e=o;o=0;if((e|0)!=0&(p|0)!=0){g=V6(c[e>>2]|0,G|0,F|0)|0;if(!g)bb(e|0,p|0);z=p}else g=-1;if((g|0)==1){e=z;continue}c[47509]=c[47507];q=s;e:while(1){if((q|0)==-1){g=f;e=0;break}r=c[47513]|0;c[r+(q*52|0)>>2]=2;e=0;while(1){if((e|0)>=3){v=65;break}v=c[r+(q*52|0)+4+(e<<4)+12>>2]|0;if(v|0?(c[v>>2]|0)==1:0){v=68;break}e=e+1|0}if((v|0)==65){v=0;if((e|0)==3){e=c[47505]|0;k=c[e+(c[47508]<<2)>>2]|0;o=0;e=ca(36,u|0,c[c[e+(c[47507]<<2)>>2]>>2]|0,c[k>>2]|0)|0;g=o;o=0;if((g|0)!=0&(p|0)!=0){j=V6(c[g>>2]|0,G|0,F|0)|0;if(!j)bb(g|0,p|0);z=p}else j=-1;if((j|0)==1){e=z;continue a}j=(e|0)==1;n=j?f:k;j=j?k:f}else v=68}if((v|0)==68){v=0;k=c[r+(q*52|0)+4+(e<<4)>>2]|0;m=c[r+(q*52|0)+4+(e<<4)+4>>2]|0;o=0;e=ca(36,c[k>>2]|0,c[c[r+(q*52|0)+4+(((e+1|0)%3|0)<<4)+4>>2]>>2]|0,c[m>>2]|0)|0;g=o;o=0;if((g|0)!=0&(p|0)!=0){j=V6(c[g>>2]|0,G|0,F|0)|0;if(!j)bb(g|0,p|0);z=p}else j=-1;if((j|0)==1){e=z;continue a}j=(e|0)==1;n=j?k:m;j=j?m:k}do if((q|0)==(s|0)){o=0;ja(31,2,j|0);e=o;o=0;if((e|0)!=0&(p|0)!=0){g=V6(c[e>>2]|0,G|0,F|0)|0;if(!g)bb(e|0,p|0);z=p}else g=-1;if((g|0)==1){e=z;continue a}o=0;ja(31,1,n|0);e=o;o=0;if((e|0)!=0&(p|0)!=0){g=V6(c[e>>2]|0,G|0,F|0)|0;if(!g)bb(e|0,p|0);z=p}else g=-1;if((g|0)==1){e=z;continue a}e=0}else{m=c[47505]|0;if((c[m+(c[47507]<<2)>>2]|0)!=(n|0)?(c[m+(c[47508]<<2)>>2]|0)!=(n|0):0){o=0;j=$(34,n|0)|0;e=o;o=0;if((e|0)!=0&(p|0)!=0){g=V6(c[e>>2]|0,G|0,F|0)|0;if(!g)bb(e|0,p|0);z=p}else g=-1;if((g|0)==1){e=z;continue a}o=0;ja(32,2,j|0);e=o;o=0;if((e|0)!=0&(p|0)!=0){g=V6(c[e>>2]|0,G|0,F|0)|0;if(!g)bb(e|0,p|0);z=p}else g=-1;if((g|0)==1){e=z;continue a}o=0;ja(31,1,n|0);e=o;o=0;if((e|0)!=0&(p|0)!=0){g=V6(c[e>>2]|0,G|0,F|0)|0;if(!g)bb(e|0,p|0);z=p}else g=-1;if((g|0)==1){e=z;continue a}if((j|0)<=(c[47509]|0)){e=0;break}c[47509]=j;e=0;break}o=0;k=$(34,j|0)|0;e=o;o=0;if((e|0)!=0&(p|0)!=0){g=V6(c[e>>2]|0,G|0,F|0)|0;if(!g)bb(e|0,p|0);z=p}else g=-1;if((g|0)==1){e=z;continue a}o=0;ja(32,1,k|0);e=o;o=0;if((e|0)!=0&(p|0)!=0){g=V6(c[e>>2]|0,G|0,F|0)|0;if(!g)bb(e|0,p|0);z=p}else g=-1;if((g|0)==1){e=z;continue a}o=0;ja(31,2,j|0);e=o;o=0;if((e|0)!=0&(p|0)!=0){g=V6(c[e>>2]|0,G|0,F|0)|0;if(!g)bb(e|0,p|0);z=p}else g=-1;if((g|0)==1){e=z;continue a}if((k|0)>=(c[47509]|0)){e=0;break}c[47509]=k;e=0}while(0);while(1){if((e|0)>=3){q=-1;continue e}g=c[r+(q*52|0)+4+(e<<4)+12>>2]|0;if(g|0?(c[g>>2]|0)==1:0)break;e=e+1|0}q=(g-(c[47513]|0)|0)/52|0}while(1){if(!g)break;g=c[g+4>>2]|0;e=e+1|0}o=0;ia(118,e|0);g=o;o=0;if((g|0)!=0&(p|0)!=0){j=V6(c[g>>2]|0,G|0,F|0)|0;if(!j)bb(g|0,p|0);z=p}else j=-1;if((j|0)==1)e=z;else{v=94;break}}if((v|0)==41)e=-1;else if((v|0)==48)e=-1;else if((v|0)==53){c[d+4>>2]=2;e=c[47512]|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];F=e+16|0;c[F>>2]=c[u>>2];c[F+4>>2]=c[u+4>>2];c[F+8>>2]=c[u+8>>2];c[F+12>>2]=c[u+12>>2];c[d>>2]=e;e=0}else if((v|0)==56){c[d+4>>2]=2;e=c[47512]|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];F=e+16|0;c[F>>2]=c[u>>2];c[F+4>>2]=c[u+4>>2];c[F+8>>2]=c[u+8>>2];c[F+12>>2]=c[u+12>>2];c[d>>2]=e;e=0}else if((v|0)==94){c[d+4>>2]=e;g=c[47512]|0;while(1){e=e+-1|0;if(!f)break;F=g+(e<<4)|0;E=c[f>>2]|0;c[F>>2]=c[E>>2];c[F+4>>2]=c[E+4>>2];c[F+8>>2]=c[E+8>>2];c[F+12>>2]=c[E+12>>2];f=c[f+4>>2]|0}c[d>>2]=g;e=0}U1(G|0);l=H;return e|0}function jY(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;h=l;l=l+64|0;e=h+48|0;g=h+32|0;f=h+16|0;d=h;if((c[47516]|0)<(a|0)){b=c[47510]|0;if(!b){g=T1(a<<3)|0;c[47510]=g;if(!g){g=c[15712]|0;c[d>>2]=141858;c[d+4>>2]=523;c[d+8>>2]=142108;w4(g,141839,d)|0;bb(189856,1)}g=T1(a<<2)|0;c[47511]=g;if(!g){g=c[15712]|0;c[f>>2]=141858;c[f+4>>2]=527;c[f+8>>2]=142127;w4(g,141839,f)|0;bb(189856,1)}}else{f=W1(b,a<<3)|0;c[47510]=f;if(!f){f=c[15712]|0;c[g>>2]=141858;c[g+4>>2]=533;c[g+8>>2]=142147;w4(f,141839,g)|0;bb(189856,1)}g=W1(c[47511]|0,a<<2)|0;c[47511]=g;if(!g){g=c[15712]|0;c[e>>2]=141858;c[e+4>>2]=539;c[e+8>>2]=142167;w4(g,141839,e)|0;bb(189856,1)}}c[47516]=a}l=h;return}function kY(a){a=a|0;var b=0,d=0,e=0,f=0;f=l;l=l+32|0;e=f+16|0;d=f;if((c[47506]|0)<(a|0)){b=c[47505]|0;if(!b){e=T1(a<<2)|0;c[47505]=e;if(!e){e=c[15712]|0;c[d>>2]=141858;c[d+4>>2]=573;c[d+8>>2]=142063;w4(e,141839,d)|0;bb(189856,1)}}else{d=W1(b,a<<2)|0;c[47505]=d;if(!d){d=c[15712]|0;c[e>>2]=141858;c[e+4>>2]=580;c[e+8>>2]=142085;w4(d,141839,e)|0;bb(189856,1)}}c[47506]=a}l=f;return}function lY(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0,e=0.0;d=+h[b+8>>3];e=+h[b>>3];d=(+h[c>>3]-e)*(+h[a+8>>3]-d)-(+h[a>>3]-e)*(+h[c+8>>3]-d);return (d>0.0?1:d<0.0?2:3)|0}function mY(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=l;l=l+16|0;h=i;a:while(1){if((b|0)>3)e=0;else{b=9;break}while(1){if((e|0)>=(b|0)){b=8;break a}f=e+1|0;d=(f|0)%(b|0)|0;g=(e+2|0)%(b|0)|0;if(!(uY(e,g,a,b)|0))e=f;else break}vY(c[a+(e<<2)>>2]|0,c[a+(d<<2)>>2]|0,c[a+(g<<2)>>2]|0);b=b+-1|0;while(1){if((d|0)>=(b|0))continue a;g=d+1|0;c[a+(d<<2)>>2]=c[a+(g<<2)>>2];d=g}}if((b|0)==8){a=c[15712]|0;c[h>>2]=141858;c[h+4>>2]=324;c[h+8>>2]=142003;w4(a,141839,h)|0}else if((b|0)==9)vY(c[a>>2]|0,c[a+4>>2]|0,c[a+8>>2]|0);l=i;return}function nY(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;i=c[47513]|0;j=i+(a*52|0)|0;k=i+(b*52|0)|0;g=0;while(1){if((g|0)==3)break;l=i+(a*52|0)+4+(g<<4)|0;m=i+(a*52|0)+4+(g<<4)+4|0;n=i+(a*52|0)+4+(g<<4)+12|0;f=0;while(1){if((f|0)==3)break;o=c[c[l>>2]>>2]|0;h=c[c[i+(b*52|0)+4+(f<<4)>>2]>>2]|0;if((o|0)==(h|0)){d=c[c[i+(b*52|0)+4+(f<<4)+4>>2]>>2]|0;if((c[c[m>>2]>>2]|0)==(d|0))e=10;else e=8}else{d=c[c[i+(b*52|0)+4+(f<<4)+4>>2]>>2]|0;e=8}if(((e|0)==8?(e=0,(o|0)==(d|0)):0)?(c[c[m>>2]>>2]|0)==(h|0):0)e=10;if((e|0)==10){c[n>>2]=k;c[i+(b*52|0)+4+(f<<4)+12>>2]=j}f=f+1|0}g=g+1|0}return}function oY(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=c[47513]|0;d=0;e=0;while(1){if((e|0)==3)break;d=d+((lY(c[c[f+(a*52|0)+4+(e<<4)>>2]>>2]|0,c[c[f+(a*52|0)+4+(e<<4)+4>>2]>>2]|0,b)|0)!=2&1)|0;e=e+1|0}return ((d|0)==3|(d|0)==0)&1|0}function pY(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=c[47513]|0;e=d+(a*52|0)|0;a:do if(!(c[e>>2]|0)){c[e>>2]=1;if((a|0)==(b|0))d=1;else{f=0;while(1){if((f|0)>=3)break;e=c[d+(a*52|0)+4+(f<<4)+12>>2]|0;if(e){if(pY((e-d|0)/52|0,b)|0){d=1;break a}d=c[47513]|0}f=f+1|0}c[d+(a*52|0)>>2]=0;d=0}}else d=0;while(0);return d|0}function qY(a){a=a|0;var b=0,d=0,e=0,f=0;f=l;l=l+32|0;e=f+16|0;d=f;if((c[47514]|0)<(a|0)){b=c[47512]|0;if(!b){e=T1(a<<4)|0;c[47512]=e;if(!e){e=c[15712]|0;c[d>>2]=141858;c[d+4>>2]=593;c[d+8>>2]=141966;w4(e,141839,d)|0;bb(189856,1)}}else{d=W1(b,a<<4)|0;c[47512]=d;if(!d){d=c[15712]|0;c[e>>2]=141858;c[e+4>>2]=599;c[e+8>>2]=141984;w4(d,141839,e)|0;bb(189856,1)}}c[47514]=a}l=f;return}function rY(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=c[47508]|0;e=c[47507]|0;f=(d|0)>=(e|0);if((a|0)==1)if(f){c[b+4>>2]=c[(c[47505]|0)+(e<<2)>>2];a=190028;d=-1}else{a=190028;d=-1}else if(f){c[b+4>>2]=c[(c[47505]|0)+(d<<2)>>2];a=190032;d=1}else{a=190032;d=1}f=(c[a>>2]|0)+d|0;c[a>>2]=f;c[(c[47505]|0)+(f<<2)>>2]=b;return}function sY(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;f=c[47509]|0;g=c[47505]|0;b=c[47507]|0;while(1){if((b|0)>=(f|0)){e=4;break}d=b+1|0;if((lY(c[c[g+(d<<2)>>2]>>2]|0,c[c[g+(b<<2)>>2]>>2]|0,c[a>>2]|0)|0)==1)break;else b=d}a:do if((e|0)==4){b=c[47508]|0;while(1){if((b|0)<=(f|0)){b=f;break a}d=b+-1|0;if((lY(c[c[g+(d<<2)>>2]>>2]|0,c[c[g+(b<<2)>>2]>>2]|0,c[a>>2]|0)|0)==2)break;else b=d}}while(0);return b|0}function tY(a,b){a=a|0;b=b|0;c[((a|0)==1?190032:190028)>>2]=b;return}function uY(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;f=c[c[d+(((a+-1+e|0)%(e|0)|0)<<2)>>2]>>2]|0;i=c[c[d+(a<<2)>>2]>>2]|0;g=c[c[d+(((a+1|0)%(e|0)|0)<<2)>>2]>>2]|0;k=(lY(f,i,g)|0)==1;j=c[c[d+(b<<2)>>2]>>2]|0;if(k)if((lY(i,j,f)|0)==1){f=lY(j,i,g)|0;g=1;h=5}else f=0;else{f=lY(i,j,g)|0;g=2;h=5}a:do if((h|0)==5)if((f|0)==(g|0)){f=0;while(1){if((f|0)>=(e|0)){f=1;break a}g=f;f=f+1|0;h=(f|0)%(e|0)|0;if((h|0)==(b|0)|((g|0)==(b|0)|((g|0)==(a|0)|(h|0)==(a|0))))continue;if(xY(i,j,c[c[d+(g<<2)>>2]>>2]|0,c[c[d+(h<<2)>>2]>>2]|0)|0){f=0;break}}}else f=0;while(0);return f|0}function vY(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=c[47504]|0;f=c[47515]|0;if((e|0)<(f|0))h=e;else{wY(f+20|0);h=c[47504]|0}g=c[47513]|0;c[47504]=h+1;f=g+(h*52|0)|0;c[f>>2]=0;c[g+(h*52|0)+4>>2]=a;c[g+(h*52|0)+8>>2]=b;c[g+(h*52|0)+16>>2]=0;c[g+(h*52|0)+20>>2]=b;c[g+(h*52|0)+24>>2]=d;c[g+(h*52|0)+32>>2]=0;c[g+(h*52|0)+36>>2]=d;c[g+(h*52|0)+40>>2]=a;c[g+(h*52|0)+48>>2]=0;e=0;while(1){if((e|0)==3)break;c[g+(h*52|0)+4+(e<<4)+8>>2]=f;e=e+1|0}return}function wY(a){a=a|0;var b=0,d=0,e=0,f=0;f=l;l=l+32|0;e=f+16|0;d=f;if((c[47515]|0)<(a|0)){b=c[47513]|0;if(!b){e=T1(a*52|0)|0;c[47513]=e;if(!e){e=c[15712]|0;c[d>>2]=141858;c[d+4>>2]=552;c[d+8>>2]=142024;w4(e,141839,d)|0;bb(189856,1)}}else{d=W1(b,a*52|0)|0;c[47513]=d;if(!d){d=c[15712]|0;c[e>>2]=141858;c[e+4>>2]=558;c[e+8>>2]=142043;w4(d,141839,e)|0;bb(189856,1)}}c[47515]=a}l=f;return}function xY(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0;f=lY(a,b,c)|0;if((((f|0)!=3?(g=lY(a,b,d)|0,(g|0)!=3):0)?(h=lY(c,d,a)|0,(h|0)!=3):0)?(e=lY(c,d,b)|0,(e|0)!=3):0)return ((f|0)==1^(g|0)==1)&((h|0)==1^(e|0)==1)&1|0;if(((yY(a,b,c)|0)==0?(yY(a,b,d)|0)==0:0)?(yY(c,d,a)|0)==0:0)return (yY(c,d,b)|0)!=0|0;return 1}function yY(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0,e=0.0,f=0.0,g=0.0;e=+h[a>>3];g=+h[b>>3]-e;f=+h[a+8>>3];d=+h[b+8>>3]-f;e=+h[c>>3]-e;f=+h[c+8>>3]-f;if((lY(a,b,c)|0)==3?f*d+e*g>=0.0:0)a=f*f+e*e<=d*d+g*g&1;else a=0;return a|0}function zY(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0.0,i=0,j=0.0,k=0,l=0,m=0,n=0,o=0,p=0.0,q=0;m=T1(d<<2)|0;n=T1((d<<3)+8|0)|0;o=n+8|0;f=0;while(1){if((f|0)>=(d|0))break;c[m+(f<<2)>>2]=-1;h[o+(f<<3)>>3]=-2147483647.0;f=f+1|0}h[n>>3]=-2147483648.0;a:while(1){if((a|0)==(b|0))break;l=o+(a<<3)|0;j=+h[l>>3];h[l>>3]=j==-2147483647.0?0.0:-j;k=0;f=-1;while(1){if((k|0)>=(d|0)){a=f;continue a}i=o+(k<<3)|0;g=+h[i>>3];if(g<0.0){q=(a|0)<(k|0);p=+h[(c[e+((q?k:a)<<2)>>2]|0)+((q?a:k)<<3)>>3];j=-(p+ +h[l>>3]);if(p!=0.0&g>3]=j;c[m+(k<<2)>>2]=a;g=j}f=g>+h[o+(f<<3)>>3]?k:f}k=k+1|0}}U1(n);return m|0}function AY(a,b,d,e,f,g,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0;j=l;l=l+32|0;k=j+16|0;m=j;i=c[h+4>>2]|0;c[m>>2]=c[a>>2];c[m+4>>2]=c[a+4>>2];c[m+8>>2]=c[a+8>>2];c[m+12>>2]=c[a+12>>2];c[k>>2]=c[e>>2];c[k+4>>2]=c[e+4>>2];c[k+8>>2]=c[e+8>>2];c[k+12>>2]=c[e+12>>2];if(!(TY(m,b,k,f,h)|0)){a=c[h+24>>2]|0;c[a+(i<<2)>>2]=g;m=i+1|0;c[a+(m<<2)>>2]=d;a=zY(m,i,i+2|0,a)|0}else{a=T1((i<<2)+8|0)|0;m=i+1|0;c[a+(i<<2)>>2]=m;c[a+(m<<2)>>2]=-1}l=j;return a|0}function BY(a,b){a=a|0;b=b|0;var c=0,d=0.0,e=0.0,f=0.0,g=0.0,i=0.0,j=0;d=+h[a+24>>3];a:do if(d<1.0e-07&d>-1.0e-07)a=CY(a,b)|0;else{g=+h[a+16>>3]/(d*3.0);f=+h[a+8>>3]/d;e=g*g;d=g*2.0*e-g*f+ +h[a>>3]/d;e=f*.3333333333333333-e;e=e*e*4.0*e;f=d*d+e;if(!(f<0.0)){i=(+C(+f)-d)*.5;e=+E2(i);d=+E2(-d-i)+e;h[b>>3]=d;if(f>0.0)a=1;else{d=d*-.5;h[b+16>>3]=d;a=1;c=7}}else{i=+K(+(+C(+-f)),+-d);d=+E2(+C(+-e)*.5)*2.0;h[b>>3]=d*+E(+(i*.3333333333333333));h[b+8>>3]=+E(+((i+6.283185307179586)*.3333333333333333))*d;d=+E(+((i+-6.283185307179586)*.3333333333333333))*d;a=2;c=7}if((c|0)==7){h[b+(a<<3)>>3]=d;a=3}c=0;while(1){if((c|0)>=(a|0))break a;j=b+(c<<3)|0;h[j>>3]=+h[j>>3]-g;c=c+1|0}}while(0);return a|0}function CY(a,b){a=a|0;b=b|0;var c=0.0,d=0.0;c=+h[a+16>>3];do if(!(c<1.0e-07&c>-1.0e-07)){d=+h[a+8>>3]/(c*2.0);c=d*d-+h[a>>3]/c;if(!(c<0.0))if(c==0.0){h[b>>3]=-d;a=1;break}else{c=+C(+c)-d;h[b>>3]=c;h[b+8>>3]=d*-2.0-c;a=2;break}else a=0}else a=DY(a,b)|0;while(0);return a|0}function DY(a,b){a=a|0;b=b|0;var c=0.0,d=0.0;d=+h[a+8>>3];c=+h[a>>3];if(d<1.0e-07&d>-1.0e-07)a=c<1.0e-07&c>-1.0e-07?4:0;else{h[b>>3]=-c/d;a=1}return a|0}function EY(a){a=a|0;U1(c[a>>2]|0);U1(a);return}function FY(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;e=c[a+4>>2]|0;i=(e*3|0)+-2|0;d=c[47518]|0;if((i|0)>(c[47517]|0)){if(!d)d=T1(i<<4)|0;else d=W1(d,i<<4)|0;c[47518]=d;c[47517]=i;h=d;g=d}else{h=d;g=d}f=c[a>>2]|0;c[h>>2]=c[f>>2];c[h+4>>2]=c[f+4>>2];c[h+8>>2]=c[f+8>>2];c[h+12>>2]=c[f+12>>2];X6(h+16|0,f|0,16)|0;e=e+-1|0;d=1;a=2;while(1){if((d|0)>=(e|0))break;j=h+(a+2<<4)|0;k=h+(a+1<<4)|0;m=h+(a<<4)|0;l=f+(d<<4)|0;c[m>>2]=c[l>>2];c[m+4>>2]=c[l+4>>2];c[m+8>>2]=c[l+8>>2];c[m+12>>2]=c[l+12>>2];X6(k|0,l|0,16)|0;c[j>>2]=c[k>>2];c[j+4>>2]=c[k+4>>2];c[j+8>>2]=c[k+8>>2];c[j+12>>2]=c[k+12>>2];d=d+1|0;a=a+3|0}l=h+(a<<4)|0;m=f+(d<<4)|0;c[l>>2]=c[m>>2];c[l+4>>2]=c[m+4>>2];c[l+8>>2]=c[m+8>>2];c[l+12>>2]=c[m+12>>2];X6(h+(a+1<<4)|0,m|0,16)|0;c[b+4>>2]=i;c[b>>2]=g;return}function GY(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0,e=0.0;d=+h[b+8>>3];e=+h[b>>3];d=(+h[c>>3]-e)*(+h[a+8>>3]-d)-(+h[a>>3]-e)*(+h[c+8>>3]-d);return (d>.0001?1:(d<-.0001)<<31>>31)|0}function HY(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0,e=0.0,f=0.0;e=+h[a>>3];f=+h[b>>3];if(e!=f){d=+h[c>>3];if(!(e>3];e=+h[c+8>>3];d=+h[b+8>>3];if(!(f>2]=c[a>>2];c[g+4>>2]=c[a+4>>2];c[g+8>>2]=c[a+8>>2];c[g+12>>2]=c[a+12>>2];c[h>>2]=c[b>>2];c[h+4>>2]=c[b+4>>2];c[h+8>>2]=c[b+8>>2];c[h+12>>2]=c[b+12>>2];c[i>>2]=c[d>>2];c[i+4>>2]=c[d+4>>2];c[i+8>>2]=c[d+8>>2];c[i+12>>2]=c[d+12>>2];j=GY(g,h,i)|0;if((j|0)==0?(c[g>>2]=c[a>>2],c[g+4>>2]=c[a+4>>2],c[g+8>>2]=c[a+8>>2],c[g+12>>2]=c[a+12>>2],c[h>>2]=c[b>>2],c[h+4>>2]=c[b+4>>2],c[h+8>>2]=c[b+8>>2],c[h+12>>2]=c[b+12>>2],c[i>>2]=c[d>>2],c[i+4>>2]=c[d+4>>2],c[i+8>>2]=c[d+8>>2],c[i+12>>2]=c[d+12>>2],(HY(g,h,i)|0)!=0):0)f=1;else k=3;do if((k|0)==3){c[g>>2]=c[a>>2];c[g+4>>2]=c[a+4>>2];c[g+8>>2]=c[a+8>>2];c[g+12>>2]=c[a+12>>2];c[h>>2]=c[b>>2];c[h+4>>2]=c[b+4>>2];c[h+8>>2]=c[b+8>>2];c[h+12>>2]=c[b+12>>2];c[i>>2]=c[e>>2];c[i+4>>2]=c[e+4>>2];c[i+8>>2]=c[e+8>>2];c[i+12>>2]=c[e+12>>2];f=GY(g,h,i)|0;if((f|0)==0?(c[g>>2]=c[a>>2],c[g+4>>2]=c[a+4>>2],c[g+8>>2]=c[a+8>>2],c[g+12>>2]=c[a+12>>2],c[h>>2]=c[b>>2],c[h+4>>2]=c[b+4>>2],c[h+8>>2]=c[b+8>>2],c[h+12>>2]=c[b+12>>2],c[i>>2]=c[e>>2],c[i+4>>2]=c[e+4>>2],c[i+8>>2]=c[e+8>>2],c[i+12>>2]=c[e+12>>2],HY(g,h,i)|0):0){f=1;break};c[g>>2]=c[d>>2];c[g+4>>2]=c[d+4>>2];c[g+8>>2]=c[d+8>>2];c[g+12>>2]=c[d+12>>2];c[h>>2]=c[e>>2];c[h+4>>2]=c[e+4>>2];c[h+8>>2]=c[e+8>>2];c[h+12>>2]=c[e+12>>2];c[i>>2]=c[a>>2];c[i+4>>2]=c[a+4>>2];c[i+8>>2]=c[a+8>>2];c[i+12>>2]=c[a+12>>2];a=GY(g,h,i)|0;c[g>>2]=c[d>>2];c[g+4>>2]=c[d+4>>2];c[g+8>>2]=c[d+8>>2];c[g+12>>2]=c[d+12>>2];c[h>>2]=c[e>>2];c[h+4>>2]=c[e+4>>2];c[h+8>>2]=c[e+8>>2];c[h+12>>2]=c[e+12>>2];c[i>>2]=c[b>>2];c[i+4>>2]=c[b+4>>2];c[i+8>>2]=c[b+8>>2];c[i+12>>2]=c[b+12>>2];k=(O(f,j)|0)<0;f=(O(GY(g,h,i)|0,a)|0)>>>31;f=k?f:0}while(0);l=m;return f|0}function JY(a,b){a=a|0;b=b|0;var c=0.0,d=0.0;c=+h[a>>3]-+h[b>>3];d=+h[a+8>>3]-+h[b+8>>3];return +(d*d+c*c)}function KY(a){a=a|0;c[a+24>>2]=LY(c[a+4>>2]|0)|0;MY(a);return}function LY(a){a=a|0;var b=0,d=0,e=0,f=0;e=a+2|0;f=T1(e<<2)|0;b=V1(O(a,a)|0,8)|0;d=0;while(1){if((d|0)>=(a|0))break;c[f+(d<<2)>>2]=b;b=b+(a<<3)|0;d=d+1|0}while(1){if((a|0)>=(e|0))break;c[f+(a<<2)>>2]=0;a=a+1|0}return f|0}function MY(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0.0;p=l;l=l+32|0;i=p+16|0;g=p;j=c[a+4>>2]|0;m=c[a+8>>2]|0;n=c[a+16>>2]|0;o=c[a+20>>2]|0;d=c[a+24>>2]|0;b=0;while(1){if((b|0)>=(j|0))break;q=c[o+(b<<2)>>2]|0;e=m+(b<<4)|0;f=m+(q<<4)|0;c[g>>2]=c[e>>2];c[g+4>>2]=c[e+4>>2];c[g+8>>2]=c[e+8>>2];c[g+12>>2]=c[e+12>>2];c[i>>2]=c[f>>2];c[i+4>>2]=c[f+4>>2];c[i+8>>2]=c[f+8>>2];c[i+12>>2]=c[f+12>>2];r=+NY(g,i);f=c[d+(b<<2)>>2]|0;h[f+(q<<3)>>3]=r;h[(c[d+(q<<2)>>2]|0)+(b<<3)>>3]=r;a=b+-1|0;a=(q|0)==(a|0)?b+-2|0:a;while(1){if((a|0)<=-1)break;if((OY(b,a,m,n,o)|0?OY(a,b,m,n,o)|0:0)?(k=m+(a<<4)|0,c[g>>2]=c[e>>2],c[g+4>>2]=c[e+4>>2],c[g+8>>2]=c[e+8>>2],c[g+12>>2]=c[e+12>>2],c[i>>2]=c[k>>2],c[i+4>>2]=c[k+4>>2],c[i+8>>2]=c[k+8>>2],c[i+12>>2]=c[k+12>>2],PY(g,i,j,j,j,m,n)|0):0){c[g>>2]=c[e>>2];c[g+4>>2]=c[e+4>>2];c[g+8>>2]=c[e+8>>2];c[g+12>>2]=c[e+12>>2];c[i>>2]=c[k>>2];c[i+4>>2]=c[k+4>>2];c[i+8>>2]=c[k+8>>2];c[i+12>>2]=c[k+12>>2];r=+NY(g,i);h[f+(a<<3)>>3]=r;h[(c[d+(a<<2)>>2]|0)+(b<<3)>>3]=r}a=a+-1|0}b=b+1|0}l=p;return}function NY(a,b){a=a|0;b=b|0;var d=0.0,e=0,f=0,g=0;e=l;l=l+32|0;f=e+16|0;g=e;c[g>>2]=c[a>>2];c[g+4>>2]=c[a+4>>2];c[g+8>>2]=c[a+8>>2];c[g+12>>2]=c[a+12>>2];c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];d=+C(+(+JY(g,f)));l=e;return +d}function OY(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0;g=l;l=l+64|0;h=g+48|0;i=g+32|0;j=g+16|0;k=g;n=d+(c[f+(a<<2)>>2]<<4)|0;m=d+(a<<4)|0;e=d+(c[e+(a<<2)>>2]<<4)|0;f=d+(b<<4)|0;c[k>>2]=c[n>>2];c[k+4>>2]=c[n+4>>2];c[k+8>>2]=c[n+8>>2];c[k+12>>2]=c[n+12>>2];c[j>>2]=c[m>>2];c[j+4>>2]=c[m+4>>2];c[j+8>>2]=c[m+8>>2];c[j+12>>2]=c[m+12>>2];c[i>>2]=c[e>>2];c[i+4>>2]=c[e+4>>2];c[i+8>>2]=c[e+8>>2];c[i+12>>2]=c[e+12>>2];c[h>>2]=c[f>>2];c[h+4>>2]=c[f+4>>2];c[h+8>>2]=c[f+8>>2];c[h+12>>2]=c[f+12>>2];f=QY(k,j,i,h)|0;l=g;return f|0}function PY(a,b,d,e,f,g,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;p=l;l=l+64|0;n=p+48|0;m=p+32|0;k=p+16|0;j=p;i=0;while(1){if((i|0)>=(d|0)){o=4;break}r=g+(i<<4)|0;q=g+(c[h+(i<<2)>>2]<<4)|0;c[j>>2]=c[a>>2];c[j+4>>2]=c[a+4>>2];c[j+8>>2]=c[a+8>>2];c[j+12>>2]=c[a+12>>2];c[k>>2]=c[b>>2];c[k+4>>2]=c[b+4>>2];c[k+8>>2]=c[b+8>>2];c[k+12>>2]=c[b+12>>2];c[m>>2]=c[r>>2];c[m+4>>2]=c[r+4>>2];c[m+8>>2]=c[r+8>>2];c[m+12>>2]=c[r+12>>2];c[n>>2]=c[q>>2];c[n+4>>2]=c[q+4>>2];c[n+8>>2]=c[q+8>>2];c[n+12>>2]=c[q+12>>2];if(!(IY(j,k,m,n)|0))i=i+1|0;else{e=0;break}}a:do if((o|0)==4)while(1){if((e|0)>=(f|0)){e=1;break a}q=g+(e<<4)|0;r=g+(c[h+(e<<2)>>2]<<4)|0;c[j>>2]=c[a>>2];c[j+4>>2]=c[a+4>>2];c[j+8>>2]=c[a+8>>2];c[j+12>>2]=c[a+12>>2];c[k>>2]=c[b>>2];c[k+4>>2]=c[b+4>>2];c[k+8>>2]=c[b+8>>2];c[k+12>>2]=c[b+12>>2];c[m>>2]=c[q>>2];c[m+4>>2]=c[q+4>>2];c[m+8>>2]=c[q+8>>2];c[m+12>>2]=c[q+12>>2];c[n>>2]=c[r>>2];c[n+4>>2]=c[r+4>>2];c[n+8>>2]=c[r+8>>2];c[n+12>>2]=c[r+12>>2];if(!(IY(j,k,m,n)|0)){e=e+1|0;o=4}else{e=0;break}}while(0);l=p;return e|0}function QY(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;g=l;l=l+48|0;h=g+32|0;i=g+16|0;j=g;c[j>>2]=c[e>>2];c[j+4>>2]=c[e+4>>2];c[j+8>>2]=c[e+8>>2];c[j+12>>2]=c[e+12>>2];c[i>>2]=c[a>>2];c[i+4>>2]=c[a+4>>2];c[i+8>>2]=c[a+8>>2];c[i+12>>2]=c[a+12>>2];c[h>>2]=c[b>>2];c[h+4>>2]=c[b+4>>2];c[h+8>>2]=c[b+8>>2];c[h+12>>2]=c[b+12>>2];f=GY(j,i,h)|0;c[j>>2]=c[e>>2];c[j+4>>2]=c[e+4>>2];c[j+8>>2]=c[e+8>>2];c[j+12>>2]=c[e+12>>2];c[i>>2]=c[b>>2];c[i+4>>2]=c[b+4>>2];c[i+8>>2]=c[b+8>>2];c[i+12>>2]=c[b+12>>2];c[h>>2]=c[d>>2];c[h+4>>2]=c[d+4>>2];c[h+8>>2]=c[d+8>>2];c[h+12>>2]=c[d+12>>2];e=GY(j,i,h)|0;c[j>>2]=c[a>>2];c[j+4>>2]=c[a+4>>2];c[j+8>>2]=c[a+8>>2];c[j+12>>2]=c[a+12>>2];c[i>>2]=c[b>>2];c[i+4>>2]=c[b+4>>2];c[i+8>>2]=c[b+8>>2];c[i+12>>2]=c[b+12>>2];c[h>>2]=c[d>>2];c[h+4>>2]=c[d+4>>2];c[h+8>>2]=c[d+8>>2];c[h+12>>2]=c[d+12>>2];d=(GY(j,i,h)|0)>0;l=g;return (d?e|f:e&f)>>>31^1|0}function RY(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;s=l;l=l+80|0;j=s+64|0;i=s+48|0;g=s+32|0;k=s+16|0;o=s;p=c[a+4>>2]|0;q=c[a+8>>2]|0;r=c[a+16>>2]|0;m=c[a+20>>2]|0;n=T1((p<<3)+16|0)|0;if((b|0)==-2222){c[j>>2]=c[d>>2];c[j+4>>2]=c[d+4>>2];c[j+8>>2]=c[d+8>>2];c[j+12>>2]=c[d+12>>2];b=SY(a,j)|0}if((b|0)>-1){a=c[a+12>>2]|0;f=c[a+(b+1<<2)>>2]|0;a=c[a+(b<<2)>>2]|0}else{f=p;a=p}b=0;while(1){if((b|0)>=(a|0)){b=a;break}u=q+(b<<4)|0;c[o>>2]=c[u>>2];c[o+4>>2]=c[u+4>>2];c[o+8>>2]=c[u+8>>2];c[o+12>>2]=c[u+12>>2];u=q+(c[m+(b<<2)>>2]<<4)|0;t=q+(c[r+(b<<2)>>2]<<4)|0;c[k>>2]=c[u>>2];c[k+4>>2]=c[u+4>>2];c[k+8>>2]=c[u+8>>2];c[k+12>>2]=c[u+12>>2];c[g>>2]=c[o>>2];c[g+4>>2]=c[o+4>>2];c[g+8>>2]=c[o+8>>2];c[g+12>>2]=c[o+12>>2];c[i>>2]=c[t>>2];c[i+4>>2]=c[t+4>>2];c[i+8>>2]=c[t+8>>2];c[i+12>>2]=c[t+12>>2];c[j>>2]=c[d>>2];c[j+4>>2]=c[d+4>>2];c[j+8>>2]=c[d+8>>2];c[j+12>>2]=c[d+12>>2];if((QY(k,g,i,j)|0)!=0?(c[i>>2]=c[d>>2],c[i+4>>2]=c[d+4>>2],c[i+8>>2]=c[d+8>>2],c[i+12>>2]=c[d+12>>2],c[j>>2]=c[o>>2],c[j+4>>2]=c[o+4>>2],c[j+8>>2]=c[o+8>>2],c[j+12>>2]=c[o+12>>2],(PY(i,j,a,f,p,q,r)|0)!=0):0){c[i>>2]=c[d>>2];c[i+4>>2]=c[d+4>>2];c[i+8>>2]=c[d+8>>2];c[i+12>>2]=c[d+12>>2];c[j>>2]=c[o>>2];c[j+4>>2]=c[o+4>>2];c[j+8>>2]=c[o+8>>2];c[j+12>>2]=c[o+12>>2];e=+NY(i,j)}else e=0.0;h[n+(b<<3)>>3]=e;b=b+1|0}while(1){if((b|0)>=(f|0)){b=f;break}h[n+(b<<3)>>3]=0.0;b=b+1|0}while(1){if((b|0)>=(p|0))break;t=q+(b<<4)|0;c[o>>2]=c[t>>2];c[o+4>>2]=c[t+4>>2];c[o+8>>2]=c[t+8>>2];c[o+12>>2]=c[t+12>>2];t=q+(c[m+(b<<2)>>2]<<4)|0;u=q+(c[r+(b<<2)>>2]<<4)|0;c[k>>2]=c[t>>2];c[k+4>>2]=c[t+4>>2];c[k+8>>2]=c[t+8>>2];c[k+12>>2]=c[t+12>>2];c[g>>2]=c[o>>2];c[g+4>>2]=c[o+4>>2];c[g+8>>2]=c[o+8>>2];c[g+12>>2]=c[o+12>>2];c[i>>2]=c[u>>2];c[i+4>>2]=c[u+4>>2];c[i+8>>2]=c[u+8>>2];c[i+12>>2]=c[u+12>>2];c[j>>2]=c[d>>2];c[j+4>>2]=c[d+4>>2];c[j+8>>2]=c[d+8>>2];c[j+12>>2]=c[d+12>>2];if((QY(k,g,i,j)|0)!=0?(c[i>>2]=c[d>>2],c[i+4>>2]=c[d+4>>2],c[i+8>>2]=c[d+8>>2],c[i+12>>2]=c[d+12>>2],c[j>>2]=c[o>>2],c[j+4>>2]=c[o+4>>2],c[j+8>>2]=c[o+8>>2],c[j+12>>2]=c[o+12>>2],(PY(i,j,a,f,p,q,r)|0)!=0):0){c[i>>2]=c[d>>2];c[i+4>>2]=c[d+4>>2];c[i+8>>2]=c[d+8>>2];c[i+12>>2]=c[d+12>>2];c[j>>2]=c[o>>2];c[j+4>>2]=c[o+4>>2];c[j+8>>2]=c[o+8>>2];c[j+12>>2]=c[o+12>>2];e=+NY(i,j)}else e=0.0;h[n+(b<<3)>>3]=e;b=b+1|0}h[n+(p<<3)>>3]=0.0;h[n+(p+1<<3)>>3]=0.0;l=s;return n|0}function SY(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;m=l;l=l+32|0;f=m+8|0;e=m;h=m+24|0;i=a+8|0;j=a+12|0;k=h+4|0;d=0;while(1){if((d|0)>=(c[a>>2]|0)){d=-1111;break}o=c[j>>2]|0;n=c[o+(d<<2)>>2]|0;c[h>>2]=(c[i>>2]|0)+(n<<4);g=d+1|0;c[k>>2]=(c[o+(g<<2)>>2]|0)-n;c[e>>2]=c[h>>2];c[e+4>>2]=c[h+4>>2];c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];if(!(NX(e,f)|0))d=g;else break}l=m;return d|0}function TY(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;t=l;l=l+64|0;n=t+48|0;m=t+32|0;p=t+16|0;o=t;r=c[f+4>>2]|0;s=c[f+8>>2]|0;q=c[f+16>>2]|0;g=(e|0)<0;do if((b|0)<0)if(g){g=0;i=0;f=0;h=0}else{b=c[f+12>>2]|0;f=0;h=0;i=e;j=b;b=b+(e<<2)|0;k=9}else{if(g){k=c[f+12>>2]|0;f=0;h=0;i=b;j=k;b=k+(b<<2)|0;k=9;break}g=c[f+12>>2]|0;if((b|0)>(e|0)){f=c[g+(e+1<<2)>>2]|0;h=c[g+(e<<2)>>2]|0;i=b;j=g;b=g+(b<<2)|0;k=9;break}else{f=c[g+(b+1<<2)>>2]|0;h=c[g+(b<<2)>>2]|0;i=e;j=g;b=g+(e<<2)|0;k=9;break}}while(0);if((k|0)==9){g=c[j+(i+1<<2)>>2]|0;i=c[b>>2]|0}b=0;while(1){if((b|0)>=(h|0)){k=13;break}j=s+(b<<4)|0;e=s+(c[q+(b<<2)>>2]<<4)|0;c[o>>2]=c[a>>2];c[o+4>>2]=c[a+4>>2];c[o+8>>2]=c[a+8>>2];c[o+12>>2]=c[a+12>>2];c[p>>2]=c[d>>2];c[p+4>>2]=c[d+4>>2];c[p+8>>2]=c[d+8>>2];c[p+12>>2]=c[d+12>>2];c[m>>2]=c[j>>2];c[m+4>>2]=c[j+4>>2];c[m+8>>2]=c[j+8>>2];c[m+12>>2]=c[j+12>>2];c[n>>2]=c[e>>2];c[n+4>>2]=c[e+4>>2];c[n+8>>2]=c[e+8>>2];c[n+12>>2]=c[e+12>>2];if(!(IY(o,p,m,n)|0))b=b+1|0;else{g=0;break}}a:do if((k|0)==13){while(1){if((f|0)>=(i|0))break;e=s+(f<<4)|0;k=s+(c[q+(f<<2)>>2]<<4)|0;c[o>>2]=c[a>>2];c[o+4>>2]=c[a+4>>2];c[o+8>>2]=c[a+8>>2];c[o+12>>2]=c[a+12>>2];c[p>>2]=c[d>>2];c[p+4>>2]=c[d+4>>2];c[p+8>>2]=c[d+8>>2];c[p+12>>2]=c[d+12>>2];c[m>>2]=c[e>>2];c[m+4>>2]=c[e+4>>2];c[m+8>>2]=c[e+8>>2];c[m+12>>2]=c[e+12>>2];c[n>>2]=c[k>>2];c[n+4>>2]=c[k+4>>2];c[n+8>>2]=c[k+8>>2];c[n+12>>2]=c[k+12>>2];if(!(IY(o,p,m,n)|0)){f=f+1|0;k=13}else{g=0;break a}}while(1){if((g|0)>=(r|0)){g=1;break a}e=s+(g<<4)|0;k=s+(c[q+(g<<2)>>2]<<4)|0;c[o>>2]=c[a>>2];c[o+4>>2]=c[a+4>>2];c[o+8>>2]=c[a+8>>2];c[o+12>>2]=c[a+12>>2];c[p>>2]=c[d>>2];c[p+4>>2]=c[d+4>>2];c[p+8>>2]=c[d+8>>2];c[p+12>>2]=c[d+12>>2];c[m>>2]=c[e>>2];c[m+4>>2]=c[e+4>>2];c[m+8>>2]=c[e+8>>2];c[m+12>>2]=c[e+12>>2];c[n>>2]=c[k>>2];c[n+4>>2]=c[k+4>>2];c[n+8>>2]=c[k+8>>2];c[n+12>>2]=c[k+12>>2];if(!(IY(o,p,m,n)|0))g=g+1|0;else{g=0;break}}}while(0);l=t;return g|0}function UY(a){a=a|0;return VY(a,0,0)|0}function VY(a,b,c){a=a|0;b=b|0;c=c|0;return WY(a,b,c,0)|0}function WY(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0;if(!d){g=T1(496)|0;if(!g)g=0;else{c[g+12>>2]=35;c[g+16>>2]=107;c[g+20>>2]=105;d=35;h=6}}else{g=kb[c[d>>2]&63](496)|0;if(!g)g=0;else{h=c[d>>2]|0;c[g+12>>2]=h;c[g+16>>2]=c[d+4>>2];c[g+20>>2]=c[d+8>>2];d=h;h=6}}do if((h|0)==6){c[g+8>>2]=0;c[g+32>>2]=0;c[g+376>>2]=16;j=g+12|0;i=kb[d&63](256)|0;d=g+388|0;c[d>>2]=i;if(!i){tb[c[g+20>>2]&127](g);g=0;break}h=kb[c[j>>2]&63](1024)|0;i=g+44|0;c[i>>2]=h;if(!h){e=g+20|0;tb[c[e>>2]&127](c[d>>2]|0);tb[c[e>>2]&127](g);g=0;break}c[g+48>>2]=h+1024;if(!f){f=XY(j)|0;c[g+352>>2]=f;if(!f){e=g+20|0;tb[c[e>>2]&127](c[i>>2]|0);tb[c[e>>2]&127](c[d>>2]|0);tb[c[e>>2]&127](g);g=0;break}}else c[g+352>>2]=f;c[g+372>>2]=0;c[g+364>>2]=0;c[g+300>>2]=0;c[g+464>>2]=0;c[g+460>>2]=0;c[g+124>>2]=0;c[g+244>>2]=0;d=g+468|0;a[d>>0]=33;h=g+232|0;a[h>>0]=0;a[g+233>>0]=0;c[g+392>>2]=0;c[g+396>>2]=0;a[g+400>>0]=0;f=g+228|0;c[f>>2]=0;YY(g+412|0,j);YY(g+436|0,j);ZY(g,b);if(b|0?(c[f>>2]|0)==0:0){_Y(g);g=0;break}if(!e){c[g+224>>2]=i$()|0;break}else{a[h>>0]=1;c[g+224>>2]=O0()|0;a[d>>0]=a[e>>0]|0;break}}while(0);return g|0}function XY(b){b=b|0;var d=0;d=kb[c[b>>2]&63](188)|0;if(d|0){YY(d+80|0,b);YY(d+104|0,b);f_(d,b);f_(d+20|0,b);f_(d+40|0,b);f_(d+60|0,b);a[d+131>>0]=0;f_(d+132|0,b);c[d+152>>2]=0;c[d+156>>2]=0;a[d+160>>0]=0;b=d+164|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;c[b+12>>2]=0;c[b+16>>2]=0;c[b+20>>2]=0;a[d+128>>0]=1;a[d+129>>0]=0;a[d+130>>0]=0}return d|0}function YY(a,b){a=a|0;b=b|0;c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;c[a+12>>2]=0;c[a+16>>2]=0;c[a+20>>2]=b;return}function ZY(d,e){d=d|0;e=e|0;var f=0,g=0,h=0;c[d+276>>2]=56;V0(d+252|0);if(e|0)c[d+228>>2]=gZ(e,d+12|0)|0;c[d+356>>2]=0;Y$(d+148|0,d+144|0,0)|0;c[d>>2]=0;c[d+4>>2]=0;e=d+116|0;g=d+52|0;h=g+64|0;do{c[g>>2]=0;g=g+4|0}while((g|0)<(h|0));c[e>>2]=d;c[d+120>>2]=0;e=d+128|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;e=c[d+8>>2]|0;c[d+24>>2]=e;c[d+28>>2]=e;c[d+36>>2]=0;c[d+40>>2]=0;e=d+312|0;g=d+404|0;c[g>>2]=0;c[g+4>>2]=0;g=d+280|0;f=d+304|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;c[g+12>>2]=0;c[g+16>>2]=0;g=e;h=g+36|0;do{c[g>>2]=0;g=g+4|0}while((g|0)<(h|0));b[e+36>>1]=0;a[f>>0]=1;c[d+308>>2]=0;c[d+360>>2]=0;c[d+368>>2]=0;c[d+380>>2]=0;c[d+236>>2]=0;c[d+248>>2]=0;c[d+240>>2]=0;c[d+472>>2]=0;c[d+476>>2]=0;a[d+484>>0]=0;a[d+485>>0]=0;c[d+488>>2]=0;c[d+492>>2]=0;return}function _Y(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;if(b|0){e=b+364|0;g=b+20|0;d=c[b+360>>2]|0;while(1){if(!d){d=c[e>>2]|0;if(!d)break;c[e>>2]=0}h=c[d>>2]|0;tb[c[g>>2]&127](c[d+36>>2]|0);$Y(c[d+44>>2]|0,b);tb[c[g>>2]&127](d);d=h}e=b+300|0;d=c[b+296>>2]|0;while(1){if(!d){d=c[e>>2]|0;if(!d)break;c[e>>2]=0}h=c[d+8>>2]|0;tb[c[g>>2]&127](d);d=h}$Y(c[b+372>>2]|0,b);$Y(c[b+368>>2]|0,b);aZ(b+412|0);aZ(b+436|0);d=b+12|0;tb[c[g>>2]&127](c[b+228>>2]|0);if((a[b+484>>0]|0)==0?(f=c[b+352>>2]|0,f|0):0)bZ(f,(c[b+472>>2]|0)==0&1,d);tb[c[g>>2]&127](c[b+388>>2]|0);tb[c[g>>2]&127](c[b+460>>2]|0);tb[c[g>>2]&127](c[b+8>>2]|0);tb[c[g>>2]&127](c[b+44>>2]|0);tb[c[g>>2]&127](c[b+392>>2]|0);tb[c[g>>2]&127](c[b+236>>2]|0);d=c[b+248>>2]|0;if(d|0)tb[d&127](c[b+240>>2]|0);tb[c[g>>2]&127](b)}return}function $Y(a,b){a=a|0;b=b|0;var d=0;b=b+20|0;while(1){if(!a)break;d=c[a+4>>2]|0;tb[c[b>>2]&127](c[a+16>>2]|0);tb[c[b>>2]&127](a);a=d}return}function aZ(a){a=a|0;var b=0,d=0,e=0;d=a+20|0;b=c[a>>2]|0;while(1){if(!b)break;e=c[b>>2]|0;tb[c[(c[d>>2]|0)+8>>2]&127](b);b=e}b=c[a+4>>2]|0;while(1){if(!b)break;e=c[b>>2]|0;tb[c[(c[d>>2]|0)+8>>2]&127](b);b=e}return}function bZ(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=l;l=l+16|0;f=h;g=a+20|0;cZ(f,g);d=d+8|0;while(1){e=dZ(f)|0;if(!e)break;if(!(c[e+16>>2]|0))continue;tb[c[d>>2]&127](c[e+20>>2]|0)}eZ(a);eZ(a+132|0);eZ(g);eZ(a+40|0);eZ(a+60|0);aZ(a+80|0);aZ(a+104|0);if(b<<24>>24){tb[c[d>>2]&127](c[a+184>>2]|0);tb[c[d>>2]&127](c[a+164>>2]|0)}tb[c[d>>2]&127](a);l=h;return}function cZ(a,b){a=a|0;b=b|0;var d=0;d=c[b>>2]|0;c[a>>2]=d;c[a+4>>2]=d+(c[b+8>>2]<<2);return}function dZ(a){a=a|0;var b=0,d=0,e=0;d=c[a+4>>2]|0;e=c[a>>2]|0;do{if((e|0)==(d|0)){b=0;break}b=e;e=e+4|0;c[a>>2]=e;b=c[b>>2]|0}while(!(b|0));return b|0}function eZ(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;d=a+8|0;e=a+16|0;b=0;while(1){f=c[(c[e>>2]|0)+8>>2]|0;g=c[a>>2]|0;if(b>>>0>=(c[d>>2]|0)>>>0)break;tb[f&127](c[g+(b<<2)>>2]|0);b=b+1|0}tb[f&127](g);return}function fZ(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0;f=hZ(a)|0;if(!f){c[a+276>>2]=57;f=iZ(a,b,d,e)|0}return f|0}function gZ(b,d){b=b|0;d=d|0;var e=0,f=0;e=0;do{f=e;e=e+1|0}while((a[b+f>>0]|0)!=0);d=kb[c[d>>2]&63](e)|0;if(!d)d=0;else W6(d|0,b|0,e|0)|0;return d|0}function hZ(b){b=b|0;var d=0;d=b+228|0;if(!(nb[(a[b+232>>0]<<24>>24?38:37)&63](b+148|0,b+144|0,c[d>>2]|0)|0))b=e_(b,c[d>>2]|0)|0;else b=0;return b|0}function iZ(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0;g=l;l=l+16|0;h=g;c[h>>2]=d;j=b+144|0;i=c[j>>2]|0;i=ob[c[i>>2]&127](i,d,e,h)|0;f=jZ(b,c[j>>2]|0,d,e,i,c[h>>2]|0,f,(a[b+480>>0]|0)==0&1)|0;l=g;return f|0}function jZ(b,e,f,g,h,i,j,k){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;var m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0;Ga=l;l=l+16|0;Da=Ga;c[Da>>2]=i;r=c[b+352>>2]|0;s=b+144|0;if((c[s>>2]|0)==(e|0)){p=b+284|0;q=b+288|0;na=b+296|0}else{na=b+296|0;q=c[na>>2]|0;p=q;q=q+4|0}t=k<<24>>24!=0;pa=b+252|0;u=b+80|0;v=b+476|0;w=b+84|0;x=b+320|0;y=b+412|0;z=b+316|0;A=b+424|0;B=b+428|0;C=b+324|0;ra=b+4|0;D=b+485|0;E=r+132|0;F=b+312|0;ta=r+129|0;G=r+128|0;H=r+80|0;I=r+92|0;J=r+96|0;K=b+136|0;L=b+88|0;M=b+488|0;va=b+112|0;wa=r+131|0;xa=b+116|0;ya=r+130|0;za=b+108|0;Aa=b+356|0;N=b+340|0;O=b+132|0;P=b+344|0;Q=b+348|0;R=b+328|0;S=b+349|0;T=b+420|0;U=r+120|0;V=r+116|0;W=b+92|0;X=b+472|0;Y=b+336|0;Z=b+332|0;_=b+96|0;$=b+256|0;aa=b+464|0;ba=b+460|0;ca=r+160|0;da=r+184|0;ea=r+180|0;fa=r+164|0;ga=b+128|0;ha=b+12|0;ia=b+16|0;ja=b+268|0;ka=b+120|0;la=r+176|0;ma=r+168|0;o=e;n=f;e=h;a:while(1){c[p>>2]=n;f=c[Da>>2]|0;c[q>>2]=f;i=f;b:do if((e|0)<1){if(t&(e|0)!=0){m=7;break a}switch(e|0){case -1:{i=5;m=280;break a}case 0:{m=9;break a}case -2:{i=6;break a}case -4:{m=10;break a}case -15:{e=15;break b}default:{}}c[Da>>2]=g;e=0-e|0;i=g}while(0);h=pb[c[pa>>2]&127](pa,e,n,i,o)|0;c:do switch(h|0){case 2:{m=58;break a}case -1:{m=184;break a}case 1:{i=kZ(b,0,n,c[Da>>2]|0)|0;if(i|0){m=280;break a}i=c[s>>2]|0;break}case 4:{if(!(c[w>>2]|0))i=1;else{m=lZ(y,o,n,c[Da>>2]|0)|0;c[z>>2]=m;if(!m){i=1;m=280;break a}c[B>>2]=c[A>>2];c[C>>2]=0;i=0}c[x>>2]=0;m=274;break}case 7:{i=c[w>>2]|0;if(!i)m=275;else{yb[i&15](c[ra>>2]|0,c[z>>2]|0,c[x>>2]|0,c[C>>2]|0,1);c[z>>2]=0;mZ(y);i=o}break}case 57:{i=kZ(b,1,n,c[Da>>2]|0)|0;if(i|0){m=280;break a}i=c[s>>2]|0;break}case 6:{a[D>>0]=0;m=nZ(b,E,75395,36)|0;c[F>>2]=m;if(!m){i=1;m=280;break a}a[ta>>0]=1;if(!(c[w>>2]|0))m=33;else{if(!(ob[c[o+52>>2]&127](o,n,c[Da>>2]|0,p)|0)){i=32;m=280;break a}i=c[o+64>>2]|0;i=lZ(y,o,n+i|0,(c[Da>>2]|0)+(0-i)|0)|0;if(!i){i=1;m=280;break a}oZ(i);c[B>>2]=c[A>>2];c[C>>2]=i;i=0;m=34}break}case 14:{m=33;break}case 8:{i=c[z>>2]|0;if(!i)i=1;else{yb[c[w>>2]&15](c[ra>>2]|0,i,c[x>>2]|0,c[C>>2]|0,0);mZ(y);i=0}if(!((c[x>>2]|0)==0?!(a[D>>0]|0):0)){f=a[ta>>0]|0;a[ta>>0]=1;do if(c[M>>2]|0?c[va>>2]|0:0){h=nZ(b,E,75395,36)|0;if(!h){i=1;m=280;break a}if(!(a[D>>0]|0))e=h+20|0;else{e=h+20|0;c[e>>2]=c[Aa>>2]}a[wa>>0]=0;if(!(pb[c[va>>2]&127](c[xa>>2]|0,0,c[e>>2]|0,c[h+16>>2]|0,c[h+24>>2]|0)|0)){i=21;m=280;break a}if(!(a[wa>>0]|0)){if(c[x>>2]|0)break;a[ta>>0]=f;break}if(((a[ya>>0]|0)==0?(oa=c[za>>2]|0,oa|0):0)?(kb[oa&63](c[ra>>2]|0)|0)==0:0){i=22;m=280;break a}}while(0);a[D>>0]=0}e=c[L>>2]|0;if(!e)m=274;else{tb[e&127](c[ra>>2]|0);i=o}break}case 34:{m=qZ(b,o,n,c[Da>>2]|0)|0;c[N>>2]=m;if(!m){i=1;m=280;break a}else m=80;break}case 22:{m=rZ(b,o,n,c[Da>>2]|0)|0;c[P>>2]=m;if(!m){i=1;m=280;break a}a[Q>>0]=0;c[R>>2]=0;a[S>>0]=0;m=80;break}case 23:{a[Q>>0]=1;c[R>>2]=142188;m=80;break}case 24:{a[S>>0]=1;c[R>>2]=142194;m=80;break}case 25:{c[R>>2]=142197;m=80;break}case 26:{c[R>>2]=142203;m=80;break}case 27:{c[R>>2]=142210;m=80;break}case 28:{c[R>>2]=142217;m=80;break}case 29:{c[R>>2]=142226;m=80;break}case 30:{c[R>>2]=142234;m=80;break}case 32:case 31:{if((a[G>>0]|0)!=0?(c[O>>2]|0)!=0:0){if(!(sZ(y,(c[R>>2]|0)==0?((h|0)==32?142243:142253):142255)|0)){i=1;m=280;break a}if(!(tZ(y,o,n,c[Da>>2]|0)|0)){i=1;m=280;break a}c[R>>2]=c[B>>2];i=o}else m=275;break}case 36:case 35:{if(a[G>>0]|0){if(!(uZ(c[N>>2]|0,c[P>>2]|0,a[Q>>0]|0,a[S>>0]|0,0,b)|0)){i=1;m=280;break a}if((c[O>>2]|0)!=0?(qa=c[R>>2]|0,(qa|0)!=0):0){switch(a[qa>>0]|0){case 40:{m=93;break}case 78:{if((a[qa+1>>0]|0)==79)m=93;break}default:{}}if((m|0)==93){m=0;i=c[A>>2]|0;if((i|0)==(c[T>>2]|0)){if(!((vZ(y)|0)<<24>>24)){i=1;m=280;break a}i=c[A>>2]|0}c[A>>2]=i+1;a[i>>0]=41;i=c[A>>2]|0;if((i|0)==(c[T>>2]|0)){if(!((vZ(y)|0)<<24>>24)){i=1;m=280;break a}i=c[A>>2]|0}c[A>>2]=i+1;a[i>>0]=0;c[R>>2]=c[B>>2];c[B>>2]=c[A>>2]}c[q>>2]=n;zb[c[O>>2]&15](c[ra>>2]|0,c[c[N>>2]>>2]|0,c[c[P>>2]>>2]|0,c[R>>2]|0,0,(h|0)==36&1);mZ(y);i=o}else m=275}else m=275;break}case 38:case 37:{if(a[G>>0]|0){i=c[o+64>>2]|0;i=wZ(b,o,a[Q>>0]|0,n+i|0,(c[Da>>2]|0)+(0-i)|0,H)|0;if(i|0){m=280;break a}e=c[J>>2]|0;c[J>>2]=c[I>>2];if(!(uZ(c[N>>2]|0,c[P>>2]|0,a[Q>>0]|0,0,e,b)|0)){i=1;m=280;break a}if((c[O>>2]|0)!=0?(sa=c[R>>2]|0,(sa|0)!=0):0){switch(a[sa>>0]|0){case 40:{m=108;break}case 78:{if((a[sa+1>>0]|0)==79)m=108;break}default:{}}if((m|0)==108){m=0;i=c[A>>2]|0;if((i|0)==(c[T>>2]|0)){if(!((vZ(y)|0)<<24>>24)){i=1;m=280;break a}i=c[A>>2]|0}c[A>>2]=i+1;a[i>>0]=41;i=c[A>>2]|0;if((i|0)==(c[T>>2]|0)){if(!((vZ(y)|0)<<24>>24)){i=1;m=280;break a}i=c[A>>2]|0}c[A>>2]=i+1;a[i>>0]=0;c[R>>2]=c[B>>2];c[B>>2]=c[A>>2]}c[q>>2]=n;zb[c[O>>2]&15](c[ra>>2]|0,c[c[N>>2]>>2]|0,c[c[P>>2]>>2]|0,c[R>>2]|0,e,(h|0)==38&1);mZ(y);i=o}else m=275}else m=275;break}case 12:{if(a[G>>0]|0){i=c[o+64>>2]|0;i=xZ(b,o,n+i|0,(c[Da>>2]|0)+(0-i)|0)|0;e=c[F>>2]|0;f=c[U>>2]|0;if(e){c[e+4>>2]=f;c[(c[F>>2]|0)+8>>2]=(c[V>>2]|0)-(c[U>>2]|0);c[U>>2]=c[V>>2];if(!(c[K>>2]|0))e=1;else{c[q>>2]=n;e=c[F>>2]|0;Ab[c[K>>2]&0](c[ra>>2]|0,c[e>>2]|0,d[e+33>>0]|0,c[e+4>>2]|0,c[e+8>>2]|0,c[Aa>>2]|0,0,0,0);e=0}}else{c[V>>2]=f;e=1}if(!i){i=e;m=274}else{m=280;break a}}else m=275;break}case 5:{a[D>>0]=0;a[ta>>0]=1;if(!(c[w>>2]|0)){c[x>>2]=75395;i=1}else{m=c[o+64>>2]|0;m=lZ(y,o,n+m|0,(c[Da>>2]|0)+(0-m)|0)|0;c[x>>2]=m;if(!m){i=1;m=280;break a}c[B>>2]=c[A>>2];i=0}if((((a[ya>>0]|0)==0?(c[M>>2]|0)==0:0)?(ua=c[za>>2]|0,ua|0):0)?(kb[ua&63](c[ra>>2]|0)|0)==0:0){i=22;m=280;break a}if(!(c[F>>2]|0)){e=nZ(b,E,75395,36)|0;c[F>>2]=e;if(!e){i=1;m=280;break a}c[e+24>>2]=0;m=133}else m=133;break}case 13:{i=1;m=133;break}case 15:{if(((a[G>>0]|0)!=0?(c[F>>2]|0)!=0:0)?(c[K>>2]|0)!=0:0){c[q>>2]=n;i=c[F>>2]|0;Ab[c[K>>2]&0](c[ra>>2]|0,c[i>>2]|0,d[i+33>>0]|0,0,0,c[i+20>>2]|0,c[i+16>>2]|0,c[i+24>>2]|0,0);i=o}else m=275;break}case 16:{if((a[G>>0]|0)!=0?(c[F>>2]|0)!=0:0){h=lZ(H,o,n,c[Da>>2]|0)|0;c[(c[F>>2]|0)+28>>2]=h;if(!(c[(c[F>>2]|0)+28>>2]|0)){i=1;m=280;break a}c[J>>2]=c[I>>2];if(c[W>>2]|0){c[q>>2]=n;i=c[F>>2]|0;zb[c[W>>2]&15](c[ra>>2]|0,c[i>>2]|0,c[i+20>>2]|0,c[i+16>>2]|0,c[i+24>>2]|0,c[i+28>>2]|0);i=o;break c}if(c[K>>2]|0){c[q>>2]=n;i=c[F>>2]|0;Ab[c[K>>2]&0](c[ra>>2]|0,c[i>>2]|0,0,0,0,c[i+20>>2]|0,c[i+16>>2]|0,c[i+24>>2]|0,c[i+28>>2]|0);i=o}else m=275}else m=275;break}case 9:{if(nb[c[o+44>>2]&63](o,n,c[Da>>2]|0)|0){c[F>>2]=0;m=275;break c}if(!(a[G>>0]|0)){c[I>>2]=c[J>>2];c[F>>2]=0;m=275;break c}i=lZ(H,o,n,c[Da>>2]|0)|0;if(!i){i=1;m=280;break a}e=nZ(b,r,i,36)|0;c[F>>2]=e;if(!e){i=1;m=280;break a}if((c[e>>2]|0)!=(i|0)){c[I>>2]=c[J>>2];c[F>>2]=0;m=275;break c}c[J>>2]=c[I>>2];c[(c[F>>2]|0)+24>>2]=0;a[(c[F>>2]|0)+33>>0]=0;if(!(c[X>>2]|0))i=(c[na>>2]|0)!=0;else i=1;a[(c[F>>2]|0)+34>>0]=(i^1)&1;if(!(c[K>>2]|0))m=275;else i=o;break}case 10:{if(!(a[G>>0]|0)){c[I>>2]=c[J>>2];c[F>>2]=0;m=275;break c}i=lZ(H,o,n,c[Da>>2]|0)|0;if(!i){i=1;m=280;break a}e=nZ(b,E,i,36)|0;c[F>>2]=e;if(!e){i=1;m=280;break a}if((c[e>>2]|0)!=(i|0)){c[I>>2]=c[J>>2];c[F>>2]=0;m=275;break c}c[J>>2]=c[I>>2];c[(c[F>>2]|0)+24>>2]=0;a[(c[F>>2]|0)+33>>0]=1;if(!(c[X>>2]|0))i=(c[na>>2]|0)!=0;else i=1;a[(c[F>>2]|0)+34>>0]=(i^1)&1;if(!(c[K>>2]|0))m=275;else i=o;break}case 18:{c[Y>>2]=0;c[Z>>2]=0;if(!(c[_>>2]|0))m=275;else{n=lZ(y,o,n,c[Da>>2]|0)|0;c[Z>>2]=n;if(!n){i=1;m=280;break a}c[B>>2]=c[A>>2];i=o}break}case 21:{if(!(ob[c[o+52>>2]&127](o,n,c[Da>>2]|0,p)|0)){i=32;m=280;break a}if(!(c[Z>>2]|0))m=275;else{i=c[o+64>>2]|0;i=lZ(y,o,n+i|0,(c[Da>>2]|0)+(0-i)|0)|0;if(!i){i=1;m=280;break a}oZ(i);c[Y>>2]=i;c[B>>2]=c[A>>2];i=o}break}case 19:{if((c[Z>>2]|0)!=0?(c[_>>2]|0)!=0:0){i=c[o+64>>2]|0;i=lZ(y,o,n+i|0,(c[Da>>2]|0)+(0-i)|0)|0;if(!i){i=1;m=280;break a}c[q>>2]=n;yb[c[_>>2]&15](c[ra>>2]|0,c[Z>>2]|0,c[Aa>>2]|0,i,c[Y>>2]|0);i=0}else i=1;mZ(y);m=274;break}case 20:{if((c[Y>>2]|0)!=0?(c[_>>2]|0)!=0:0){c[q>>2]=n;yb[c[_>>2]&15](c[ra>>2]|0,c[Z>>2]|0,c[Aa>>2]|0,0,c[Y>>2]|0);i=0}else i=1;mZ(y);m=274;break}case 58:{if(c[u>>2]|0)yZ(b,o,n,c[Da>>2]|0);i=zZ(b,o,Da,g,j,k)|0;if(i|0){m=280;break a}if(!(c[Da>>2]|0)){m=189;break a}else i=o;break}case 44:{i=c[aa>>2]|0;do if((c[$>>2]|0)>>>0>=i>>>0){if(!i){h=c[ha>>2]|0;c[aa>>2]=32;h=kb[h&63](32)|0;c[ba>>2]=h;if(!h){m=198;break a}else break}f=c[ia>>2]|0;h=c[ba>>2]|0;i=i<<1;c[aa>>2]=i;i=lb[f&127](h,i)|0;if(!i){m=193;break a}c[ba>>2]=i;i=c[da>>2]|0;if(i|0){i=lb[c[ia>>2]&127](i,c[aa>>2]<<2)|0;if(!i){i=1;m=280;break a}c[da>>2]=i}}while(0);a[(c[ba>>2]|0)+(c[$>>2]|0)>>0]=0;if(a[ca>>0]|0){i=BZ(b)|0;if((i|0)<0){i=1;m=280;break a}c[(c[da>>2]|0)+(c[ea>>2]<<2)>>2]=i;c[ea>>2]=(c[ea>>2]|0)+1;c[(c[fa>>2]|0)+(i*28|0)>>2]=6;if(c[ga>>2]|0)i=o;else m=275}else m=275;break}case 50:{i=(c[ba>>2]|0)+(c[$>>2]|0)|0;if((a[i>>0]|0)==124){i=2;m=280;break a}a[i>>0]=44;if((a[ca>>0]|0)!=0?(c[ga>>2]|0)!=0:0)i=o;else m=275;break}case 49:{f=c[ba>>2]|0;e=c[$>>2]|0;i=a[f+e>>0]|0;if(i<<24>>24==44){i=2;m=280;break a}if(i<<24>>24==0&(a[ca>>0]|0)!=0?(Ba=(c[fa>>2]|0)+((c[(c[da>>2]|0)+((c[ea>>2]|0)+-1<<2)>>2]|0)*28|0)|0,(c[Ba>>2]|0)!=3):0){c[Ba>>2]=5;i=(c[ga>>2]|0)==0&1;f=c[ba>>2]|0;e=c[$>>2]|0}else i=1;a[f+e>>0]=124;m=274;break}case 59:case 60:{a[ta>>0]=1;if(c[M>>2]|0){e=c[o+64>>2]|0;e=lZ(H,o,n+e|0,(c[Da>>2]|0)+(0-e)|0)|0;if(!e){i=1;m=280;break a}f=nZ(b,E,e,0)|0;c[I>>2]=c[J>>2];do if(c[ja>>2]|0){if(!(a[ya>>0]|0)){if(a[ta>>0]|0){m=219;break}}else if(c[na>>2]|0){m=219;break}if(!f){i=11;m=280;break a}if(!(a[f+34>>0]|0)){i=24;m=280;break a}}else m=219;while(0);if((m|0)==219?(m=0,(f|0)==0):0){a[G>>0]=a[ya>>0]|0;if((h|0)!=60){m=275;break c}i=c[ka>>2]|0;if(!i){m=275;break c}vb[i&127](c[ra>>2]|0,e,1);i=o;break c}i=f+32|0;if(a[i>>0]|0){i=12;m=280;break a}if(c[f+4>>2]|0){i=CZ(b,f,(h|0)==60&1)|0;e=(i|0)==0;if(e){i=(e^1)&1;m=274;break c}else{m=280;break a}}if(!(c[va>>2]|0)){a[G>>0]=a[ya>>0]|0;m=275;break c}a[wa>>0]=0;a[i>>0]=1;h=(pb[c[va>>2]&127](c[xa>>2]|0,0,c[f+20>>2]|0,c[f+16>>2]|0,c[f+24>>2]|0)|0)==0;a[i>>0]=0;if(h){i=21;m=280;break a}e=a[ya>>0]|0;if(!(a[wa>>0]|0)){a[G>>0]=e;i=o;break c}else i=0}else{e=a[ya>>0]|0;a[G>>0]=e;i=1}if((e<<24>>24==0?(Ca=c[za>>2]|0,(Ca|0)!=0):0)?(kb[Ca&63](c[ra>>2]|0)|0)==0:0){i=22;m=280;break a}else m=274;break}case 40:{if(!(c[ga>>2]|0))m=275;else{n=qZ(b,o,n,c[Da>>2]|0)|0;c[N>>2]=n;if(!n){i=1;m=280;break a}c[ea>>2]=0;c[la>>2]=0;a[ca>>0]=1;i=o}break}case 42:case 41:{if(!(a[ca>>0]|0))m=275;else{if(!(c[ga>>2]|0))i=1;else{i=kb[c[ha>>2]&63](20)|0;if(!i){i=1;m=280;break a}m=i+4|0;c[m>>2]=0;c[m+4>>2]=0;c[m+8>>2]=0;c[m+12>>2]=0;c[i>>2]=(h|0)==41?2:1;c[q>>2]=n;vb[c[ga>>2]&127](c[ra>>2]|0,c[c[N>>2]>>2]|0,i);i=0}a[ca>>0]=0;m=274}break}case 43:{if((a[ca>>0]|0)!=0?(c[(c[fa>>2]|0)+((c[(c[da>>2]|0)+((c[ea>>2]|0)+-1<<2)>>2]|0)*28|0)>>2]=3,(c[ga>>2]|0)!=0):0)i=o;else m=275;break}case 51:{e=0;m=247;break}case 53:{e=1;m=247;break}case 52:{e=2;m=247;break}case 54:{e=3;m=247;break}case 45:{f=0;m=258;break}case 47:{f=1;m=258;break}case 46:{f=2;m=258;break}case 48:{f=3;m=258;break}case 55:{if(!(EZ(b,o,n,c[Da>>2]|0)|0)){i=1;m=280;break a}else i=o;break}case 56:{if(!(FZ(b,o,n,c[Da>>2]|0)|0)){i=1;m=280;break a}else i=o;break}case 0:{if((e|0)==14)i=o;else m=275;break}case 3:{if(!(c[w>>2]|0))m=275;else i=o;break}case 11:{if((a[G>>0]|0)!=0?(c[K>>2]|0)!=0:0)i=o;else m=275;break}case 17:{if(!(c[_>>2]|0))m=275;else i=o;break}case 33:{if((a[G>>0]|0)!=0?(c[O>>2]|0)!=0:0)i=o;else m=275;break}case 39:{if(!(c[ga>>2]|0))m=275;else i=o;break}default:m=275}while(0);if((m|0)==33)if(!(ob[c[o+52>>2]&127](o,n,c[Da>>2]|0,p)|0)){i=32;m=280;break}else{i=1;m=34}else if((m|0)==80){m=0;if((a[G>>0]|0)!=0?(c[O>>2]|0)!=0:0)i=o;else m=275}else if((m|0)==133){m=0;if((a[G>>0]|0)!=0?(c[F>>2]|0)!=0:0){e=c[o+64>>2]|0;e=lZ(H,o,n+e|0,(c[Da>>2]|0)+(0-e)|0)|0;c[(c[F>>2]|0)+16>>2]=e;e=c[F>>2]|0;if(!(c[e+16>>2]|0)){i=1;m=280;break}c[e+20>>2]=c[Aa>>2];c[J>>2]=c[I>>2];if((h|0)==13&(c[K>>2]|0)!=0)i=o;else m=274}else m=274}else if((m|0)==247){m=0;if(a[ca>>0]|0){i=c[Da>>2]|0;if(e)i=i+(0-(c[o+64>>2]|0))|0;f=BZ(b)|0;if((f|0)<0){i=1;m=280;break}c[(c[fa>>2]|0)+(f*28|0)>>2]=4;c[(c[fa>>2]|0)+(f*28|0)+4>>2]=e;i=qZ(b,o,n,i)|0;if(!i){i=1;m=280;break}e=c[i>>2]|0;c[(c[fa>>2]|0)+(f*28|0)+8>>2]=e;i=0;do{h=i;i=i+1|0}while((a[e+h>>0]|0)!=0);c[ma>>2]=(c[ma>>2]|0)+i;if(c[ga>>2]|0)i=o;else m=275}else m=275}else if((m|0)==258)if(a[ca>>0]|0){e=(c[ga>>2]|0)==0;i=e&1;m=(c[ea>>2]|0)+-1|0;c[ea>>2]=m;c[(c[fa>>2]|0)+((c[(c[da>>2]|0)+(m<<2)>>2]|0)*28|0)+4>>2]=f;if(!(c[ea>>2]|0)){if(!e){e=DZ(b)|0;if(!e){i=1;m=280;break}c[q>>2]=n;vb[c[ga>>2]&127](c[ra>>2]|0,c[c[N>>2]>>2]|0,e)}a[ca>>0]=0;c[ma>>2]=0;m=274}else m=274}else m=275;if((m|0)==34){m=0;if((a[G>>0]|0)!=0?(c[F>>2]|0)!=0:0){e=c[o+64>>2]|0;e=lZ(H,o,n+e|0,(c[Da>>2]|0)+(0-e)|0)|0;if(!e){i=1;m=280;break}oZ(e);c[(c[F>>2]|0)+24>>2]=e;c[J>>2]=c[I>>2];if((h|0)==14&(c[K>>2]|0)!=0)i=o;else m=274}else m=274}if((m|0)==274){m=0;if(!(i<<24>>24))i=o;else m=275}if((m|0)==275){m=0;if(!(c[u>>2]|0))i=o;else{yZ(b,o,n,c[Da>>2]|0);i=o}}switch(c[v>>2]|0){case 3:{m=278;break a}case 2:{i=35;m=280;break a}default:{}}e=c[Da>>2]|0;o=i;n=e;e=ob[c[i>>2]&127](i,e,g,Da)|0}d:switch(m|0){case 7:{c[j>>2]=n;i=0;break}case 9:{c[p>>2]=f;i=4;break}case 10:{i=(o|0)==(c[s>>2]|0);if(!i?(a[(c[na>>2]|0)+20>>0]|0)==0:0){c[j>>2]=n;i=0;break}if((a[b+484>>0]|0)!=0|i^1)if((pb[c[pa>>2]&127](pa,-4,g,g,o)|0)==-1)i=29;else{c[j>>2]=n;i=0}else i=3;break}case 58:{do if((a[D>>0]|0?(Ea=a[ta>>0]|0,a[ta>>0]=1,c[M>>2]|0):0)?c[va>>2]|0:0){i=nZ(b,E,75395,36)|0;if(!i){i=1;break d}Da=i+20|0;c[Da>>2]=c[Aa>>2];a[wa>>0]=0;if(!(pb[c[va>>2]&127](c[xa>>2]|0,0,c[Da>>2]|0,c[i+16>>2]|0,c[i+24>>2]|0)|0)){i=21;break d}if(!(a[wa>>0]|0)){a[ta>>0]=Ea;break}if(((a[ya>>0]|0)==0?(Fa=c[za>>2]|0,Fa|0):0)?(kb[Fa&63](c[ra>>2]|0)|0)==0:0){i=22;break d}}while(0);c[b+276>>2]=58;i=pZ(b,n,g,j)|0;break}case 184:{i=(e|0)==28?10:(e|0)==12?17:2;break}case 189:{c[b+276>>2]=59;i=0;break}case 193:{c[aa>>2]=(c[aa>>2]|0)>>>1;i=1;break}case 198:{c[aa>>2]=0;i=1;break}case 278:{c[j>>2]=c[Da>>2];i=0;break}case 280:break}l=Ga;return i|0}function kZ(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;q=l;l=l+32|0;p=q+16|0;m=q+12|0;i=q+8|0;j=q+4|0;k=q;c[p>>2]=0;c[m>>2]=0;c[i>>2]=0;c[k>>2]=-1;n=b+144|0;o=b+284|0;g=(d|0)!=0;a:do if(rb[(a[b+232>>0]<<24>>24?2:1)&3](d,c[n>>2]|0,e,f,o,i,j,p,m,k)|0){if((c[k>>2]|0)==1&(g^1)?(a[(c[b+352>>2]|0)+130>>0]=1,h=b+488|0,(c[h>>2]|0)==1):0)c[h>>2]=0;h=b+140|0;if(!(c[h>>2]|0))if(!(c[b+80>>2]|0)){e=0;d=0}else{yZ(b,c[n>>2]|0,e,f);e=0;d=0}else{d=c[p>>2]|0;if(!d)d=0;else{f=c[n>>2]|0;d=lZ(b+436|0,f,d,d+(lb[c[f+28>>2]&127](f,d)|0)|0)|0;if(!d){d=1;break}c[b+452>>2]=c[b+448>>2]}g=c[i>>2]|0;if(g){i=c[n>>2]|0;g=lZ(b+436|0,i,g,(c[j>>2]|0)+(0-(c[i+64>>2]|0))|0)|0;if(!g){d=1;break}}else g=0;xb[c[h>>2]&31](c[b+4>>2]|0,g,d,c[k>>2]|0);e=g}do if(!(c[b+228>>2]|0)){g=c[m>>2]|0;h=g;if(g|0){k=c[g+64>>2]|0;m=c[n>>2]|0;if((k|0)==(c[m+64>>2]|0)?(k|0)!=2|(g|0)==(m|0):0){c[n>>2]=h;break}c[o>>2]=c[p>>2];d=19;break a}g=c[p>>2]|0;if(g|0){h=b+436|0;if(!d){d=c[n>>2]|0;d=lZ(h,d,g,g+(lb[c[d+28>>2]&127](d,g)|0)|0)|0;if(!d){d=1;break a}}d=e_(b,d)|0;mZ(h);if((d|0)!=18)break a;c[o>>2]=c[p>>2];d=18;break a}}while(0);if((d|0)!=0|(e|0)!=0){mZ(b+436|0);d=0}else d=0}else d=g?31:30;while(0);l=q;return d|0}function lZ(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;do if(!(tZ(b,d,e,f)|0))d=0;else{e=b+12|0;d=c[e>>2]|0;if((d|0)==(c[b+8>>2]|0)){if(!((vZ(b)|0)<<24>>24)){d=0;break}d=c[e>>2]|0}c[e>>2]=d+1;a[d>>0]=0;d=c[b+16>>2]|0}while(0);return d|0}function mZ(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;e=a+4|0;b=c[e>>2]|0;a:do if(!b){c[e>>2]=c[a>>2];b=a}else{d=c[a>>2]|0;while(1){if(!d){b=a;break a}g=c[d>>2]|0;c[d>>2]=b;c[e>>2]=d;f=d;d=g;b=f}}while(0);c[b>>2]=0;c[a+16>>2]=0;c[a+12>>2]=0;c[a+8>>2]=0;return}function nZ(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;w=e+8|0;a:do if(!(c[w>>2]|0))if(g){a[e+4>>0]=6;c[w>>2]=64;h=e+16|0;i=kb[c[c[h>>2]>>2]&63](256)|0;c[e>>2]=i;if(!i){c[w>>2]=0;h=0;break}else{Y6(i|0,0,256)|0;j=c_(b,f)|0;j=(c[w>>2]|0)+-1&j;i=e;o=27;break}}else h=0;else{v=c_(b,f)|0;k=c[w>>2]|0;j=k+-1|0;l=c[e>>2]|0;m=v&0-k;u=e+4|0;n=j>>>2;i=0;j=j&v;while(1){h=c[l+(j<<2)>>2]|0;if(!h)break;if((d_(f,c[h>>2]|0)|0)<<24>>24)break a;if(!(i<<24>>24))h=(m>>>((d[u>>0]|0)+-1|0)&n|1)&255;else h=i;t=h&255;i=h;j=j-t+(j>>>0>>0?k:0)|0}if(g){i=a[u>>0]|0;h=i&255;if(!((c[e+12>>2]|0)>>>(h+-1|0))){h=e+16|0;i=e;o=27;break}q=h+1&255;j=i+1&255;s=1<>2]>>2]&63](i)|0;if(t){Y6(t|0,0,i|0)|0;p=0-s|0;n=j+-1|0;o=r>>>2;m=0;while(1){if(m>>>0>=(c[w>>2]|0)>>>0)break;i=c[(c[e>>2]|0)+(m<<2)>>2]|0;if(i|0){i=c_(b,c[i>>2]|0)|0;k=((i&p)>>>n&o|1)&255;i=i&r;j=0;while(1){l=t+(i<<2)|0;if(!(c[l>>2]|0))break;l=j<<24>>24==0?k:j;x=l&255;i=i+(i>>>0>>0?s:0)-x|0;j=l}c[l>>2]=c[(c[e>>2]|0)+(m<<2)>>2]}m=m+1|0}tb[c[(c[h>>2]|0)+8>>2]&127](c[e>>2]|0);c[e>>2]=t;a[u>>0]=q;c[w>>2]=s;k=((v&p)>>>n&o|1)&255;i=r&v;j=0;while(1){if(!(c[t+(i<<2)>>2]|0)){j=i;i=e;o=27;break a}x=j<<24>>24==0?k:j;w=x&255;i=i+(i>>>0>>0?s:0)-w|0;j=x}}else h=0}else h=0}while(0);if((o|0)==27){h=kb[c[c[h>>2]>>2]&63](g)|0;c[(c[i>>2]|0)+(j<<2)>>2]=h;h=c[(c[i>>2]|0)+(j<<2)>>2]|0;if(!h)h=0;else{Y6(h|0,0,g|0)|0;c[c[(c[i>>2]|0)+(j<<2)>>2]>>2]=f;h=e+12|0;c[h>>2]=(c[h>>2]|0)+1;h=c[(c[i>>2]|0)+(j<<2)>>2]|0}}return h|0}function oZ(b){b=b|0;var c=0,d=0,e=0;e=b;c=b;while(1){d=a[e>>0]|0;if(!(d<<24>>24))break;switch(d<<24>>24|0){case 10:case 13:case 32:{if((c|0)!=(b|0)){if((a[c+-1>>0]|0)!=32){a[c>>0]=32;c=c+1|0}}else c=b;break}default:{a[c>>0]=d;c=c+1|0}}e=e+1|0}if((c|0)!=(b|0)){b=c+-1|0;b=(a[b>>0]|0)==32?b:c}a[b>>0]=0;return}function pZ(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;d=IZ(b,0,c[b+144>>2]|0,d,e,f,(a[b+480>>0]|0)==0&1)|0;if((d|0)==0?(RZ(b)|0)<<24>>24==0:0)d=1;return d|0}function qZ(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;g=c[a+352>>2]|0;b=lZ(g+80|0,b,d,e)|0;do if((b|0)!=0?(f=nZ(a,g+20|0,b,24)|0,(f|0)!=0):0)if((c[f>>2]|0)==(b|0)){c[g+96>>2]=c[g+92>>2];if(!(TZ(a,f)|0)){f=0;break}}else c[g+92>>2]=c[g+96>>2];else f=0;while(0);return f|0}function rZ(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;m=c[b+352>>2]|0;k=m+80|0;n=m+92|0;h=c[n>>2]|0;l=m+88|0;if((h|0)==(c[l>>2]|0))if(!((vZ(k)|0)<<24>>24))g=0;else{h=c[n>>2]|0;i=4}else i=4;a:do if((i|0)==4){c[n>>2]=h+1;a[h>>0]=0;d=lZ(k,d,e,f)|0;if((d|0)!=0?(j=d+1|0,g=nZ(b,m+40|0,j,12)|0,(g|0)!=0):0){if((c[g>>2]|0)!=(j|0)){c[n>>2]=c[m+96>>2];break}h=c[n>>2]|0;i=m+96|0;c[i>>2]=h;if(a[b+232>>0]|0){e=a[j>>0]|0;b:do if(e<<24>>24==120)if((((a[d+2>>0]|0)==109?(a[d+3>>0]|0)==108:0)?(a[d+4>>0]|0)==110:0)?(a[d+5>>0]|0)==115:0){switch(a[d+6>>0]|0){case 0:{h=m+152|0;break}case 58:{h=nZ(b,m+60|0,d+7|0,8)|0;break}default:{f=0;d=120;break b}}c[g+4>>2]=h;a[g+9>>0]=1;break a}else{f=0;d=120}else{f=0;d=e}while(0);c:while(1){switch(d<<24>>24){case 0:break a;case 58:{e=0;break c}default:{}}d=f+1|0;f=d;d=a[j+d>>0]|0}while(1){d=(h|0)==(c[l>>2]|0);if((e|0)>=(f|0))break;if(d){if(!((vZ(k)|0)<<24>>24)){g=0;break a}h=c[n>>2]|0}d=a[j+e>>0]|0;c[n>>2]=h+1;a[h>>0]=d;e=e+1|0;h=c[n>>2]|0}if(d){if(!((vZ(k)|0)<<24>>24)){g=0;break}h=c[n>>2]|0}c[n>>2]=h+1;a[h>>0]=0;h=nZ(b,m+60|0,c[i>>2]|0,8)|0;c[g+4>>2]=h;if(h){d=c[i>>2]|0;if((c[h>>2]|0)==(d|0)){c[i>>2]=c[n>>2];break}else{c[n>>2]=d;break}}else g=0}}else g=0}while(0);return g|0}function sZ(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;g=b+12|0;h=b+8|0;while(1){e=a[d>>0]|0;if(!(e<<24>>24)){i=7;break}f=c[g>>2]|0;if((f|0)==(c[h>>2]|0)){if(!((vZ(b)|0)<<24>>24)){d=0;break}f=c[g>>2]|0;e=a[d>>0]|0}c[g>>2]=f+1;a[f>>0]=e;d=d+1|0}if((i|0)==7)d=c[b+16>>2]|0;return d|0}function tZ(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;i=l;l=l+16|0;h=i;c[h>>2]=d;g=a+12|0;if((c[g>>2]|0)==0?(vZ(a)|0)<<24>>24==0:0)d=0;else f=3;a:do if((f|0)==3){d=b+56|0;f=a+8|0;while(1){if((pb[c[d>>2]&127](b,h,e,g,c[f>>2]|0)|0)>>>0<2)break;if(!((vZ(a)|0)<<24>>24)){d=0;break a}}d=c[a+16>>2]|0}while(0);l=i;return d|0}function uZ(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0;i=f<<24>>24==0;n=b+12|0;m=c[n>>2]|0;a:do if(!(i&(g|0)==0)){j=b+20|0;f=0;while(1){if((f|0)>=(m|0))break;if((c[(c[j>>2]|0)+(f*12|0)>>2]|0)==(d|0)){f=1;break a}else f=f+1|0}if((!i?(k=b+8|0,(c[k>>2]|0)==0):0)?(a[d+9>>0]|0)==0:0){c[k>>2]=d;l=9}else l=9}else l=9;while(0);b:do if((l|0)==9){j=b+16|0;do if((m|0)==(c[j>>2]|0))if(!m){c[j>>2]=8;f=kb[c[h+12>>2]&63](96)|0;c[b+20>>2]=f;if(f|0)break;c[j>>2]=0;f=0;break b}else{i=b+20|0;f=lb[c[h+16>>2]&127](c[i>>2]|0,m*24|0)|0;if(!f){f=0;break b}c[j>>2]=m<<1;c[i>>2]=f;break}else f=c[b+20>>2]|0;while(0);h=c[n>>2]|0;c[f+(h*12|0)>>2]=d;c[f+(h*12|0)+8>>2]=g;a[f+(h*12|0)+4>>0]=e;if(!(e<<24>>24))a[d+8>>0]=1;c[n>>2]=(c[n>>2]|0)+1;f=1}while(0);return f|0}function vZ(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;b=a+4|0;e=c[b>>2]|0;do if(e){f=a+16|0;g=c[f>>2]|0;if(!g){c[a>>2]=e;c[b>>2]=c[e>>2];c[e>>2]=0;l=c[a>>2]|0;b=l+8|0;c[f>>2]=b;c[a+8>>2]=(c[l+4>>2]|0)+(l+8);c[a+12>>2]=b;b=1;break}d=a+8|0;if(((c[d>>2]|0)-g|0)<(c[e+4>>2]|0)){k=c[e>>2]|0;c[e>>2]=c[a>>2];l=c[b>>2]|0;c[a>>2]=l;c[b>>2]=k;b=c[f>>2]|0;W6(l+8|0,b|0,(c[d>>2]|0)-b|0)|0;b=c[a>>2]|0;l=a+12|0;c[l>>2]=(c[l>>2]|0)-(c[f>>2]|0)+(b+8);c[f>>2]=b+8;c[d>>2]=(c[b+4>>2]|0)+(b+8);b=1}else h=6}else h=6;while(0);a:do if((h|0)==6){e=c[a>>2]|0;k=a+16|0;do if(!e){i=k;b=c[k>>2]|0}else{j=c[k>>2]|0;b=j;if((j|0)!=(e+8|0)){i=k;break}f=a+8|0;g=(c[f>>2]|0)-b<<1;h=a+12|0;d=(c[h>>2]|0)-b|0;if((g|0)<0){b=0;break a}b=b_(g)|0;if(!b){b=0;break a}b=lb[c[(c[a+20>>2]|0)+4>>2]&127](e,b)|0;if(!b){b=0;break a}c[a>>2]=b;c[b+4>>2]=g;b=c[a>>2]|0;c[h>>2]=b+8+d;c[k>>2]=b+8;c[f>>2]=b+8+g;b=1;break a}while(0);j=a+8|0;b=(c[j>>2]|0)-b|0;if((b|0)>=0){if((b|0)>=1024){b=b<<1;if((b|0)<0){b=0;break}}else b=1024;d=b_(b)|0;if((d|0)!=0?(l=kb[c[c[a+20>>2]>>2]&63](d)|0,(l|0)!=0):0){c[l+4>>2]=b;c[l>>2]=c[a>>2];c[a>>2]=l;h=a+12|0;a=c[h>>2]|0;e=c[k>>2]|0;d=a;f=e;if((a|0)==(e|0)){g=l+8|0;e=f}else{g=l+8|0;W6(g|0,e|0,d-f|0)|0;e=c[i>>2]|0;d=c[h>>2]|0}c[h>>2]=l+8+(d-e);c[k>>2]=g;c[j>>2]=l+8+b;b=1}else b=0}else b=0}while(0);return b|0}function wZ(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0;b=a_(b,d,e,f,g,h)|0;do if(!b){d=h+12|0;b=c[d>>2]|0;if((e<<24>>24==0?(c[h+16>>2]|0)!=(b|0):0)?(i=b+-1|0,(a[i>>0]|0)==32):0){c[d>>2]=i;b=i}if((b|0)==(c[h+8>>2]|0)){if(!((vZ(h)|0)<<24>>24)){b=1;break}b=c[d>>2]|0}c[d>>2]=b+1;a[b>>0]=0;b=0}while(0);return b|0}function xZ(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0;H=l;l=l+16|0;B=H;C=H+4|0;g=c[b+352>>2]|0;D=g+104|0;F=b+272|0;E=c[F>>2]|0;c[F>>2]=1;if((c[D>>2]|0)==0?(vZ(D)|0)<<24>>24==0:0)g=1;else{n=d+20|0;o=b+484|0;p=b+144|0;q=b+412|0;r=d+64|0;s=g+132|0;t=b+428|0;u=b+424|0;v=b+224|0;w=b+112|0;m=g+130|0;x=g+128|0;y=g+131|0;z=b+116|0;A=g+112|0;j=g+116|0;k=d+40|0;a:while(1){b:do switch(ob[c[n>>2]&127](d,e,f,B)|0){case -4:{g=0;break a}case -1:{G=37;break a}case 0:{G=39;break a}case 28:{if((a[o>>0]|0)==0?(c[p>>2]|0)==(d|0):0){G=19;break a}g=c[r>>2]|0;g=lZ(q,d,e+g|0,(c[B>>2]|0)+(0-g)|0)|0;if(!g){g=1;break a}h=nZ(b,s,g,0)|0;c[u>>2]=c[t>>2];if(!h){G=9;break a}i=h+32|0;if(a[i>>0]|0){G=11;break a}g=h+16|0;if(!(c[g>>2]|0)){a[i>>0]=1;g=c[h+4>>2]|0;g=xZ(b,c[v>>2]|0,g,g+(c[h+8>>2]|0)|0)|0;a[i>>0]=0;if(!g)break b;else break a}if(c[w>>2]|0){a[y>>0]=0;a[i>>0]=1;h=(pb[c[w>>2]&127](c[z>>2]|0,0,c[h+20>>2]|0,c[g>>2]|0,c[h+24>>2]|0)|0)==0;a[i>>0]=0;if(h){g=21;break a}if(a[y>>0]|0)break b}a[x>>0]=a[m>>0]|0;break}case 6:case 9:{if(!(tZ(D,d,e,c[B>>2]|0)|0)){g=1;break a}break}case -3:{c[B>>2]=e+(c[r>>2]|0);G=22;break}case 7:{G=22;break}case 10:{g=lb[c[k>>2]&127](d,e)|0;if((g|0)<0){G=27;break a}h=x_(g,C)|0;e=0;while(1){if((e|0)>=(h|0))break;g=c[j>>2]|0;if((c[A>>2]|0)==(g|0)){if(!((vZ(D)|0)<<24>>24)){g=1;G=35;break a}g=c[j>>2]|0}i=a[C+e>>0]|0;c[j>>2]=g+1;a[g>>0]=i;e=e+1|0}break}default:{G=41;break a}}while(0);if((G|0)==22){G=0;g=c[j>>2]|0;if((c[A>>2]|0)==(g|0)){if(!((vZ(D)|0)<<24>>24)){g=1;break}g=c[j>>2]|0}c[j>>2]=g+1;a[g>>0]=10}e=c[B>>2]|0}if((G|0)==9){a[x>>0]=a[m>>0]|0;g=0}else if((G|0)==11)if((c[p>>2]|0)==(d|0)){c[b+284>>2]=e;g=12}else g=12;else if((G|0)==19){c[b+284>>2]=e;g=10}else if((G|0)==27)if((c[p>>2]|0)==(d|0)){c[b+284>>2]=e;g=14;G=35}else{g=14;G=35}else if((G|0)==37)if((c[p>>2]|0)==(d|0)){c[b+284>>2]=e;g=4}else g=4;else if((G|0)==39)if((c[p>>2]|0)==(d|0)){c[b+284>>2]=c[B>>2];g=4}else g=4;else if((G|0)==41)if((c[p>>2]|0)==(d|0)){c[b+284>>2]=e;g=23}else g=23;c[F>>2]=E}l=H;return g|0}function yZ(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;p=l;l=l+16|0;n=p;o=p+4|0;c[n>>2]=e;if(!(a[d+68>>0]|0)){if((c[b+144>>2]|0)==(d|0)){g=b+288|0;h=b+284|0}else{h=c[b+296>>2]|0;g=h+4|0}i=b+44|0;j=d+56|0;k=b+48|0;m=b+80|0;e=b+4|0;do{c[o>>2]=c[i>>2];b=pb[c[j>>2]&127](d,n,f,o,c[k>>2]|0)|0;c[g>>2]=c[n>>2];q=c[i>>2]|0;vb[c[m>>2]&127](c[e>>2]|0,q,(c[o>>2]|0)-q|0);c[h>>2]=c[n>>2]}while(b>>>0>1)}else vb[c[b+80>>2]&127](c[b+4>>2]|0,e,f-e|0);l=p;return}function zZ(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0;m=l;l=l+16|0;j=m;k=c[d>>2]|0;if((c[a+144>>2]|0)==(b|0)){i=a+284|0;c[i>>2]=k;h=a+288|0}else{i=c[a+296>>2]|0;h=i+4|0}c[i>>2]=k;c[d>>2]=0;n=ob[c[b+12>>2]&127](b,k,e,j)|0;e=c[j>>2]|0;c[h>>2]=e;switch(n|0){case 42:{if(c[a+80>>2]|0){yZ(a,b,k,e);e=c[j>>2]|0}c[d>>2]=e;c[f>>2]=e;e=(c[a+476>>2]|0)==2?35:0;break}case 0:{c[i>>2]=e;e=4;break}case -2:{if(!(g<<24>>24))e=6;else{c[f>>2]=k;e=0}break}case -4:case -1:{if(!(g<<24>>24))e=2;else{c[f>>2]=k;e=0}break}default:{c[i>>2]=e;e=23}}l=m;return e|0}function AZ(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;h=l;l=l+16|0;g=h;c[g>>2]=d;d=zZ(b,c[b+144>>2]|0,g,e,f,(a[b+480>>0]|0)==0&1)|0;g=c[g>>2]|0;if(!((d|0)!=0|(g|0)==0)){c[b+276>>2]=57;d=iZ(b,g,e,f)|0}l=h;return d|0}function BZ(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;i=c[a+352>>2]|0;j=i+184|0;if(!(c[j>>2]|0)){b=kb[c[a+12>>2]&63](c[a+464>>2]<<2)|0;c[j>>2]=b;if(!b)b=-1;else{c[b>>2]=0;d=4}}else d=4;do if((d|0)==4){h=i+176|0;b=c[h>>2]|0;g=i+172|0;d=c[g>>2]|0;f=i+164|0;e=c[f>>2]|0;if(b>>>0>>0)g=e;else{if(!e){b=kb[c[a+12>>2]&63](896)|0;if(!b){b=-1;break}else{d=b;b=32}}else{b=lb[c[a+16>>2]&127](e,d*56|0)|0;if(!b){b=-1;break}d=b;b=c[g>>2]<<1}c[g>>2]=b;c[f>>2]=d;b=c[h>>2]|0;g=d}c[h>>2]=b+1;d=c[i+180>>2]|0;if(d|0){a=c[(c[j>>2]|0)+(d+-1<<2)>>2]|0;f=g+(a*28|0)+16|0;d=c[f>>2]|0;if(d|0)c[g+(d*28|0)+24>>2]=b;d=g+(a*28|0)+20|0;e=c[d>>2]|0;if(!e)c[g+(a*28|0)+12>>2]=b;c[f>>2]=b;c[d>>2]=e+1}j=g+(b*28|0)+12|0;c[j>>2]=0;c[j+4>>2]=0;c[j+8>>2]=0;c[j+12>>2]=0}while(0);return b|0}function CZ(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;p=l;l=l+16|0;n=p;o=b+300|0;f=c[o>>2]|0;if(!f){f=kb[c[b+12>>2]&63](24)|0;if(!f)f=1;else{m=f;g=4}}else{c[o>>2]=c[f+8>>2];m=f;g=4}do if((g|0)==4){h=d+32|0;a[h>>0]=1;i=d+12|0;c[i>>2]=0;j=b+296|0;k=m+8|0;c[k>>2]=c[j>>2];c[j>>2]=m;c[m+12>>2]=d;f=b+308|0;c[m+16>>2]=c[f>>2];a[m+20>>0]=e;c[m>>2]=0;c[m+4>>2]=0;g=c[d+4>>2]|0;e=g+(c[d+8>>2]|0)|0;c[n>>2]=g;if(!(a[d+33>>0]|0))f=IZ(b,c[f>>2]|0,c[b+224>>2]|0,g,e,n,0)|0;else{d=b+224|0;f=c[d>>2]|0;f=ob[c[f>>2]&127](f,g,e,n)|0;f=jZ(b,c[d>>2]|0,g,e,f,c[n>>2]|0,n,0)|0}if(!f){f=c[n>>2]|0;if((e|0)!=(f|0)?(c[b+476>>2]|0)==3:0){c[i>>2]=f-g;c[b+276>>2]=60;f=0;break}a[h>>0]=0;c[j>>2]=c[k>>2];c[k>>2]=c[o>>2];c[o>>2]=m;f=0}}while(0);l=p;return f|0}function DZ(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;g=l;l=l+16|0;d=g+4|0;e=g;b=c[a+352>>2]|0;f=b+176|0;b=kb[c[a+12>>2]&63](((c[f>>2]|0)*20|0)+(c[b+168>>2]|0)|0)|0;if(!b)b=0;else{c[e>>2]=b+((c[f>>2]|0)*20|0);c[d>>2]=b+20;HZ(a,0,b,d,e)}l=g;return b|0}function EZ(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;j=a+64|0;if(!(c[j>>2]|0))if(!(c[a+80>>2]|0))d=1;else{yZ(a,b,d,e);d=1}else{h=b+64|0;g=d+(c[h>>2]<<1)|0;d=g+(lb[c[b+28>>2]&127](b,g)|0)|0;f=a+412|0;g=lZ(f,b,g,d)|0;if((g|0)!=0?(c[a+428>>2]=c[a+424>>2],i=lb[c[b+32>>2]&127](b,d)|0,i=lZ(f,b,i,e+(0-(c[h>>2]<<1))|0)|0,(i|0)!=0):0){GZ(i);vb[c[j>>2]&127](c[a+4>>2]|0,g,i);mZ(f);d=1}else d=0}return d|0}function FZ(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;g=a+68|0;if(!(c[g>>2]|0))if(!(c[a+80>>2]|0))b=1;else{yZ(a,b,d,e);b=1}else{f=a+412|0;h=c[b+64>>2]|0;b=lZ(f,b,d+(h<<2)|0,e+(O(h,-3)|0)|0)|0;if(!b)b=0;else{GZ(b);ub[c[g>>2]&63](c[a+4>>2]|0,b);mZ(f);b=1}}return b|0}function GZ(b){b=b|0;var c=0,d=0,e=0;a:while(1){switch(a[b>>0]|0){case 0:break a;case 13:{d=b;c=13;e=4;break a}default:{}}b=b+1|0}if((e|0)==4){while(1){if(c<<24>>24==13){a[d>>0]=10;e=b+1|0;b=(a[e>>0]|0)==10?b+2|0:e}else{a[d>>0]=c;b=b+1|0}d=d+1|0;c=a[b>>0]|0;if(!(c<<24>>24))break;else e=4}a[d>>0]=0}return}function HZ(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;k=(c[b+352>>2]|0)+164|0;j=c[(c[k>>2]|0)+(d*28|0)>>2]|0;c[e>>2]=j;c[e+4>>2]=c[(c[k>>2]|0)+(d*28|0)+4>>2];if((j|0)==4){c[e+8>>2]=c[g>>2];d=c[(c[k>>2]|0)+(d*28|0)+8>>2]|0;while(1){j=a[d>>0]|0;k=c[g>>2]|0;c[g>>2]=k+1;a[k>>0]=j;if(!(a[d>>0]|0))break;else d=d+1|0}c[e+12>>2]=0;c[e+16>>2]=0}else{h=c[(c[k>>2]|0)+(d*28|0)+20>>2]|0;i=e+12|0;c[i>>2]=h;j=e+16|0;c[j>>2]=c[f>>2];c[f>>2]=(c[f>>2]|0)+(h*20|0);d=(c[k>>2]|0)+(d*28|0)+12|0;h=0;while(1){d=c[d>>2]|0;if(h>>>0>=(c[i>>2]|0)>>>0)break;HZ(b,d,(c[j>>2]|0)+(h*20|0)|0,f,g);d=(c[k>>2]|0)+(d*28|0)+24|0;h=h+1|0}c[e+8>>2]=0}return}function IZ(b,d,e,f,g,h,i){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0;ma=l;l=l+48|0;ja=ma+28|0;ea=ma+32|0;ka=ma+24|0;Z=ma;c[ja>>2]=f;_=c[b+352>>2]|0;if((c[b+144>>2]|0)==(e|0)){fa=b+284|0;Y=b+288|0}else{Y=c[b+296>>2]|0;fa=Y;Y=Y+4|0}c[fa>>2]=f;t=e+4|0;ga=b+80|0;u=b+476|0;v=e+44|0;w=e+64|0;x=_+80|0;y=_+96|0;z=_+92|0;A=_+129|0;B=b+112|0;C=b+116|0;D=b+428|0;E=b+424|0;F=b+304|0;G=b+120|0;ha=b+4|0;H=_+130|0;$=b+60|0;I=b+364|0;J=b+12|0;K=b+360|0;L=e+28|0;ia=b+308|0;aa=e+56|0;M=b+16|0;N=b+52|0;O=b+412|0;P=b+388|0;Q=b+56|0;R=b+232|0;S=b+233|0;T=b+468|0;U=b+104|0;V=b+372|0;W=e+40|0;X=b+72|0;ba=e+68|0;ca=b+44|0;da=b+48|0;a:while(1){s=c[ja>>2]|0;c[ea>>2]=s;s=ob[c[t>>2]&127](e,s,g,ea)|0;f=c[ea>>2]|0;c[Y>>2]=f;k=f;b:do switch(s|0){case -3:{la=6;break a}case -4:{la=15;break a}case 0:{la=20;break a}case -1:{la=21;break a}case -2:{la=23;break a}case 12:{f=17;break a}case -5:{la=134;break a}case 9:{s=c[w>>2]|0;s=(nb[c[v>>2]&63](e,(c[ja>>2]|0)+s|0,k+(0-s)|0)|0)&255;a[ka>>0]=s;do if(s<<24>>24){f=c[$>>2]|0;if(f|0){vb[f&127](c[ha>>2]|0,ka,1);break}if(c[ga>>2]|0)yZ(b,e,c[ja>>2]|0,c[ea>>2]|0)}else{j=c[w>>2]|0;j=lZ(x,e,(c[ja>>2]|0)+j|0,(c[ea>>2]|0)+(0-j)|0)|0;if(!j){f=1;la=56;break a}k=nZ(b,_,j,0)|0;c[z>>2]=c[y>>2];if((a[A>>0]|0)!=0?(a[H>>0]|0)==0:0){if(!k){f=c[G>>2]|0;if(f|0){vb[f&127](c[ha>>2]|0,j,0);break}if(!(c[ga>>2]|0))break;yZ(b,e,c[ja>>2]|0,c[ea>>2]|0);break}}else{if(!k){f=11;la=56;break a}if(!(a[k+34>>0]|0)){f=24;la=56;break a}}f=k+32|0;if(a[f>>0]|0){f=12;la=56;break a}if(c[k+28>>2]|0){f=15;la=56;break a}if(!(c[k+4>>2]|0)){if(!(c[B>>2]|0)){if(!(c[ga>>2]|0))break;yZ(b,e,c[ja>>2]|0,c[ea>>2]|0);break}a[f>>0]=1;j=KZ(b)|0;a[f>>0]=0;if(!j){f=1;la=56;break a}if(!(pb[c[B>>2]&127](c[C>>2]|0,j,c[k+20>>2]|0,c[k+16>>2]|0,c[k+24>>2]|0)|0)){f=21;la=56;break a}c[E>>2]=c[D>>2];break}if(a[F>>0]|0){f=CZ(b,k,0)|0;if(!f)break;else{la=58;break a}}f=c[G>>2]|0;if(!f){if(c[ga>>2]|0)yZ(b,e,c[ja>>2]|0,c[ea>>2]|0)}else vb[f&127](c[ha>>2]|0,c[k>>2]|0,0);break b}while(0);break}case 1:case 2:{f=c[I>>2]|0;if(!f){f=kb[c[J>>2]&63](48)|0;if(!f){f=1;la=75;break a}j=kb[c[J>>2]&63](32)|0;c[f+36>>2]=j;if(!j){la=63;break a}c[f+40>>2]=j+32}else c[I>>2]=c[f>>2];o=f+44|0;c[o>>2]=0;c[f>>2]=c[K>>2];c[K>>2]=f;s=f+12|0;c[f+16>>2]=0;c[f+20>>2]=0;r=(c[ja>>2]|0)+(c[w>>2]|0)|0;q=f+4|0;c[q>>2]=r;p=f+8|0;c[p>>2]=lb[c[L>>2]&127](e,r)|0;c[ia>>2]=(c[ia>>2]|0)+1;q=c[q>>2]|0;p=q+(c[p>>2]|0)|0;c[Z>>2]=q;q=f+36|0;c[ka>>2]=c[q>>2];r=f+40|0;j=c[r>>2]|0;while(1){na=pb[c[aa>>2]&127](e,Z,p,ka,j+-1|0)|0;j=c[ka>>2]|0;m=c[q>>2]|0;k=m;n=j-k|0;if((na|0)==1?1:(c[Z>>2]|0)>>>0>=p>>>0)break;k=(c[r>>2]|0)-k<<1;j=lb[c[M>>2]&127](m,k)|0;if(!j){la=69;break a}c[q>>2]=j;na=j+k|0;c[r>>2]=na;c[ka>>2]=j+n;j=na}c[f+24>>2]=n;c[s>>2]=k;a[j>>0]=0;f=LZ(b,e,c[ja>>2]|0,s,o)|0;if(f|0){la=75;break a}f=c[N>>2]|0;if(!f){if(c[ga>>2]|0)yZ(b,e,c[ja>>2]|0,c[ea>>2]|0)}else vb[f&127](c[ha>>2]|0,c[s>>2]|0,c[P>>2]|0);mZ(O);break}case 3:case 4:{na=(c[ja>>2]|0)+(c[w>>2]|0)|0;c[ka>>2]=0;na=lZ(O,e,na,na+(lb[c[L>>2]&127](e,na)|0)|0)|0;c[Z>>2]=na;if(!na){f=1;la=89;break a}c[D>>2]=c[E>>2];f=LZ(b,e,c[ja>>2]|0,Z,ka)|0;if(f|0){la=79;break a}c[D>>2]=c[E>>2];f=c[N>>2]|0;if(!f)j=1;else{vb[f&127](c[ha>>2]|0,c[Z>>2]|0,c[P>>2]|0);j=0}f=c[Q>>2]|0;if(!f){if(j|0?c[ga>>2]|0:0)yZ(b,e,c[ja>>2]|0,c[ea>>2]|0)}else{if(c[N>>2]|0){c[fa>>2]=c[Y>>2];f=c[Q>>2]|0}ub[f&63](c[ha>>2]|0,c[Z>>2]|0)}mZ(O);MZ(b,c[ka>>2]|0);if((c[ia>>2]|0)==0?(c[u>>2]&-2|0)!=2:0){la=92;break a}break}case 5:{if((c[ia>>2]|0)==(d|0)){f=13;break a}n=c[K>>2]|0;c[K>>2]=c[n>>2];c[n>>2]=c[I>>2];c[I>>2]=n;f=(c[ja>>2]|0)+(c[w>>2]<<1)|0;j=lb[c[L>>2]&127](e,f)|0;if((j|0)!=(c[n+8>>2]|0)){la=96;break a}if($3(c[n+4>>2]|0,f,j)|0){la=96;break a}c[ia>>2]=(c[ia>>2]|0)+-1;f=c[Q>>2]|0;if(!f){if(c[ga>>2]|0)yZ(b,e,c[ja>>2]|0,c[ea>>2]|0)}else{j=c[n+16>>2]|0;m=n+12|0;if((j|0)!=0&(a[R>>0]|0)!=0){f=(c[m>>2]|0)+(c[n+28>>2]|0)|0;while(1){k=a[j>>0]|0;if(!(k<<24>>24))break;a[f>>0]=k;f=f+1|0;j=j+1|0}j=c[n+20>>2]|0;c:do if((j|0)!=0&(a[S>>0]|0)!=0){a[f>>0]=a[T>>0]|0;while(1){f=f+1|0;k=a[j>>0]|0;if(!(k<<24>>24))break c;a[f>>0]=k;j=j+1|0}}while(0);a[f>>0]=0;f=c[Q>>2]|0}ub[f&63](c[ha>>2]|0,c[m>>2]|0)}k=n+44|0;while(1){m=c[k>>2]|0;if(!m)break;f=c[U>>2]|0;if(!f){f=m;j=m}else{ub[f&63](c[ha>>2]|0,c[c[m>>2]>>2]|0);f=m;j=c[k>>2]|0}c[k>>2]=c[j+4>>2];c[m+4>>2]=c[V>>2];c[V>>2]=m;c[(c[f>>2]|0)+4>>2]=c[m+8>>2]}if(!(c[ia>>2]|0)){la=117;break a}break}case 10:{f=lb[c[W>>2]&127](e,c[ja>>2]|0)|0;if((f|0)<0){f=14;break a}j=c[$>>2]|0;if(j|0){s=c[ha>>2]|0;na=x_(f,ka)|0;vb[j&127](s,ka,na);break b}if(c[ga>>2]|0)yZ(b,e,c[ja>>2]|0,c[ea>>2]|0);break}case 7:{f=c[$>>2]|0;if(f|0){a[ka>>0]=10;vb[f&127](c[ha>>2]|0,ka,1);break b}if(c[ga>>2]|0)yZ(b,e,c[ja>>2]|0,k);break}case 8:{f=c[X>>2]|0;if(!f){if(c[ga>>2]|0)yZ(b,e,c[ja>>2]|0,k)}else tb[f&127](c[ha>>2]|0);f=OZ(b,e,ea,g,h,i)|0;if(f|0)break a;if(!(c[ea>>2]|0)){la=133;break a}break}case 6:{j=c[$>>2]|0;if(!j){if(!(c[ga>>2]|0))break b;yZ(b,e,c[ja>>2]|0,k);break b}if(!(a[ba>>0]|0))f=k;else{na=c[ja>>2]|0;vb[j&127](c[ha>>2]|0,na,f-na|0);break b}while(1){c[ka>>2]=c[ca>>2];na=pb[c[aa>>2]&127](e,ja,f,ka,c[da>>2]|0)|0;c[Y>>2]=c[ja>>2];s=c[ca>>2]|0;vb[j&127](c[ha>>2]|0,s,(c[ka>>2]|0)-s|0);if(na>>>0<2)break;c[fa>>2]=c[ja>>2];f=c[ea>>2]|0}break}case 11:{if(!(EZ(b,e,c[ja>>2]|0,k)|0)){f=1;break a}break}case 13:{if(!(FZ(b,e,c[ja>>2]|0,k)|0)){f=1;break a}break}default:if(c[ga>>2]|0)yZ(b,e,c[ja>>2]|0,k)}while(0);na=c[ea>>2]|0;c[ja>>2]=na;c[fa>>2]=na;switch(c[u>>2]|0){case 2:{f=35;break a}case 3:{la=160;break a}default:{}}}switch(la|0){case 6:{if(i<<24>>24){c[h>>2]=c[ja>>2];f=0;break}c[Y>>2]=g;f=c[$>>2]|0;if(!f){if(c[ga>>2]|0)yZ(b,e,c[ja>>2]|0,g)}else{a[ka>>0]=10;vb[f&127](c[ha>>2]|0,ka,1)}if(d)if((c[ia>>2]|0)==(d|0)){c[h>>2]=g;f=0}else f=13;else f=3;break}case 15:{if(i<<24>>24){c[h>>2]=c[ja>>2];f=0;break}if((d|0)>0)if((c[ia>>2]|0)==(d|0)){c[h>>2]=c[ja>>2];f=0}else f=13;else f=3;break}case 20:{c[fa>>2]=f;f=4;break}case 21:{if(!(i<<24>>24))f=5;else{c[h>>2]=c[ja>>2];f=0}break}case 23:{if(!(i<<24>>24))f=6;else{c[h>>2]=c[ja>>2];f=0}break}case 56:break;case 58:break;case 63:{tb[c[b+20>>2]&127](f);f=1;la=75;break}case 69:{f=1;la=75;break}case 79:{MZ(b,c[ka>>2]|0);la=89;break}case 92:{f=NZ(b,c[ea>>2]|0,g,h)|0;break}case 96:{c[fa>>2]=f;f=7;break}case 117:{f=NZ(b,c[ea>>2]|0,g,h)|0;break}case 133:{c[b+276>>2]=61;f=0;break}case 134:{if(i<<24>>24){c[h>>2]=c[ja>>2];f=0;break}f=c[$>>2]|0;do if(!f){if(c[ga>>2]|0)yZ(b,e,c[ja>>2]|0,g)}else if(!(a[ba>>0]|0)){c[ka>>2]=c[ca>>2];pb[c[aa>>2]&127](e,ja,g,ka,c[da>>2]|0)|0;na=c[ca>>2]|0;vb[c[$>>2]&127](c[ha>>2]|0,na,(c[ka>>2]|0)-na|0);break}else{na=c[ja>>2]|0;vb[f&127](c[ha>>2]|0,na,g-na|0);break}while(0);if(!d){c[fa>>2]=g;f=3;break}if((c[ia>>2]|0)==(d|0)){c[h>>2]=g;f=0;break}else{c[fa>>2]=g;f=13;break}}case 160:{c[h>>2]=c[ea>>2];f=0;break}}l=ma;return f|0}function JZ(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;q=l;l=l+16|0;p=q;k=b+296|0;m=c[k>>2]|0;do if(m){n=c[m+12>>2]|0;h=n+4|0;j=c[h>>2]|0;i=n+12|0;g=j+(c[i>>2]|0)|0;j=j+(c[n+8>>2]|0)|0;c[p>>2]=g;o=n+33|0;if(!(a[o>>0]|0))g=IZ(b,c[m+16>>2]|0,c[b+224>>2]|0,g,j,p,0)|0;else{s=b+224|0;r=c[s>>2]|0;r=ob[c[r>>2]&127](r,g,j,p)|0;g=jZ(b,c[s>>2]|0,g,j,r,c[p>>2]|0,p,0)|0}if(!g){g=c[p>>2]|0;if((j|0)!=(g|0)?(c[b+476>>2]|0)==3:0){c[i>>2]=g-(c[h>>2]|0);g=0;break}a[n+32>>0]=0;s=m+8|0;c[k>>2]=c[s>>2];g=b+300|0;c[s>>2]=c[g>>2];c[g>>2]=m;g=b+276|0;if(!(a[o>>0]|0)){c[g>>2]=58;g=IZ(b,(c[b+472>>2]|0)!=0&1,c[b+144>>2]|0,d,e,f,(a[b+480>>0]|0)==0&1)|0;break}else{c[g>>2]=57;s=b+144|0;g=c[s>>2]|0;g=ob[c[g>>2]&127](g,d,e,p)|0;g=jZ(b,c[s>>2]|0,d,e,g,c[p>>2]|0,f,(a[b+480>>0]|0)==0&1)|0;break}}}else g=23;while(0);l=q;return g|0}function KZ(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;q=l;l=l+16|0;n=q;m=c[b+352>>2]|0;h=m+156|0;o=b+412|0;p=b+424|0;a:do if(!(c[h>>2]|0)){d=0;i=b+420|0;k=b+468|0;j=12}else{d=c[p>>2]|0;i=b+420|0;if((d|0)==(c[i>>2]|0)){if(!((vZ(o)|0)<<24>>24)){d=0;break}d=c[p>>2]|0}c[p>>2]=d+1;a[d>>0]=61;g=b+468|0;e=(c[(c[h>>2]|0)+20>>2]|0)+(((a[g>>0]|0)!=0)<<31>>31)|0;f=0;while(1){if((f|0)>=(e|0)){d=1;k=g;j=12;break a}d=c[p>>2]|0;if((d|0)==(c[i>>2]|0)){if(!((vZ(o)|0)<<24>>24)){d=0;break a}d=c[p>>2]|0}k=a[(c[(c[h>>2]|0)+16>>2]|0)+f>>0]|0;c[p>>2]=d+1;a[d>>0]=k;f=f+1|0}}while(0);b:do if((j|0)==12){cZ(n,m+60|0);c:while(1){do{e=dZ(n)|0;if(!e)break c;h=e+4|0}while(!(c[h>>2]|0));if(d<<24>>24){d=c[p>>2]|0;if((d|0)==(c[i>>2]|0)){if(!((vZ(o)|0)<<24>>24)){d=0;break b}d=c[p>>2]|0}c[p>>2]=d+1;a[d>>0]=12}g=c[e>>2]|0;while(1){e=a[g>>0]|0;d=c[p>>2]|0;f=(d|0)==(c[i>>2]|0);if(!(e<<24>>24))break;if(f){if(!((vZ(o)|0)<<24>>24)){d=0;break b}d=c[p>>2]|0;e=a[g>>0]|0}c[p>>2]=d+1;a[d>>0]=e;g=g+1|0}if(f){if(!((vZ(o)|0)<<24>>24)){d=0;break b}d=c[p>>2]|0}c[p>>2]=d+1;a[d>>0]=61;f=(c[(c[h>>2]|0)+20>>2]|0)+(((a[k>>0]|0)!=0)<<31>>31)|0;e=0;while(1){if((e|0)>=(f|0)){d=1;continue c}d=c[p>>2]|0;if((d|0)==(c[i>>2]|0)){if(!((vZ(o)|0)<<24>>24)){d=0;break b}d=c[p>>2]|0}j=a[(c[(c[h>>2]|0)+16>>2]|0)+e>>0]|0;c[p>>2]=d+1;a[d>>0]=j;e=e+1|0}}cZ(n,m);d:while(1){do{e=dZ(n)|0;if(!e)break d}while(!(a[e+32>>0]|0));if(d<<24>>24){d=c[p>>2]|0;if((d|0)==(c[i>>2]|0)){if(!((vZ(o)|0)<<24>>24)){d=0;break b}d=c[p>>2]|0}c[p>>2]=d+1;a[d>>0]=12}f=c[e>>2]|0;while(1){e=a[f>>0]|0;if(!(e<<24>>24)){d=1;continue d}d=c[p>>2]|0;if((d|0)==(c[i>>2]|0)){if(!((vZ(o)|0)<<24>>24)){d=0;break b}d=c[p>>2]|0;e=a[f>>0]|0}c[p>>2]=d+1;a[d>>0]=e;f=f+1|0}}d=c[p>>2]|0;if((d|0)==(c[i>>2]|0)){if(!((vZ(o)|0)<<24>>24)){d=0;break}d=c[p>>2]|0}c[p>>2]=d+1;a[d>>0]=0;d=c[b+428>>2]|0}while(0);l=q;return d|0}function LZ(b,e,f,g,h){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0;O=l;l=l+80|0;K=O+16|0;L=O;M=c[b+352>>2]|0;k=M+20|0;i=nZ(b,k,c[g>>2]|0,0)|0;if(!i){i=SZ(M+80|0,c[g>>2]|0)|0;if((i|0)!=0?(j=nZ(b,k,i,24)|0,(j|0)!=0):0)if((a[b+232>>0]|0)!=0?(TZ(b,j)|0)==0:0)i=1;else A=6;else i=1}else{j=i;A=6}a:do if((A|0)==6){x=c[j+12>>2]|0;k=e+36|0;m=b+376|0;t=b+388|0;u=ob[c[k>>2]&127](e,f,c[m>>2]|0,c[t>>2]|0)|0;i=u+x|0;n=c[m>>2]|0;if((i|0)>(n|0)){i=i+16|0;c[m>>2]=i;i=lb[c[b+16>>2]&127](c[t>>2]|0,i<<4)|0;if(!i){c[m>>2]=n;i=1;break}c[t>>2]=i;if((u|0)>(n|0))ob[c[k>>2]&127](e,f,u,i)|0}J=c[t>>2]|0;r=e+28|0;H=b+412|0;I=b+428|0;w=j+20|0;q=b+424|0;s=0;p=0;k=0;while(1){if((p|0)>=(u|0))break;o=c[(c[t>>2]|0)+(p<<4)>>2]|0;o=rZ(b,e,o,o+(lb[c[r>>2]&127](e,o)|0)|0)|0;if(!o){i=1;break a}i=(c[o>>2]|0)+-1|0;if(a[i>>0]|0){A=15;break}a[i>>0]=1;f=s+1|0;c[J+(s<<2)>>2]=c[o>>2];n=c[t>>2]|0;if(a[n+(p<<4)+12>>0]|0){G=lZ(H,e,c[n+(p<<4)+4>>2]|0,c[n+(p<<4)+8>>2]|0)|0;c[J+(f<<2)>>2]=G;if(!G){i=1;break a}}else{b:do if(!(a[o+8>>0]|0))i=1;else{i=0;while(1){if((i|0)>=(x|0)){i=1;break b}m=c[w>>2]|0;if((o|0)==(c[m+(i*12|0)>>2]|0))break;i=i+1|0}i=a[m+(i*12|0)+4>>0]|0}while(0);i=wZ(b,e,i,c[n+(p<<4)+4>>2]|0,c[n+(p<<4)+8>>2]|0,H)|0;if(i|0)break a;c[J+(f<<2)>>2]=c[I>>2]}c[I>>2]=c[q>>2];i=c[o+4>>2]|0;do if(i)if(a[o+9>>0]|0){i=UZ(b,i,o,c[J+(f<<2)>>2]|0,h)|0;if(!i){i=s;break}else break a}else{a[(c[o>>2]|0)+-1>>0]=2;k=k+1|0;i=s+2|0;break}else i=s+2|0;while(0);s=i;p=p+1|0}if((A|0)==15){if((c[b+144>>2]|0)!=(e|0)){i=8;break}c[b+284>>2]=c[(c[t>>2]|0)+(p<<4)>>2];i=8;break}c[b+380>>2]=s;i=c[j+8>>2]|0;c:do if((i|0)!=0?(v=c[i>>2]|0,(a[v+-1>>0]|0)!=0):0){i=0;while(1){if((i|0)>=(s|0)){f=0;p=k;G=s;break c}if((c[J+(i<<2)>>2]|0)==(v|0)){A=37;break c}i=i+2|0}}else{i=-1;A=37}while(0);if((A|0)==37){c[b+384>>2]=i;f=0;p=k;G=s}while(1){if((f|0)>=(x|0))break;i=c[w>>2]|0;n=i+(f*12|0)|0;k=c[n>>2]|0;m=(c[k>>2]|0)+-1|0;d:do if((a[m>>0]|0)==0?(y=i+(f*12|0)+8|0,z=c[y>>2]|0,(z|0)!=0):0){i=c[k+4>>2]|0;do if(i)if(a[k+9>>0]|0){i=UZ(b,i,k,z,h)|0;if(!i){i=p;k=G;break d}else break a}else{a[m>>0]=2;i=p+1|0;break}else{a[m>>0]=1;i=p}while(0);c[J+(G<<2)>>2]=c[c[n>>2]>>2];c[J+(G+1<<2)>>2]=c[y>>2];k=G+2|0}else{i=p;k=G}while(0);f=f+1|0;p=i;G=k}c[J+(G<<2)>>2]=0;e:do if(!p)i=0;else{o=b+396|0;n=c[o>>2]|0;F=b+400|0;f=a[F>>0]|0;i=f&255;do if(!(p<<1>>i)){i=1<>24}while((p>>(E&255)|0)!=0);i=(i&255)>3?i:3;a[F>>0]=i;i=i&255;m=b+392|0;k=lb[c[b+16>>2]&127](c[m>>2]|0,12<>0]=f;i=1;break a}else{c[m>>2]=k;k=1<>2]|0)+(E*12|0)>>2]=-1;i=E}}while(0);E=i+-1|0;c[o>>2]=E;w=M+40|0;x=b+424|0;y=b+420|0;z=k+-1|0;A=0-k|0;B=z>>>2;C=b+233|0;D=b+468|0;i=0;v=p;g:while(1){while(1){if((i|0)>=(G|0))break e;e=J+(i<<2)|0;n=c[e>>2]|0;f=n+-1|0;if((a[f>>0]|0)==2)break;a[f>>0]=0;i=i+2|0}VZ(b,L);WZ(K,L);a[f>>0]=0;f=nZ(b,w,n,0)|0;if(!f){i=1;break}f=c[f+4>>2]|0;if(!f){i=1;break}u=c[f+4>>2]|0;if(!u){i=27;break}q=u+20|0;r=u+16|0;p=0;while(1){f=c[q>>2]|0;o=c[r>>2]|0;if((p|0)>=(f|0))break;o=a[o+p>>0]|0;f=c[x>>2]|0;if((f|0)==(c[y>>2]|0)){if(!((vZ(H)|0)<<24>>24)){i=1;break g}f=c[x>>2]|0}c[x>>2]=f+1;a[f>>0]=o;p=p+1|0}XZ(K,o,f);do{t=n;n=n+1|0}while((a[t>>0]|0)!=58);XZ(K,n,YZ(n)|0);while(1){f=c[x>>2]|0;if((f|0)==(c[y>>2]|0)){if(!((vZ(H)|0)<<24>>24)){i=1;break g}f=c[x>>2]|0}t=a[n>>0]|0;c[x>>2]=f+1;a[f>>0]=t;if(!(a[n>>0]|0))break;else n=n+1|0}t=ZZ(K)|0;q=c[m>>2]|0;r=t&A;n=0;s=z&t;while(1){if((c[q+(s*12|0)>>2]|0)!=(E|0))break;if((c[q+(s*12|0)+4>>2]|0)==(t|0)){f=c[q+(s*12|0)+8>>2]|0;o=c[I>>2]|0;while(1){P=a[o>>0]|0;p=P<<24>>24==0;if(p|P<<24>>24!=(a[f>>0]|0))break;f=f+1|0;o=o+1|0}if(p){i=8;break g}}if(!(n<<24>>24))n=(r>>>((d[F>>0]|0)+-1|0)&B|1)&255;P=n&255;s=s+((s|0)<(P|0)?k:0)-P|0}if(a[C>>0]|0){a[(c[x>>2]|0)+-1>>0]=a[D>>0]|0;f=c[c[u>>2]>>2]|0;while(1){n=c[x>>2]|0;if((n|0)==(c[y>>2]|0)){if(!((vZ(H)|0)<<24>>24)){i=1;break g}n=c[x>>2]|0}P=a[f>>0]|0;c[x>>2]=n+1;a[n>>0]=P;if(!(a[f>>0]|0))break;else f=f+1|0}}P=c[I>>2]|0;c[I>>2]=c[x>>2];c[e>>2]=P;c[(c[m>>2]|0)+(s*12|0)>>2]=E;c[(c[m>>2]|0)+(s*12|0)+4>>2]=t;c[(c[m>>2]|0)+(s*12|0)+8>>2]=P;v=v+-1|0;i=i+2|0;if(!v)break e}break a}while(0);while(1){if((i|0)>=(G|0)){i=h;break}a[(c[J+(i<<2)>>2]|0)+-1>>0]=0;i=i+2|0}while(1){i=c[i>>2]|0;if(!i)break;a[(c[c[i+12>>2]>>2]|0)+-1>>0]=0;i=i+4|0}if(!(a[b+232>>0]|0))i=0;else{i=c[j+4>>2]|0;if(!i){i=c[M+156>>2]|0;if(!i){i=0;break}k=c[g>>2]|0}else{i=c[i+4>>2]|0;if(!i){i=27;break}j=c[g>>2]|0;while(1){k=j+1|0;if((a[j>>0]|0)==58)break;else j=k}}if((a[b+233>>0]|0)!=0?(N=c[c[i>>2]>>2]|0,(N|0)!=0):0){j=0;while(1){m=j+1|0;if(!(a[N+j>>0]|0))break;else j=m}}else m=0;c[g+4>>2]=k;p=i+20|0;c[g+16>>2]=c[p>>2];c[g+8>>2]=c[c[i>>2]>>2];c[g+20>>2]=m;q=0;while(1){r=q+1|0;if(!(a[k+q>>0]|0))break;else q=r}j=c[p>>2]|0;n=r+m+j|0;f=i+24|0;if((n|0)>(c[f>>2]|0)){j=n+24|0;o=kb[c[b+12>>2]&63](j)|0;if(!o){i=1;break}c[f>>2]=j;f=i+16|0;W6(o|0,c[f>>2]|0,c[p>>2]|0)|0;j=b+360|0;while(1){j=c[j>>2]|0;if(!j)break;n=j+12|0;if((c[n>>2]|0)==(c[f>>2]|0))c[n>>2]=o}tb[c[b+20>>2]&127](c[f>>2]|0);c[f>>2]=o;n=o;j=c[p>>2]|0}else{n=i+16|0;f=n;n=c[n>>2]|0}j=n+j|0;W6(j|0,k|0,r|0)|0;if(m|0){P=j+q|0;a[P>>0]=a[b+468>>0]|0;W6(P+1|0,c[c[i>>2]>>2]|0,m|0)|0}c[g>>2]=c[f>>2];i=0}}while(0);l=O;return i|0}function MZ(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;e=a+104|0;f=a+372|0;d=a+4|0;while(1){if(!b)break;a=c[e>>2]|0;if(!a)a=b;else{ub[a&63](c[d>>2]|0,c[c[b>>2]>>2]|0);a=b}h=b+4|0;g=c[h>>2]|0;c[h>>2]=c[f>>2];c[f>>2]=b;c[(c[a>>2]|0)+4>>2]=c[b+8>>2];b=g}return}function NZ(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;q=l;l=l+16|0;j=q;c[b+276>>2]=62;k=b+284|0;c[k>>2]=d;m=b+144|0;n=b+288|0;o=b+80|0;i=b+476|0;g=d;a:while(1){c[j>>2]=0;r=c[m>>2]|0;r=ob[c[r>>2]&127](r,g,e,j)|0;d=c[j>>2]|0;c[n>>2]=d;h=d;switch(r|0){case -15:{p=3;break a}case -4:{p=7;break a}case 0:{p=12;break a}case -1:{p=13;break a}case -2:{p=15;break a}case 15:{if(c[o>>2]|0)yZ(b,c[m>>2]|0,g,h);break}case 11:{if(!(EZ(b,c[m>>2]|0,g,h)|0)){d=1;break a}break}case 13:{if(!(FZ(b,c[m>>2]|0,g,h)|0)){d=1;break a}break}default:{d=9;break a}}d=c[j>>2]|0;c[k>>2]=d;switch(c[i>>2]|0){case 2:{d=35;break a}case 3:{p=18;break a}default:{}}g=d}do if((p|0)==3){if(c[o>>2]|0){yZ(b,c[m>>2]|0,g,h);if((c[i>>2]|0)==2){d=35;break}d=c[j>>2]|0}c[f>>2]=d;d=0}else if((p|0)==7){c[f>>2]=g;d=0}else if((p|0)==12){c[k>>2]=d;d=4}else if((p|0)==13)if(!(a[b+480>>0]|0)){c[f>>2]=g;d=0}else d=5;else if((p|0)==15)if(!(a[b+480>>0]|0)){c[f>>2]=g;d=0}else d=6;else if((p|0)==18){c[f>>2]=d;d=0}while(0);l=q;return d|0}function OZ(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0;B=l;l=l+16|0;y=B+8|0;z=B+4|0;x=B;i=c[e>>2]|0;c[y>>2]=i;if((c[b+144>>2]|0)==(d|0)){s=b+284|0;c[s>>2]=i;t=b+288|0}else{t=c[b+296>>2]|0;s=t;t=t+4|0}c[s>>2]=i;c[e>>2]=0;k=d+8|0;m=b+60|0;u=b+80|0;v=b+4|0;w=b+476|0;n=d+68|0;o=b+44|0;p=d+56|0;q=b+48|0;a:while(1){j=ob[c[k>>2]&127](d,c[y>>2]|0,f,z)|0;i=c[z>>2]|0;c[t>>2]=i;r=i;b:do switch(j|0){case 40:{A=6;break a}case 0:{A=23;break a}case -2:{A=24;break a}case -4:case -1:{A=26;break a}case 7:{i=c[m>>2]|0;if(i|0){a[x>>0]=10;vb[i&127](c[v>>2]|0,x,1);break b}if(c[u>>2]|0)yZ(b,d,c[y>>2]|0,r);break}case 6:{j=c[m>>2]|0;if(!j){if(!(c[u>>2]|0))break b;yZ(b,d,c[y>>2]|0,r);break b}if(!(a[n>>0]|0))i=r;else{r=c[y>>2]|0;vb[j&127](c[v>>2]|0,r,i-r|0);break b}while(1){c[x>>2]=c[o>>2];r=pb[c[p>>2]&127](d,y,i,x,c[q>>2]|0)|0;c[t>>2]=c[z>>2];i=c[o>>2]|0;vb[j&127](c[v>>2]|0,i,(c[x>>2]|0)-i|0);if(r>>>0<2)break;c[s>>2]=c[y>>2];i=c[z>>2]|0}break}default:{A=28;break a}}while(0);r=c[z>>2]|0;c[y>>2]=r;c[s>>2]=r;switch(c[w>>2]|0){case 3:{A=30;break a}case 2:{i=35;break a}default:{}}}if((A|0)==6){i=c[b+76>>2]|0;if(!i){if(c[u>>2]|0)yZ(b,d,c[y>>2]|0,r)}else tb[i&127](c[v>>2]|0);i=c[z>>2]|0;c[e>>2]=i;c[g>>2]=i;i=(c[w>>2]|0)==2?35:0}else if((A|0)==23){c[s>>2]=i;i=4}else if((A|0)==24)if(!(h<<24>>24))i=6;else{c[g>>2]=c[y>>2];i=0}else if((A|0)==26)if(!(h<<24>>24))i=20;else{c[g>>2]=c[y>>2];i=0}else if((A|0)==28){c[s>>2]=i;i=23}else if((A|0)==30){c[g>>2]=c[z>>2];i=0}l=B;return i|0}function PZ(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;h=l;l=l+16|0;g=h;c[g>>2]=d;d=OZ(b,c[b+144>>2]|0,g,e,f,(a[b+480>>0]|0)==0&1)|0;g=c[g>>2]|0;do if(!((d|0)!=0|(g|0)==0)){d=b+276|0;if(!(c[b+472>>2]|0)){c[d>>2]=58;d=pZ(b,g,e,f)|0;break}else{c[d>>2]=63;d=QZ(b,g,e,f)|0;break}}while(0);l=h;return d|0}function QZ(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;d=IZ(b,1,c[b+144>>2]|0,d,e,f,(a[b+480>>0]|0)==0&1)|0;if((d|0)==0?(RZ(b)|0)<<24>>24==0:0)d=1;return d|0}function RZ(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;m=a+16|0;a=a+360|0;while(1){a=c[a>>2]|0;if(!a){a=1;break}i=(c[a+24>>2]|0)+1|0;j=a+36|0;f=c[j>>2]|0;e=f+i|0;l=a+4|0;d=c[l>>2]|0;if((d|0)==(e|0)){a=1;break}k=a+8|0;b=c[k>>2]|0;g=b+i|0;h=a+40|0;if((g|0)>((c[h>>2]|0)-f|0)){e=lb[c[m>>2]&127](f,g)|0;if(!e){a=0;break}b=a+12|0;f=c[j>>2]|0;if((c[b>>2]|0)==(f|0))c[b>>2]=e;b=a+16|0;d=c[b>>2]|0;if(d|0)c[b>>2]=e+(d-f);c[j>>2]=e;c[h>>2]=e+g;e=e+i|0;d=c[l>>2]|0;b=c[k>>2]|0}W6(e|0,d|0,b|0)|0;c[l>>2]=e}return a|0}function SZ(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;f=b+12|0;g=b+8|0;while(1){e=c[f>>2]|0;if((e|0)==(c[g>>2]|0)){if(!((vZ(b)|0)<<24>>24)){d=0;break}e=c[f>>2]|0}i=a[d>>0]|0;c[f>>2]=e+1;a[e>>0]=i;if(!(a[d>>0]|0)){h=6;break}else d=d+1|0}if((h|0)==6){i=b+16|0;d=c[i>>2]|0;c[i>>2]=c[f>>2]}return d|0}function TZ(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;n=c[b+352>>2]|0;j=n+80|0;k=n+92|0;l=n+88|0;m=n+60|0;n=n+96|0;i=d+4|0;h=c[d>>2]|0;a:while(1){switch(a[h>>0]|0){case 0:{e=1;break a}case 58:{g=c[d>>2]|0;while(1){e=c[k>>2]|0;f=(e|0)==(c[l>>2]|0);if((g|0)==(h|0))break;if(f){if(!((vZ(j)|0)<<24>>24)){e=0;break a}e=c[k>>2]|0}f=a[g>>0]|0;c[k>>2]=e+1;a[e>>0]=f;g=g+1|0}if(f){if(!((vZ(j)|0)<<24>>24)){e=0;break a}e=c[k>>2]|0}c[k>>2]=e+1;a[e>>0]=0;e=nZ(b,m,c[n>>2]|0,8)|0;if(!e){e=0;break a}f=c[n>>2]|0;if((c[e>>2]|0)==(f|0))c[n>>2]=c[k>>2];else c[k>>2]=f;c[i>>2]=e;break}default:{}}h=h+1|0}return e|0}function UZ(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;k=a[f>>0]|0;i=c[d>>2]|0;h=(i|0)==0;do if(!(k<<24>>24))if(h){m=0;j=11}else h=28;else if(((!h?(a[i>>0]|0)==120:0)?(a[i+1>>0]|0)==109:0)?(a[i+2>>0]|0)==108:0){h=a[i+3>>0]|0;if((h<<24>>24==110?(a[i+4>>0]|0)==115:0)?(a[i+5>>0]|0)==0:0){h=39;break}m=h<<24>>24==0&1;j=11}else{m=0;j=11}while(0);a:do if((j|0)==11){l=m<<24>>24!=0;h=1;i=1;n=0;while(1){j=i<<24>>24!=0;if(!(k<<24>>24))break;do if(j){if((n|0)<=36?k<<24>>24==(a[142257+n>>0]|0):0)break;i=0}else i=0;while(0);do if(!(l|h<<24>>24==0)){if((n|0)<=29?k<<24>>24==(a[142294+n>>0]|0):0)break;h=0}while(0);k=n+1|0;n=k;k=a[f+k>>0]|0}if((m&255|0)!=(j&(n|0)==36&1|0)){h=l?38:40;break}if(!(h<<24>>24!=0&(n|0)==29)){o=b+468|0;n=n+((a[o>>0]|0)!=0&1)|0;h=b+372|0;j=c[h>>2]|0;do if(!j){h=b+12|0;i=kb[c[h>>2]&63](28)|0;if(!i){h=1;break a}j=n+24|0;m=kb[c[h>>2]&63](j)|0;c[i+16>>2]=m;if(!m){tb[c[b+20>>2]&127](i);h=1;break a}else{c[i+24>>2]=j;j=i;break}}else{i=j+24|0;if((n|0)>(c[i>>2]|0)){k=j+16|0;l=n+24|0;m=lb[c[b+16>>2]&127](c[k>>2]|0,l)|0;if(!m){h=1;break a}c[k>>2]=m;c[i>>2]=l}c[h>>2]=c[j+4>>2]}while(0);c[j+20>>2]=n;i=j+16|0;W6(c[i>>2]|0,f|0,n|0)|0;h=a[o>>0]|0;if(h<<24>>24)a[(c[i>>2]|0)+(n+-1)>>0]=h;c[j>>2]=d;c[j+12>>2]=e;i=d+4|0;c[j+8>>2]=c[i>>2];if((a[f>>0]|0)==0?((c[b+352>>2]|0)+152|0)==(d|0):0)h=0;else h=j;c[i>>2]=h;c[j+4>>2]=c[g>>2];c[g>>2]=j;if((e|0)!=0?(p=c[b+100>>2]|0,(p|0)!=0):0){vb[p&127](c[b+4>>2]|0,c[d>>2]|0,c[i>>2]|0?f:0);h=0}else h=0}else h=40}while(0);return h|0}function VZ(a,b){a=a|0;b=b|0;var d=0;d=b;c[d>>2]=0;c[d+4>>2]=0;b=b+8|0;c[b>>2]=$Z(a)|0;c[b+4>>2]=0;return}function WZ(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;d=b;g=c[d+4>>2]^1936682341;e=a;c[e>>2]=c[d>>2]^1886610805;c[e+4>>2]=g;e=b+8|0;g=e;d=c[g+4>>2]^1685025377;f=a+8|0;c[f>>2]=c[g>>2]^1852075885;c[f+4>>2]=d;f=b;b=c[f+4>>2]^1819895653;d=a+16|0;c[d>>2]=c[f>>2]^1852142177;c[d+4>>2]=b;d=c[e+4>>2]^1952801890;b=a+24|0;c[b>>2]=c[e>>2]^2037671283;c[b+4>>2]=d;c[a+40>>2]=a+32;b=a+48|0;c[b>>2]=0;c[b+4>>2]=0;return}function XZ(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,A=0,B=0;n=e+f|0;o=b+40|0;p=b+40|0;q=b+32|0;r=b+33|0;s=b+34|0;t=b+35|0;h=b+36|0;i=b+37|0;j=b+38|0;k=b+39|0;l=b+24|0;m=b+48|0;f=e;do{while(1){g=c[o>>2]|0;if(f>>>0>=n>>>0){e=0;break}if(g>>>0>=p>>>0){e=1;break}e=a[f>>0]|0;c[o>>2]=g+1;a[g>>0]=e;f=f+1|0}if(g>>>0

    >>0)break;A=d[q>>0]|0;B=R6(d[r>>0]|0|0,0,8)|0;g=z;y=R6(d[s>>0]|0|0,0,16)|0;g=g|z;w=R6(d[t>>0]|0|0,0,24)|0;g=g|z|(d[h>>0]|0);u=R6(d[i>>0]|0|0,0,40)|0;g=g|z;x=R6(d[j>>0]|0|0,0,48)|0;g=g|z;v=R6(d[k>>0]|0|0,0,56)|0;v=B|A|y|w|u|x|v;g=g|z;x=l;u=g^c[x+4>>2];w=l;c[w>>2]=v^c[x>>2];c[w+4>>2]=u;_Z(b,2);w=b;g=c[w+4>>2]^g;u=b;c[u>>2]=c[w>>2]^v;c[u+4>>2]=g;c[o>>2]=q;u=m;u=J6(c[u>>2]|0,c[u+4>>2]|0,8,0)|0;g=m;c[g>>2]=u;c[g+4>>2]=z}while(e);return}function YZ(b){b=b|0;var c=0;c=0;while(1){if(!(a[b>>0]|0))break;c=c+1|0;b=b+1|0}return c|0}function ZZ(a){a=a|0;var b=0,e=0,f=0,g=0,h=0,i=0;f=a+32|0;h=(c[a+40>>2]|0)-f|0;e=a+48|0;e=J6(c[e>>2]|0,c[e+4>>2]|0,h|0,0)|0;e=R6(e|0,z|0,56)|0;b=z;switch(h<<24>>24|0){case 7:{e=R6(d[a+38>>0]|0|0,0,48)|0|e;b=z|b;g=3;break}case 6:{g=3;break}case 5:{g=4;break}case 4:{g=5;break}case 3:{g=6;break}case 2:{g=7;break}case 1:{g=8;break}default:{}}if((g|0)==3){h=R6(d[a+37>>0]|0|0,0,40)|0;e=h|e;b=z|b;g=4}if((g|0)==4){b=d[a+36>>0]|0|b;g=5}if((g|0)==5){h=R6(d[a+35>>0]|0|0,0,24)|0;e=h|e;b=z|b;g=6}if((g|0)==6){h=R6(d[a+34>>0]|0|0,0,16)|0;e=h|e;b=z|b;g=7}if((g|0)==7){h=R6(d[a+33>>0]|0|0,0,8)|0;b=z|b;e=h|e;g=8}if((g|0)==8)e=e|(d[f>>0]|0);h=a+24|0;i=h;g=c[i+4>>2]^b;f=h;c[f>>2]=c[i>>2]^e;c[f+4>>2]=g;_Z(a,2);f=a;b=c[f+4>>2]^b;g=a;c[g>>2]=c[f>>2]^e;c[g+4>>2]=b;g=a+16|0;b=g;e=c[b+4>>2]|0;f=g;c[f>>2]=c[b>>2]^255;c[f+4>>2]=e;_Z(a,4);f=a;a=a+8|0;z=c[a+4>>2]^c[f+4>>2]^c[g+4>>2]^c[h+4>>2];return c[a>>2]^c[f>>2]^c[g>>2]^c[h>>2]|0}function _Z(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;e=a+8|0;f=a+24|0;g=a+16|0;d=0;while(1){if((d|0)>=(b|0))break;h=e;n=c[h>>2]|0;h=c[h+4>>2]|0;o=a;o=J6(c[o>>2]|0,c[o+4>>2]|0,n|0,h|0)|0;k=z;m=R6(n|0,h|0,13)|0;l=z;h=Q6(n|0,h|0,51)|0;h=(m|h)^o;l=(l|z)^k;m=f;n=c[m>>2]|0;m=c[m+4>>2]|0;j=g;j=J6(c[j>>2]|0,c[j+4>>2]|0,n|0,m|0)|0;i=z;q=R6(n|0,m|0,16)|0;p=z;m=Q6(n|0,m|0,48)|0;m=(q|m)^j;p=(p|z)^i;o=J6(k|0,o|0,m|0,p|0)|0;k=z;q=a;c[q>>2]=o;c[q+4>>2]=k;q=R6(m|0,p|0,21)|0;n=z;p=Q6(m|0,p|0,43)|0;m=f;c[m>>2]=(q|p)^o;c[m+4>>2]=(n|z)^k;i=J6(j|0,i|0,h|0,l|0)|0;j=z;m=R6(h|0,l|0,17)|0;k=z;l=Q6(h|0,l|0,47)|0;h=e;c[h>>2]=(m|l)^i;c[h+4>>2]=(k|z)^j;h=g;c[h>>2]=j;c[h+4>>2]=i;d=d+1|0}return}function $Z(a){a=a|0;var b=0;while(1){b=c[a+472>>2]|0;if(!b)break;else a=b}return c[a+492>>2]|0}function a_(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0;L=l;l=l+16|0;I=L;J=L+4|0;K=c[b+352>>2]|0;o=d+16|0;p=d+40|0;q=b+144|0;r=b+284|0;s=e<<24>>24==0;t=h+12|0;v=h+16|0;w=h+8|0;x=d+44|0;y=d+64|0;z=b+436|0;A=b+452|0;B=b+448|0;C=(K+80|0)==(h|0);D=b+268|0;E=K+130|0;F=K+129|0;G=b+296|0;H=b+224|0;i=0;a:while(1){b:while(1){switch(ob[c[o>>2]&127](d,f,g,I)|0){case -4:{i=0;n=61;break a}case 0:{n=4;break a}case -1:{n=6;break a}case 6:{n=21;break b}case -3:{n=22;break b}case 7:case 39:{n=23;break b}case 10:{j=lb[c[p>>2]&127](d,f)|0;c:do if((j|0)<0)if((c[q>>2]|0)==(d|0)){c[r>>2]=f;j=1;i=14}else{j=1;i=14}else{if(s&(j|0)==32){k=c[t>>2]|0;if((c[v>>2]|0)==(k|0)){j=4;break}if((a[k+-1>>0]|0)==32){j=4;break}}m=x_(j,J)|0;k=0;while(1){if((k|0)>=(m|0)){j=0;break c}j=c[t>>2]|0;if((j|0)==(c[w>>2]|0)){if(!((vZ(h)|0)<<24>>24)){j=1;i=1;break c}j=c[t>>2]|0}M=a[J+k>>0]|0;c[t>>2]=j+1;a[j>>0]=M;k=k+1|0}}while(0);switch(j&7){case 4:case 0:break b;default:{}}break}case 9:{j=c[y>>2]|0;j=(nb[c[x>>2]&63](d,f+j|0,(c[I>>2]|0)+(0-j)|0)|0)&255;if(j<<24>>24){n=31;break b}j=c[y>>2]|0;j=lZ(z,d,f+j|0,(c[I>>2]|0)+(0-j)|0)|0;if(!j){i=1;n=61;break a}m=nZ(b,K,j,0)|0;c[B>>2]=c[A>>2];do if(C){if(!(c[D>>2]|0))if(!m)break b;else break;if(!(a[E>>0]|0)){j=(m|0)!=0;if(!(a[F>>0]|0)){n=45;break}else{u=j;n=47;break}}else{j=(m|0)!=0;if(!(c[G>>2]|0)){n=45;break}else{u=j;n=47;break}}}else if(!(a[F>>0]|0))if(!m){i=11;n=61;break a}else{n=46;break}else{j=(m|0)!=0;if(!(a[E>>0]|0)){u=j;n=47;break}else{n=45;break}}while(0);if((n|0)==45)if(j)n=46;else{i=11;n=61;break a}else if((n|0)==47?(n=0,!u):0)break b;if((n|0)==46?(n=0,(a[m+34>>0]|0)==0):0){i=24;n=61;break a}k=m+32|0;if(a[k>>0]|0){n=49;break a}if(c[m+28>>2]|0){n=52;break a}j=c[m+4>>2]|0;if(!j){n=55;break a}m=j+(c[m+8>>2]|0)|0;a[k>>0]=1;m=a_(b,c[H>>2]|0,e,j,m,h)|0;a[k>>0]=0;j=(m|0)==0;if(j)break b;else{j=(j^1)&1;i=m}break}default:{n=58;break a}}if(j)break a}if((n|0)==21){n=0;if(!(tZ(h,d,f,c[I>>2]|0)|0)){i=1;n=61;break}}else if((n|0)==22){c[I>>2]=f+(c[y>>2]|0);n=23}else if((n|0)==31){n=0;f=c[t>>2]|0;if((f|0)==(c[w>>2]|0)){if(!((vZ(h)|0)<<24>>24)){i=1;n=61;break}f=c[t>>2]|0}c[t>>2]=f+1;a[f>>0]=j}do if((n|0)==23){n=0;f=c[t>>2]|0;if(s){if((c[v>>2]|0)==(f|0))break;if((a[f+-1>>0]|0)==32)break}if((f|0)==(c[w>>2]|0)){if(!((vZ(h)|0)<<24>>24)){i=1;n=61;break a}f=c[t>>2]|0}c[t>>2]=f+1;a[f>>0]=32}while(0);f=c[I>>2]|0}if((n|0)==4)if((c[q>>2]|0)==(d|0)){c[r>>2]=c[I>>2];i=4;n=61}else{i=4;n=61}else if((n|0)==6)if((c[q>>2]|0)==(d|0)){c[r>>2]=f;i=4;n=61}else{i=4;n=61}else if((n|0)==49)if((c[q>>2]|0)==(d|0)){c[r>>2]=f;i=12;n=61}else{i=12;n=61}else if((n|0)==52)if((c[q>>2]|0)==(d|0)){c[r>>2]=f;i=15;n=61}else{i=15;n=61}else if((n|0)==55)if((c[q>>2]|0)==(d|0)){c[r>>2]=f;i=16;n=61}else{i=16;n=61}else if((n|0)==58)if((c[q>>2]|0)==(d|0)){c[r>>2]=f;i=23;n=61}else{i=23;n=61}l=L;return i|0}function b_(a){a=a|0;var b=0;b=a+8|0;return ((a|0)<1?0:(b|0)>0?b:0)|0}function c_(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+80|0;d=c+16|0;e=c;VZ(a,e);WZ(d,e);XZ(d,b,YZ(b)|0);b=ZZ(d)|0;l=c;return b|0}function d_(b,c){b=b|0;c=c|0;var d=0;while(1){d=a[b>>0]|0;if(d<<24>>24!=(a[c>>0]|0)){c=0;break}if(!(d<<24>>24)){c=1;break}c=c+1|0;b=b+1|0}return c|0}function e_(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;k=l;l=l+1040|0;i=k;f=c[b+124>>2]|0;a:do if(!f)e=18;else{e=0;while(1){if((e|0)==256)break;c[i+(e<<2)>>2]=-1;e=e+1|0}g=i+1028|0;c[g>>2]=0;j=i+1024|0;c[j>>2]=0;h=i+1032|0;c[h>>2]=0;do if(nb[f&63](c[b+244>>2]|0,d,i)|0){f=c[b+12>>2]|0;e=y_()|0;e=kb[f&63](e)|0;c[b+236>>2]=e;if(!e){e=c[h>>2]|0;if(!e)e=1;else{tb[e&127](c[j>>2]|0);e=1}}else{e=ob[(a[b+232>>0]<<24>>24?65:64)&127](e,i,c[g>>2]|0,c[j>>2]|0)|0;if(!e)break;c[b+240>>2]=c[j>>2];c[b+248>>2]=c[h>>2];c[b+144>>2]=e;e=0}break a}while(0);e=c[h>>2]|0;if(e|0)tb[e&127](c[j>>2]|0);e=18}while(0);l=k;return e|0}function f_(b,d){b=b|0;d=d|0;a[b+4>>0]=0;c[b+8>>2]=0;c[b+12>>2]=0;c[b>>2]=0;c[b+16>>2]=d;return}function g_(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;l=c[b+352>>2]|0;m=b+424|0;n=b+420|0;o=b+412|0;p=b+428|0;q=l+152|0;r=b+368|0;j=l+60|0;k=l+80|0;a:while(1){h=d;b:while(1){if(!(a[d>>0]|0)){d=1;break a}f=a[h>>0]|0;switch(f<<24>>24){case 0:case 12:{s=5;break b}case 61:break b;default:{}}e=c[m>>2]|0;if((e|0)==(c[n>>2]|0)){if(!((vZ(o)|0)<<24>>24)){d=0;break a}e=c[m>>2]|0;f=a[h>>0]|0}c[m>>2]=e+1;a[e>>0]=f;h=h+1|0}if((s|0)==5){s=0;d=c[m>>2]|0;if((d|0)==(c[n>>2]|0)){if(!((vZ(o)|0)<<24>>24)){d=0;break}d=c[m>>2]|0}c[m>>2]=d+1;a[d>>0]=0;d=nZ(b,l,c[p>>2]|0,0)|0;if(d|0)a[d+32>>0]=1;d=(a[h>>0]|0)==0?h:h+1|0;c[m>>2]=c[p>>2];continue}d=c[m>>2]|0;if((c[p>>2]|0)==(d|0))f=q;else{if((d|0)==(c[n>>2]|0)){if(!((vZ(o)|0)<<24>>24)){d=0;break}d=c[m>>2]|0}c[m>>2]=d+1;a[d>>0]=0;f=nZ(b,j,c[p>>2]|0,8)|0;if(!f){d=0;break}e=c[f>>2]|0;i=c[p>>2]|0;d=i;if((e|0)==(i|0)){i=SZ(k,e)|0;c[f>>2]=i;if(!i){d=0;break}d=c[p>>2]|0}c[m>>2]=d}c:while(1){i=h+1|0;e=a[i>>0]|0;g=(d|0)==(c[n>>2]|0);switch(e<<24>>24){case 0:case 12:break c;default:{}}if(g){if(!((vZ(o)|0)<<24>>24)){d=0;break a}d=c[m>>2]|0;e=a[i>>0]|0}c[m>>2]=d+1;a[d>>0]=e;h=i;d=c[m>>2]|0}if(g){if(!((vZ(o)|0)<<24>>24)){d=0;break}d=c[m>>2]|0}c[m>>2]=d+1;a[d>>0]=0;if(UZ(b,f,0,c[p>>2]|0,r)|0){d=0;break}c[m>>2]=c[p>>2];d=(a[i>>0]|0)==0?i:h+2|0}return d|0}function h_(a,b){a=a|0;b=b|0;var d=0,e=0;if(a|0?(d=a+4|0,e=(c[d>>2]|0)==(c[a>>2]|0),c[a>>2]=b,e):0)c[d>>2]=b;return}function i_(a,b,d){a=a|0;b=b|0;d=d|0;if(a|0){c[a+52>>2]=b;c[a+56>>2]=d}return}function j_(a,b){a=a|0;b=b|0;if(a|0)c[a+60>>2]=b;return}function k_(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0;g=(b|0)==0;a:do if(!(g|(e|0)<0)?!((d|0)==0&(e|0)!=0):0){h=b+476|0;switch(c[h>>2]|0){case 3:{c[b+280>>2]=33;g=0;break a}case 2:{c[b+280>>2]=36;g=0;break a}case 0:{if((c[b+472>>2]|0)==0?(l_(b)|0)<<24>>24==0:0){c[b+280>>2]=1;g=0;break a}break}default:{}}c[h>>2]=1;if(e|0){g=n_(b,e)|0;if(!g){g=0;break}W6(g|0,d|0,e|0)|0;g=o_(b,e,f)|0;break}a[b+480>>0]=f;if(!f)g=1;else{g=b+24|0;j=c[g>>2]|0;d=b+292|0;c[d>>2]=j;f=c[b+28>>2]|0;c[b+40>>2]=f;e=b+276|0;f=ob[c[e>>2]&127](b,j,f,g)|0;c[b+280>>2]=f;if(f|0){c[b+288>>2]=c[b+284>>2];c[e>>2]=66;g=0;break}switch(c[h>>2]|0){case 3:{j=c[b+144>>2]|0;xb[c[j+48>>2]&31](j,c[d>>2]|0,c[g>>2]|0,b+404|0);c[d>>2]=c[g>>2];g=2;break a}case 1:case 0:{c[h>>2]=2;g=1;break a}default:{g=1;break a}}}}else i=3;while(0);if((i|0)==3)if(g)g=0;else{c[b+280>>2]=41;g=0}return g|0}function l_(b){b=b|0;var d=0;d=b+492|0;if(!(c[d>>2]|0))c[d>>2]=p_()|0;if(!(a[b+232>>0]|0))b=1;else b=g_(b,142324)|0;return b|0}function m_(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;return c[a+280>>2]|0}function n_(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;a:do if(!a)d=0;else{if((b|0)<0){c[a+280>>2]=1;d=0;break}switch(c[a+476>>2]|0){case 3:{c[a+280>>2]=33;d=0;break a}case 2:{c[a+280>>2]=36;d=0;break a}default:{m=a+32|0;j=c[m>>2]|0;n=a+28|0;e=c[n>>2]|0;d=e;if((j-e|0)>=(b|0))break a;p=a+24|0;k=c[p>>2]|0;i=e-k|0;e=i+b|0;if((e|0)<0){c[a+280>>2]=1;d=0;break a}l=a+8|0;f=c[l>>2]|0;q=f;g=k-q|0;h=(g|0)>1024;b=h?1024:g;e=b+e|0;do if((e|0)>(j-q|0)){d=j-k|0;d=(d|0)==0?1024:d;do d=d<<1;while((d|0)<(e|0)&(d|0)>0);if((d|0)<1){c[a+280>>2]=1;d=0;break a}e=kb[c[a+12>>2]&63](d)|0;if(!e){c[a+280>>2]=1;d=0;break a}c[m>>2]=e+d;d=c[p>>2]|0;if(!d){d=e+(c[n>>2]|0)|0;c[n>>2]=d;c[l>>2]=e;o=22;break}else{q=d;o=q-(c[l>>2]|0)|0;o=(o|0)<1024?o:1024;W6(e|0,d+(0-o)|0,(c[n>>2]|0)-q+o|0)|0;tb[c[a+20>>2]&127](c[l>>2]|0);c[l>>2]=e;d=e+((c[n>>2]|0)-(c[p>>2]|0))+o|0;c[n>>2]=d;e=e+o|0;o=22;break}}else if(h){e=g-b|0;X6(f|0,f+e|0,b+i|0)|0;e=0-e|0;d=(c[n>>2]|0)+e|0;c[n>>2]=d;e=(c[p>>2]|0)+e|0;o=22}while(0);if((o|0)==22)c[p>>2]=e;c[a+288>>2]=0;c[a+284>>2]=0;c[a+292>>2]=0;break a}}}while(0);return d|0}function o_(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;a:do if(!b)d=0;else{f=b+476|0;switch(c[f>>2]|0){case 3:{c[b+280>>2]=33;d=0;break a}case 2:{c[b+280>>2]=36;d=0;break a}case 0:{if((c[b+472>>2]|0)==0?(l_(b)|0)<<24>>24==0:0){c[b+280>>2]=1;d=0;break a}break}default:{}}c[f>>2]=1;g=b+24|0;j=c[g>>2]|0;h=b+292|0;c[h>>2]=j;k=b+28|0;i=(c[k>>2]|0)+d|0;c[k>>2]=i;c[b+40>>2]=i;k=b+36|0;c[k>>2]=(c[k>>2]|0)+d;a[b+480>>0]=e;d=b+276|0;i=ob[c[d>>2]&127](b,j,i,g)|0;c[b+280>>2]=i;if(i|0){c[b+288>>2]=c[b+284>>2];c[d>>2]=66;d=0;break}switch(c[f>>2]|0){case 3:{d=2;break}case 1:case 0:{if(!e)d=1;else{c[f>>2]=2;d=1;break a}break}default:d=1}k=c[b+144>>2]|0;xb[c[k+48>>2]&31](k,c[h>>2]|0,c[g>>2]|0,b+404|0);c[h>>2]=c[g>>2]}while(0);return d|0}function p_(){var a=0,b=0,d=0;b=l;l=l+16|0;a=b;if(!(q_(a)|0)){d=s_()|0;d=(X4()|0)^d;c[a>>2]=d;a=r_(142378,O(d,2147483647)|0)|0}else a=r_(142365,c[a>>2]|0)|0;l=b;return a|0}function q_(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;f=l;l=l+16|0;e=m2(142365,0,f)|0;if((e|0)<0)b=0;else{b=0;while(1){g=W4(e,a+b|0,4-b|0)|0;d=g+b|0;if((g|0)>0)if(d>>>0<4)b=d;else{b=1;break}if((c[(d2()|0)>>2]|0)!=4){b=0;break}}l4(e)|0}l=f;return b|0}function r_(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=l;l=l+16|0;e=f;d=Ta(142443)|0;if(d|0?(s2(d,142463)|0)==0:0){d=c[15712]|0;c[e>>2]=a;c[e+4>>2]=8;c[e+8>>2]=b;c[e+12>>2]=4;w4(d,142465,e)|0}l=f;return b|0}function s_(){var a=0,b=0;b=l;l=l+16|0;a=b;if(!(Ua(a|0,0)|0)){l=b;return c[a+4>>2]|0}else qa(142390,142412,819,142423);return 0}function t_(a){a=a|0;if(!a)a=41;else a=c[a+280>>2]|0;return a|0}function u_(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;if(!a)a=0;else{b=a+284|0;d=c[b>>2]|0;if(d|0?(e=a+292|0,f=c[e>>2]|0,d>>>0>=f>>>0):0){g=c[a+144>>2]|0;xb[c[g+48>>2]&31](g,f,d,a+404|0);c[e>>2]=c[b>>2]}a=(c[a+404>>2]|0)+1|0}return a|0}function v_(a){a=a|0;do switch(a|0){case 41:{a=142502;break}case 1:{a=143774;break}case 2:{a=143761;break}case 3:{a=143744;break}case 4:{a=143712;break}case 5:{a=143697;break}case 6:{a=143679;break}case 7:{a=143664;break}case 8:{a=143644;break}case 9:{a=143616;break}case 10:{a=143581;break}case 11:{a=143564;break}case 12:{a=143537;break}case 13:{a=143517;break}case 14:{a=143479;break}case 15:{a=143452;break}case 16:{a=143410;break}case 17:{a=143363;break}case 18:{a=143346;break}case 19:{a=143295;break}case 20:{a=143272;break}case 21:{a=143226;break}case 22:{a=143199;break}case 23:{a=143148;break}case 24:{a=143112;break}case 25:{a=143060;break}case 26:{a=143015;break}case 27:{a=143e3;break}case 28:{a=142974;break}case 29:{a=142936;break}case 30:{a=142904;break}case 31:{a=142871;break}case 32:{a=142837;break}case 33:{a=142820;break}case 34:{a=142799;break}case 35:{a=142783;break}case 36:{a=142766;break}case 37:{a=142722;break}case 38:{a=142642;break}case 39:{a=142583;break}case 40:{a=142519;break}default:a=0}while(0);return a|0}function w_(a,b){a=a|0;b=b|0;var e=0,f=0,g=0,h=0,i=0;e=c[b>>2]|0;f=0;a:while(1){if(e>>>0<=a>>>0)break;h=e+-1|0;g=d[h>>0]|0;do if((g&248|0)==240)if((f+1|0)>>>0>3){i=5;break a}else f=0;else{if((g&240|0)==224)if((f+1|0)>>>0>2){i=8;break a}else{f=0;break}if((g&224|0)==192)if((f+1|0)>>>0>1){i=11;break a}else{f=0;break}else if(!(g&128))break a;else break}while(0);e=h;f=f+1|0}if((i|0)==5)e=e+3|0;else if((i|0)==8)e=e+2|0;else if((i|0)==11)e=e+1|0;c[b>>2]=e;return}function x_(b,c){b=b|0;c=c|0;do if((b|0)>=0){if((b|0)<128){a[c>>0]=b;b=1;break}if((b|0)<2048){a[c>>0]=b>>>6|192;a[c+1>>0]=b&63|128;b=2;break}if((b|0)<65536){a[c>>0]=b>>>12|224;a[c+1>>0]=b>>>6&63|128;a[c+2>>0]=b&63|128;b=3;break}if((b|0)<1114112){a[c>>0]=b>>>18|240;a[c+1>>0]=b>>>12&63|128;a[c+2>>0]=b>>>6&63|128;a[c+3>>0]=b&63|128;b=4}else b=0}else b=0;while(0);return b|0}function y_(){return 1908}function z_(e,f,g,h){e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;i=0;while(1){if((i|0)==364){i=0;break}a[e+i>>0]=a[56576+i>>0]|0;i=i+1|0}a:while(1){if((i|0)>=128){j=5;break}switch(a[56648+i>>0]|0){case 0:case 28:break;default:if((c[f+(i<<2)>>2]|0)!=(i|0)){e=0;break a}}i=i+1|0}b:do if((j|0)==5){q=e+72|0;m=e+372|0;n=e+884|0;o=(g|0)==0;l=0;while(1){if((l|0)>=256)break;p=c[f+(l<<2)>>2]|0;do if((p|0)==-1){a[q+l>>0]=1;b[m+(l<<1)>>1]=-1;a[n+(l<<2)>>0]=1;a[n+(l<<2)+1>>0]=0}else{if((p|0)<0){if(o|(p|0)<-4){e=0;break b}a[q+l>>0]=3-p;a[n+(l<<2)>>0]=0;b[m+(l<<1)>>1]=0;break}if((p|0)<128){i=a[56648+p>>0]|0;switch(i<<24>>24){case 0:case 28:break;default:if((p|0)!=(l|0)){e=0;break b}}a[q+l>>0]=i;a[n+(l<<2)>>0]=1;a[n+(l<<2)+1>>0]=p;b[m+(l<<1)>>1]=(p|0)==0?-1:p&65535;break}if((A_(p)|0)<0){a[q+l>>0]=0;b[m+(l<<1)>>1]=-1;a[n+(l<<2)>>0]=1;a[n+(l<<2)+1>>0]=0;break}if((p|0)>65535){e=0;break b}i=p>>>8;j=p>>>5&7;k=1<<(p&31);if(!(c[56940+((d[143788+i>>0]<<3|j)<<2)>>2]&k))a[q+l>>0]=c[56940+((d[144044+i>>0]<<3|j)<<2)>>2]&k|0?26:28;else a[q+l>>0]=22;a[n+(l<<2)>>0]=x_(p,n+(l<<2)+1|0)|0;b[m+(l<<1)>>1]=p}while(0);l=l+1|0}c[e+368>>2]=h;c[e+364>>2]=g;if(!o){c[e+328>>2]=108;c[e+332>>2]=108;c[e+336>>2]=108;c[e+340>>2]=109;c[e+344>>2]=109;c[e+348>>2]=109;c[e+352>>2]=110;c[e+356>>2]=110;c[e+360>>2]=110}c[e+56>>2]=13;c[e+60>>2]=14}while(0);return e|0}function A_(b){b=b|0;var c=0;switch(b>>8|0){case 223:case 222:case 221:case 220:case 219:case 218:case 217:case 216:{b=-1;break}case 0:{if(!(a[56648+b>>0]|0))b=-1;else c=4;break}case 255:{if((b|1|0)==65535)b=-1;else c=4;break}default:c=4}return b|0}function B_(a,b){a=a|0;b=b|0;a=lb[c[a+364>>2]&127](c[a+368>>2]|0,b)|0;if(a>>>0>65535)a=0;else a=c[56940+(((d[144044+(a>>>8)>>0]|0)<<3|a>>>5&7)<<2)>>2]&1<<(a&31);return a|0}function C_(a,b){a=a|0;b=b|0;a=lb[c[a+364>>2]&127](c[a+368>>2]|0,b)|0;if(a>>>0>65535)a=0;else a=c[56940+(((d[143788+(a>>>8)>>0]|0)<<3|a>>>5&7)<<2)>>2]&1<<(a&31);return a|0}function D_(a,b){a=a|0;b=b|0;a=lb[c[a+364>>2]&127](c[a+368>>2]|0,b)|0;if(a>>>0>65535)a=1;else a=(A_(a)|0)>>>31;return a|0}function E_(b,e,f,g,h){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;q=l;l=l+16|0;m=q;n=b+364|0;o=b+884|0;p=b+368|0;k=b+72|0;while(1){i=c[e>>2]|0;if((i|0)==(f|0)){h=0;break}r=d[i>>0]|0;j=o+(r<<2)+1|0;r=a[o+(r<<2)>>0]|0;b=r<<24>>24;if(!(r<<24>>24)){b=x_(lb[c[n>>2]&127](c[p>>2]|0,i)|0,m)|0;if((b|0)>(h-(c[g>>2]|0)|0)){h=2;break}i=c[e>>2]|0;j=m;i=i+((d[k+(d[i>>0]|0)>>0]|0)+-3)|0}else{if((h-(c[g>>2]|0)|0)<(b|0)){h=2;break}i=i+1|0}c[e>>2]=i;W6(c[g>>2]|0,j|0,b|0)|0;c[g>>2]=(c[g>>2]|0)+b}l=q;return h|0}function F_(a,e,f,g,h){a=a|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0;m=a+372|0;n=a+364|0;o=a+368|0;l=a+72|0;while(1){k=c[e>>2]|0;a=k>>>0>>0;i=c[g>>2]|0;if(!(a&i>>>0>>0))break;a=b[m+((d[k>>0]|0)<<1)>>1]|0;if(!(a<<16>>16)){a=(lb[c[n>>2]&127](c[o>>2]|0,k)|0)&65535;i=c[e>>2]|0;j=(d[l+(d[i>>0]|0)>>0]|0)+-3|0}else{j=1;i=k}c[e>>2]=i+j;k=c[g>>2]|0;c[g>>2]=k+2;b[k>>1]=a}return ((i|0)!=(h|0)|a^1?0:2)|0}function G_(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0;a:do if(e>>>0>>0){n=b+72|0;do switch(a[n+(d[e>>0]|0)>>0]|0){case 12:{h=f$(12,b,e+1|0,f,g)|0;break a}case 13:{h=f$(13,b,e+1|0,f,g)|0;break a}case 2:{h=e+1|0;if((f-h|0)<=0){h=-1;break a}switch(a[n+(d[h>>0]|0)>>0]|0){case 16:{h=g$(b,e+2|0,f,g)|0;break a}case 15:{h=b$(b,e+2|0,f,g)|0;break a}case 7:case 6:case 5:case 29:case 24:case 22:{c[g>>2]=e;h=29;break a}default:{c[g>>2]=h;h=0;break a}}}case 9:{if((e+1|0)==(f|0)){c[g>>2]=f;h=-15;break a}else k=3;break}case 10:case 21:{k=3;break}case 30:{h=X_(b,e+1|0,f,g)|0;break a}case 35:{c[g>>2]=e+1;h=38;break a}case 20:{c[g>>2]=e+1;h=25;break a}case 4:{i=e+1|0;h=f-i|0;if((h|0)<=0){h=-26;break a}if((a[i>>0]|0)==93){if((h|0)<=1){h=-1;break a}if((a[e+2>>0]|0)==62){c[g>>2]=e+3;h=34;break a}}c[g>>2]=i;h=26;break a}case 31:{c[g>>2]=e+1;h=23;break a}case 32:{h=e+1|0;if((f-h|0)<=0){h=-24;break a}switch(a[n+(d[h>>0]|0)>>0]|0){case 33:{c[g>>2]=e+2;h=36;break a}case 15:{c[g>>2]=e+2;h=35;break a}case 34:{c[g>>2]=e+2;h=37;break a}case 32:case 36:case 35:case 11:case 21:case 10:case 9:{c[g>>2]=h;h=24;break a}default:{c[g>>2]=h;h=0;break a}}}case 36:{c[g>>2]=e+1;h=21;break a}case 11:{c[g>>2]=e+1;h=17;break a}case 19:{h=h$(b,e+1|0,f,g)|0;break a}case 5:{if((f-e|0)<2){h=-2;break a}if(!(lb[c[b+340>>2]&127](b,e)|0))if(!(lb[c[b+328>>2]&127](b,e)|0)){c[g>>2]=e;h=0;break a}else{h=19;i=2}else{h=18;i=2}break}case 6:{if((f-e|0)<3){h=-2;break a}if(!(lb[c[b+344>>2]&127](b,e)|0))if(!(lb[c[b+332>>2]&127](b,e)|0)){c[g>>2]=e;h=0;break a}else{h=19;i=3}else{h=18;i=3}break}case 7:{if((f-e|0)<4){h=-2;break a}if(!(lb[c[b+348>>2]&127](b,e)|0))if(!(lb[c[b+336>>2]&127](b,e)|0)){c[g>>2]=e;h=0;break a}else{h=19;i=4}else{h=18;i=4}break}case 24:case 22:{h=18;i=1;break}case 23:case 27:case 26:case 25:{h=19;i=1;break}default:{c[g>>2]=e;h=0;break a}}while(0);if((k|0)==3){j=f;i=e;b:while(1){h=i;i=i+1|0;if((j-i|0)<=0){k=18;break}switch(a[n+(d[i>>0]|0)>>0]|0){case 10:case 21:continue b;case 9:break;default:{k=17;break b}}if((h+2|0)==(f|0)){k=17;break}}if((k|0)==17){c[g>>2]=i;h=15;break}else if((k|0)==18){c[g>>2]=i;h=15;break}}k=b+328|0;l=b+332|0;m=b+336|0;j=e+i|0;c:while(1){i=f-j|0;if((i|0)<=0){k=99;break}switch(a[n+(d[j>>0]|0)>>0]|0){case 29:{k=56;break c}case 10:case 9:case 21:case 30:case 20:case 36:case 35:case 32:case 11:{k=70;break c}case 34:{k=89;break c}case 33:{k=92;break c}case 15:{k=95;break c}case 27:case 26:case 25:case 24:case 22:{e=h;j=j+1|0;h=e;continue c}case 5:{if((i|0)<2){h=-2;break a}if(!(lb[c[k>>2]&127](b,j)|0)){k=60;break c}e=h;j=j+2|0;h=e;continue c}case 6:{if((i|0)<3){h=-2;break a}if(!(lb[c[l>>2]&127](b,j)|0)){k=64;break c}e=h;j=j+3|0;h=e;continue c}case 7:{if((i|0)<4){h=-2;break a}if(!(lb[c[m>>2]&127](b,j)|0)){k=68;break c}e=h;j=j+4|0;h=e;continue c}case 23:{i=j+1|0;switch(h&63){case 18:break;case 41:{h=19;j=i;continue c}default:{e=h;j=i;h=e;continue c}}h=f-i|0;if((h|0)<=0){h=-1;break a}switch(a[n+(d[i>>0]|0)>>0]|0){case 29:{k=74;break c}case 27:case 26:case 25:case 24:case 22:{h=41;j=j+2|0;continue c}case 5:{if((h|0)<2){h=-2;break a}if(!(lb[c[k>>2]&127](b,i)|0)){k=78;break c}h=41;j=j+3|0;continue c}case 6:{if((h|0)<3){h=-2;break a}if(!(lb[c[l>>2]&127](b,i)|0)){k=82;break c}h=41;j=j+4|0;continue c}case 7:{if((h|0)<4){h=-2;break a}if(!(lb[c[m>>2]&127](b,i)|0)){k=86;break c}h=41;j=j+5|0;continue c}default:{h=19;j=i;continue c}}}default:{k=98;break c}}}switch(k|0){case 56:{c[g>>2]=j;h=0;break a}case 60:{c[g>>2]=j;h=0;break a}case 64:{c[g>>2]=j;h=0;break a}case 68:{c[g>>2]=j;h=0;break a}case 70:{c[g>>2]=j;break a}case 74:{c[g>>2]=i;h=0;break a}case 78:{c[g>>2]=i;h=0;break a}case 82:{c[g>>2]=i;h=0;break a}case 86:{c[g>>2]=i;h=0;break a}case 89:if((h|0)==19){c[g>>2]=j;h=0;break a}else{c[g>>2]=j+1;h=32;break a}case 92:if((h|0)==19){c[g>>2]=j;h=0;break a}else{c[g>>2]=j+1;h=31;break a}case 95:if((h|0)==19){c[g>>2]=j;h=0;break a}else{c[g>>2]=j+1;h=30;break a}case 98:{c[g>>2]=j;h=0;break a}case 99:{h=0-h|0;break a}}}else h=-4;while(0);return h|0}function H_(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0;a:do if(e>>>0>>0){m=b+72|0;b:do switch(a[m+(d[e>>0]|0)>>0]|0){case 2:{h=__(b,e+1|0,f,g)|0;break a}case 3:{h=W_(b,e+1|0,f,g)|0;break a}case 9:{h=e+1|0;if((f-h|0)<=0){h=-3;break a}c[g>>2]=(a[m+(d[h>>0]|0)>>0]|0)==10?e+2|0:h;h=7;break a}case 10:{c[g>>2]=e+1;h=7;break a}case 4:{i=e+1|0;if((f-i|0)<=0){h=-5;break a}if((a[i>>0]|0)==93){h=e+2|0;if((f-h|0)<=0){h=-5;break a}if((a[h>>0]|0)==62){c[g>>2]=h;h=0;break a}else h=f}else h=f;break}case 5:{h=f;if((h-e|0)<2){h=-2;break a}if(!(lb[c[b+352>>2]&127](b,e)|0)){i=e+2|0;break b}else{c[g>>2]=e;h=0;break a}}case 6:{h=f;if((h-e|0)<3){h=-2;break a}if(!(lb[c[b+356>>2]&127](b,e)|0)){i=e+3|0;break b}else{c[g>>2]=e;h=0;break a}}case 7:{h=f;if((h-e|0)<4){h=-2;break a}if(!(lb[c[b+360>>2]&127](b,e)|0)){i=e+4|0;break b}else{c[g>>2]=e;h=0;break a}}case 8:case 1:case 0:{c[g>>2]=e;h=0;break a}default:{i=e+1|0;h=f}}while(0);j=b+352|0;k=b+356|0;l=b+360|0;c:while(1){f=h-i|0;if((f|0)<=0){f=49;break}switch(a[m+(d[i>>0]|0)>>0]|0){case 10:case 9:case 8:case 1:case 0:case 2:case 3:{f=47;break c}case 5:{if((f|0)<2){f=32;break c}if(lb[c[j>>2]&127](b,i)|0){f=32;break c}i=i+2|0;continue c}case 6:{if((f|0)<3){f=36;break c}if(lb[c[k>>2]&127](b,i)|0){f=36;break c}i=i+3|0;continue c}case 7:{if((f|0)<4){f=40;break c}if(lb[c[l>>2]&127](b,i)|0){f=40;break c}i=i+4|0;continue c}case 4:{if((f|0)<=1){f=47;break c}e=i+1|0;if((a[e>>0]|0)!=93){i=e;continue c}if((f|0)<=2){f=47;break c}i=i+2|0;if((a[i>>0]|0)==62){f=46;break c}else{i=e;continue c}}default:{i=i+1|0;continue c}}}if((f|0)==32){c[g>>2]=i;h=6;break}else if((f|0)==36){c[g>>2]=i;h=6;break}else if((f|0)==40){c[g>>2]=i;h=6;break}else if((f|0)==46){c[g>>2]=i;h=0;break}else if((f|0)==47){c[g>>2]=i;h=6;break}else if((f|0)==49){c[g>>2]=i;h=6;break}}else h=-4;while(0);return h|0}function I_(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0;a:do if(e>>>0>>0){l=b+72|0;b:do switch(a[l+(d[e>>0]|0)>>0]|0){case 4:{i=e+1|0;h=f;if((h-i|0)<=0){h=-1;break a}if((a[i>>0]|0)==93){f=e+2|0;if((h-f|0)<=0){h=-1;break a}if((a[f>>0]|0)==62){c[g>>2]=e+3;h=40;break a}}break}case 9:{h=e+1|0;if((f-h|0)<=0){h=-1;break a}c[g>>2]=(a[l+(d[h>>0]|0)>>0]|0)==10?e+2|0:h;h=7;break a}case 10:{c[g>>2]=e+1;h=7;break a}case 5:{h=f;if((h-e|0)<2){h=-2;break a}if(!(lb[c[b+352>>2]&127](b,e)|0)){i=e+2|0;break b}else{c[g>>2]=e;h=0;break a}}case 6:{h=f;if((h-e|0)<3){h=-2;break a}if(!(lb[c[b+356>>2]&127](b,e)|0)){i=e+3|0;break b}else{c[g>>2]=e;h=0;break a}}case 7:{h=f;if((h-e|0)<4){h=-2;break a}if(!(lb[c[b+360>>2]&127](b,e)|0)){i=e+4|0;break b}else{c[g>>2]=e;h=0;break a}}case 8:case 1:case 0:{c[g>>2]=e;h=0;break a}default:{i=e+1|0;h=f}}while(0);e=b+352|0;j=b+356|0;k=b+360|0;c:while(1){f=h-i|0;if((f|0)<=0){f=39;break}switch(a[l+(d[i>>0]|0)>>0]|0){case 4:case 10:case 9:case 8:case 1:case 0:{f=37;break c}case 5:{if((f|0)<2){f=30;break c}if(!(lb[c[e>>2]&127](b,i)|0))f=2;else{f=30;break c}break}case 6:{if((f|0)<3){f=33;break c}if(!(lb[c[j>>2]&127](b,i)|0))f=3;else{f=33;break c}break}case 7:{if((f|0)<4){f=36;break c}if(!(lb[c[k>>2]&127](b,i)|0))f=4;else{f=36;break c}break}default:f=1}i=i+f|0}if((f|0)==30){c[g>>2]=i;h=6;break}else if((f|0)==33){c[g>>2]=i;h=6;break}else if((f|0)==36){c[g>>2]=i;h=6;break}else if((f|0)==37){c[g>>2]=i;h=6;break}else if((f|0)==39){c[g>>2]=i;h=6;break}}else h=-4;while(0);return h|0} +function Ew(a,b,d,e,f,g,i,j,k){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;i=i|0;j=j|0;k=k|0;var l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;if(!((a|0)>-1&((b|0)>0&(d|0)>0)))qa(95162,94943,843,95188);j=zw(b,d,a,i,j,1)|0;if(!j)qa(95233,94943,847,95188);u=c[j+20>>2]|0;t=c[j+24>>2]|0;m=b+1|0;l=0;while(1){if((l|0)==(m|0))break;c[u+(l<<2)>>2]=0;l=l+1|0}a:do switch(i|0){case 1:{i=c[j+28>>2]|0;l=0;while(1){if((l|0)>=(a|0)){q=0;break}m=c[e+(l<<2)>>2]|0;if(!((m|0)>-1&(m|0)<(b|0))){s=13;break}r=c[f+(l<<2)>>2]|0;if(!((r|0)>-1&(r|0)<(d|0))){s=13;break}r=u+(m+1<<2)|0;c[r>>2]=(c[r>>2]|0)+1;l=l+1|0}if((s|0)==13)qa(138394,94943,862,95188);while(1){if((q|0)==(b|0)){l=0;break}s=q+1|0;d=u+(s<<2)|0;c[d>>2]=(c[d>>2]|0)+(c[u+(q<<2)>>2]|0);q=s}while(1){if((l|0)==(a|0))break;r=u+(c[e+(l<<2)>>2]<<2)|0;s=c[r>>2]|0;h[i+(s<<3)>>3]=+h[g+(l<<3)>>3];d=c[f+(l<<2)>>2]|0;c[r>>2]=s+1;c[t+(s<<2)>>2]=d;l=l+1|0}while(1){if((b|0)<=0)break a;f=b+-1|0;c[u+(b<<2)>>2]=c[u+(f<<2)>>2];b=f}}case 2:{i=c[j+28>>2]|0;l=0;while(1){if((l|0)>=(a|0)){r=0;break}m=c[e+(l<<2)>>2]|0;if(!((m|0)>-1&(m|0)<(b|0))){s=25;break}q=c[f+(l<<2)>>2]|0;if(!((q|0)>-1&(q|0)<(d|0))){s=25;break}q=u+(m+1<<2)|0;c[q>>2]=(c[q>>2]|0)+1;l=l+1|0}if((s|0)==25)qa(138394,94943,880,95188);while(1){if((r|0)==(b|0)){l=0;break}s=r+1|0;d=u+(s<<2)|0;c[d>>2]=(c[d>>2]|0)+(c[u+(r<<2)>>2]|0);r=s}while(1){if((l|0)==(a|0))break;r=u+(c[e+(l<<2)>>2]<<2)|0;s=c[r>>2]|0;d=s<<1;h[i+(d<<3)>>3]=+h[g>>3];h[i+((d|1)<<3)>>3]=+h[g+8>>3];d=c[f+(l<<2)>>2]|0;c[r>>2]=s+1;c[t+(s<<2)>>2]=d;g=g+16|0;l=l+1|0}while(1){if((b|0)<=0)break a;f=b+-1|0;c[u+(b<<2)>>2]=c[u+(f<<2)>>2];b=f}}case 4:{i=c[j+28>>2]|0;l=0;while(1){if((l|0)>=(a|0)){p=0;break}m=c[e+(l<<2)>>2]|0;if(!((m|0)>-1&(m|0)<(b|0))){s=37;break}r=c[f+(l<<2)>>2]|0;if(!((r|0)>-1&(r|0)<(d|0))){s=37;break}r=u+(m+1<<2)|0;c[r>>2]=(c[r>>2]|0)+1;l=l+1|0}if((s|0)==37)qa(138394,94943,899,95188);while(1){if((p|0)==(b|0)){l=0;break}s=p+1|0;d=u+(s<<2)|0;c[d>>2]=(c[d>>2]|0)+(c[u+(p<<2)>>2]|0);p=s}while(1){if((l|0)==(a|0))break;r=e+(l<<2)|0;c[i+(c[u+(c[r>>2]<<2)>>2]<<2)>>2]=c[g+(l<<2)>>2];d=c[f+(l<<2)>>2]|0;r=u+(c[r>>2]<<2)|0;s=c[r>>2]|0;c[r>>2]=s+1;c[t+(s<<2)>>2]=d;l=l+1|0}while(1){if((b|0)<=0)break a;f=b+-1|0;c[u+(b<<2)>>2]=c[u+(f<<2)>>2];b=f}}case 8:{g=0;while(1){if((g|0)>=(a|0)){n=0;break}l=c[e+(g<<2)>>2]|0;if(!((l|0)>-1&(l|0)<(b|0))){s=48;break}r=c[f+(g<<2)>>2]|0;if(!((r|0)>-1&(r|0)<(d|0))){s=48;break}r=u+(l+1<<2)|0;c[r>>2]=(c[r>>2]|0)+1;g=g+1|0}if((s|0)==48)qa(138394,94943,915,95188);while(1){if((n|0)==(b|0)){g=0;break}s=n+1|0;d=u+(s<<2)|0;c[d>>2]=(c[d>>2]|0)+(c[u+(n<<2)>>2]|0);n=s}while(1){if((g|0)==(a|0))break;d=c[f+(g<<2)>>2]|0;r=u+(c[e+(g<<2)>>2]<<2)|0;s=c[r>>2]|0;c[r>>2]=s+1;c[t+(s<<2)>>2]=d;g=g+1|0}while(1){if((b|0)<=0)break a;f=b+-1|0;c[u+(b<<2)>>2]=c[u+(f<<2)>>2];b=f}}case 16:{l=0;while(1){if((l|0)>=(a|0)){o=0;break}m=c[e+(l<<2)>>2]|0;if(!((m|0)>-1&(m|0)<(b|0))){s=59;break}r=c[f+(l<<2)>>2]|0;if(!((r|0)>-1&(r|0)<(d|0))){s=59;break}r=u+(m+1<<2)|0;c[r>>2]=(c[r>>2]|0)+1;l=l+1|0}if((s|0)==59)qa(138394,94943,930,95188);while(1){if((o|0)==(b|0))break;s=o+1|0;d=u+(s<<2)|0;c[d>>2]=(c[d>>2]|0)+(c[u+(o<<2)>>2]|0);o=s}W6(c[j+28>>2]|0,g|0,O(c[j+40>>2]|0,a)|0)|0;g=0;while(1){if((g|0)==(a|0))break;d=c[f+(g<<2)>>2]|0;r=u+(c[e+(g<<2)>>2]<<2)|0;s=c[r>>2]|0;c[r>>2]=s+1;c[t+(s<<2)>>2]=d;g=g+1|0}while(1){if((b|0)<=0)break a;f=b+-1|0;c[u+(b<<2)>>2]=c[u+(f<<2)>>2];b=f}}default:qa(138394,94943,944,95188)}while(0);c[u>>2]=0;c[j+8>>2]=a;if(k)j=Fw(j,k)|0;return j|0}function Fw(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0.0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;t=c[a+20>>2]|0;u=c[a+24>>2]|0;e=c[a+16>>2]|0;r=c[a+4>>2]|0;a:do if(b){m=r<<2;n=KK(m)|0;d=0;while(1){if((d|0)>=(r|0))break;c[n+(d<<2)>>2]=-1;d=d+1|0}b:do switch(e|0){case 1:{k=c[a+28>>2]|0;f=0;e=c[t>>2]|0;d=0;c:while(1){if((d|0)>=(c[a>>2]|0)){v=f;w=n;break b}l=d+1|0;m=t+(l<<2)|0;i=t+(d<<2)|0;d=f;while(1){b=c[m>>2]|0;if((e|0)>=(b|0))break;b=u+(e<<2)|0;f=c[b>>2]|0;g=c[n+(f<<2)>>2]|0;if((g|0)<(c[i>>2]|0)){c[u+(d<<2)>>2]=f;h[k+(d<<3)>>3]=+h[k+(e<<3)>>3];c[n+(c[b>>2]<<2)>>2]=d;d=d+1|0}else{if((c[u+(g<<2)>>2]|0)!=(f|0))break c;s=k+(g<<3)|0;h[s>>3]=+h[s>>3]+ +h[k+(e<<3)>>3]}e=e+1|0}c[m>>2]=d;f=d;e=b;d=l}qa(95235,94943,1792,95260);break}case 2:{s=c[a+28>>2]|0;switch(b|0){case 1:{b=c[t>>2]|0;e=0;d=0;d:while(1){if((e|0)>=(c[a>>2]|0)){v=d;w=n;break b}k=e+1|0;l=t+(k<<2)|0;i=t+(e<<2)|0;while(1){e=c[l>>2]|0;if((b|0)>=(e|0))break;e=u+(b<<2)|0;f=c[e>>2]|0;g=c[n+(f<<2)>>2]|0;if((g|0)<(c[i>>2]|0)){c[u+(d<<2)>>2]=f;q=b<<1;r=d<<1;h[s+(r<<3)>>3]=+h[s+(q<<3)>>3];h[s+((r|1)<<3)>>3]=+h[s+((q|1)<<3)>>3];c[n+(c[e>>2]<<2)>>2]=d;d=d+1|0}else{if((c[u+(g<<2)>>2]|0)!=(f|0))break d;q=b<<1;r=g<<1;p=s+(r<<3)|0;h[p>>3]=+h[p>>3]+ +h[s+(q<<3)>>3];r=s+((r|1)<<3)|0;h[r>>3]=+h[r>>3]+ +h[s+((q|1)<<3)>>3]}b=b+1|0}c[l>>2]=d;b=e;e=k}qa(95235,94943,1815,95260);break}case 4:{b=c[t>>2]|0;e=0;d=0;e:while(1){if((e|0)>=(c[a>>2]|0)){v=d;w=n;break b}l=e+1|0;k=t+(l<<2)|0;i=t+(e<<2)|0;while(1){e=c[k>>2]|0;if((b|0)>=(e|0))break;e=u+(b<<2)|0;f=c[e>>2]|0;g=c[n+(f<<2)>>2]|0;if((g|0)<(c[i>>2]|0)){c[u+(d<<2)>>2]=f;q=b<<1;r=d<<1;h[s+(r<<3)>>3]=+h[s+(q<<3)>>3];h[s+((r|1)<<3)>>3]=+h[s+((q|1)<<3)>>3];c[n+(c[e>>2]<<2)>>2]=d;d=d+1|0}else{if((c[u+(g<<2)>>2]|0)!=(f|0))break e;q=b<<1;r=g<<1;p=s+(r<<3)|0;h[p>>3]=+h[p>>3]+ +h[s+(q<<3)>>3];h[s+((r|1)<<3)>>3]=+h[s+((q|1)<<3)>>3]}b=b+1|0}c[k>>2]=d;b=e;e=l}qa(95235,94943,1835,95260);break}case 2:{q=~~+h[s+8>>3];i=c[a>>2]|0;e=q;g=0;d=0;f:while(1){if((g|0)>=(i|0))break;k=g+1|0;l=c[t+(k<<2)>>2]|0;f=d;b=q;d=c[t+(g<<2)>>2]|0;while(1){if((d|0)>=(l|0)){q=b;g=k;d=f;continue f}q=~~+h[s+((f<<1|1)<<3)>>3];f=f+1|0;e=(e|0)>(q|0)?e:q;b=(b|0)<(q|0)?b:q;d=d+1|0}}U1(n);p=e-q+1|0;o=KK(O(p,m)|0)|0;p=O(p,r)|0;d=0;while(1){if((d|0)>=(p|0))break;c[o+(d<<2)>>2]=-1;d=d+1|0}d=0;b=c[t>>2]|0;e=0;g:while(1){if((e|0)>=(c[a>>2]|0)){v=d;w=o;break b}m=e+1|0;n=t+(m<<2)|0;l=t+(e<<2)|0;while(1){e=c[n>>2]|0;if((b|0)>=(e|0))break;e=c[u+(b<<2)>>2]|0;f=b<<1;j=+h[s+((f|1)<<3)>>3];g=(O(~~j-q|0,r)|0)+e|0;i=o+(g<<2)|0;k=c[i>>2]|0;if((k|0)<(c[l>>2]|0)){c[u+(d<<2)>>2]=e;k=d<<1;h[s+(k<<3)>>3]=+h[s+(f<<3)>>3];h[s+((k|1)<<3)>>3]=j;c[i>>2]=d;d=d+1|0}else{if((g|0)>=(p|0)){d=55;break g}if((c[u+(k<<2)>>2]|0)!=(e|0)){d=57;break g}k=k<<1;i=s+(k<<3)|0;h[i>>3]=+h[i>>3]+ +h[s+(f<<3)>>3];h[s+((k|1)<<3)>>3]=j}b=b+1|0}c[n>>2]=d;b=e;e=m}if((d|0)==55)qa(95292,94943,1869,95260);else if((d|0)==57)qa(95313,94943,1870,95260);break}case 3:{f=~~+h[s+8>>3];i=c[a>>2]|0;d=f;e=0;g=0;h:while(1){if((g|0)>=(i|0))break;k=g+1|0;l=c[t+(k<<2)>>2]|0;b=d;d=c[t+(g<<2)>>2]|0;while(1){if((d|0)>=(l|0)){d=b;g=k;continue h}q=~~+h[s+(e<<1<<3)>>3];b=(b|0)>(q|0)?b:q;f=(f|0)>(q|0)?f:q;e=e+1|0;d=d+1|0}}U1(n);e=d-f+1|0;o=KK(O(e,m)|0)|0;e=O(e,r)|0;d=0;while(1){if((d|0)>=(e|0))break;c[o+(d<<2)>>2]=-1;d=d+1|0}d=0;b=c[t>>2]|0;e=0;i:while(1){if((e|0)>=(c[a>>2]|0)){v=d;w=o;break b}m=e+1|0;n=t+(m<<2)|0;l=t+(e<<2)|0;while(1){e=c[n>>2]|0;if((b|0)>=(e|0))break;e=c[u+(b<<2)>>2]|0;g=b<<1;j=+h[s+(g<<3)>>3];i=o+((O(~~j-f|0,r)|0)+e<<2)|0;k=c[i>>2]|0;if((k|0)<(c[l>>2]|0)){c[u+(d<<2)>>2]=e;q=d<<1;h[s+(q<<3)>>3]=j;h[s+((q|1)<<3)>>3]=+h[s+((g|1)<<3)>>3];c[i>>2]=d;d=d+1|0}else{if((c[u+(k<<2)>>2]|0)!=(e|0))break i;q=k<<1;h[s+(q<<3)>>3]=j;q=s+((q|1)<<3)|0;h[q>>3]=+h[q>>3]+ +h[s+((g|1)<<3)>>3]}b=b+1|0}c[n>>2]=d;b=e;e=m}qa(95313,94943,1905,95260);break}default:{v=0;w=n;break b}}break}case 4:{k=c[a+28>>2]|0;e=0;d=0;b=c[t>>2]|0;j:while(1){if((e|0)>=(c[a>>2]|0)){v=d;w=n;break b}l=e+1|0;m=t+(l<<2)|0;i=t+(e<<2)|0;while(1){f=c[m>>2]|0;if((b|0)>=(f|0))break;e=u+(b<<2)|0;f=c[e>>2]|0;g=c[n+(f<<2)>>2]|0;if((g|0)<(c[i>>2]|0)){c[u+(d<<2)>>2]=f;c[k+(d<<2)>>2]=c[k+(b<<2)>>2];c[n+(c[e>>2]<<2)>>2]=d;d=d+1|0}else{if((c[u+(g<<2)>>2]|0)!=(f|0))break j;s=k+(g<<2)|0;c[s>>2]=(c[s>>2]|0)+(c[k+(b<<2)>>2]|0)}b=b+1|0}c[m>>2]=d;e=l;b=f}qa(95235,94943,1929,95260);break}case 8:{e=0;d=0;b=c[t>>2]|0;k:while(1){if((e|0)>=(c[a>>2]|0)){v=d;w=n;break b}k=e+1|0;l=t+(k<<2)|0;i=t+(e<<2)|0;while(1){f=c[l>>2]|0;if((b|0)>=(f|0))break;e=u+(b<<2)|0;f=c[e>>2]|0;g=c[n+(f<<2)>>2]|0;if((g|0)>=(c[i>>2]|0)){if((c[u+(g<<2)>>2]|0)!=(f|0))break k}else{c[u+(d<<2)>>2]=f;c[n+(c[e>>2]<<2)>>2]=d;d=d+1|0}b=b+1|0}c[l>>2]=d;e=k;b=f}qa(95235,94943,1948,95260);break}default:{a=0;break a}}while(0);c[a+8>>2]=v;U1(w)}while(0);return a|0}function Gw(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;if(!d)Hw(a,c,e,g,b,f);else Iw(a,c,e,g,b,f);return}function Hw(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0.0,u=0;if((c[a+32>>2]|0)!=1)qa(94919,94943,1121,95483);if((c[a+16>>2]|0)!=1)qa(95364,94943,1122,95483);p=c[a+28>>2]|0;q=c[a+20>>2]|0;r=c[a+24>>2]|0;s=c[a>>2]|0;o=c[a+4>>2]|0;a=c[d>>2]|0;i=(a|0)!=0;if(!f){if(!i)a=KK(O(e<<3,s)|0)|0;f=0;a:while(1){if((f|0)>=(s|0))break;n=O(f,e)|0;i=0;while(1){if((i|0)>=(e|0))break;h[a+(i+n<<3)>>3]=0.0;i=i+1|0}l=f+1|0;m=c[q+(l<<2)>>2]|0;i=c[q+(f<<2)>>2]|0;while(1){if((i|0)>=(m|0)){f=l;continue a}j=p+(i<<3)|0;k=r+(i<<2)|0;f=0;while(1){if((f|0)>=(e|0))break;t=+h[b+((O(c[k>>2]|0,e)|0)+f<<3)>>3]*+h[j>>3];o=a+(f+n<<3)|0;h[o>>3]=+h[o>>3]+t;f=f+1|0}i=i+1|0}}if(g)Kw(a,s,e)}else{if(!i)a=KK(O(e<<3,o)|0)|0;f=O(o,e)|0;i=0;while(1){if((i|0)>=(f|0)){i=0;break}h[a+(i<<3)>>3]=0.0;i=i+1|0}b:while(1){if((i|0)>=(s|0))break;l=i+1|0;m=c[q+(l<<2)>>2]|0;n=O(i,e)|0;i=c[q+(i<<2)>>2]|0;while(1){if((i|0)>=(m|0)){i=l;continue b}j=p+(i<<3)|0;k=r+(i<<2)|0;f=0;while(1){if((f|0)>=(e|0))break;u=a+((O(c[k>>2]|0,e)|0)+f<<3)|0;h[u>>3]=+h[u>>3]+ +h[b+(f+n<<3)>>3]*+h[j>>3];f=f+1|0}i=i+1|0}}if(g)Kw(a,o,e)}c[d>>2]=a;return}function Iw(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+16|0;m=n;if((c[a+32>>2]|0)!=1)qa(94919,94943,1163,95335);if((c[a+16>>2]|0)!=1)qa(95364,94943,1164,95335);h=c[d>>2]|0;j=c[a>>2]|0;k=c[a+4>>2]|0;i=(h|0)!=0;if(!f){if(!i)h=KK(O(e<<3,j)|0)|0;i=0;while(1){if((i|0)>=(e|0))break;c[m>>2]=h+((O(i,j)|0)<<3);Jw(a,b+((O(i,k)|0)<<3)|0,m,0);i=i+1|0}if(!g)Kw(h,e,j)}else{if(!i)h=KK(O(e<<3,k)|0)|0;i=0;while(1){if((i|0)>=(e|0))break;c[m>>2]=h+((O(i,k)|0)<<3);Jw(a,b+((O(i,j)|0)<<3)|0,m,f);i=i+1|0}if(!g)Kw(h,e,k)}c[d>>2]=h;l=n;return}function Jw(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0.0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0.0;if((c[a+32>>2]|0)!=1)qa(94919,94943,1222,95392);i=c[a+16>>2]|0;switch(i|0){case 4:case 1:break;default:qa(95421,94943,1223,95392)}n=c[a+20>>2]|0;m=c[a+24>>2]|0;o=c[a>>2]|0;k=c[a+4>>2]|0;j=c[d>>2]|0;a:do switch(i|0){case 1:{l=c[a+28>>2]|0;a=(e|0)!=0;f=(j|0)!=0;if(!b){if(!a){if(f)f=j;else f=KK(o<<3)|0;a=0;b:while(1){if((a|0)>=(o|0))break a;i=f+(a<<3)|0;h[i>>3]=0.0;j=a+1|0;e=c[n+(j<<2)>>2]|0;a=c[n+(a<<2)>>2]|0;g=0.0;while(1){if((a|0)>=(e|0)){a=j;continue b}p=g+ +h[l+(a<<3)>>3];h[i>>3]=p;a=a+1|0;g=p}}}if(!f)j=KK(k<<3)|0;a=0;while(1){if((a|0)>=(k|0)){a=0;break}h[j+(a<<3)>>3]=0.0;a=a+1|0}c:while(1){if((a|0)>=(o|0)){f=j;break a}f=a+1|0;i=c[n+(f<<2)>>2]|0;a=c[n+(a<<2)>>2]|0;while(1){if((a|0)>=(i|0)){a=f;continue c}b=j+(c[m+(a<<2)>>2]<<3)|0;h[b>>3]=+h[b>>3]+ +h[l+(a<<3)>>3];a=a+1|0}}}else{if(!a){if(f)f=j;else f=KK(o<<3)|0;a=0;d:while(1){if((a|0)>=(o|0))break a;i=f+(a<<3)|0;h[i>>3]=0.0;j=a+1|0;e=c[n+(j<<2)>>2]|0;a=c[n+(a<<2)>>2]|0;g=0.0;while(1){if((a|0)>=(e|0)){a=j;continue d}p=g+ +h[b+(c[m+(a<<2)>>2]<<3)>>3]*+h[l+(a<<3)>>3];h[i>>3]=p;a=a+1|0;g=p}}}if(f)f=j;else f=KK(k<<3)|0;a=0;while(1){if((a|0)>=(k|0)){a=0;break}h[f+(a<<3)>>3]=0.0;a=a+1|0}e:while(1){if((a|0)>=(o|0))break a;i=a+1|0;j=c[n+(i<<2)>>2]|0;e=b+(a<<3)|0;a=c[n+(a<<2)>>2]|0;while(1){if((a|0)>=(j|0)){a=i;continue e}k=f+(c[m+(a<<2)>>2]<<3)|0;h[k>>3]=+h[k>>3]+ +h[e>>3]*+h[l+(a<<3)>>3];a=a+1|0}}}}case 4:{l=c[a+28>>2]|0;a=(e|0)!=0;f=(j|0)!=0;if(!b){if(!a){if(f)f=j;else f=KK(o<<3)|0;a=0;f:while(1){if((a|0)>=(o|0))break a;i=f+(a<<3)|0;h[i>>3]=0.0;j=a+1|0;e=c[n+(j<<2)>>2]|0;a=c[n+(a<<2)>>2]|0;g=0.0;while(1){if((a|0)>=(e|0)){a=j;continue f}p=g+ +(c[l+(a<<2)>>2]|0);h[i>>3]=p;a=a+1|0;g=p}}}if(!f)j=KK(k<<3)|0;a=0;while(1){if((a|0)>=(k|0)){a=0;break}h[j+(a<<3)>>3]=0.0;a=a+1|0}g:while(1){if((a|0)>=(o|0)){f=j;break a}f=a+1|0;i=c[n+(f<<2)>>2]|0;a=c[n+(a<<2)>>2]|0;while(1){if((a|0)>=(i|0)){a=f;continue g}b=j+(c[m+(a<<2)>>2]<<3)|0;h[b>>3]=+h[b>>3]+ +(c[l+(a<<2)>>2]|0);a=a+1|0}}}else{if(!a){if(f)f=j;else f=KK(o<<3)|0;a=0;h:while(1){if((a|0)>=(o|0))break a;i=f+(a<<3)|0;h[i>>3]=0.0;j=a+1|0;e=c[n+(j<<2)>>2]|0;a=c[n+(a<<2)>>2]|0;g=0.0;while(1){if((a|0)>=(e|0)){a=j;continue h}p=g+ +h[b+(c[m+(a<<2)>>2]<<3)>>3]*+(c[l+(a<<2)>>2]|0);h[i>>3]=p;a=a+1|0;g=p}}}if(f)f=j;else f=KK(k<<3)|0;a=0;while(1){if((a|0)>=(k|0)){a=0;break}h[f+(a<<3)>>3]=0.0;a=a+1|0}i:while(1){if((a|0)>=(o|0))break a;i=a+1|0;j=c[n+(i<<2)>>2]|0;e=b+(a<<3)|0;a=c[n+(a<<2)>>2]|0;while(1){if((a|0)>=(j|0)){a=i;continue i}k=f+(c[m+(a<<2)>>2]<<3)|0;h[k>>3]=+h[k>>3]+ +h[e>>3]*+(c[l+(a<<2)>>2]|0);a=a+1|0}}}}default:qa(138394,94943,1315,95392)}while(0);c[d>>2]=f;return}function Kw(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0;d=O(b<<3,c)|0;f=KK(d)|0;W6(f|0,a|0,d|0)|0;d=0;while(1){if((d|0)>=(b|0))break;g=O(d,c)|0;e=0;while(1){if((e|0)>=(c|0))break;h[a+((O(e,b)|0)+d<<3)>>3]=+h[f+(e+g<<3)>>3];e=e+1|0}d=d+1|0}U1(f);return}function Lw(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0;x=c[a+20>>2]|0;y=c[a+24>>2]|0;z=c[b+20>>2]|0;A=c[b+24>>2]|0;w=c[a+32>>2]|0;if(!((w|0)==1?(w|0)==(c[b+32>>2]|0):0))qa(95005,94943,1408,95512);w=c[a>>2]|0;if(((c[a+4>>2]|0)==(c[b>>2]|0)?(n=c[a+16>>2]|0,(n|0)==(c[b+16>>2]|0)):0)?(m=b+4|0,B=KK(c[m>>2]<<2)|0,(B|0)!=0):0){d=0;while(1){if((d|0)>=(c[m>>2]|0)){e=0;d=0;break}c[B+(d<<2)>>2]=-1;d=d+1|0}a:while(1){if((d|0)>=(w|0))break;j=d+1|0;k=x+(j<<2)|0;l=-2-d|0;i=c[x+(d<<2)>>2]|0;while(1){if((i|0)>=(c[k>>2]|0)){d=j;continue a}f=c[y+(i<<2)>>2]|0;g=z+(f+1<<2)|0;f=c[z+(f<<2)>>2]|0;while(1){if((f|0)>=(c[g>>2]|0))break;d=B+(c[A+(f<<2)>>2]<<2)|0;if((c[d>>2]|0)!=(l|0)){c[d>>2]=l;e=e+1|0}f=f+1|0}i=i+1|0}}d=rw(w,c[m>>2]|0,e,n,1)|0;b:do if(!d)d=0;else{t=c[d+20>>2]|0;u=c[d+24>>2]|0;c:do switch(n|0){case 1:{r=c[a+28>>2]|0;n=c[b+28>>2]|0;b=c[d+28>>2]|0;c[t>>2]=0;e=0;f=0;d:while(1){if((e|0)>=(w|0)){v=f;break c}o=e+1|0;p=x+(o<<2)|0;q=t+(e<<2)|0;a=c[x+(e<<2)>>2]|0;while(1){if((a|0)>=(c[p>>2]|0))break;k=c[y+(a<<2)>>2]|0;l=z+(k+1<<2)|0;m=r+(a<<3)|0;k=c[z+(k<<2)>>2]|0;while(1){if((k|0)>=(c[l>>2]|0))break;e=A+(k<<2)|0;g=c[e>>2]|0;i=B+(g<<2)|0;j=c[i>>2]|0;if((j|0)<(c[q>>2]|0)){c[i>>2]=f;c[u+(f<<2)>>2]=c[e>>2];h[b+(f<<3)>>3]=+h[n+(k<<3)>>3]*+h[m>>3];f=f+1|0}else{if((c[u+(j<<2)>>2]|0)!=(g|0))break d;s=b+(j<<3)|0;h[s>>3]=+h[s>>3]+ +h[n+(k<<3)>>3]*+h[m>>3]}k=k+1|0}a=a+1|0}c[t+(o<<2)>>2]=f;e=o}qa(95534,94943,1468,95512);break}case 2:{s=c[a+28>>2]|0;b=c[b+28>>2]|0;o=c[d+28>>2]|0;c[t>>2]=0;e=0;f=0;e:while(1){if((e|0)>=(w|0)){v=f;break c}p=e+1|0;q=x+(p<<2)|0;r=t+(e<<2)|0;n=c[x+(e<<2)>>2]|0;while(1){if((n|0)>=(c[q>>2]|0))break;k=c[y+(n<<2)>>2]|0;l=z+(k+1<<2)|0;a=n<<1;m=s+(a<<3)|0;a=s+((a|1)<<3)|0;k=c[z+(k<<2)>>2]|0;while(1){if((k|0)>=(c[l>>2]|0))break;e=A+(k<<2)|0;g=c[e>>2]|0;i=B+(g<<2)|0;j=c[i>>2]|0;if((j|0)<(c[r>>2]|0)){c[i>>2]=f;c[u+(f<<2)>>2]=c[e>>2];i=k<<1;g=b+(i<<3)|0;i=b+((i|1)<<3)|0;j=f<<1;h[o+(j<<3)>>3]=+h[g>>3]*+h[m>>3]-+h[i>>3]*+h[a>>3];h[o+((j|1)<<3)>>3]=+h[g>>3]*+h[a>>3]+ +h[i>>3]*+h[m>>3];f=f+1|0}else{if((c[u+(j<<2)>>2]|0)!=(g|0))break e;i=k<<1;g=b+(i<<3)|0;i=b+((i|1)<<3)|0;j=j<<1;e=o+(j<<3)|0;h[e>>3]=+h[e>>3]+ +h[g>>3]*+h[m>>3]-+h[i>>3]*+h[a>>3];j=o+((j|1)<<3)|0;h[j>>3]=+h[g>>3]*+h[a>>3]+ +h[i>>3]*+h[m>>3]+ +h[j>>3]}k=k+1|0}n=n+1|0}c[t+(p<<2)>>2]=f;e=p}qa(95534,94943,1497,95512);break}case 4:{r=c[a+28>>2]|0;n=c[b+28>>2]|0;b=c[d+28>>2]|0;c[t>>2]=0;e=0;f=0;f:while(1){if((f|0)>=(w|0)){v=e;break c}o=f+1|0;p=x+(o<<2)|0;q=t+(f<<2)|0;l=c[x+(f<<2)>>2]|0;while(1){if((l|0)>=(c[p>>2]|0))break;k=c[y+(l<<2)>>2]|0;m=z+(k+1<<2)|0;a=r+(l<<2)|0;k=c[z+(k<<2)>>2]|0;while(1){if((k|0)>=(c[m>>2]|0))break;f=A+(k<<2)|0;g=c[f>>2]|0;i=B+(g<<2)|0;j=c[i>>2]|0;if((j|0)<(c[q>>2]|0)){c[i>>2]=e;c[u+(e<<2)>>2]=c[f>>2];c[b+(e<<2)>>2]=O(c[n+(k<<2)>>2]|0,c[a>>2]|0)|0;e=e+1|0}else{if((c[u+(j<<2)>>2]|0)!=(g|0))break f;i=O(c[n+(k<<2)>>2]|0,c[a>>2]|0)|0;s=b+(j<<2)|0;c[s>>2]=(c[s>>2]|0)+i}k=k+1|0}l=l+1|0}c[t+(o<<2)>>2]=e;f=o}qa(95534,94943,1523,95512);break}case 8:{c[t>>2]=0;e=0;f=0;g:while(1){if((f|0)>=(w|0)){v=e;break c}a=f+1|0;n=x+(a<<2)|0;b=t+(f<<2)|0;l=c[x+(f<<2)>>2]|0;while(1){if((l|0)>=(c[n>>2]|0))break;k=c[y+(l<<2)>>2]|0;m=z+(k+1<<2)|0;k=c[z+(k<<2)>>2]|0;while(1){if((k|0)>=(c[m>>2]|0))break;f=A+(k<<2)|0;g=c[f>>2]|0;i=B+(g<<2)|0;j=c[i>>2]|0;if((j|0)>=(c[b>>2]|0)){if((c[u+(j<<2)>>2]|0)!=(g|0))break g}else{c[i>>2]=e;c[u+(e<<2)>>2]=c[f>>2];e=e+1|0}k=k+1|0}l=l+1|0}c[t+(a<<2)>>2]=e;f=a}qa(95534,94943,1543,95512);break}default:{qw(d);d=0;break b}}while(0);c[d+8>>2]=v}while(0);U1(B)}else d=0;return d|0}function Mw(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0.0,K=0.0,L=0.0,M=0.0;F=c[a+20>>2]|0;G=c[a+24>>2]|0;H=c[b+20>>2]|0;B=c[b+24>>2]|0;C=c[d+20>>2]|0;D=c[d+24>>2]|0;E=c[a+32>>2]|0;if(!((E|0)==1?(E|0)==(c[b+32>>2]|0):0))qa(95005,94943,1574,95559);E=c[a>>2]|0;if(((((c[a+4>>2]|0)==(c[b>>2]|0)?(c[b+4>>2]|0)==(c[d>>2]|0):0)?(q=c[a+16>>2]|0,(q|0)==(c[b+16>>2]|0)):0)?(q|0)==(c[d+16>>2]|0):0)?(p=d+4|0,I=KK(c[p>>2]<<2)|0,(I|0)!=0):0){e=0;while(1){if((e|0)>=(c[p>>2]|0)){f=0;e=0;break}c[I+(e<<2)>>2]=-1;e=e+1|0}a:while(1){if((e|0)>=(E|0))break;m=e+1|0;n=F+(m<<2)|0;o=-2-e|0;l=c[F+(e<<2)>>2]|0;while(1){if((l|0)>=(c[n>>2]|0)){e=m;continue a}j=c[G+(l<<2)>>2]|0;k=H+(j+1<<2)|0;j=c[H+(j<<2)>>2]|0;while(1){if((j|0)>=(c[k>>2]|0))break;g=c[B+(j<<2)>>2]|0;i=C+(g+1<<2)|0;g=c[C+(g<<2)>>2]|0;while(1){if((g|0)>=(c[i>>2]|0))break;e=I+(c[D+(g<<2)>>2]<<2)|0;if((c[e>>2]|0)!=(o|0)){c[e>>2]=o;f=f+1|0}g=g+1|0}j=j+1|0}l=l+1|0}}e=rw(E,c[p>>2]|0,f,q,1)|0;b:do if(!e)e=0;else{y=c[e+20>>2]|0;z=c[e+24>>2]|0;c:do switch(q|0){case 1:{v=c[a+28>>2]|0;u=c[b+28>>2]|0;d=c[d+28>>2]|0;r=c[e+28>>2]|0;c[y>>2]=0;f=0;g=0;d:while(1){if((f|0)>=(E|0)){A=g;break c}s=f+1|0;t=F+(s<<2)|0;b=y+(f<<2)|0;q=c[F+(f<<2)>>2]|0;while(1){if((q|0)>=(c[t>>2]|0))break;o=c[G+(q<<2)>>2]|0;p=H+(o+1<<2)|0;a=v+(q<<3)|0;o=c[H+(o<<2)>>2]|0;while(1){if((o|0)>=(c[p>>2]|0))break;l=c[B+(o<<2)>>2]|0;m=C+(l+1<<2)|0;n=u+(o<<3)|0;l=c[C+(l<<2)>>2]|0;while(1){if((l|0)>=(c[m>>2]|0))break;f=D+(l<<2)|0;i=c[f>>2]|0;j=I+(i<<2)|0;k=c[j>>2]|0;if((k|0)<(c[b>>2]|0)){c[j>>2]=g;c[z+(g<<2)>>2]=c[f>>2];h[r+(g<<3)>>3]=+h[n>>3]*+h[a>>3]*+h[d+(l<<3)>>3];g=g+1|0}else{if((c[z+(k<<2)>>2]|0)!=(i|0))break d;x=r+(k<<3)|0;h[x>>3]=+h[x>>3]+ +h[n>>3]*+h[a>>3]*+h[d+(l<<3)>>3]}l=l+1|0}o=o+1|0}q=q+1|0}c[y+(s<<2)>>2]=g;f=s}qa(95582,94943,1642,95559);break}case 2:{x=c[a+28>>2]|0;w=c[b+28>>2]|0;r=c[d+28>>2]|0;s=c[e+28>>2]|0;c[y>>2]=0;f=0;g=0;e:while(1){if((g|0)>=(E|0)){A=f;break c}t=g+1|0;u=F+(t<<2)|0;v=y+(g<<2)|0;a=c[F+(g<<2)>>2]|0;while(1){if((a|0)>=(c[u>>2]|0))break;m=c[G+(a<<2)>>2]|0;q=H+(m+1<<2)|0;d=a<<1;b=x+(d<<3)|0;d=x+((d|1)<<3)|0;m=c[H+(m<<2)>>2]|0;while(1){if((m|0)>=(c[q>>2]|0))break;l=c[B+(m<<2)>>2]|0;n=C+(l+1<<2)|0;p=m<<1;o=w+(p<<3)|0;p=w+((p|1)<<3)|0;l=c[C+(l<<2)>>2]|0;while(1){if((l|0)>=(c[n>>2]|0))break;g=D+(l<<2)|0;i=c[g>>2]|0;j=I+(i<<2)|0;k=c[j>>2]|0;if((k|0)<(c[v>>2]|0)){c[j>>2]=f;c[z+(f<<2)>>2]=c[g>>2];K=+h[b>>3];L=+h[o>>3];J=+h[d>>3];M=+h[p>>3];j=l<<1;i=r+(j<<3)|0;j=r+((j|1)<<3)|0;k=f<<1;h[s+(k<<3)>>3]=(L*K-M*J)*+h[i>>3]-(M*K+J*L)*+h[j>>3];L=+h[b>>3];J=+h[p>>3];K=+h[d>>3];M=+h[o>>3];h[s+((k|1)<<3)>>3]=(M*K+J*L)*+h[i>>3]+(M*L-K*J)*+h[j>>3];f=f+1|0}else{if((c[z+(k<<2)>>2]|0)!=(i|0))break e;L=+h[b>>3];K=+h[o>>3];M=+h[d>>3];J=+h[p>>3];j=l<<1;i=r+(j<<3)|0;j=r+((j|1)<<3)|0;k=k<<1;g=s+(k<<3)|0;h[g>>3]=+h[g>>3]+(K*L-J*M)*+h[i>>3]-(J*L+M*K)*+h[j>>3];K=+h[b>>3];M=+h[p>>3];L=+h[d>>3];J=+h[o>>3];k=s+((k|1)<<3)|0;h[k>>3]=(J*L+M*K)*+h[i>>3]+(J*K-L*M)*+h[j>>3]+ +h[k>>3]}l=l+1|0}m=m+1|0}a=a+1|0}c[y+(t<<2)>>2]=f;g=t}qa(95582,94943,1674,95559);break}case 4:{v=c[a+28>>2]|0;u=c[b+28>>2]|0;b=c[d+28>>2]|0;d=c[e+28>>2]|0;c[y>>2]=0;f=0;g=0;f:while(1){if((g|0)>=(E|0)){A=f;break c}r=g+1|0;s=F+(r<<2)|0;t=y+(g<<2)|0;p=c[F+(g<<2)>>2]|0;while(1){if((p|0)>=(c[s>>2]|0))break;m=c[G+(p<<2)>>2]|0;a=H+(m+1<<2)|0;q=v+(p<<2)|0;m=c[H+(m<<2)>>2]|0;while(1){if((m|0)>=(c[a>>2]|0))break;l=c[B+(m<<2)>>2]|0;n=C+(l+1<<2)|0;o=u+(m<<2)|0;l=c[C+(l<<2)>>2]|0;while(1){if((l|0)>=(c[n>>2]|0))break;g=D+(l<<2)|0;i=c[g>>2]|0;j=I+(i<<2)|0;k=c[j>>2]|0;if((k|0)<(c[t>>2]|0)){c[j>>2]=f;c[z+(f<<2)>>2]=c[g>>2];w=O(c[o>>2]|0,c[q>>2]|0)|0;w=O(w,c[b+(l<<2)>>2]|0)|0;x=d+(f<<2)|0;c[x>>2]=(c[x>>2]|0)+w;f=f+1|0}else{if((c[z+(k<<2)>>2]|0)!=(i|0))break f;w=O(c[o>>2]|0,c[q>>2]|0)|0;w=O(w,c[b+(l<<2)>>2]|0)|0;x=d+(k<<2)|0;c[x>>2]=(c[x>>2]|0)+w}l=l+1|0}m=m+1|0}p=p+1|0}c[y+(r<<2)>>2]=f;g=r}qa(95582,94943,1706,95559);break}case 8:{c[y>>2]=0;f=0;g=0;g:while(1){if((g|0)>=(E|0)){A=f;break c}a=g+1|0;q=F+(a<<2)|0;b=y+(g<<2)|0;o=c[F+(g<<2)>>2]|0;while(1){if((o|0)>=(c[q>>2]|0))break;m=c[G+(o<<2)>>2]|0;p=H+(m+1<<2)|0;m=c[H+(m<<2)>>2]|0;while(1){if((m|0)>=(c[p>>2]|0))break;l=c[B+(m<<2)>>2]|0;n=C+(l+1<<2)|0;l=c[C+(l<<2)>>2]|0;while(1){if((l|0)>=(c[n>>2]|0))break;g=D+(l<<2)|0;i=c[g>>2]|0;j=I+(i<<2)|0;k=c[j>>2]|0;if((k|0)>=(c[b>>2]|0)){if((c[z+(k<<2)>>2]|0)!=(i|0))break g}else{c[j>>2]=f;c[z+(f<<2)>>2]=c[g>>2];f=f+1|0}l=l+1|0}m=m+1|0}o=o+1|0}c[y+(a<<2)>>2]=f;g=a}qa(95582,94943,1729,95559);break}default:{qw(e);e=0;break b}}while(0);c[e+8>>2]=A}while(0);U1(I)}else e=0;return e|0}function Nw(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;if((c[a+32>>2]|0)!=2)qa(95100,94943,1971,95607);if((b|0)>=1){h=c[a+8>>2]|0;g=h+b|0;if((g|0)>=(c[a+12>>2]|0))Ow(a,g+10|0)|0;i=h<<2;g=b<<2;W6((c[a+20>>2]|0)+i|0,d|0,g|0)|0;W6((c[a+24>>2]|0)+i|0,e|0,g|0)|0;g=c[a+40>>2]|0;if(g|0){i=O(g,b)|0;h=O(g,h)|0;W6((c[a+28>>2]|0)+h|0,f|0,i|0)|0}f=a+4|0;h=0;while(1){if((h|0)>=(b|0))break;g=c[d+(h<<2)>>2]|0;if((g|0)>=(c[a>>2]|0))c[a>>2]=g+1;g=c[e+(h<<2)>>2]|0;if((g|0)>=(c[f>>2]|0))c[f>>2]=g+1;h=h+1|0}i=a+8|0;c[i>>2]=(c[i>>2]|0)+b}return a|0}function Ow(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;if((c[a+32>>2]|0)==2){d=a+20|0;f=b<<2;c[d>>2]=MK(c[d>>2]|0,f)|0;d=a+24|0;c[d>>2]=MK(c[d>>2]|0,f)|0;d=c[a+40>>2]|0;if((d|0)>0){f=a+28|0;e=c[f>>2]|0;d=O(d,b)|0;if(!e)d=KK(d)|0;else d=MK(e,d)|0;c[f>>2]=d}}else{d=a+24|0;c[d>>2]=MK(c[d>>2]|0,b<<2)|0;d=c[a+40>>2]|0;if((d|0)>0){f=a+28|0;e=c[f>>2]|0;d=O(d,b)|0;if(!e)d=KK(d)|0;else d=MK(e,d)|0;c[f>>2]=d}}c[a+12>>2]=b;return a|0}function Pw(a){a=a|0;var b=0,d=0.0,e=0,f=0,g=0,i=0,j=0,k=0,l=0,m=0,n=0;a:do if(!a)a=0;else{l=c[a+20>>2]|0;k=c[a+24>>2]|0;b:do switch(c[a+16>>2]|0){case 1:{i=c[a+28>>2]|0;e=c[a>>2]|0;b=0;c:while(1){if((b|0)>=(e|0))break b;f=b+1|0;g=c[l+(f<<2)>>2]|0;b=c[l+(b<<2)>>2]|0;d=1.0/+(g-b|0);while(1){if((b|0)>=(g|0)){b=f;continue c}k=i+(b<<3)|0;h[k>>3]=+h[k>>3]*d;b=b+1|0}}}case 2:{f=c[a+28>>2]|0;g=c[a>>2]|0;b=0;d:while(1){if((b|0)>=(g|0))break b;i=b+1|0;j=c[l+(i<<2)>>2]|0;e=c[l+(b<<2)>>2]|0;d=1.0/+(j-e|0);while(1){if((e|0)>=(j|0)){b=i;continue d}if((c[k+(e<<2)>>2]|0)!=(b|0)){m=e<<1;n=f+(m<<3)|0;h[n>>3]=+h[n>>3]*d;m=f+((m|1)<<3)|0;h[m>>3]=+h[m>>3]*d}e=e+1|0}}}case 4:{qa(138394,94943,2192,95648);break}case 8:break;default:{a=0;break a}}while(0)}while(0);return a|0}function Qw(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;if((a|0)!=0?(b=a+8|0,d=c[b>>2]|0,e=c[a+4>>2]|0,(e|0)==(c[a>>2]|0)):0){g=c[a+24>>2]|0;a=c[a+20>>2]|0;f=rw(e,e,d,8,1)|0;W6(c[f+20>>2]|0,a|0,(e<<2)+4|0)|0;W6(c[f+24>>2]|0,g|0,d<<2|0)|0;c[f+8>>2]=c[b>>2];a=vw(f,1)|0;qw(f);a=Bw(a)|0;e=a+8|0;d=KK(c[e>>2]<<3)|0;c[a+28>>2]=d;e=c[e>>2]|0;b=0;while(1){if((b|0)>=(e|0))break;h[d+(b<<3)>>3]=1.0;b=b+1|0}c[a+16>>2]=1;c[a+40>>2]=8}else a=0;return a|0}function Rw(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;p=c[a+20>>2]|0;q=c[a+24>>2]|0;v=c[a+4>>2]|0;n=c[a>>2]|0;r=v<<2;s=KK(r)|0;t=KK(r+4|0)|0;u=KK(r)|0;r=KK(r)|0;o=t+4|0;a=0;while(1){if((a|0)>=(v|0))break;c[s+(a<<2)>>2]=0;a=a+1|0}c[o>>2]=v;a=0;while(1){if((a|0)>=(v|0)){h=1;k=0;break}c[u+(a<<2)>>2]=-1;a=a+1|0}a:while(1){if((k|0)>=(n|0))break;g=p+(k<<2)|0;l=k+1|0;m=p+(l<<2)|0;a=c[g>>2]|0;while(1){f=c[m>>2]|0;if((a|0)>=(f|0))break;j=o+(c[s+(c[q+(a<<2)>>2]<<2)>>2]<<2)|0;c[j>>2]=(c[j>>2]|0)+-1;a=a+1|0}a=h;j=c[g>>2]|0;while(1){if((j|0)>=(f|0)){h=a;k=l;continue a}h=q+(j<<2)|0;f=s+(c[h>>2]<<2)|0;i=c[f>>2]|0;g=u+(i<<2)|0;if((c[g>>2]|0)<(k|0)){c[g>>2]=k;f=o+(i<<2)|0;if(!(c[f>>2]|0)){c[f>>2]=1;g=a;a=i;f=r+(i<<2)|0}else{c[r+(i<<2)>>2]=a;c[o+(a<<2)>>2]=1;g=a+1|0;f=s+(c[h>>2]<<2)|0}c[f>>2]=a;a=g}else{i=r+(i<<2)|0;c[f>>2]=c[i>>2];i=o+(c[i>>2]<<2)|0;c[i>>2]=(c[i>>2]|0)+1}j=j+1|0;f=c[m>>2]|0}}c[t>>2]=0;a=0;f=0;while(1){if((a|0)>=(h|0))break;p=a+1|0;o=t+(p<<2)|0;q=(c[o>>2]|0)+f|0;c[o>>2]=q;a=p;f=q}c[d>>2]=r;a=0;while(1){if((a|0)>=(v|0)){a=h;break}q=t+(c[s+(a<<2)>>2]<<2)|0;d=c[q>>2]|0;c[q>>2]=d+1;c[r+(d<<2)>>2]=a;a=a+1|0}while(1){if((a|0)<=0)break;v=a+-1|0;c[t+(a<<2)>>2]=c[t+(v<<2)>>2];a=v}c[t>>2]=0;c[e>>2]=t;c[b>>2]=h;U1(u);U1(s);return}function Sw(){return +(+(x5()|0)*4.656612875245797e-10)}function Tw(a){a=a|0;if((a|0)>1)return (x5()|0)%(a|0)|0|0;else qa(95682,95688,58,95698);return 0}function Uw(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;a:do if((a|0)<1)b=0;else{b=KK(a<<2)|0;d=0;while(1){if((d|0)==(a|0))break;c[b+(d<<2)>>2]=d;d=d+1|0}while(1){if((a|0)<=1)break a;e=Tw(a)|0;d=a+-1|0;g=b+(d<<2)|0;f=c[g>>2]|0;e=b+(e<<2)|0;c[g>>2]=c[e>>2];c[e>>2]=f;a=d}}while(0);return b|0}function Vw(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=0;while(1){if((d|0)>=(a|0))break;e=c+(d<<3)|0;h[e>>3]=+h[b+(d<<3)>>3]-+h[e>>3];d=d+1|0}return c|0}function Ww(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0.0,f=0.0;d=0;e=0.0;while(1){if((d|0)>=(a|0))break;f=+h[c+(d<<3)>>3]*+h[b+(d<<3)>>3]+e;d=d+1|0;e=f}return +e}function Xw(a,b,c,d){a=a|0;b=b|0;c=c|0;d=+d;var e=0,f=0;e=0;while(1){if((e|0)>=(a|0))break;f=c+(e<<3)|0;h[f>>3]=+h[f>>3]*d+ +h[b+(e<<3)>>3];e=e+1|0}return c|0}function Yw(a,b,c,d){a=a|0;b=b|0;c=c|0;d=+d;var e=0,f=0;e=0;while(1){if((e|0)>=(a|0))break;f=b+(e<<3)|0;h[f>>3]=+h[c+(e<<3)>>3]*d+ +h[f>>3];e=e+1|0}return b|0}function Zw(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0.0,f=0,g=0.0;f=O(c,b)|0;d=O(d,b)|0;e=0.0;c=0;while(1){if((c|0)>=(b|0))break;g=+h[a+(c+f<<3)>>3]-+h[a+(c+d<<3)>>3];e=g*g+e;c=c+1|0}g=+C(+e);return +(g>1.0e-15?g:1.0e-15)}function _w(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0.0,f=0,g=0.0;f=O(c,b)|0;d=O(d,b)|0;e=0.0;c=0;while(1){if((c|0)>=(b|0))break;g=+h[a+(c+f<<3)>>3]-+h[a+(c+d<<3)>>3];e=g*g+e;c=c+1|0}return +(+C(+e))}function $w(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0,e=0,f=0.0;d=0.0;e=0;while(1){if((e|0)>=(c|0))break;f=+h[a+(e<<3)>>3]-+h[b+(e<<3)>>3];d=f*f+d;e=e+1|0}return +(+C(+d))}function ax(a,b,c,d,e,f,g){a=+a;b=+b;c=+c;d=+d;e=e|0;f=f|0;g=g|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0.0,r=0,s=0.0;p=l;l=l+80|0;n=p+48|0;m=p+24|0;o=p;i=0;while(1){if((i|0)>=(f|0)){j=0;break}q=+h[g+(i<<3)>>3];h[n+(i<<3)>>3]=q;h[m+(i<<3)>>3]=q;i=i+1|0}while(1){if((j|0)>=(e|0))break;k=O(j,f)|0;i=0;while(1){if((i|0)>=(f|0))break;s=+h[g+(i+k<<3)>>3];r=n+(i<<3)|0;q=+h[r>>3];h[r>>3]=s>3];h[r>>3]=s>q?s:q;i=i+1|0}j=j+1|0}q=+h[m>>3]-+h[n>>3];c=q!=0.0?(c-a)/q:1.0;q=+h[m+8>>3]-+h[n+8>>3];s=(d-b)/q;c=q!=0.0?(c>3]=a;h[o+8>>3]=b;h[o+16>>3]=0.0;j=0;while(1){if((j|0)>=(e|0))break;k=O(j,f)|0;i=0;while(1){if((i|0)>=(f|0))break;r=g+(i+k<<3)|0;h[r>>3]=(+h[r>>3]-+h[n+(i<<3)>>3])*c+ +h[o+(i<<3)>>3];i=i+1|0}j=j+1|0}l=p;return}function bx(a,b){a=a|0;b=b|0;if((tB(a)|0)==1){a=c[(c[(jC(a)|0)+16>>2]|0)+132>>2]|0;c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;c[a+12>>2]=0}else{cx(a);if(!((dP(QA(b,95704)|0)|0)<<24>>24))b=My(a,186208)|0;else b=dx(a)|0;Vy(a,b,186208);ex(b)}return}function cx(a){a=a|0;var b=0;b=xC(c[c[(c[(jC(a)|0)+16>>2]|0)+112>>2]>>2]|0)|0;a=c[46925]|0;if((b|0)!=(a|0)){c[46555]=0;c[46925]=b;c[46926]=GA(b,0,95713,0)|0;c[46927]=GA(c[46925]|0,1,95721,0)|0;c[46928]=GA(c[46925]|0,1,95738,0)|0;a=c[46925]|0}c[46929]=QA(a,95738)|0;Gy(186208);c[46554]=1;h[23280]=+_O(c[46925]|0,c[46926]|0,1.0,0.0);c[46556]=c[46927];c[46557]=c[46928];c[46558]=c[46929];return}function dx(a){a=a|0;var b=0,d=0,e=0,f=0;f=l;l=l+144|0;e=f;d=f+8|0;b=c[46555]|0;c[46555]=b+1;c[e>>2]=b;m4(d,96234,e)|0;d=Hy(ND(a,d,1)|0)|0;e=d+8|0;b=jC(a)|0;while(1){if(!b)break;oC(c[e>>2]|0,b,1)|0;c[(c[(c[b+16>>2]|0)+112>>2]|0)+12>>2]=d;b=kC(a,b)|0}l=f;return d|0}function ex(a){a=a|0;Uy(a);return}function fx(a,b){a=a|0;b=b|0;var d=0;d=KK(32)|0;c[d>>2]=4;h[d+8>>3]=.75;c[d+16>>2]=1073741824;c[d+20>>2]=1;c[d+24>>2]=a;c[d+28>>2]=b;return d|0}function gx(a){a=a|0;U1(a);return}function hx(a){a=a|0;var b=0,d=0;if(!a)return;d=c[a+8>>2]|0;do if(d|0){if(c[a>>2]|0){qw(d);b=c[a+12>>2]|0;if(!b)break;qw(b);break}if(c[a+36>>2]|0?(qw(d),b=c[a+12>>2]|0,b|0):0)qw(b)}while(0);qw(c[a+16>>2]|0);qw(c[a+20>>2]|0);b=c[a+24>>2]|0;if(b|0?(c[a>>2]|0)>0:0)U1(b);hx(c[a+28>>2]|0);U1(a);return}function ix(a,b,d,e,f,g,i,j,k,m){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;i=i|0;j=j|0;k=k|0;m=m|0;var n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0.0,v=0;v=l;l=l+32|0;n=v+16|0;o=v+12|0;p=v+8|0;q=v+4|0;r=v;c[n>>2]=a;c[o>>2]=0;c[p>>2]=0;c[q>>2]=0;c[r>>2]=0;c[i>>2]=0;c[j>>2]=0;c[b>>2]=0;c[g>>2]=0;c[e>>2]=0;s=k+28|0;t=k+8|0;u=+(c[a+4>>2]|0);f=d;do{jx(a,n,f,o,0,r,p,q,k,m);f=c[n>>2]|0;if(!f)break;d=c[f+4>>2]|0;f=c[i>>2]|0;if(!f){c[i>>2]=c[p>>2];c[j>>2]=c[q>>2]}else{a=Lw(f,c[p>>2]|0)|0;qw(c[i>>2]|0);qw(c[p>>2]|0);c[i>>2]=a;a=Lw(c[q>>2]|0,c[j>>2]|0)|0;qw(c[j>>2]|0);qw(c[q>>2]|0);c[j>>2]=a}f=c[b>>2]|0;if(f|0)qw(f);c[b>>2]=c[n>>2];f=c[e>>2]|0;if(f|0)qw(f);f=c[o>>2]|0;c[e>>2]=f;a=c[g>>2]|0;if(a){U1(a);f=c[o>>2]|0}c[g>>2]=c[r>>2];a=c[n>>2]|0;c[r>>2]=0;if(!(+h[t>>3]*u<+(d|0)))break}while((c[s>>2]|0)==1);l=v;return}function jx(a,b,d,e,f,g,i,j,k,m){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;i=i|0;j=j|0;k=k|0;m=m|0;var n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0.0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0;H=l;l=l+32|0;D=H+28|0;q=H+24|0;B=H+20|0;E=H+16|0;o=H+12|0;F=H+8|0;G=H+4|0;v=H;c[D>>2]=0;c[q>>2]=0;c[E>>2]=0;c[F>>2]=0;c[G>>2]=0;c[b>>2]=0;c[e>>2]=0;c[i>>2]=0;c[j>>2]=0;C=c[a>>2]|0;p=k+24|0;c[m>>2]=c[p>>2];n=c[p>>2]|0;a:do switch(n|0){case 12:{c[p>>2]=3;c[m>>2]=3;jx(a,b,d,e,f,g,i,j,k,m);if((((c[b>>2]|0)==0?(c[p>>2]=4,c[m>>2]=4,jx(a,b,d,e,f,g,i,j,k,m),(c[b>>2]|0)==0):0)?(c[p>>2]=6,c[m>>2]=6,jx(a,b,d,e,f,g,i,j,k,m),(c[b>>2]|0)==0):0)?(c[p>>2]=9,c[m>>2]=9,jx(a,b,d,e,f,g,i,j,k,m),(c[b>>2]|0)==0):0){c[p>>2]=2;c[m>>2]=2;jx(a,b,d,e,f,g,i,j,k,m)}c[p>>2]=12;p=0;q=0;k=0;o=0;n=0;m=0;break}case 9:case 10:{d=c[k+20>>2]|0;if((n|0)==9)qx(a,d,E,o,B);else rx(a,d,E,o,B);u=c[a+20>>2]|0;v=c[a+24>>2]|0;t=c[o>>2]|0;if(!(c[k+28>>2]|0)){if((t|0)==(C|0)?1:+h[k+8>>3]*+(C|0)<+(t|0)){p=0;q=0;k=0;o=0;n=0;m=0;break a}}else if((t|0)==(C|0)){p=0;q=0;k=0;o=0;n=0;m=0;break a}if((t|0)>=(c[k>>2]|0)){z=c[B>>2]|0;y=z<<2;x=KK(y)|0;y=KK(y)|0;z=KK(z<<3)|0;c[B>>2]=0;s=c[E>>2]|0;r=0;o=0;b:while(1){if((r|0)>=(C|0))break;d=s+(r<<2)|0;if((c[d>>2]|0)!=-1){c[x+(o<<2)>>2]=r;c[y+(c[B>>2]<<2)>>2]=c[d>>2];q=c[B>>2]|0;k=q+1|0;c[B>>2]=k;h[z+(q<<3)>>3]=1.0;r=r+1|0;o=k;continue}n=c[u+(r<<2)>>2]|0;q=r+1|0;k=u+(q<<2)|0;p=c[k>>2]|0;d=0;m=n;while(1){if((m|0)>=(p|0))break;d=((c[s+(c[v+(m<<2)>>2]<<2)>>2]|0)>>>31^1)+d|0;m=m+1|0}w=1.0/+(d|0);d=p;while(1){if((n|0)>=(d|0)){r=q;continue b}m=v+(n<<2)|0;if((c[s+(c[m>>2]<<2)>>2]|0)>-1){c[x+(o<<2)>>2]=r;c[y+(c[B>>2]<<2)>>2]=c[s+(c[m>>2]<<2)>>2];d=c[B>>2]|0;m=d+1|0;c[B>>2]=m;h[z+(d<<3)>>3]=w;d=c[k>>2]|0}else m=o;n=n+1|0;o=m}}C=Dw(o,C,t,x,y,z,1,8)|0;c[i>>2]=C;C=pw(C)|0;c[j>>2]=C;i=Mw(C,a,c[i>>2]|0)|0;c[b>>2]=i;if(!i){p=z;q=y;k=x;o=x;n=y;m=z}else{Jw(c[j>>2]|0,f,g,0);p=c[b>>2]|0;q=p+36|0;c[q>>2]=c[q>>2]|3;c[b>>2]=Bw(p)|0;c[e>>2]=0;p=z;q=y;k=x;o=x;n=y;m=z}}else{p=0;q=0;k=0;o=0;n=0;m=0}break}case 5:{A=26;break}case 1:{m=k+20|0;nx(a,c[m>>2]|0,D,q);d=c[p>>2]|0;if((d|0)==2){d=m;A=24}else A=25;break}case 2:{d=k+20|0;A=24;break}case 3:{kx(a,c[k+20>>2]|0,F,G,v);A=12;break}case 4:{lx(a,c[k+20>>2]|0,F,G,v);A=12;break}case 6:{mx(a,F,G,v);A=12;break}default:{p=0;q=0;k=0;o=0;n=0;m=0}}while(0);do if((A|0)==12){r=c[v>>2]|0;if(!(c[k+28>>2]|0)){if((r|0)==(C|0)?1:+h[k+8>>3]*+(C|0)<+(r|0)){p=0;q=0;k=0;o=0;n=0;m=0;break}}else if((r|0)==(C|0)){p=0;q=0;k=0;o=0;n=0;m=0;break}if((r|0)>=(c[k>>2]|0)){t=C<<2;s=KK(t)|0;t=KK(t)|0;u=KK(C<<3)|0;c[B>>2]=0;o=c[G>>2]|0;p=c[F>>2]|0;n=0;d=0;c:while(1){if((n|0)>=(c[v>>2]|0))break;q=n+1|0;k=o+(q<<2)|0;m=c[o+(n<<2)>>2]|0;while(1){if((m|0)>=(c[k>>2]|0)){n=q;continue c}c[s+(d<<2)>>2]=c[p+(m<<2)>>2];c[t+(c[B>>2]<<2)>>2]=n;y=c[B>>2]|0;z=y+1|0;c[B>>2]=z;h[u+(y<<3)>>3]=1.0;m=m+1|0;d=z}}C=Dw(d,C,r,s,t,u,1,8)|0;c[i>>2]=C;c[j>>2]=pw(C)|0;c[e>>2]=0;i=Mw(c[j>>2]|0,a,c[i>>2]|0)|0;c[b>>2]=i;if(!i){p=u;q=t;k=s;o=s;n=t;m=u}else{Jw(c[j>>2]|0,f,g,0);c[j>>2]=Pw(c[j>>2]|0)|0;p=c[b>>2]|0;q=p+36|0;c[q>>2]=c[q>>2]|3;c[b>>2]=Bw(p)|0;p=u;q=t;k=s;o=s;n=t;m=u}}else{p=0;q=0;k=0;o=0;n=0;m=0}}else if((A|0)==24){ox(a,c[d>>2]|0,D,q);d=c[p>>2]|0;A=25}while(0);if((A|0)==25)if((d|0)==5)A=26;else A=27;if((A|0)==26){px(a,c[k+20>>2]|0,D,q);A=27}do if((A|0)==27){d=c[q>>2]|0;if(!(c[k+28>>2]|0)){if((d|0)==(C|0)?1:+h[k+8>>3]*+(C|0)<+(d|0)){p=0;q=0;k=0;o=0;n=0;m=0;break}}else if((d|0)==(C|0)){p=0;q=0;k=0;o=0;n=0;m=0;break}if((d|0)>=(c[k>>2]|0)){s=C<<2;r=KK(s)|0;s=KK(s)|0;t=KK(C<<3)|0;c[B>>2]=0;q=c[D>>2]|0;d=0;p=0;while(1){if((p|0)>=(C|0))break;m=q+(p<<2)|0;n=c[m>>2]|0;if((n|0)>-1){c[r+(c[B>>2]<<2)>>2]=p;c[s+(c[B>>2]<<2)>>2]=d;A=c[B>>2]|0;o=A+1|0;c[B>>2]=o;h[t+(A<<3)>>3]=1.0;if((n|0)!=(p|0)){c[r+(o<<2)>>2]=c[m>>2];c[s+(c[B>>2]<<2)>>2]=d;A=c[B>>2]|0;c[B>>2]=A+1;h[t+(A<<3)>>3]=1.0;c[q+(c[m>>2]<<2)>>2]=-1}c[m>>2]=-1;d=d+1|0}p=p+1|0}C=Dw(c[B>>2]|0,C,d,r,s,t,1,8)|0;c[i>>2]=C;C=pw(C)|0;c[j>>2]=C;i=Mw(C,a,c[i>>2]|0)|0;c[b>>2]=i;if(!i){p=t;q=s;k=r;o=r;n=s;m=t}else{Jw(c[j>>2]|0,f,g,0);c[j>>2]=Pw(c[j>>2]|0)|0;p=c[b>>2]|0;q=p+36|0;c[q>>2]=c[q>>2]|3;c[b>>2]=Bw(p)|0;c[e>>2]=0;p=t;q=s;k=r;o=r;n=s;m=t}}else{p=0;q=0;k=0;o=0;n=0;m=0}}while(0);d=c[D>>2]|0;if(d|0)U1(d);d=c[E>>2]|0;if(d|0)U1(d);if(k|0)U1(o);if(q|0)U1(n);if(p|0)U1(m);d=c[F>>2]|0;if(d|0)U1(d);d=c[G>>2]|0;if(d|0)U1(d);l=H;return}function kx(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,i=0,j=0.0,k=0,l=0,m=0,n=0,o=0.0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;t=c[a+20>>2]|0;u=c[a+24>>2]|0;w=c[a>>2]|0;v=w<<2;c[d>>2]=KK(v)|0;c[e>>2]=KK(v+4|0)|0;v=KK(v)|0;g=0;while(1){if((g|0)>=(w|0))break;c[v+(g<<2)>>2]=g;g=g+1|0}c[f>>2]=0;r=c[e>>2]|0;c[r>>2]=0;s=c[a+28>>2]|0;a:do if(!b){g=0;a=0;b:while(1){while(1){if((a|0)>=(w|0)){a=0;j=0.0;b=0;break b}b=a;a=a+1|0;if((c[v+(b<<2)>>2]|0)==-1)continue;b=c[t+(b<<2)>>2]|0;if(((c[t+(a<<2)>>2]|0)-b|0)==1)break}l=c[u+(b<<2)>>2]|0;c[v+(l<<2)>>2]=-1;m=c[d>>2]|0;c[m+(g<<2)>>2]=l;n=t+(l+1<<2)|0;k=c[t+(l<<2)>>2]|0;g=g+1|0;while(1){if((k|0)>=(c[n>>2]|0))break;b=u+(k<<2)|0;i=c[b>>2]|0;if((l|0)!=(i|0)?((c[t+(i+1<<2)>>2]|0)-(c[t+(i<<2)>>2]|0)|0)==1:0){c[v+(i<<2)>>2]=-1;c[m+(g<<2)>>2]=c[b>>2];g=g+1|0}k=k+1|0}b=c[f>>2]|0;i=c[r+(b<<2)>>2]|0;if((g-i|0)<5){e=b+1|0;c[f>>2]=e;c[r+(e<<2)>>2]=g;continue}i=i+1|0;b=b+1|0;c[f>>2]=b;c[r+(b<<2)>>2]=i;b=i;while(1){if(!((i|0)<(g|0)&(b|0)<(g|0)))continue b;e=i+3|0;e=(g|0)<(e|0)?g:e;q=(c[f>>2]|0)+1|0;c[f>>2]=q;c[r+(q<<2)>>2]=e;b=b+1|0;i=e}}c:while(1){do{n=b;while(1){if((n|0)>=(w|0)){a=0;break c}p=v+(n<<2)|0;i=c[p>>2]|0;if((i|0)!=-1)break;n=n+1|0}b=n+1|0;q=c[t+(b<<2)>>2]|0;l=1;m=c[t+(n<<2)>>2]|0;while(1){if((m|0)>=(q|0))break;k=c[u+(m<<2)>>2]|0;if((n|0)!=(k|0)?(c[v+(k<<2)>>2]|0)!=-1:0)if((i|0)!=-1){o=+h[s+(m<<3)>>3];if((l|0)==0?!(o>j):0)l=0;else{l=0;a=k;j=o}}else i=-1;m=m+1|0}}while((l|0)!=0);c[v+(a<<2)>>2]=-1;c[p>>2]=-1;q=c[d>>2]|0;c[q+(g<<2)>>2]=n;e=g+2|0;c[q+(g+1<<2)>>2]=a;q=(c[f>>2]|0)+1|0;c[f>>2]=q;c[r+(q<<2)>>2]=e;g=e}while(1){if((a|0)>=(w|0))break a;if((c[v+(a<<2)>>2]|0)==(a|0)){u=g+1|0;c[(c[d>>2]|0)+(g<<2)>>2]=a;g=(c[f>>2]|0)+1|0;c[f>>2]=g;c[r+(g<<2)>>2]=u;g=u}a=a+1|0}}else{r=Uw(w)|0;n=0;g=0;while(1){if((n|0)>=(w|0)){q=0;a=0;j=0.0;break}a=c[r+(n<<2)>>2]|0;d:do if((c[v+(a<<2)>>2]|0)!=-1?(p=c[t+(a<<2)>>2]|0,((c[t+(a+1<<2)>>2]|0)-p|0)==1):0){k=c[u+(p<<2)>>2]|0;c[v+(k<<2)>>2]=-1;l=c[d>>2]|0;c[l+(g<<2)>>2]=k;m=t+(k+1<<2)|0;i=c[t+(k<<2)>>2]|0;g=g+1|0;while(1){if((i|0)>=(c[m>>2]|0))break;a=u+(i<<2)|0;b=c[a>>2]|0;if((k|0)!=(b|0)?((c[t+(b+1<<2)>>2]|0)-(c[t+(b<<2)>>2]|0)|0)==1:0){c[v+(b<<2)>>2]=-1;c[l+(g<<2)>>2]=c[a>>2];g=g+1|0}i=i+1|0}i=c[e>>2]|0;a=c[f>>2]|0;b=c[i+(a<<2)>>2]|0;if((g-b|0)<5){q=a+1|0;c[f>>2]=q;c[i+(q<<2)>>2]=g;break}b=b+1|0;a=a+1|0;c[f>>2]=a;c[i+(a<<2)>>2]=b;a=b;while(1){if(!((b|0)<(g|0)&(a|0)<(g|0)))break d;q=b+3|0;q=(g|0)<(q|0)?g:q;m=(c[f>>2]|0)+1|0;c[f>>2]=m;c[i+(m<<2)>>2]=q;a=a+1|0;b=q}}while(0);n=n+1|0}while(1){if((q|0)>=(w|0)){a=0;break}m=c[r+(q<<2)>>2]|0;n=v+(m<<2)|0;b=c[n>>2]|0;if((b|0)!=-1){p=c[t+(m+1<<2)>>2]|0;k=1;l=c[t+(m<<2)>>2]|0;while(1){if((l|0)>=(p|0))break;i=c[u+(l<<2)>>2]|0;if((m|0)!=(i|0)?(c[v+(i<<2)>>2]|0)!=-1:0)if((b|0)!=-1){o=+h[s+(l<<3)>>3];if((k|0)==0?!(o>j):0)k=0;else{k=0;a=i;j=o}}else b=-1;l=l+1|0}if(!k){c[v+(a<<2)>>2]=-1;c[n>>2]=-1;n=c[d>>2]|0;c[n+(g<<2)>>2]=m;p=g+2|0;c[n+(g+1<<2)>>2]=a;n=c[e>>2]|0;g=(c[f>>2]|0)+1|0;c[f>>2]=g;c[n+(g<<2)>>2]=p;g=p}}q=q+1|0}while(1){if((a|0)>=(w|0))break;if((c[v+(a<<2)>>2]|0)==(a|0)){u=g+1|0;c[(c[d>>2]|0)+(g<<2)>>2]=a;t=c[e>>2]|0;g=(c[f>>2]|0)+1|0;c[f>>2]=g;c[t+(g<<2)>>2]=u;g=u}a=a+1|0}U1(r)}while(0);U1(v);return}function lx(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,i=0.0,j=0,k=0,m=0,n=0,o=0.0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;A=l;l=l+16|0;q=A+8|0;y=A+4|0;z=A;c[y>>2]=0;c[z>>2]=0;v=c[a+20>>2]|0;u=c[a+24>>2]|0;w=c[a>>2]|0;x=w<<2;c[d>>2]=KK(x)|0;c[e>>2]=KK(x+4|0)|0;x=KK(x)|0;g=0;while(1){if((g|0)>=(w|0))break;c[x+(g<<2)>>2]=g;g=g+1|0}Rw(a,q,y,z);c[f>>2]=0;s=c[e>>2]|0;c[s>>2]=0;t=c[a+28>>2]|0;g=0;a=0;a:while(1){k=c[q>>2]|0;m=c[z>>2]|0;do{if((a|0)>=(k|0))break a;n=a;a=a+1|0;p=m+(a<<2)|0;j=c[p>>2]|0;n=c[m+(n<<2)>>2]|0}while((j-n|0)<2);m=c[y>>2]|0;k=c[s+(c[f>>2]<<2)>>2]|0;while(1){if((n|0)>=(j|0))break;r=m+(n<<2)|0;c[x+(c[r>>2]<<2)>>2]=-1;j=g+1|0;c[(c[d>>2]|0)+(g<<2)>>2]=c[r>>2];if((j-k|0)>3){g=(c[f>>2]|0)+1|0;c[f>>2]=g;c[s+(g<<2)>>2]=j;g=j}else g=k;k=g;n=n+1|0;g=j;j=c[p>>2]|0}if((g|0)<=(k|0))continue;r=(c[f>>2]|0)+1|0;c[f>>2]=r;c[s+(r<<2)>>2]=g}b:do if(!b){a=0;i=0.0;j=0;c:while(1){do{b=j;while(1){if((b|0)>=(w|0)){a=0;break c}q=x+(b<<2)|0;k=c[q>>2]|0;if((k|0)!=-1)break;b=b+1|0}j=b+1|0;r=c[v+(j<<2)>>2]|0;n=1;p=c[v+(b<<2)>>2]|0;while(1){if((p|0)>=(r|0))break;m=c[u+(p<<2)>>2]|0;if((b|0)!=(m|0)?(c[x+(m<<2)>>2]|0)!=-1:0)if((k|0)!=-1){o=+h[t+(p<<3)>>3];if((n|0)==0?!(o>i):0)n=0;else{n=0;a=m;i=o}}else k=-1;p=p+1|0}}while((n|0)!=0);c[x+(a<<2)>>2]=-1;c[q>>2]=-1;r=c[d>>2]|0;c[r+(g<<2)>>2]=b;e=g+2|0;c[r+(g+1<<2)>>2]=a;r=(c[f>>2]|0)+1|0;c[f>>2]=r;c[s+(r<<2)>>2]=e;g=e}while(1){if((a|0)>=(w|0))break b;if((c[x+(a<<2)>>2]|0)==(a|0)){v=g+1|0;c[(c[d>>2]|0)+(g<<2)>>2]=a;g=(c[f>>2]|0)+1|0;c[f>>2]=g;c[s+(g<<2)>>2]=v;g=v}a=a+1|0}}else{s=Uw(w)|0;r=0;a=0;i=0.0;while(1){if((r|0)>=(w|0)){a=0;break}p=c[s+(r<<2)>>2]|0;b=x+(p<<2)|0;j=c[b>>2]|0;if((j|0)!=-1){q=c[v+(p+1<<2)>>2]|0;m=1;n=c[v+(p<<2)>>2]|0;while(1){if((n|0)>=(q|0))break;k=c[u+(n<<2)>>2]|0;if((p|0)!=(k|0)?(c[x+(k<<2)>>2]|0)!=-1:0)if((j|0)!=-1){o=+h[t+(n<<3)>>3];if((m|0)==0?!(o>i):0)m=0;else{m=0;a=k;i=o}}else j=-1;n=n+1|0}if(!m){c[x+(a<<2)>>2]=-1;c[b>>2]=-1;b=c[d>>2]|0;c[b+(g<<2)>>2]=p;q=g+2|0;c[b+(g+1<<2)>>2]=a;b=c[e>>2]|0;g=(c[f>>2]|0)+1|0;c[f>>2]=g;c[b+(g<<2)>>2]=q;g=q}}r=r+1|0}while(1){if((a|0)>=(w|0))break;if((c[x+(a<<2)>>2]|0)==(a|0)){v=g+1|0;c[(c[d>>2]|0)+(g<<2)>>2]=a;u=c[e>>2]|0;g=(c[f>>2]|0)+1|0;c[f>>2]=g;c[u+(g<<2)>>2]=v;g=v}a=a+1|0}U1(s)}while(0);U1(c[y>>2]|0);U1(c[z>>2]|0);U1(x);l=A;return}function mx(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;r=c[a+20>>2]|0;s=c[a+24>>2]|0;v=c[a>>2]|0;u=v<<2;c[b>>2]=KK(u)|0;c[d>>2]=KK(u+4|0)|0;u=KK(u)|0;q=KK(v<<4)|0;f=0;while(1){if((f|0)>=(v|0))break;c[u+(f<<2)>>2]=f;f=f+1|0}c[e>>2]=0;c[c[d>>2]>>2]=0;p=c[a+28>>2]|0;t=Uw(v)|0;f=0;m=0;while(1){if((m|0)>=(v|0)){o=0;break}a=c[t+(m<<2)>>2]|0;a:do if((c[u+(a<<2)>>2]|0)!=-1?(n=c[r+(a<<2)>>2]|0,((c[r+(a+1<<2)>>2]|0)-n|0)==1):0){j=c[s+(n<<2)>>2]|0;c[u+(j<<2)>>2]=-1;k=c[b>>2]|0;c[k+(f<<2)>>2]=j;l=r+(j+1<<2)|0;i=c[r+(j<<2)>>2]|0;f=f+1|0;while(1){if((i|0)>=(c[l>>2]|0))break;a=s+(i<<2)|0;g=c[a>>2]|0;if((j|0)!=(g|0)?((c[r+(g+1<<2)>>2]|0)-(c[r+(g<<2)>>2]|0)|0)==1:0){c[u+(g<<2)>>2]=-1;c[k+(f<<2)>>2]=c[a>>2];f=f+1|0}i=i+1|0}i=c[d>>2]|0;a=c[e>>2]|0;g=c[i+(a<<2)>>2]|0;if((f-g|0)<5){o=a+1|0;c[e>>2]=o;c[i+(o<<2)>>2]=f;break}g=g+1|0;a=a+1|0;c[e>>2]=a;c[i+(a<<2)>>2]=g;a=g;while(1){if(!((g|0)<(f|0)&(a|0)<(f|0)))break a;o=g+3|0;o=(f|0)<(o|0)?f:o;l=(c[e>>2]|0)+1|0;c[e>>2]=l;c[i+(l<<2)>>2]=o;a=a+1|0;g=o}}while(0);m=m+1|0}while(1){if((o|0)>=(v|0)){a=0;break}m=c[t+(o<<2)>>2]|0;n=u+(m<<2)|0;a=c[n>>2]|0;if((a|0)!=-1){l=c[r+(m+1<<2)>>2]|0;g=0;k=c[r+(m<<2)>>2]|0;while(1){if((k|0)>=(l|0))break;j=c[s+(k<<2)>>2]|0;if((m|0)!=(j|0)?(c[u+(j<<2)>>2]|0)!=-1:0){i=g<<1;if((a|0)==-1)a=-1;else{h[q+(i<<3)>>3]=+(j|0);h[q+((i|1)<<3)>>3]=+h[p+(k<<3)>>3];g=g+1|0}}k=k+1|0}if((g|0)>0){o4(q,g,16,81);g=(g|0)<3?g:3;a=0;while(1){if((a|0)>=(g|0))break;l=~~+h[q+(a<<1<<3)>>3];c[u+(l<<2)>>2]=-1;c[(c[b>>2]|0)+(f<<2)>>2]=l;a=a+1|0;f=f+1|0}c[n>>2]=-1;n=f+1|0;c[(c[b>>2]|0)+(f<<2)>>2]=m;m=c[d>>2]|0;f=(c[e>>2]|0)+1|0;c[e>>2]=f;c[m+(f<<2)>>2]=n;f=n}}o=o+1|0}while(1){if((a|0)>=(v|0))break;if((c[u+(a<<2)>>2]|0)==(a|0)){s=f+1|0;c[(c[b>>2]|0)+(f<<2)>>2]=a;r=c[d>>2]|0;f=(c[e>>2]|0)+1|0;c[e>>2]=f;c[r+(f<<2)>>2]=s;f=s}a=a+1|0}U1(t);U1(u);return}function nx(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;p=c[a+20>>2]|0;q=c[a+24>>2]|0;r=c[a>>2]|0;f=c[a+4>>2]|0;k=KK(r<<2)|0;c[d>>2]=k;a=0;while(1){if((a|0)>=(r|0))break;c[k+(a<<2)>>2]=a;a=a+1|0}c[e>>2]=f;a:do if(!b){f=0;b:while(1){if((f|0)>=(r|0))break a;b=f+1|0;g=p+(b<<2)|0;h=k+(f<<2)|0;i=k+(f<<2)|0;a=c[p+(f<<2)>>2]|0;while(1){if((a|0)>=(c[g>>2]|0)){f=b;continue b}j=q+(a<<2)|0;d=c[j>>2]|0;if(((f|0)!=(d|0)?(o=k+(d<<2)|0,(c[o>>2]|0)==(d|0)):0)?(c[h>>2]|0)==(f|0):0){c[o>>2]=f;c[i>>2]=c[j>>2];c[e>>2]=(c[e>>2]|0)+-1}a=a+1|0}}}else{b=Uw(r)|0;a=0;while(1){if((a|0)>=(r|0))break;g=c[b+(a<<2)>>2]|0;h=p+(g+1<<2)|0;f=c[p+(g<<2)>>2]|0;while(1){if((f|0)>=(c[h>>2]|0))break;i=q+(f<<2)|0;j=c[i>>2]|0;if(((g|0)!=(j|0)?(l=c[d>>2]|0,m=l+(j<<2)|0,(c[m>>2]|0)==(j|0)):0)?(n=l+(g<<2)|0,(c[n>>2]|0)==(g|0)):0){c[m>>2]=g;c[n>>2]=c[i>>2];c[e>>2]=(c[e>>2]|0)+-1}f=f+1|0}a=a+1|0}U1(b)}while(0);return}function ox(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0.0,j=0.0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;r=c[a+20>>2]|0;s=c[a+24>>2]|0;t=c[a>>2]|0;g=c[a+4>>2]|0;o=KK(t<<2)|0;c[d>>2]=o;f=0;while(1){if((f|0)>=(t|0))break;c[o+(f<<2)>>2]=f;f=f+1|0}c[e>>2]=g;q=c[a+28>>2]|0;a:do if(!b){f=0;i=0.0;k=0;while(1){if((k|0)>=(t|0))break a;l=k+1|0;m=c[r+(l<<2)>>2]|0;n=o+(k<<2)|0;g=1;b=c[r+(k<<2)>>2]|0;while(1){if((b|0)>=(m|0))break;a=c[s+(b<<2)>>2]|0;if(((k|0)!=(a|0)?(c[o+(a<<2)>>2]|0)==(a|0):0)?(c[n>>2]|0)==(k|0):0){j=+h[q+(b<<3)>>3];if((g|0)==0?!(j>i):0)g=0;else{g=0;f=a;i=j}}b=b+1|0}if(g|0){k=l;continue}c[o+(f<<2)>>2]=k;c[o+(k<<2)>>2]=f;c[e>>2]=(c[e>>2]|0)+-1;k=l}}else{p=Uw(t)|0;o=0;f=0;i=0.0;while(1){if((o|0)>=(t|0))break;k=c[p+(o<<2)>>2]|0;l=c[d>>2]|0;m=l+(k<<2)|0;if((c[m>>2]|0)==(k|0)){n=c[r+(k+1<<2)>>2]|0;b=c[r+(k<<2)>>2]|0;g=1;while(1){if((b|0)>=(n|0))break;a=c[s+(b<<2)>>2]|0;if((k|0)!=(a|0)?(c[l+(a<<2)>>2]|0)==(a|0):0){j=+h[q+(b<<3)>>3];if((g|0)==0?!(j>i):0)g=0;else{g=0;f=a;i=j}}b=b+1|0}if(!g){c[l+(f<<2)>>2]=k;c[m>>2]=f;c[e>>2]=(c[e>>2]|0)+-1}}o=o+1|0}U1(p)}while(0);return}function px(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0.0,j=0.0,k=0,l=0,m=0,n=0,o=0.0,p=0,q=0,r=0,s=0,t=0,u=0;s=c[a+20>>2]|0;t=c[a+24>>2]|0;u=c[a>>2]|0;g=c[a+4>>2]|0;p=KK(u<<2)|0;c[d>>2]=p;f=0;while(1){if((f|0)>=(u|0))break;c[p+(f<<2)>>2]=f;f=f+1|0}c[e>>2]=g;r=c[a+28>>2]|0;a:do if(!b){f=0;i=0.0;k=0;while(1){if((k|0)>=(u|0))break a;b=c[s+(k<<2)>>2]|0;l=k+1|0;m=c[s+(l<<2)>>2]|0;n=p+(k<<2)|0;o=+(m-b|0);g=1;while(1){if((b|0)>=(m|0))break;a=c[t+(b<<2)>>2]|0;if(((k|0)!=(a|0)?(c[p+(a<<2)>>2]|0)==(a|0):0)?(c[n>>2]|0)==(k|0):0){j=+h[r+(b<<3)>>3]/(+((c[s+(a+1<<2)>>2]|0)-(c[s+(a<<2)>>2]|0)|0)*o);if((g|0)==0?!(j>i):0)g=0;else{g=0;f=a;i=j}}b=b+1|0}if(g|0){k=l;continue}c[p+(f<<2)>>2]=k;c[p+(k<<2)>>2]=f;c[e>>2]=(c[e>>2]|0)+-1;k=l}}else{q=Uw(u)|0;p=0;f=0;i=0.0;while(1){if((p|0)>=(u|0))break;k=c[q+(p<<2)>>2]|0;l=c[d>>2]|0;m=l+(k<<2)|0;if((c[m>>2]|0)==(k|0)){b=c[s+(k<<2)>>2]|0;n=c[s+(k+1<<2)>>2]|0;o=+(n-b|0);g=1;while(1){if((b|0)>=(n|0))break;a=c[t+(b<<2)>>2]|0;if((k|0)!=(a|0)?(c[l+(a<<2)>>2]|0)==(a|0):0){j=+h[r+(b<<3)>>3]/(+((c[s+(a+1<<2)>>2]|0)-(c[s+(a<<2)>>2]|0)|0)*o);if((g|0)==0?!(j>i):0)g=0;else{g=0;f=a;i=j}}b=b+1|0}if(!g){c[l+(f<<2)>>2]=k;c[m>>2]=f;c[e>>2]=(c[e>>2]|0)+-1}}p=p+1|0}U1(q)}while(0);return}function qx(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;m=c[a+20>>2]|0;n=c[a+24>>2]|0;l=c[a>>2]|0;j=KK(l<<2)|0;c[d>>2]=j;a=0;while(1){if((a|0)>=(l|0))break;c[j+(a<<2)>>2]=-100;a=a+1|0}c[e>>2]=0;c[f>>2]=0;a:do if(!b){b=0;b:while(1){if((b|0)>=(l|0))break a;if((c[j+(b<<2)>>2]|0)!=-100){b=b+1|0;continue}g=c[e>>2]|0;c[e>>2]=g+1;c[j+(b<<2)>>2]=g;g=b+1|0;h=m+(g<<2)|0;a=c[m+(b<<2)>>2]|0;while(1){if((a|0)>=(c[h>>2]|0)){b=g;continue b}i=c[n+(a<<2)>>2]|0;if((b|0)!=(i|0)){c[j+(i<<2)>>2]=-1;c[f>>2]=(c[f>>2]|0)+1}a=a+1|0}}}else{i=Uw(l)|0;h=0;while(1){if((h|0)>=(l|0))break;j=c[i+(h<<2)>>2]|0;k=c[d>>2]|0;a=k+(j<<2)|0;c:do if((c[a>>2]|0)==-100){b=c[e>>2]|0;c[e>>2]=b+1;c[a>>2]=b;b=m+(j+1<<2)|0;a=c[m+(j<<2)>>2]|0;while(1){if((a|0)>=(c[b>>2]|0))break c;g=c[n+(a<<2)>>2]|0;if((j|0)!=(g|0)){c[k+(g<<2)>>2]=-1;c[f>>2]=(c[f>>2]|0)+1}a=a+1|0}}while(0);h=h+1|0}U1(i)}while(0);c[f>>2]=(c[f>>2]|0)+(c[e>>2]|0);return}function rx(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;q=l;l=l+16|0;n=q+4|0;o=q;p=c[a+20>>2]|0;m=c[a+24>>2]|0;h=c[a>>2]|0;a=KK(h<<2)|0;c[d>>2]=a;g=0;while(1){c[n>>2]=g;if((g|0)>=(h|0))break;c[a+(g<<2)>>2]=-100;g=(c[n>>2]|0)+1|0}c[e>>2]=0;c[f>>2]=0;k=xx(h,(h<<1)+-2|0)|0;a:do if(!b){a=0;while(1){c[n>>2]=a;if((a|0)>=(h|0))break a;j=a+1|0;zx(k,a,(c[p+(j<<2)>>2]|0)-(c[p+(a<<2)>>2]|0)|0)|0;a=j}}else{g=Uw(h)|0;a=0;while(1){if((a|0)>=(h|0))break;j=c[g+(a<<2)>>2]|0;c[n>>2]=j;zx(k,j,(c[p+(j+1<<2)>>2]|0)-(c[p+(j<<2)>>2]|0)|0)|0;a=a+1|0}U1(g)}while(0);b:while(1){j=(Ax(k,n,o)|0)==0;a=c[e>>2]|0;if(j)break;c[e>>2]=a+1;c[(c[d>>2]|0)+(c[n>>2]<<2)>>2]=a;a=c[n>>2]|0;j=c[p+(a<<2)>>2]|0;while(1){if((j|0)>=(c[p+(a+1<<2)>>2]|0))continue b;i=c[m+(j<<2)>>2]|0;if((a|0)!=(i|0)){c:do if((c[(c[d>>2]|0)+(i<<2)>>2]|0)==-100){Cx(k,i)|0;c[(c[d>>2]|0)+(i<<2)>>2]=-1;g=p+(i+1<<2)|0;a=c[p+(i<<2)>>2]|0;while(1){if((a|0)>=(c[g>>2]|0))break c;b=m+(a<<2)|0;h=c[b>>2]|0;if((i|0)!=(h|0)?(c[(c[d>>2]|0)+(h<<2)>>2]|0)==-100:0){h=Bx(k,h)|0;c[o>>2]=h;zx(k,c[b>>2]|0,h+1|0)|0}a=a+1|0}}while(0);c[f>>2]=(c[f>>2]|0)+1;a=c[n>>2]|0}j=j+1|0}}c[f>>2]=(c[f>>2]|0)+a;yx(k);l=q;return}function sx(a,b){a=a|0;b=b|0;var c=0.0,d=0.0;d=+h[a+8>>3];c=+h[b+8>>3];return (d>c?-1:d>2]|0)==1:0)f=a;else f=Qw(a)|0;do if(!b)b=0;else{if(ww(b,0)|0?(c[b+16>>2]|0)==1:0)break;b=Aw(b,0)|0}while(0);d=ux(f,b,d)|0;b=vx(d,e)|0;if((f|0)!=(a|0))c[d+36>>2]=1;return b|0}function ux(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;if(!a)a=0;else{e=KK(44)|0;c[e>>2]=0;c[e+4>>2]=c[a+4>>2];c[e+8>>2]=a;c[e+12>>2]=b;c[e+16>>2]=0;c[e+20>>2]=0;c[e+24>>2]=d;c[e+28>>2]=0;c[e+32>>2]=0;c[e+36>>2]=0;a=e}return a|0}function vx(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;k=l;l=l+32|0;e=k+20|0;f=k+16|0;g=k+12|0;h=k+8|0;i=k+4|0;j=k;c[f>>2]=0;if((c[a>>2]|0)<((c[b+16>>2]|0)+-1|0)?(ix(c[a+8>>2]|0,i,c[a+12>>2]|0,j,0,f,g,h,b,e),d=c[i>>2]|0,d|0):0){i=c[j>>2]|0;j=ux(d,i,c[f>>2]|0)|0;c[a+28>>2]=j;c[j+40>>2]=c[e>>2];c[j>>2]=(c[a>>2]|0)+1;c[j+4>>2]=c[d>>2];c[j+8>>2]=d;c[j+12>>2]=i;c[j+16>>2]=c[g>>2];c[a+20>>2]=c[h>>2];c[j+32>>2]=a;vx(j,b)|0}l=k;return a|0}function wx(a){a=a|0;var b=0;while(1){b=c[a+28>>2]|0;if(!b)break;else a=b}return a|0}function xx(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=KK(28)|0;c[f>>2]=0;c[f+4>>2]=a;c[f+8>>2]=b;c[f+12>>2]=-1;e=f+16|0;c[e>>2]=KK((b<<2)+4|0)|0;d=0;while(1){if((d|0)>(b|0))break;c[(c[e>>2]|0)+(d<<2)>>2]=0;d=d+1|0}b=(a<<2)+4|0;e=f+20|0;c[e>>2]=KK(b)|0;d=0;while(1){if((d|0)>(a|0))break;c[(c[e>>2]|0)+(d<<2)>>2]=0;d=d+1|0}b=KK(b)|0;c[f+24>>2]=b;d=0;while(1){if((d|0)>(a|0))break;c[b+(d<<2)>>2]=-999;d=d+1|0}return f|0}function yx(a){a=a|0;var b=0,d=0,e=0,f=0;if(a|0){e=a+16|0;b=c[e>>2]|0;if(b|0){f=a+8|0;d=0;while(1){if((d|0)>(c[f>>2]|0))break;Cy(c[b+(d<<2)>>2]|0,105);d=d+1|0;b=c[e>>2]|0}U1(b)}b=c[a+20>>2]|0;if(b|0)U1(b);U1(c[a+24>>2]|0);U1(a)}return}function zx(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;g=a+8|0;j=a+20|0;i=a+24|0;k=a+16|0;if(!a)qa(138953,95743,69,95759);while(1){if((c[g>>2]|0)<(d|0)){h=4;break}e=(c[j>>2]|0)+(b<<2)|0;f=c[e>>2]|0;if(!f)break;l=c[(c[i>>2]|0)+(b<<2)>>2]|0;c[e>>2]=0;c[a>>2]=(c[a>>2]|0)+-1;Fy(f,105,(c[k>>2]|0)+(l<<2)|0)}if((h|0)==4)qa(95778,95743,70,95759);c[a>>2]=(c[a>>2]|0)+1;e=a+12|0;if((c[e>>2]|0)<(d|0))c[e>>2]=d;c[(c[i>>2]|0)+(b<<2)>>2]=d;e=KK(4)|0;c[e>>2]=b;f=c[(c[k>>2]|0)+(d<<2)>>2]|0;if(!f)e=By(e)|0;else e=Dy(f,e)|0;c[(c[j>>2]|0)+(b<<2)>>2]=e;c[(c[k>>2]|0)+(d<<2)>>2]=e;return a|0}function Ax(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;if((a|0)!=0?(c[a>>2]|0)>=1:0){f=a+12|0;e=c[f>>2]|0;c[d>>2]=e;c[a>>2]=(c[a>>2]|0)+-1;d=a+16|0;g=c[(c[d>>2]|0)+(e<<2)>>2]|0;c[b>>2]=c[(Ey(g)|0)>>2];Fy(g,105,(c[d>>2]|0)+(e<<2)|0);d=c[d>>2]|0;if(!(c[d+(e<<2)>>2]|0)){while(1){if((e|0)<=-1)break;if(c[d+(e<<2)>>2]|0)break;e=e+-1|0}c[f>>2]=e}e=c[b>>2]|0;c[(c[a+20>>2]|0)+(e<<2)>>2]=0;c[(c[a+24>>2]|0)+(e<<2)>>2]=-999;e=1}else e=0;return e|0}function Bx(a,b){a=a|0;b=b|0;return c[(c[a+24>>2]|0)+(b<<2)>>2]|0}function Cx(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;if((a|0)!=0?(e=c[a>>2]|0,(e|0)>=1):0){h=a+24|0;d=c[(c[h>>2]|0)+(b<<2)>>2]|0;c[a>>2]=e+-1;f=a+20|0;e=a+16|0;Fy(c[(c[f>>2]|0)+(b<<2)>>2]|0,105,(c[e>>2]|0)+(d<<2)|0);a=a+12|0;if((d|0)==(c[a>>2]|0)?(g=c[e>>2]|0,(c[g+(d<<2)>>2]|0)==0):0){while(1){if((d|0)<=-1)break;if(c[g+(d<<2)>>2]|0)break;d=d+-1|0}c[a>>2]=d}c[(c[f>>2]|0)+(b<<2)>>2]=0;c[(c[h>>2]|0)+(b<<2)>>2]=-999;d=1}else d=0;return d|0}function Dx(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0.0,i=0,j=0,k=0.0,l=0.0,m=0,n=0.0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;if(!(ww(a,0)|0))qa(95795,95831,260,95846);w=xw(a)|0;x=c[w+20>>2]|0;y=c[w+24>>2]|0;e=w+16|0;a=w+28|0;if((c[e>>2]|0)==1)v=c[a>>2]|0;else{U1(c[a>>2]|0);c[e>>2]=1;v=KK(c[w+8>>2]<<3)|0;c[a>>2]=v}r=KK(c[w>>2]<<2)|0;a=0;while(1){e=c[w>>2]|0;if((a|0)>=(e|0)){q=0;a=e;break}c[r+(a<<2)>>2]=-1;a=a+1|0}a:while(1){if((q|0)>=(a|0)){g=0.0;k=0.0;f=0;u=0;t=a;break}p=q+1|0;i=x+(p<<2)|0;m=x+(q<<2)|0;j=(c[i>>2]|0)-(c[m>>2]|0)|0;c[r+(q<<2)>>2]=q;e=c[m>>2]|0;while(1){o=c[i>>2]|0;if((e|0)>=(o|0))break;a=c[y+(e<<2)>>2]|0;if((q|0)!=(a|0))c[r+(a<<2)>>2]=q;e=e+1|0}n=+(j|0);e=c[m>>2]|0;while(1){if((e|0)>=(o|0))break;a=c[y+(e<<2)>>2]|0;if((q|0)!=(a|0)){i=c[x+(a+1<<2)>>2]|0;a=c[x+(a<<2)>>2]|0;l=+(i-a|0)+n;while(1){if((a|0)>=(i|0))break;l=(c[r+(c[y+(a<<2)>>2]<<2)>>2]|0)==(q|0)?l+-1.0:l;a=a+1|0}h[v+(e<<3)>>3]=l;if(!(l>0.0)){s=23;break a}}e=e+1|0}q=p;a=c[w>>2]|0}if((s|0)==23)qa(95868,95831,290,95846);while(1){if((u|0)>=(t|0))break;i=u+1|0;j=x+(i<<2)|0;e=c[x+(u<<2)>>2]|0;while(1){if((e|0)>=(c[j>>2]|0))break;a=c[y+(e<<2)>>2]|0;if((u|0)==(a|0))a=f;else{k=+_w(d,b,u,a)+k;g=+h[v+(e<<3)>>3]+g;a=f+1|0}f=a;e=e+1|0}u=i;t=c[w>>2]|0}n=+(f|0);g=k/(g/n*n);a=0;b:while(1){if((a|0)>=(t|0))break;i=a+1|0;j=c[x+(i<<2)>>2]|0;e=c[x+(a<<2)>>2]|0;while(1){if((e|0)>=(j|0)){a=i;continue b}f=v+(e<<3)|0;if((a|0)!=(c[y+(e<<2)>>2]|0))h[f>>3]=+h[f>>3]*g;e=e+1|0}}return w|0}function Ex(a,b,d,e,f){a=a|0;b=b|0;d=+d;e=e|0;f=f|0;var g=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0.0,p=0,q=0.0,r=0.0,s=0.0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0.0,S=0.0;L=c[a>>2]|0;M=c[a+20>>2]|0;N=c[a+24>>2]|0;if(!(ww(a,0)|0))qa(95795,95831,333,95876);O=Dx(a,b,e)|0;P=KK(56)|0;Q=P+32|0;h[Q>>3]=1.0;c[P+20>>2]=0;c[P+24>>2]=0;h[P+40>>3]=.01;c[P+48>>2]=~~+C(+(+(c[a>>2]|0)));g=L<<3;I=KK(g)|0;c[P+12>>2]=I;a=0;while(1){if((a|0)>=(L|0))break;h[I+(a<<3)>>3]=d;a=a+1|0}J=KK(L<<2)|0;H=KK(g)|0;j=0;while(1){if((j|0)>=(L|0)){n=0;break}k=H+(j<<3)|0;h[k>>3]=0.0;l=j+1|0;m=M+(l<<2)|0;i=c[M+(j<<2)>>2]|0;a=0;d=0.0;while(1){if((i|0)>=(c[m>>2]|0))break;g=c[N+(i<<2)>>2]|0;if((j|0)!=(g|0)){d=+_w(e,b,j,g);d=+h[k>>3]+d;h[k>>3]=d;a=a+1|0}i=i+1|0}if((a|0)<=0){p=14;break}h[k>>3]=d/+(a|0);j=l}if((p|0)==14)qa(95908,95831,358,95876);while(1){if((n|0)>=(L|0)){a=0;l=0;break}c[J+(n<<2)>>2]=-1;n=n+1|0}a:while(1){if((l|0)>=(L|0))break;c[J+(l<<2)>>2]=l;j=M+(l<<2)|0;m=l+1|0;n=M+(m<<2)|0;i=c[j>>2]|0;while(1){g=c[n>>2]|0;if((i|0)>=(g|0))break;g=J+(c[N+(i<<2)>>2]<<2)|0;if((c[g>>2]|0)!=(l|0)){c[g>>2]=l;a=a+1|0}i=i+1|0}k=c[j>>2]|0;while(1){if((k|0)>=(g|0)){l=m;continue a}i=c[N+(k<<2)>>2]|0;j=M+(i+1<<2)|0;i=c[M+(i<<2)>>2]|0;while(1){if((i|0)>=(c[j>>2]|0))break;g=J+(c[N+(i<<2)>>2]<<2)|0;if((c[g>>2]|0)!=(l|0)){c[g>>2]=l;a=a+1|0}i=i+1|0}k=k+1|0;g=c[n>>2]|0}}g=a+L|0;F=P+4|0;c[F>>2]=rw(L,L,g,1,1)|0;g=rw(L,L,g,1,1)|0;G=P+8|0;c[G>>2]=g;a=c[F>>2]|0;do if(!((g|0)==0|(a|0)==0)){B=c[a+20>>2]|0;A=c[a+24>>2]|0;y=c[a+28>>2]|0;E=c[g+28>>2]|0;z=c[g+20>>2]|0;t=c[g+24>>2]|0;c[z>>2]=0;c[B>>2]=0;d=0.0;o=0.0;p=0;i=0;b:while(1){if((p|0)>=(L|0)){p=58;break}u=p+L|0;c[J+(p<<2)>>2]=u;k=M+(p<<2)|0;v=p+1|0;w=M+(v<<2)|0;x=H+(p<<3)|0;q=0.0;r=0.0;j=c[k>>2]|0;while(1){a=c[w>>2]|0;if((j|0)>=(a|0))break;g=c[N+(j<<2)>>2]|0;a=J+(g<<2)|0;if((c[a>>2]|0)!=(u|0)){c[a>>2]=u;c[A+(i<<2)>>2]=g;switch(f|0){case 0:{s=1.0;break}case 1:{s=(+h[H+(g<<3)>>3]+ +h[x>>3])*.5;break}case 2:{s=+D(+(+Zw(e,b,p,g)),.4);break}default:{p=42;break b}}S=-1.0/(s*s);h[y+(i<<3)>>3]=S;c[t+(i<<2)>>2]=g;R=S*s;n=E+(i<<3)|0;h[n>>3]=R;o=+_w(e,b,p,g)*R+o;R=+h[n>>3];i=i+1|0;q=S+q;r=R+r;d=R*s+d}j=j+1|0}n=c[k>>2]|0;while(1){if((n|0)>=(a|0))break;k=c[N+(n<<2)>>2]|0;l=M+(k+1<<2)|0;m=H+(k<<3)|0;j=c[M+(k<<2)>>2]|0;while(1){if((j|0)>=(c[l>>2]|0))break;g=N+(j<<2)|0;a=J+(c[g>>2]<<2)|0;if((c[a>>2]|0)!=(u|0)){c[a>>2]=u;switch(f|0){case 0:{s=2.0;break}case 1:{s=(+h[m>>3]*2.0+ +h[x>>3]+ +h[H+(c[g>>2]<<3)>>3])*.5;break}case 2:{s=+D(+(+Zw(e,b,p,c[g>>2]|0)),.4);break}default:{p=53;break b}}c[A+(i<<2)>>2]=c[g>>2];R=-1.0/(s*s);h[y+(i<<3)>>3]=R;c[t+(i<<2)>>2]=c[g>>2];S=R*s;a=E+(i<<3)|0;h[a>>3]=S;o=+_w(e,b,c[g>>2]|0,k)*S+o;S=+h[a>>3];i=i+1|0;q=R+q;r=S+r;d=S*s+d}j=j+1|0}n=n+1|0;a=c[w>>2]|0}c[A+(i<<2)>>2]=p;x=I+(p<<3)|0;S=-(q*+h[x>>3]);h[x>>3]=S;h[y+(i<<3)>>3]=S-q;c[t+(i<<2)>>2]=p;h[E+(i<<3)>>3]=-r;i=i+1|0;c[B+(v<<2)>>2]=i;c[z+(v<<2)>>2]=i;p=v}if((p|0)==42){U4(95915,29,1,c[15712]|0)|0;qa(138394,95831,418,95876)}else if((p|0)==53){U4(95915,29,1,c[15712]|0)|0;qa(138394,95831,460,95876)}else if((p|0)==58){d=o/d;a=0;while(1){if((a|0)>=(i|0))break;N=E+(a<<3)|0;h[N>>3]=+h[N>>3]*d;a=a+1|0}h[Q>>3]=d;c[(c[F>>2]|0)+8>>2]=i;c[(c[G>>2]|0)+8>>2]=i;U1(J);U1(H);qw(O);K=P;break}}else{Fx(P);K=0}while(0);return K|0}function Fx(a){a=a|0;var b=0;if(a|0){b=c[a+4>>2]|0;if(b|0)qw(b);b=c[a+8>>2]|0;if(b|0)qw(b);b=c[a+12>>2]|0;if(b|0)U1(b);b=c[a+20>>2]|0;if(b|0)tb[c[a+16>>2]&127](b);U1(a)}return}function Gx(a,b,d,e,f,g){a=a|0;b=b|0;d=+d;e=e|0;f=f|0;g=g|0;var i=0,j=0.0,k=0,l=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0.0,N=0;K=c[a>>2]|0;if(ww(a,0)|0?(c[a+16>>2]|0)==1:0){k=O(K,b)|0;j=0.0;i=0;while(1){if((i|0)>=(k|0))break;q=+h[e+(i<<3)>>3];j=q*q+j;i=i+1|0}a:do if(j==0.0){i=0;while(1){if((i|0)>=(k|0))break a;h[e+(i<<3)>>3]=+Sw()*72.0;i=i+1|0}}while(0);F=c[a+20>>2]|0;G=c[a+24>>2]|0;H=c[a+28>>2]|0;i=KK(56)|0;J=i+32|0;h[J>>3]=1.0;c[i+20>>2]=0;c[i+24>>2]=0;c[i>>2]=a;h[i+40>>3]=.01;c[i+48>>2]=~~+C(+(+(c[a>>2]|0)));I=KK(K<<3)|0;c[i+12>>2]=I;k=0;while(1){if((k|0)>=(K|0))break;h[I+(k<<3)>>3]=d;k=k+1|0}a=(c[a+8>>2]|0)+K|0;D=i+4|0;c[D>>2]=rw(K,K,a,1,1)|0;a=rw(K,K,a,1,1)|0;E=i+8|0;c[E>>2]=a;k=c[D>>2]|0;if(!((a|0)==0|(k|0)==0)){x=c[k+20>>2]|0;y=c[k+24>>2]|0;z=c[a+20>>2]|0;A=c[a+24>>2]|0;v=c[k+28>>2]|0;B=c[a+28>>2]|0;c[z>>2]=0;c[x>>2]=0;p=0.0;q=0.0;w=0;s=0;b:while(1){if((s|0)>=(K|0))break;t=s+1|0;u=F+(t<<2)|0;l=0.0;m=0.0;r=c[F+(s<<2)>>2]|0;o=p;d=q;a=w;while(1){if((r|0)>=(c[u>>2]|0))break;k=c[G+(r<<2)>>2]|0;if((k|0)==(s|0)){j=o;k=a}else{c[y+(a<<2)>>2]=k;n=+h[H+(r<<3)>>3];switch(f|0){case 2:{j=n*n;j=j==0.0?-1.0e5:-1.0/j;break}case 1:{j=n*n==0.0?-1.0e5:-1.0/n;break}case 0:{j=-1.0;break}default:{L=23;break b}}h[v+(a<<3)>>3]=j;c[A+(a<<2)>>2]=k;M=j*n;N=B+(a<<3)|0;h[N>>3]=M;d=+_w(e,b,s,k)*M+d;M=+h[N>>3];l=j+l;m=M+m;j=M*n+o;k=a+1|0}r=r+1|0;o=j;a=k}c[y+(a<<2)>>2]=s;w=I+(s<<3)|0;p=-(l*+h[w>>3]);h[w>>3]=p;h[v+(a<<3)>>3]=p-l;c[A+(a<<2)>>2]=s;h[B+(a<<3)>>3]=-m;w=a+1|0;c[x+(t<<2)>>2]=w;c[z+(t<<2)>>2]=w;p=o;q=d;s=t}if((L|0)==23)qa(138394,95831,591,96012);j=(g|0)==0?1.0:q/p;if(j==0.0)i=0;else{k=0;while(1){if((k|0)>=(w|0))break;N=B+(k<<3)|0;h[N>>3]=+h[N>>3]*j;k=k+1|0}h[J>>3]=j;c[(c[D>>2]|0)+8>>2]=w;c[(c[E>>2]|0)+8>>2]=w}}else{Fx(i);i=0}return i|0}qa(95945,95831,525,96012);return 0}function Hx(a){a=a|0;Fx(a);return}function Ix(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;return +(+Jx(a,b,c,d,e))}function Jx(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=+f;var g=0,i=0,j=0.0,k=0,m=0,n=0,o=0,p=0.0,q=0,r=0.0,s=0.0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0.0,B=0.0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,P=0,Q=0,R=0,S=0,T=0,U=0;T=l;l=l+16|0;Q=T+12|0;S=T+8|0;n=T+4|0;k=T;m=c[a+4>>2]|0;i=c[a+8>>2]|0;c[Q>>2]=0;c[S>>2]=0;c[n>>2]=0;K=c[a+12>>2]|0;c[k>>2]=0;L=xw(i)|0;M=c[m>>2]|0;N=O(M,b)|0;g=N<<3;R=KK(g)|0;if((R|0)!=0?(P=O(b<<3,M)|0,W6(R|0,d|0,P|0)|0,J=KK(g)|0,c[S>>2]=J,(J|0)!=0):0){I=c[i+20>>2]|0;J=c[i+24>>2]|0;E=c[i+28>>2]|0;F=c[L+28>>2]|0;G=c[m+28>>2]|0;H=a+24|0;switch(c[H>>2]|0){case 1:{Kx(c[a+20>>2]|0,M,b,d,k,n);g=c[k>>2]|0;if(!g){A=0.0;B=0.0;g=0}else{m=yw(m,g)|0;A=0.0;B=0.0}break}case 2:{g=c[a+20>>2]|0;A=+h[g+8>>3];B=+h[g>>3];g=0;break}default:{A=0.0;B=0.0;g=0}}y=(K|0)==0;z=a+40|0;x=a+48|0;i=c[n>>2]|0;j=1.0;k=0;a:while(1){w=k+1|0;if(!((k|0)<(e|0)&j>f))break;b:do if((c[H>>2]|0)==4){n=c[S>>2]|0;k=0;while(1){if((k|0)>=(M|0))break b;o=O(k,b)|0;a=0;while(1){if((a|0)>=(b|0))break;h[n+(a+o<<3)>>3]=0.0;a=a+1|0}k=k+1|0}}else{q=0;while(1){if((q|0)>=(M|0))break;u=q+1|0;v=I+(u<<2)|0;p=0.0;t=c[I+(q<<2)>>2]|0;k=-1;while(1){if((t|0)>=(c[v>>2]|0))break;n=J+(t<<2)|0;a=c[n>>2]|0;if((q|0)==(a|0))k=t;else{s=+_w(d,b,q,a);o=E+(t<<3)|0;r=+h[o>>3];if(r==0.0)r=0.0;else{if(s==0.0){r=r/+h[G+(t<<3)>>3]*.0001;a=0;while(1){if((a|0)>=(b|0))break;s=r*(+Sw()+.0001);U=d+((O(c[n>>2]|0,b)|0)+a<<3)|0;h[U>>3]=s+ +h[U>>3];a=a+1|0}s=+_w(d,b,q,c[n>>2]|0);r=+h[o>>3]}r=r/s}h[F+(t<<3)>>3]=r;p=r+p}t=t+1|0}if((k|0)<=-1){D=25;break a}h[F+(k<<3)>>3]=-p;q=u}Gw(L,0,d,0,S,0,b)}while(0);c:do if(!y){n=c[S>>2]|0;k=0;while(1){if((k|0)>=(M|0))break c;o=K+(k<<3)|0;q=O(k,b)|0;a=0;while(1){if((a|0)>=(b|0))break;v=a+q|0;U=n+(v<<3)|0;h[U>>3]=+h[U>>3]+ +h[R+(v<<3)>>3]*+h[o>>3];a=a+1|0}k=k+1|0}}while(0);d:do switch(c[H>>2]|0){case 1:{k=c[S>>2]|0;a=0;while(1){if((a|0)>=(M|0)){D=50;break d}o=O(a,b)|0;n=0;while(1){if((n|0)>=(b|0))break;D=n+o|0;U=k+(D<<3)|0;h[U>>3]=+h[U>>3]+ +h[i+(D<<3)>>3];n=n+1|0}a=a+1|0}}case 2:{Lx(M,b,d,c[S>>2]|0,B,A);k=c[S>>2]|0;p=+h[z>>3];a=c[x>>2]|0;if((c[H>>2]|0)==2)Mx(m,B,b,d,k,p,a,Q);else D=51;break}default:{k=c[S>>2]|0;D=50}}while(0);if((D|0)==50){p=+h[z>>3];a=c[x>>2]|0;D=51}if((D|0)==51){D=0;+fy(m,b,d,k,p,a,0,Q)}if(c[Q>>2]|0)break;j=+Nx(M,b,d,c[S>>2]|0);j=j/+C(+(+Ww(N,d,d)));W6(d|0,c[S>>2]|0,P|0)|0;k=w}if((D|0)==25)qa(96049,95831,895,96060);qw(L);if(g){qw(g);qw(m)}}else{qw(L);j=1.0;i=0}U1(R);g=c[S>>2]|0;if(g|0)U1(g);if(i|0)U1(i);l=T;return +j}function Kx(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var i=0,j=0,k=0.0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0.0,t=0,u=0,v=0,w=0.0,x=0,y=0,z=0,A=0,B=0.0;p=c[a+8>>2]|0;A=c[a+12>>2]|0;x=c[a+16>>2]|0;z=c[a+32>>2]|0;y=c[z+20>>2]|0;z=c[z+24>>2]|0;l=a+20|0;r=c[l>>2]|0;m=a+24|0;q=c[m>>2]|0;n=a+28|0;o=c[n>>2]|0;w=+h[a>>3];a:do if((p|2|0)==3){if(!r){if((q|0)!=0|(o|0)!=0)qa(96094,95831,692,96111);else{i=0;j=0}while(1){if((i|0)>=(A|0))break;v=c[x+(i<<2)>>2]|0;s=+((c[y+(v+1<<2)>>2]|0)-(c[y+(v<<2)>>2]|0)|0)+1.0;i=i+1|0;j=j+~~(s*s)|0}q=j<<2;r=KK(q)|0;c[l>>2]=r;q=KK(q)|0;c[m>>2]=q;o=KK(j<<3)|0;c[n>>2]=o}u=0;a=0;while(1){if((u|0)>=(A|0))break;p=c[x+(u<<2)>>2]|0;t=y+(p<<2)|0;j=c[t>>2]|0;i=c[z+(j<<2)>>2]|0;j=c[z+(j+1<<2)>>2]|0;b:do if((i|0)!=(j|0)){B=+Zw(e,d,i,j);B=B*B;n=y+(p+1<<2)|0;s=+((c[n>>2]|0)-(c[t>>2]|0)|0);c[r+(a<<2)>>2]=p;c[q+(a<<2)>>2]=p;h[o+(a<<3)>>3]=w/B;k=s*s*B;s=-(w/(B*s));j=c[t>>2]|0;while(1){a=a+1|0;i=c[n>>2]|0;if((j|0)>=(i|0))break;c[r+(a<<2)>>2]=p;c[q+(a<<2)>>2]=c[z+(j<<2)>>2];h[o+(a<<3)>>3]=s;j=j+1|0}k=w/k;m=c[t>>2]|0;while(1){if((m|0)>=(i|0))break b;l=c[z+(m<<2)>>2]|0;c[r+(a<<2)>>2]=l;c[q+(a<<2)>>2]=p;h[o+(a<<3)>>3]=s;j=c[t>>2]|0;while(1){a=a+1|0;i=c[n>>2]|0;if((j|0)>=(i|0))break;v=c[z+(j<<2)>>2]|0;c[r+(a<<2)>>2]=l;c[q+(a<<2)>>2]=v;h[o+(a<<3)>>3]=k;j=j+1|0}m=m+1|0}}while(0);u=u+1|0}i=Dw(a,b,b,r,q,o,1,8)|0;a=0}else{switch(p|0){case 2:case 4:break;default:{i=0;a=0;break a}}do if(!r)if((q|0)!=0|(o|0)!=0)qa(96094,95831,734,96111);else{u=A<<2;v=KK(u)|0;c[l>>2]=v;u=KK(u)|0;c[m>>2]=u;t=KK(A<<3)|0;c[n>>2]=t;break}else{t=o;u=q;v=r}while(0);a=KK(O(b<<3,d)|0)|0;j=O(d,b)|0;i=0;while(1){if((i|0)>=(j|0)){o=0;break}h[a+(i<<3)>>3]=0.0;i=i+1|0}while(1){if((o|0)>=(A|0))break;p=c[x+(o<<2)>>2]|0;l=y+(p<<2)|0;m=c[l>>2]|0;k=+Zw(e,d,c[z+(m<<2)>>2]|0,c[z+(m+1<<2)>>2]|0);c[v+(o<<2)>>2]=p;c[u+(o<<2)>>2]=p;k=w/k;h[t+(o<<3)>>3]=k;l=c[l>>2]|0;m=c[y+(p+1<<2)>>2]|0;p=O(p,d)|0;j=l;while(1){if((j|0)>=(m|0))break;n=O(c[z+(j<<2)>>2]|0,d)|0;i=0;while(1){if((i|0)>=(d|0))break;r=a+(i+p<<3)|0;h[r>>3]=+h[r>>3]+ +h[e+(i+n<<3)>>3];i=i+1|0}j=j+1|0}k=k*(1.0/+(m-l|0));i=0;while(1){if((i|0)>=(d|0))break;r=a+(i+p<<3)|0;h[r>>3]=k*+h[r>>3];i=i+1|0}o=o+1|0}i=Dw(o,b,b,v,u,t,1,8)|0}while(0);c[f>>2]=i;c[g>>2]=a;return}function Lx(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;var g=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0.0,p=0;f=f*e;g=0;a:while(1){if((g|0)>=(a|0))break;l=g+1|0;m=O(g,b)|0;i=l;while(1){if((i|0)==(a|0)){g=l;continue a}k=O(i,b)|0;e=1.0/+Zw(c,b,g,i);j=0;while(1){if((j|0)>=(b|0))break;p=j+m|0;n=j+k|0;o=f*((+h[c+(p<<3)>>3]-+h[c+(n<<3)>>3])*e);p=d+(p<<3)|0;h[p>>3]=o+ +h[p>>3];n=d+(n<<3)|0;h[n>>3]=+h[n>>3]-o;j=j+1|0}i=i+1|0}}return}function Mx(a,b,d,e,f,g,h,i){a=a|0;b=+b;d=d|0;e=e|0;f=f|0;g=+g;h=h|0;i=i|0;var j=0,k=0;k=Wx(a,b)|0;j=$x(a,b)|0;+cy(k,j,c[a>>2]|0,d,e,f,g,h,i);return}function Nx(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0.0,i=0.0,j=0,k=0.0,l=0;f=0;i=0.0;while(1){if((f|0)>=(a|0))break;j=O(f,b)|0;e=0;g=0.0;while(1){if((e|0)>=(b|0))break;l=e+j|0;k=+h[d+(l<<3)>>3]-+h[c+(l<<3)>>3];e=e+1|0;g=k*k+g}f=f+1|0;i=+C(+g)+i}return +i}function Ox(a,b,d,e,f){a=a|0;b=b|0;d=+d;e=e|0;f=f|0;var g=0,i=0,j=0,k=0.0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0.0,t=0.0,u=0.0,v=0.0,w=0.0,x=0,y=0,z=0,A=0,B=0,E=0.0,F=0.0;A=c[a>>2]|0;p=c[a+20>>2]|0;q=c[a+24>>2]|0;if(!(ww(a,0)|0))qa(95795,95831,1034,96133);r=A<<3;B=KK(r)|0;j=0;while(1){if((j|0)>=(A|0))break;m=B+(j<<3)|0;h[m>>3]=0.0;n=j+1|0;o=p+(n<<2)|0;l=c[p+(j<<2)>>2]|0;g=0;k=0.0;while(1){if((l|0)>=(c[o>>2]|0))break;i=c[q+(l<<2)>>2]|0;if((j|0)!=(i|0)){k=+_w(e,b,j,i);k=+h[m>>3]+k;h[m>>3]=k;g=g+1|0}l=l+1|0}if((g|0)<=0){z=11;break}h[m>>3]=k/+(g|0);j=n}if((z|0)==11)qa(95908,95831,1046,96133);g=KK(56)|0;y=g+32|0;h[y>>3]=1.0;c[g+20>>2]=0;c[g+24>>2]=0;h[g+40>>3]=.01;c[g+48>>2]=~~+C(+(+(c[a>>2]|0)));x=KK(r)|0;c[g+12>>2]=x;i=0;while(1){if((i|0)>=(A|0))break;h[x+(i<<3)>>3]=d;i=i+1|0}do if((A|0)>2)if(!f){i=hy(A,b,e)|0;break}else{i=gy(A,b,e)|0;break}else i=xw(a)|0;while(0);f=g+4|0;c[f>>2]=yw(a,i)|0;qw(i);j=xw(c[f>>2]|0)|0;c[g+8>>2]=j;i=c[f>>2]|0;if((j|0)==0|(i|0)==0){Px(g);g=0}else{r=c[i+20>>2]|0;q=c[i+24>>2]|0;p=c[i+28>>2]|0;f=c[j+28>>2]|0;v=0.0;w=0.0;m=0;while(1){if((m|0)>=(A|0))break;o=m+1|0;n=r+(o<<2)|0;u=0.0;d=0.0;j=-1;s=v;t=w;l=c[r+(m<<2)>>2]|0;while(1){if((l|0)>=(c[n>>2]|0))break;i=c[q+(l<<2)>>2]|0;if((i|0)==(m|0)){k=u;i=l}else{E=+D(+(+Zw(e,b,m,i)),.6);k=1.0/(E*E);h[p+(l<<3)>>3]=k;F=k*E;a=f+(l<<3)|0;h[a>>3]=F;t=F*+_w(e,b,m,i)+t;F=+h[a>>3];k=k+u;d=F+d;i=j;s=F*E+s}u=k;j=i;l=l+1|0}a=x+(m<<3)|0;k=-(u*+h[a>>3]);h[a>>3]=k;if((j|0)<=-1){z=31;break}h[p+(j<<3)>>3]=k-u;h[f+(j<<3)>>3]=-d;v=s;w=t;m=o}if((z|0)==31)qa(96154,95831,1112,96133);k=w/v;j=c[r+(A<<2)>>2]|0;i=0;while(1){if((i|0)>=(j|0))break;A=f+(i<<3)|0;h[A>>3]=+h[A>>3]*k;i=i+1|0}h[y>>3]=k;U1(B)}return g|0}function Px(a){a=a|0;Fx(a);return}function Qx(a,b,c){a=a|0;b=b|0;c=c|0;+Jx(a,b,c,50,.001);return}function Rx(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0,k=0.0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0;z=c[a>>2]|0;A=c[a+20>>2]|0;B=c[a+24>>2]|0;if(!(ww(a,0)|0))qa(95795,95831,1149,96165);v=Dx(a,b,e)|0;w=c[v+28>>2]|0;a=KK(8)|0;x=KK(z<<2)|0;y=KK(z<<3)|0;i=0;while(1){if((i|0)>=(z|0)){o=0;break}l=y+(i<<3)|0;h[l>>3]=0.0;m=i+1|0;n=A+(m<<2)|0;j=c[A+(i<<2)>>2]|0;f=0;k=0.0;while(1){if((j|0)>=(c[n>>2]|0))break;g=c[B+(j<<2)>>2]|0;if((i|0)!=(g|0)){k=+_w(e,b,i,g);k=+h[l>>3]+k;h[l>>3]=k;f=f+1|0}j=j+1|0}if((f|0)<=0){p=11;break}h[l>>3]=k/+(f|0);i=m}if((p|0)==11)qa(95908,95831,1167,96165);while(1){if((o|0)>=(z|0)){m=0;f=0;break}c[x+(o<<2)>>2]=-1;o=o+1|0}a:while(1){if((m|0)>=(z|0))break;c[x+(m<<2)>>2]=m;j=A+(m<<2)|0;n=m+1|0;o=A+(n<<2)|0;i=c[j>>2]|0;while(1){g=c[o>>2]|0;if((i|0)>=(g|0))break;g=x+(c[B+(i<<2)>>2]<<2)|0;if((c[g>>2]|0)!=(m|0)){c[g>>2]=m;f=f+1|0}i=i+1|0}l=c[j>>2]|0;while(1){if((l|0)>=(g|0)){m=n;continue a}i=c[B+(l<<2)>>2]|0;j=A+(i+1<<2)|0;i=c[A+(i<<2)>>2]|0;while(1){if((i|0)>=(c[j>>2]|0))break;g=x+(c[B+(i<<2)>>2]<<2)|0;if((c[g>>2]|0)!=(m|0)){c[g>>2]=m;f=f+1|0}i=i+1|0}l=l+1|0;g=c[o>>2]|0}}e=rw(z,z,f,1,1)|0;c[a>>2]=e;if(!e){Sx(a);a=0}else{p=c[e+20>>2]|0;q=c[e+24>>2]|0;r=c[e+28>>2]|0;c[p>>2]=0;g=0;f=0;while(1){if((g|0)>=(z|0))break;s=g+z|0;c[x+(g<<2)>>2]=s;l=A+(g<<2)|0;t=g+1|0;u=A+(t<<2)|0;b=y+(g<<3)|0;j=c[l>>2]|0;while(1){g=c[u>>2]|0;if((j|0)>=(g|0))break;g=c[B+(j<<2)>>2]|0;i=x+(g<<2)|0;if((c[i>>2]|0)!=(s|0)){c[i>>2]=s;c[q+(f<<2)>>2]=g;o=r+(f<<3)|0;h[o>>3]=(+h[y+(g<<3)>>3]+ +h[b>>3])*.5;h[o>>3]=+h[w+(j<<3)>>3];f=f+1|0}j=j+1|0}o=c[l>>2]|0;while(1){if((o|0)>=(g|0))break;j=c[B+(o<<2)>>2]|0;l=A+(j+1<<2)|0;m=y+(j<<3)|0;n=w+(o<<3)|0;j=c[A+(j<<2)>>2]|0;while(1){if((j|0)>=(c[l>>2]|0))break;g=B+(j<<2)|0;i=x+(c[g>>2]<<2)|0;if((c[i>>2]|0)!=(s|0)){c[i>>2]=s;c[q+(f<<2)>>2]=c[g>>2];i=r+(f<<3)|0;h[i>>3]=(+h[m>>3]*2.0+ +h[b>>3]+ +h[y+(c[g>>2]<<3)>>3])*.5;h[i>>3]=+h[w+(j<<3)>>3]+ +h[n>>3];f=f+1|0}j=j+1|0}o=o+1|0;g=c[u>>2]|0}c[p+(t<<2)>>2]=f;g=t}c[e+8>>2]=f;A=Yp()|0;B=a+4|0;c[B>>2]=A;W6(A|0,d|0,168)|0;B=c[B>>2]|0;c[B+16>>2]=0;c[B+40>>2]=1;A=B+96|0;h[A>>3]=+h[A>>3]*.5;c[B+80>>2]=20;U1(x);U1(y);qw(v)}return a|0}function Sx(a){a=a|0;var b=0;if(a|0){b=c[a>>2]|0;if(b|0)qw(b);a=c[a+4>>2]|0;if(a|0)Zp(a)}return}function Tx(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;g=l;l=l+16|0;h=g;c[h>>2]=0;sq(e,b,c[a>>2]|0,c[a+4>>2]|0,d,f,h);if(!(c[h>>2]|0)){l=g;return}else qa(96184,95831,1262,96190)}function Ux(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0;c[g>>2]=0;g=c[d+120>>2]|0;a:do switch(g|0){case 5:case 6:{if((c[b>>2]|0)>2){b=Ox(b,a,0.0,f,(g|0)!=6&1)|0;Qx(b,a,f);Px(b)}break}case 4:{g=0;while(1){if((g|0)==1)break a;i=Rx(b,a,d,f)|0;Tx(i,b,e,a,f);Sx(i);g=g+1|0}}case 1:{d=0;h=6;break}case 2:{d=1;h=6;break}case 3:{d=2;h=6;break}default:{}}while(0);b:do if((h|0)==6){g=0;while(1){if((g|0)==1)break b;i=Ex(b,a,.05,f,d)|0;+Jx(i,a,f,50,.001);Fx(i);g=g+1|0}}while(0);return}function Vx(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0.0,g=0,i=0.0,j=0,k=0;k=l;l=l+16|0;g=k;c[g>>2]=d;j=c[a>>2]|0;a=c[j+8>>2]|0;i=+h[j>>3];j=c[a>>2]|0;Jw(a,b,g,0);a=0;f=0.0;while(1){if((a|0)>=(j|0))break;e=+h[b+(a<<3)>>3]+f;a=a+1|0;f=e}e=+(j|0);d=c[g>>2]|0;a=0;while(1){if((a|0)>=(j|0))break;g=d+(a<<3)|0;h[g>>3]=(+h[b+(a<<3)>>3]*e-f)*i+ +h[g>>3];a=a+1|0}l=k;return d|0}function Wx(a,b){a=a|0;b=+b;var d=0,e=0;d=KK(8)|0;e=KK(16)|0;c[d>>2]=e;h[e>>3]=b;c[e+8>>2]=a;c[d+4>>2]=25;return d|0}function Xx(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;c[e>>2]=d;Jw(c[a>>2]|0,b,e,0);l=f;return c[e>>2]|0}function Yx(a){a=a|0;var b=0;b=KK(8)|0;c[b>>2]=a;c[b+4>>2]=26;return b|0}function Zx(a){a=a|0;if(a|0)U1(a);return}function _x(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;f=c[a>>2]|0;e=~~+h[f>>3];f=f+8|0;a=0;while(1){if((a|0)>=(e|0))break;h[d+(a<<3)>>3]=+h[f+(a<<3)>>3]*+h[b+(a<<3)>>3];a=a+1|0}return d|0}function $x(a,b){a=a|0;b=+b;var d=0,e=0,f=0,g=0,i=0,j=0.0,k=0,l=0,m=0,n=0.0,o=0,p=0,q=0.0;m=c[a>>2]|0;o=c[a+20>>2]|0;p=c[a+24>>2]|0;k=c[a+28>>2]|0;l=KK(8)|0;i=KK((m<<3)+8|0)|0;c[l>>2]=i;h[i>>3]=+(m|0);i=i+8|0;q=+(m+-1|0);j=1.0/q;b=q*b;a=0;a:while(1){if((a|0)>=(m|0))break;e=i+(a<<3)|0;h[e>>3]=j;f=a+1|0;g=c[o+(f<<2)>>2]|0;d=c[o+(a<<2)>>2]|0;while(1){if((d|0)>=(g|0)){a=f;continue a}if((a|0)==(c[p+(d<<2)>>2]|0)?(n=+h[k+(d<<3)>>3],(n>=0.0?n:-n)>0.0):0)h[e>>3]=1.0/(n+b);d=d+1|0}}c[l+4>>2]=27;return l|0}function ay(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,i=0,j=0.0,k=0,l=0,m=0,n=0;i=c[a>>2]|0;k=c[a+20>>2]|0;l=c[a+24>>2]|0;m=c[a+28>>2]|0;n=KK(8)|0;d=KK((c[a>>2]<<3)+8|0)|0;c[n>>2]=d;h[d>>3]=+(i|0);d=d+8|0;a=0;a:while(1){if((a|0)>=(i|0))break;e=d+(a<<3)|0;h[e>>3]=1.0;f=a+1|0;g=c[k+(f<<2)>>2]|0;b=c[k+(a<<2)>>2]|0;while(1){if((b|0)>=(g|0)){a=f;continue a}if((a|0)==(c[l+(b<<2)>>2]|0)?(j=+h[m+(b<<3)>>3],(j>=0.0?j:-j)>0.0):0)h[e>>3]=1.0/j;b=b+1|0}}c[n+4>>2]=27;return n|0}function by(a){a=a|0;U1(c[a>>2]|0);if(a|0)U1(a);return}function cy(a,b,c,d,e,f,g,i,j){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=+g;i=i|0;j=j|0;var k=0.0,l=0,m=0.0,n=0,o=0,p=0;o=c<<3;n=KK(o)|0;o=KK(o)|0;l=0;m=0.0;while(1){if((l|0)<(d|0))j=0;else break;while(1){if((j|0)>=(c|0))break;p=(O(j,d)|0)+l|0;h[n+(j<<3)>>3]=+h[e+(p<<3)>>3];h[o+(j<<3)>>3]=+h[f+(p<<3)>>3];j=j+1|0}k=+dy(a,b,c,n,o,g,i);j=0;while(1){if((j|0)>=(c|0))break;h[f+((O(j,d)|0)+l<<3)>>3]=+h[n+(j<<3)>>3];j=j+1|0}l=l+1|0;m=k+m}U1(n);U1(o);return +m}function dy(a,b,d,e,f,g,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=+g;h=h|0;var i=0,j=0.0,k=0,l=0,m=0,n=0.0,o=0.0,p=0,q=0,r=0,s=0.0,t=0,u=0;r=c[a+4>>2]|0;p=c[b+4>>2]|0;q=d<<3;i=KK(q)|0;k=KK(q)|0;t=KK(q)|0;l=KK(q)|0;k=nb[r&63](a,e,k)|0;m=Vw(d,f,k)|0;o=+(d|0);s=+C(+(+Ww(d,m,m)))/o;n=s*g;o=1.0/o;m=0;f=t;j=1.0;g=s;while(1){if(!(g>n&(m|0)<(h|0)))break;i=nb[p&63](b,k,i)|0;g=+Ww(d,k,i);if((m|0)>0)Xw(d,i,f,g/j)|0;else W6(f|0,i|0,q|0)|0;u=nb[r&63](a,f,l)|0;j=g/+Ww(d,f,u);Yw(d,e,f,j)|0;t=Yw(d,k,u,-j)|0;m=m+1|0;j=g;l=u;g=+C(+(+Ww(d,t,t)))*o}U1(i);U1(k);U1(f);U1(l);return +g}function ey(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var i=0.0,j=0.0,k=0.0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0;C=l;l=l+16|0;B=C;y=c[a+4>>2]|0;z=y<<3;A=KK(z)|0;u=KK(z)|0;v=KK(z)|0;w=c[a+20>>2]|0;x=c[a+24>>2]|0;s=c[a+28>>2]|0;t=c[15712]|0;r=0;while(1){if((r|0)<(b|0))g=0;else break;while(1){if((g|0)>=(y|0)){a=0;break}q=(O(g,b)|0)+r|0;h[A+(g<<3)>>3]=+h[d+(q<<3)>>3];h[v+(g<<3)>>3]=+h[e+(q<<3)>>3];g=g+1|0}while(1){if((a|0)<(f|0))n=0;else{g=0;break}while(1){if((n|0)>=(y|0))break;o=c[w+(n<<2)>>2]|0;p=n+1|0;q=c[w+(p<<2)>>2]|0;m=o;j=0.0;i=0.0;while(1){if((m|0)>=(q|0))break;g=c[x+(m<<2)>>2]|0;k=+h[s+(m<<3)>>3];if((g|0)==(n|0))i=k;else j=+h[A+(g<<3)>>3]*k+j;m=m+1|0}if(j==0.0){c[B>>2]=q-o;w4(t,96212,B)|0}h[u+(n<<3)>>3]=(+h[v+(n<<3)>>3]-j)/i;n=p}W6(A|0,u|0,z|0)|0;a=a+1|0}while(1){if((g|0)>=(y|0))break;h[e+((O(g,b)|0)+r<<3)>>3]=+h[A+(g<<3)>>3];g=g+1|0}r=r+1|0}U1(A);U1(u);U1(v);l=C;return e|0}function fy(a,b,d,e,f,g,h,i){a=a|0;b=b|0;d=d|0;e=e|0;f=+f;g=g|0;h=h|0;i=i|0;var j=0;j=c[a>>2]|0;c[i>>2]=0;switch(h|0){case 0:{h=Yx(a)|0;i=ay(a)|0;f=+cy(h,i,j,b,d,e,f,g,0);Zx(h);by(i);break}case 1:{ey(a,b,d,e,g,0)|0;f=0.0;break}default:f=0.0}return +f}function gy(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;o=l;l=l+32|0;k=o;m=o+20|0;f=o+16|0;g=o+12|0;i=o+8|0;h[k>>3]=1.0;j=a<<3;n=KK(j)|0;j=KK(j)|0;b=0;while(1){if((b|0)>=(a|0))break;e=b<<1;h[n+(b<<3)>>3]=+h[d+(e<<3)>>3];h[j+(b<<3)>>3]=+h[d+((e|1)<<3)>>3];b=b+1|0}c[m>>2]=b;if((a|0)>2)d=Zr(n,j,a,i)|0;else{c[i>>2]=0;d=0}e=rw(a,a,1,1,2)|0;b=0;while(1){c[m>>2]=b;if((b|0)>=(c[i>>2]|0))break;p=b<<1;c[f>>2]=c[d+(p<<2)>>2];c[g>>2]=c[d+((p|1)<<2)>>2];Nw(e,1,f,g,k)|0;b=(c[m>>2]|0)+1|0}if((a|0)==2){c[f>>2]=0;c[g>>2]=1;Nw(e,1,f,g,k)|0;b=0}else b=0;while(1){c[m>>2]=b;if((b|0)>=(a|0))break;Nw(e,1,m,m,k)|0;b=(c[m>>2]|0)+1|0}a=Cw(e)|0;qw(e);p=vw(a,0)|0;qw(a);U1(d);U1(n);U1(j);l=o;return p|0}function hy(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,i=0,j=0,k=0,m=0;m=l;l=l+16|0;g=m+8|0;i=m;h[i>>3]=1.0;k=a<<3;j=KK(k)|0;k=KK(k)|0;e=0;while(1){if((e|0)>=(a|0))break;f=O(e,b)|0;h[j+(e<<3)>>3]=+h[d+(f<<3)>>3];h[k+(e<<3)>>3]=+h[d+(f+1<<3)>>3];e=e+1|0}c[g>>2]=e;e=_r(j,k,a,0)|0;f=rw(a,a,1,1,2)|0;b=0;while(1){c[g>>2]=b;if((b|0)<(a|0))d=1;else{b=0;break}while(1){if((d|0)>=(c[e+(b*12|0)>>2]|0))break;Nw(f,1,g,(c[e+(b*12|0)+4>>2]|0)+(d<<2)|0,i)|0;d=d+1|0;b=c[g>>2]|0}b=b+1|0}while(1){c[g>>2]=b;if((b|0)>=(a|0))break;Nw(f,1,g,g,i)|0;b=(c[g>>2]|0)+1|0}i=vw(Cw(f)|0,0)|0;qw(f);U1(j);U1(k);$r(e);l=m;return i|0}function iy(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;jy(f,c);ky(a,b,c,f);ly(b,f,d);my(f);l=e;return}function jy(a,b){a=a|0;b=b|0;c[a>>2]=KK(b<<4)|0;c[a+4>>2]=b;c[a+8>>2]=0;return}function ky(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0;D=l;l=l+64|0;r=D+32|0;u=D+48|0;v=D+16|0;w=D;t=b<<2;A=KK(t)|0;C=KK(t)|0;c[v>>2]=0;c[v+4>>2]=0;c[v+8>>2]=0;c[v+12>>2]=0;s=KK(t)|0;t=KK(t)|0;f=0;while(1){if((f|0)>=(b|0))break;c[s+(f<<2)>>2]=f;f=f+1|0}q=b+-1|0;it(a,s,0,q);f=0;while(1){if((f|0)>=(b|0))break;c[t+(c[s+(f<<2)>>2]<<2)>>2]=f;f=f+1|0}oy(u,a,s,b);f=1;while(1){if((f|0)>=(b|0)){f=0;break}c[A+(c[s+(f<<2)>>2]<<2)>>2]=c[s+(f+-1<<2)>>2];f=f+1|0}while(1){if((f|0)>=(q|0))break;p=f+1|0;c[C+(c[s+(f<<2)>>2]<<2)>>2]=c[s+(p<<2)>>2];f=p}k=e+8|0;m=e+4|0;n=v+4|0;o=w+4|0;p=w+8|0;j=0;while(1){if((j|0)>=(d|0))break;if(!((py(u,v)|0)<<24>>24))break;f=c[k>>2]|0;b=c[m>>2]|0;if((f|0)<(b|0))b=c[e>>2]|0;else{c[m>>2]=b<<1;b=W1(c[e>>2]|0,b<<5)|0;c[e>>2]=b;f=c[k>>2]|0}c[k>>2]=f+1;f=b+(f<<4)|0;c[f>>2]=c[v>>2];c[f+4>>2]=c[v+4>>2];c[f+8>>2]=c[v+8>>2];c[f+12>>2]=c[v+12>>2];f=c[v>>2]|0;b=c[t+(f<<2)>>2]|0;g=c[n>>2]|0;i=c[t+(g<<2)>>2]|0;if((b|0)>0?(x=c[s+(b+-1<<2)>>2]|0,y=C+(x<<2)|0,(c[t+(c[y>>2]<<2)>>2]|0)<(i|0)):0){c[w>>2]=x;c[o>>2]=g;h[p>>3]=+h[a+(g<<3)>>3]-+h[a+(x<<3)>>3];c[r>>2]=c[w>>2];c[r+4>>2]=c[w+4>>2];c[r+8>>2]=c[w+8>>2];c[r+12>>2]=c[w+12>>2];qy(u,r);c[y>>2]=g;c[A+(g<<2)>>2]=x}if((i|0)<(q|0)?(z=c[s+(i+1<<2)>>2]|0,B=A+(z<<2)|0,(c[t+(c[B>>2]<<2)>>2]|0)>(b|0)):0){c[w>>2]=f;c[o>>2]=z;h[p>>3]=+h[a+(z<<3)>>3]-+h[a+(f<<3)>>3];c[r>>2]=c[w>>2];c[r+4>>2]=c[w+4>>2];c[r+8>>2]=c[w+8>>2];c[r+12>>2]=c[w+12>>2];qy(u,r);c[B>>2]=f;c[C+(f<<2)>>2]=z}j=j+1|0}U1(A);U1(C);U1(s);U1(t);ry(u);l=D;return}function ly(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;k=KK(a<<2)|0;l=b+8|0;i=c[l>>2]|0;j=(i<<1)+a|0;h=j<<2;e=KK(h)|0;h=KK(h)|0;f=0;while(1){if((f|0)>=(a|0))break;c[k+(f<<2)>>2]=1;f=f+1|0}f=0;while(1){if((f|0)>=(i|0)){f=0;break}n=c[b>>2]|0;m=c[n+(f<<4)+4>>2]|0;n=k+(c[n+(f<<4)>>2]<<2)|0;c[n>>2]=(c[n>>2]|0)+1;m=k+(m<<2)|0;c[m>>2]=(c[m>>2]|0)+1;f=f+1|0}while(1){if((f|0)>=(j|0))break;g[h+(f<<2)>>2]=1.0;f=f+1|0}i=KK(a*20|0)|0;c[d>>2]=i;f=0;while(1){if((f|0)>=(a|0))break;c[i+(f*20|0)>>2]=1;c[i+(f*20|0)+8>>2]=h;c[i+(f*20|0)+4>>2]=e;c[e>>2]=f;g[h>>2]=0.0;n=c[k+(f<<2)>>2]|0;h=h+(n<<2)|0;e=e+(n<<2)|0;f=f+1|0}U1(k);while(1){e=c[l>>2]|0;if(!e)break;n=e+-1|0;c[l>>2]=n;m=c[b>>2]|0;ny(i,c[m+(n<<4)>>2]|0,c[m+(n<<4)+4>>2]|0)}return}function my(a){a=a|0;U1(c[a>>2]|0);return}function ny(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,h=0,i=0,j=0;f=a+(b*20|0)|0;h=c[f>>2]|0;i=c[a+(b*20|0)+4>>2]|0;e=0;while(1){if((e|0)>=(h|0)){j=4;break}if((c[i+(e<<2)>>2]|0)==(d|0))break;else e=e+1|0}if((j|0)==4?(c[f>>2]=h+1,c[i+(h<<2)>>2]=d,i=c[a+(d*20|0)+4>>2]|0,h=a+(d*20|0)|0,j=c[h>>2]|0,c[h>>2]=j+1,c[i+(j<<2)>>2]=b,c[a+8>>2]|0):0){j=c[a+(b*20|0)+8>>2]|0;g[j>>2]=+g[j>>2]+-1.0;j=c[a+(d*20|0)+8>>2]|0;g[j>>2]=+g[j>>2]+-1.0}return}function oy(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0.0,k=0,l=0;f=e+-1|0;c[a+4>>2]=f;c[a+8>>2]=f;c[a>>2]=KK(f<<4)|0;e=0;while(1){if((e|0)>=(f|0))break;l=c[d+(e<<2)>>2]|0;g=e+1|0;k=c[d+(g<<2)>>2]|0;j=+h[b+(k<<3)>>3]-+h[b+(l<<3)>>3];i=c[a>>2]|0;c[i+(e<<4)>>2]=l;c[i+(e<<4)+4>>2]=k;h[i+(e<<4)+8>>3]=j;e=g}e=(f|0)/2|0;while(1){if((e|0)<=-1)break;sy(a,e);e=e+-1|0}return}function py(a,b){a=a|0;b=b|0;var d=0,e=0;d=a+4|0;if(!(c[d>>2]|0))a=0;else{e=c[a>>2]|0;c[b>>2]=c[e>>2];c[b+4>>2]=c[e+4>>2];c[b+8>>2]=c[e+8>>2];c[b+12>>2]=c[e+12>>2];b=c[a>>2]|0;e=b+((c[d>>2]|0)+-1<<4)|0;c[b>>2]=c[e>>2];c[b+4>>2]=c[e+4>>2];c[b+8>>2]=c[e+8>>2];c[b+12>>2]=c[e+12>>2];c[d>>2]=(c[d>>2]|0)+-1;sy(a,0);a=1}return a|0}function qy(a,b){a=a|0;b=b|0;var d=0,e=0.0,f=0.0,g=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+16|0;m=n;j=a+4|0;g=c[j>>2]|0;d=a+8|0;if((g|0)==(c[d>>2]|0)){c[d>>2]=g<<1;d=W1(c[a>>2]|0,g<<5)|0;c[a>>2]=d;k=a;i=c[j>>2]|0}else{k=a;i=g;d=c[a>>2]|0}c[j>>2]=i+1;j=d+(g<<4)|0;c[j>>2]=c[b>>2];c[j+4>>2]=c[b+4>>2];c[j+8>>2]=c[b+8>>2];c[j+12>>2]=c[b+12>>2];while(1){if((g|0)<=0)break;d=c[k>>2]|0;e=+h[d+(g<<4)+8>>3];a=g>>>1;f=+h[d+(a<<4)+8>>3];if(!(e>2]|0}j=d+(g<<4)|0;c[m>>2]=c[j>>2];c[m+4>>2]=c[j+4>>2];c[m+8>>2]=c[j+8>>2];c[m+12>>2]=c[j+12>>2];b=d+(a<<4)|0;c[j>>2]=c[b>>2];c[j+4>>2]=c[b+4>>2];c[j+8>>2]=c[b+8>>2];c[j+12>>2]=c[b+12>>2];j=(c[k>>2]|0)+(a<<4)|0;c[j>>2]=c[m>>2];c[j+4>>2]=c[m+4>>2];c[j+8>>2]=c[m+8>>2];c[j+12>>2]=c[m+12>>2];g=a}l=n;return}function ry(a){a=a|0;U1(c[a>>2]|0);return}function sy(a,b){a=a|0;b=b|0;var d=0,e=0.0,f=0.0,g=0,i=0,j=0,k=0,m=0,n=0;m=l;l=l+16|0;i=m;j=a+4|0;while(1){d=b<<1;g=d|1;if((d|0)<(c[j>>2]|0)){n=c[a>>2]|0;e=+h[n+(d<<4)+8>>3];f=+h[n+(b<<4)+8>>3];if(!(e>2]|0)){n=c[a>>2]|0;e=+h[n+(g<<4)+8>>3];f=+h[n+(d<<4)+8>>3];if(!(e>2]|0;n=g+(d<<4)|0;c[i>>2]=c[n>>2];c[i+4>>2]=c[n+4>>2];c[i+8>>2]=c[n+8>>2];c[i+12>>2]=c[n+12>>2];g=g+(b<<4)|0;c[n>>2]=c[g>>2];c[n+4>>2]=c[g+4>>2];c[n+8>>2]=c[g+8>>2];c[n+12>>2]=c[g+12>>2];n=(c[a>>2]|0)+(b<<4)|0;c[n>>2]=c[i>>2];c[n+4>>2]=c[i+4>>2];c[n+8>>2]=c[i+8>>2];c[n+12>>2]=c[i+12>>2];b=d}l=m;return}function ty(a,b,d,e,f,g,i,j){a=a|0;b=b|0;d=+d;e=+e;f=f|0;g=g|0;i=i|0;j=j|0;var k=0,l=0,m=0,n=0.0;l=(f|0)!=0;if(!l){f=KK(b<<3)|0;if(!(ju(a,b,f,b)|0))m=3;else{a=1;m=17}}else m=3;if((m|0)==3){k=JK(b<<2)|0;c[g>>2]=k;a=0;while(1){if((a|0)>=(b|0))break;c[k+(a<<2)>>2]=a;a=a+1|0}a=b+-1|0;it(f,k,0,a);n=+h[f+(c[k>>2]<<3)>>3];e=(+h[f+(c[k+(a<<2)>>2]<<3)>>3]-n)*e/+(a|0);e=e=(b|0))break;n=+h[f+(c[k+(g<<2)>>2]<<3)>>3];a=a+(n-d>e&1)|0;g=g+1|0;d=n}c[j>>2]=a;a:do if(!a){k=KK(4)|0;c[i>>2]=k;c[k>>2]=b}else{j=KK(a<<2)|0;c[i>>2]=j;a=0;g=1;while(1){if((g|0)>=(b|0))break a;if(+h[f+(c[k+(g<<2)>>2]<<3)>>3]-+h[f+(c[k+(g+-1<<2)>>2]<<3)>>3]>e){c[j+(a<<2)>>2]=g;a=a+1|0}g=g+1|0}}while(0);if(l)a=0;else{a=0;m=17}}if((m|0)==17)U1(f);return a|0}function uy(a,b){a=a|0;b=b|0;var d=0,e=0,f=0.0,g=0,i=0,j=0.0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;d=c[46930]|0;if(d|0)vn(d);c[46930]=un(b,b,0.0)|0;d=c[46931]|0;if(d|0)U1(d);c[46931]=JK(b<<2)|0;d=c[46932]|0;if(d|0)U1(d);n=JK(b<<3)|0;c[46932]=n;o=c[46930]|0;p=c[46931]|0;i=0;while(1){if((i|0)>=(b|0)){e=10;break}e=a+(i<<2)|0;g=o+(i<<2)|0;f=0.0;d=0;while(1){if((d|0)==(b|0))break;j=+h[(c[e>>2]|0)+(d<<3)>>3];h[(c[g>>2]|0)+(d<<3)>>3]=j;j=+B(+j);f=f>3]=1.0/f;c[p+(i<<2)>>2]=i;i=i+1|0}a:do if((e|0)==10){m=b+-1|0;d=0;l=0;b:while(1){if((l|0)<(m|0)){e=l;k=d;f=0.0}else break;while(1){if((e|0)>=(b|0))break;a=c[p+(e<<2)>>2]|0;j=+B(+(+h[(c[o+(a<<2)>>2]|0)+(l<<3)>>3]));j=+h[n+(a<<3)>>3]*j;a=f>2]|0;a=p+(k<<2)|0;c[d>>2]=c[a>>2];c[a>>2]=i}g=c[o+(c[d>>2]<<2)>>2]|0;a=l+1|0;f=1.0/+h[g+(l<<3)>>3];e=a;while(1){if((e|0)>=(b|0)){d=k;l=a;continue b}i=c[o+(c[p+(e<<2)>>2]<<2)>>2]|0;d=i+(l<<3)|0;j=+h[d>>3]*f;h[d>>3]=j;c:do if(j!=0.0){d=a;while(1){if((d|0)>=(b|0))break c;q=i+(d<<3)|0;h[q>>3]=+h[q>>3]-+h[g+(d<<3)>>3]*j;d=d+1|0}}while(0);e=e+1|0}}d=+h[(c[o+(c[p+(m<<2)>>2]<<2)>>2]|0)+(m<<3)>>3]!=0.0&1}else if((e|0)==15){h[n+(i<<3)>>3]=0.0;d=0}while(0);return d|0}function vy(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0.0,g=0,i=0,j=0,k=0,l=0;k=c[46930]|0;l=c[46931]|0;j=0;while(1){if((j|0)>=(d|0)){e=d;break}g=c[l+(j<<2)>>2]|0;i=k+(g<<2)|0;f=0.0;e=0;while(1){if((e|0)==(j|0))break;f=+h[a+(e<<3)>>3]*+h[(c[i>>2]|0)+(e<<3)>>3]+f;e=e+1|0}h[a+(j<<3)>>3]=+h[b+(g<<3)>>3]-f;j=j+1|0}while(1){b=e+-1|0;if((e|0)<=0)break;g=l+(b<<2)|0;f=0.0;while(1){if((e|0)>=(d|0))break;f=+h[a+(e<<3)>>3]*+h[(c[k+(c[g>>2]<<2)>>2]|0)+(e<<3)>>3]+f;e=e+1|0}e=a+(b<<3)|0;h[e>>3]=(+h[e>>3]-f)/+h[(c[k+(c[g>>2]<<2)>>2]|0)+(b<<3)>>3];e=b}return}function wy(a){a=a|0;var b=0;b=KK(8)|0;c[b>>2]=a;c[b+4>>2]=0;return b|0}function xy(a,b){a=a|0;b=b|0;var d=0,e=0;if(a|0)do{d=a;a=c[a+4>>2]|0;e=c[d>>2]|0;if(e|0)tb[b&127](e);U1(d)}while((a|0)!=0);return}function yy(a,b){a=a|0;b=b|0;b=wy(b)|0;c[b+4>>2]=a;return b|0}function zy(a){a=a|0;return c[a>>2]|0}function Ay(a){a=a|0;return c[a+4>>2]|0}function By(a){a=a|0;var b=0;b=KK(12)|0;c[b>>2]=a;c[b+4>>2]=0;c[b+8>>2]=0;return b|0}function Cy(a,b){a=a|0;b=b|0;var d=0,e=0;if(a|0)do{d=a;a=c[a+4>>2]|0;e=c[d>>2]|0;if(e|0)tb[b&127](e);U1(d)}while((a|0)!=0);return}function Dy(a,b){a=a|0;b=b|0;b=By(b)|0;if(a|0){c[b+4>>2]=a;c[a+8>>2]=b}return b|0}function Ey(a){a=a|0;return c[a>>2]|0}function Fy(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;if(a|0){e=c[a+4>>2]|0;f=c[a+8>>2]|0;g=c[a>>2]|0;if(g|0)tb[b&127](g);U1(a);if(e|0)c[e+8>>2]=f;c[(f|0?f+4|0:d)>>2]=e}return}function Gy(a){a=a|0;c[a>>2]=0;c[a+4>>2]=0;return}function Hy(a){a=a|0;var b=0;b=JK(64)|0;Gy(b+36|0);c[b+8>>2]=a;return b|0}function Iy(a){a=a|0;if(a|0){cz(c[a+32>>2]|0);U1(a)}return}function Jy(a){a=a|0;return tB(c[a+8>>2]|0)|0}function Ky(a,b){a=a|0;b=b|0;var d=0,e=0;c[b+4>>2]=0;d=a+4|0;e=c[d>>2]|0;c[((e|0)==0?a:e+4|0)>>2]=b;c[d>>2]=b;return}function Ly(a,b){a=a|0;b=b|0;var d=0;d=c[a>>2]|0;if(!d){c[a>>2]=b;a=a+4|0}else c[b+4>>2]=d;c[a>>2]=b;return}function My(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;Ny(a,b);j=c[b>>2]|0;h=c[j+4>>2]|0;while(1){if(!h)break;k=c[h+8>>2]|0;i=jC(k)|0;d=c[(c[i+16>>2]|0)+112>>2]|0;a=c[d+16+4>>2]|0;d=c[d+8>>2]|0;f=i;i=kC(k,i)|0;while(1){if(!i)break;e=c[(c[i+16>>2]|0)+112>>2]|0;g=c[e+16+4>>2]|0;if((g|0)<(a|0)){f=i;d=c[e+8>>2]|0;a=g}i=kC(k,i)|0}i=c[(c[d+16>>2]|0)+112>>2]|0;k=i+4|0;c[k>>2]=c[k>>2]|8;c[h>>2]=f;k=c[h+4>>2]|0;Ky((c[i+12>>2]|0)+36|0,h);h=k}Gy(b);return j|0}function Ny(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=l;l=l+16|0;h=i;g=i+8|0;e=c[b+24>>2]|0;if(!((e|0)!=0?(d=tC(a,e,0)|0,(d|0)!=0):0))f=3;a:do if((f|0)==3){e=b+20|0;b:do if(c[e>>2]|0){d=jC(a)|0;while(1){if(!d)break b;if((cP(c[c[(c[d+16>>2]|0)+112>>2]>>2]|0,c[e>>2]|0,0)|0)<<24>>24)break a;d=kC(a,d)|0}}while(0);d=jC(a)|0}while(0);if(0){f=c[15712]|0;c[h>>2]=KB(d)|0;w4(f,96223,h)|0}c[g+4>>2]=0;c[g>>2]=0;Oy(a,d,b,1,g);l=i;return}function Oy(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0;l=d+8|0;k=c[l>>2]|0;c[l>>2]=k+1;l=b+16|0;c[(c[(c[l>>2]|0)+112>>2]|0)+16+4>>2]=k;c[(c[(c[l>>2]|0)+112>>2]|0)+24>>2]=k;k=(e|0)==0;j=aB(a,b)|0;while(1){if(!j)break;e=c[j>>2]&3;g=c[((e|0)==2?j:j+-48|0)+40>>2]|0;if((g|0)==(b|0)){e=c[((e|0)==3?j:j+48|0)+40>>2]|0;g=c[(c[j+16>>2]|0)+120>>2]|0;if(!(c[g>>2]|0))c[g>>2]=-1}else{e=c[(c[j+16>>2]|0)+120>>2]|0;if(!(c[e>>2]|0)){c[e>>2]=1;e=g}else e=g}g=e+16|0;h=c[(c[g>>2]|0)+112>>2]|0;i=c[h+16+4>>2]|0;do if(!i){c[h+8>>2]=b;Py(f,j);Oy(a,e,d,0,f);i=(c[(c[l>>2]|0)+112>>2]|0)+24|0;c[i>>2]=c[(c[(c[((c[i>>2]|0)<(c[(c[(c[g>>2]|0)+112>>2]|0)+24>>2]|0)?b:e)+16>>2]|0)+112>>2]|0)+24>>2];if((c[(c[(c[g>>2]|0)+112>>2]|0)+24>>2]|0)>=(c[(c[(c[l>>2]|0)+112>>2]|0)+16+4>>2]|0)){e=0;do{h=Qy(f)|0;g=(c[c[(c[h+16>>2]|0)+120>>2]>>2]|0)==1;g=c[((c[h>>2]&3|0)==((g?2:3)|0)?h:h+((g?-1:1)*48|0)|0)+40>>2]|0;if(!(c[(c[(c[g+16>>2]|0)+112>>2]|0)+12>>2]|0)){if(!e)e=Ry(a,d)|0;Sy(e,g)}}while((h|0)!=(j|0));if(e|0){if((c[(c[(c[l>>2]|0)+112>>2]|0)+12>>2]|0)==0?(Jy(e)|0)>1:0)Sy(e,b);if(!k?(c[(c[(c[l>>2]|0)+112>>2]|0)+12>>2]|0)==(e|0):0){Ly(d,e);break}Ky(d,e)}}}else{g=c[(c[l>>2]|0)+112>>2]|0;if((c[g+8>>2]|0)!=(e|0)){h=g+24|0;g=c[h>>2]|0;c[h>>2]=(g|0)<(i|0)?g:i}}while(0);j=bB(a,j,b)|0}if(!k?(c[(c[(c[l>>2]|0)+112>>2]|0)+12>>2]|0)==0:0){l=Ry(a,d)|0;Sy(l,b);Ly(d,l)}return}function Py(a,b){a=a|0;b=b|0;c[(c[(c[b+16>>2]|0)+120>>2]|0)+4>>2]=c[a>>2];c[a>>2]=b;b=a+4|0;c[b>>2]=(c[b>>2]|0)+1;return}function Qy(a){a=a|0;var b=0,d=0,e=0;b=c[a>>2]|0;if(!b)qa(138394,96254,65,96266);d=a+4|0;e=c[d>>2]|0;if((e|0)>0){c[a>>2]=c[(c[(c[b+16>>2]|0)+120>>2]|0)+4>>2];c[d>>2]=e+-1;return b|0}else qa(96244,96254,61,96266);return 0}function Ry(a,b){a=a|0;b=b|0;return Hy(Ty(a,b)|0)|0}function Sy(a,b){a=a|0;b=b|0;oC(c[a+8>>2]|0,b,1)|0;c[(c[(c[b+16>>2]|0)+112>>2]|0)+12>>2]=a;return}function Ty(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;d=l;l=l+144|0;f=d;e=d+8|0;g=b+12|0;b=c[g>>2]|0;c[g>>2]=b+1;c[f>>2]=b;m4(e,96234,f)|0;b=ND(a,e,1)|0;TC(b,137483,280,1)|0;l=d;return b|0}function Uy(a){a=a|0;var b=0,d=0;b=c[a+36>>2]|0;while(1){if(!b)break;d=c[b+4>>2]|0;Uy(b);b=d}Iy(a);return}function Vy(a,b,c){a=a|0;b=b|0;c=c|0;Wy(a,b,+h[c+32>>3]);return}function Wy(a,b,d){a=a|0;b=b|0;d=+d;var e=0,f=0,g=0,i=0;e=b+36|0;f=0;while(1){e=c[e>>2]|0;if(!e)break;Wy(a,e,d);e=e+4|0;f=f+1|0}e=mz(a,b,d)|0;c[b+32>>2]=e;a=jz(e)|0;if((f|0)>0)d=+Xy(f,a,e,b,d);else d=3.141592653589793;if((((a|0)==1?(g=c[b>>2]|0,g|0):0)?c[(c[(c[g+16>>2]|0)+112>>2]|0)+8>>2]|0:0)?(i=b+48|0,h[i>>3]=d,d<0.0):0)h[i>>3]=d+6.283185307179586;return}function Xy(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=+f;var g=0.0,i=0,j=0.0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;v=l;l=l+48|0;t=v;u=JK(a*56|0)|0;c[t+40>>2]=c[e+36>>2];p=e+16|0;j=+h[p>>3];q=t+8|0;h[q>>3]=j;h[t>>3]=j;c[t+44>>2]=c[e>>2];j=6.283185307179586/+(b|0);h[t+16>>3]=j;r=t+24|0;h[r>>3]=-1.0;s=t+32|0;h[s>>3]=-1.0;k=0;o=0;g=0.0;while(1){i=c[d>>2]|0;if(!i)break;d=c[i>>2]|0;if(!(c[(c[(c[d+16>>2]|0)+112>>2]|0)+4>>2]&8))d=o;else{n=u+(o*56|0)|0;c[n>>2]=d;h[u+(o*56|0)+8>>3]=j*+(k|0);d=o+1|0;g=+Yy(n,t,f)}k=k+1|0;o=d;d=i+4|0}a:do switch(o|0){case 1:{h[u+40>>3]=1.0;d=0;break}case 2:{j=+h[u+64>>3]-+h[u+8>>3];Zy(u,u+56|0,j>3.141592653589793?6.283185307179586-j:j);d=0;break}default:{n=u+8|0;m=u;d=0;while(1){if((d|0)>=(o|0)){d=0;break a}d=d+1|0;if((d|0)==(o|0)){i=u;j=+h[n>>3]+6.283185307179586-+h[m+8>>3];k=m+56|0}else{k=m+56|0;i=k;j=+h[m+64>>3]-+h[m+8>>3]}Zy(m,i,j);m=k}}}while(0);while(1){if((d|0)>=(o|0))break;_y(u+(d*56|0)|0,t,b,f);d=d+1|0}U1(u);if((a|0)==1){f=g+f*.5;$y(e,-f,0.0,0.0);h[p>>3]=+h[p>>3]+f;u=e+56|0;c[u>>2]=c[u>>2]|1}else h[p>>3]=+h[q>>3];l=v;return +((+h[s>>3]+ +h[r>>3])*.5+-3.141592653589793)}function Yy(a,b,d){a=a|0;b=b|0;d=+d;var e=0,f=0.0,g=0.0,i=0,j=0,k=0.0;i=0;f=0.0;g=0.0;e=b+40|0;while(1){j=c[e>>2]|0;if(!j)break;e=c[j>>2]|0;if(!e)e=0;else e=c[(c[(c[e+16>>2]|0)+112>>2]|0)+8>>2]|0;if((e|0)==(c[a>>2]|0)){k=+h[j+16>>3];e=i+1|0;f=f+d+k*2.0;g=g>3]=f;c[a+48>>2]=i;h[a+16>>3]=g+d+ +h[b>>3];h[a+24>>3]=g;return +g}function Zy(a,b,c){a=a|0;b=b|0;c=+c;var d=0.0,e=0.0;e=+h[b+16>>3];d=+h[a+16>>3];c=(d*+h[b+32>>3]+e*+h[a+32>>3])/(c*2.0*e*d);c=c<1.0?1.0:c;a=a+40|0;if(c>+h[a>>3])h[a>>3]=c;a=b+40|0;if(c>+h[a>>3])h[a>>3]=c;return}function _y(a,b,d,e){a=a|0;b=b|0;d=d|0;e=+e;var f=0.0,g=0.0,i=0,j=0.0,k=0.0,l=0.0,m=0.0,n=0,o=0,p=0.0,q=0.0,r=0,s=0,t=0,u=0.0,v=0.0,w=0,x=0,y=0.0,z=0,A=0,B=0,C=0,D=0.0,G=0.0;z=b+8|0;y=+h[z>>3];A=b+24|0;k=+h[A>>3];B=b+32|0;j=+h[B>>3];f=+h[a+16>>3]*+h[a+40>>3];x=(d|0)==1;if(x){v=+h[a+32>>3];g=v*.15915494309189535;g=f>g?f:g;f=g*6.283185307179586-v;if(f>0.0){e=f/+(c[a+48>>2]|0)+e;l=0.0;f=g}else{l=0.0;f=g}}else l=+h[a+8>>3]-+h[a+32>>3]/(f*2.0);q=+h[a+24>>3]+f;r=q>y;s=a+48|0;t=((c[s>>2]|0)+1|0)/2|0;u=1.0/f;v=e/f*.5;w=a+8|0;n=b+40|0;o=0;p=0.0;g=l;while(1){n=c[n>>2]|0;if(!n)break;i=c[n>>2]|0;if(!i)i=0;else i=c[(c[(c[i+16>>2]|0)+112>>2]|0)+8>>2]|0;if((i|0)==(c[a>>2]|0)?(jz(c[n+32>>2]|0)|0)>=1:0){l=+h[n+16>>3];m=l*u;do if(!x)if((c[s>>2]|0)==1){g=+h[w>>3];break}else{g=g+v+m;break}else{if(g!=0.0)g=(c[s>>2]|0)==2?3.141592653589793:m+g;j=g;k=k<0.0?g:k}while(0);G=+E(+g)*f;D=+F(+g)*f;$y(n,G,D,+az(n,G,D,g));g=(x?(l+e)*u:m+v)+g;o=o+1|0;i=o;l=(o|0)==(t|0)?g:p}else{i=o;l=p}n=n+4|0;o=i;p=l}f=r?q:y;if((d|0)>1?(C=c[a>>2]|0,(C|0)==(c[b+44>>2]|0)):0)h[(c[(c[C+16>>2]|0)+112>>2]|0)+24>>3]=p;h[z>>3]=f;h[A>>3]=k;h[B>>3]=j;return}function $y(a,b,d,e){a=a|0;b=+b;d=+d;e=+e;var f=0,g=0.0,i=0.0,j=0.0,k=0,l=0,m=0,n=0,o=0.0,p=0.0;m=c[a+8>>2]|0;n=e!=0.0;f=jC(m)|0;while(1){if(!f)break;k=c[(c[f+16>>2]|0)+132>>2]|0;i=+h[k>>3];l=k+8|0;g=+h[l>>3];if(n){o=+E(+e);p=+F(+e);j=o*i-p*g;g=p*i+o*g}else j=i;h[k>>3]=j+b;h[l>>3]=g+d;f=kC(m,f)|0}f=a+36|0;while(1){f=c[f>>2]|0;if(!f)break;$y(f,b,d,e);f=f+4|0}return}function az(a,b,d,e){a=a|0;b=+b;d=+d;e=+e;var f=0.0,g=0,i=0,j=0.0,k=0.0,l=0,m=0,n=0,o=0;m=c[a+8>>2]|0;f=+h[a+48>>3];do if(!(f>=0.0)){if((jz(c[a+32>>2]|0)|0)==2){f=e+-1.5707963267948966;break}l=c[a>>2]|0;n=l+16|0;i=c[(c[n>>2]|0)+132>>2]|0;f=+h[i>>3]+b;k=+h[i+8>>3]+d;f=k*k+f*f;i=jC(m)|0;g=l;while(1){if(!i)break;if((i|0)!=(l|0)?(o=c[(c[i+16>>2]|0)+132>>2]|0,j=+h[o>>3]+b,k=+h[o+8>>3]+d,j=k*k+j*j,j>3];k=+h[a+16>>3]-j;g=c[n>>2]|0;i=c[g+132>>2]|0;f=+h[i>>3];if(f>-k?(c[a+56>>2]&1|0)!=0:0){d=+C(+(d*d+b*b));b=+K(+(+h[i+8>>3]),+(f+k));f=+E(+b);f=e+1.5707963267948966-b-+I(+((k-j/f)/d*f));break}else{f=+K(+(+h[i+8>>3]),+f);f=e+3.141592653589793-f-+h[(c[g+112>>2]|0)+24>>3];f=f>6.283185307179586?f+-6.283185307179586:f;break}}else f=0.0}else{f=3.141592653589793-f+e;f=f<0.0?f+6.283185307179586:f}while(0);return +f}function bz(){return JK(12)|0}function cz(a){a=a|0;var b=0,d=0;if(a|0){b=c[a>>2]|0;while(1){if(!b)break;d=c[b+4>>2]|0;U1(b);b=d}U1(a)}return}function dz(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;f=ez(d)|0;d=a+8|0;c[d>>2]=(c[d>>2]|0)+1;d=a+4|0;e=c[d>>2]|0;if((b|0)==0|(e|0)==(b|0)){c[(e|0?e+4|0:a)>>2]=f;c[f+8>>2]=e;e=0}else{e=b+4|0;d=c[e>>2]|0;c[e>>2]=f;c[f+8>>2]=b;e=d;d=d+8|0}c[d>>2]=f;c[f+4>>2]=e;return}function ez(a){a=a|0;var b=0;b=JK(12)|0;c[b>>2]=a;return b|0}function fz(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;b=c[a>>2]|0;d=b;while(1){if(!b)break;g=b+4|0;e=c[g>>2]|0;f=b+8|0;c[g>>2]=c[f>>2];c[f>>2]=e;b=e}f=a+4|0;g=c[f>>2]|0;c[f>>2]=d;c[a>>2]=g;return a|0}function gz(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=c[a>>2]|0;if((d|0)!=(b|0)){f=b+8|0;e=c[f>>2]|0;c[a>>2]=b;c[f>>2]=0;b=a+4|0;a=c[b>>2]|0;c[a+4>>2]=d;c[d+8>>2]=a;c[b>>2]=e;c[e+4>>2]=0}return}function hz(a){a=a|0;var b=0,d=0,e=0;d=bz()|0;e=d+4|0;b=0;while(1){a=c[a>>2]|0;if(!a)break;dz(d,b,c[a>>2]|0);b=c[e>>2]|0;a=a+4|0}return d|0}function iz(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;f=a;while(1){j=c[f>>2]|0;if(!j){k=6;break}if((c[j>>2]|0)==(b|0))break;f=j+4|0}if((k|0)==6)qa(96270,96277,217,96288);i=j+8|0;f=c[i>>2]|0;g=j+4|0;b=c[g>>2]|0;c[(f|0?f+4|0:a)>>2]=b;h=a+4|0;c[(b|0?b+8|0:h)>>2]=f;b=0;f=a;while(1){f=c[f>>2]|0;if(!f)break;if((c[f>>2]|0)==(d|0)){k=9;break}b=f;f=f+4|0}if((k|0)==9){do if(!e)if((f|0)==(c[a>>2]|0)){c[a>>2]=j;c[g>>2]=f;c[i>>2]=0;f=f+8|0;break}else{c[b+4>>2]=j;c[i>>2]=b;c[g>>2]=f;f=f+8|0;break}else if((f|0)==(c[h>>2]|0)){c[h>>2]=j;c[g>>2]=0;c[i>>2]=f;f=f+4|0;break}else{c[i>>2]=f;f=f+4|0;c[g>>2]=c[f>>2];c[(c[f>>2]|0)+8>>2]=j;break}while(0);c[f>>2]=j}return}function jz(a){a=a|0;return c[a+8>>2]|0}function kz(a,b){a=a|0;b=b|0;lz(a,fz(b)|0);U1(b);return}function lz(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=c[b>>2]|0;if(d|0){e=a+4|0;f=c[e>>2]|0;c[f+4>>2]=d;c[d+8>>2]=f;c[e>>2]=c[b+4>>2];d=a+8|0;c[d>>2]=(c[d>>2]|0)+(c[b+8>>2]|0)}return}function mz(a,b,d){a=a|0;b=b|0;d=+d;var e=0,f=0.0,g=0.0,i=0.0,j=0.0,k=0,l=0,m=0,n=0,o=0.0;m=c[b+8>>2]|0;nz(a,b);l=oz(m)|0;a=qz(pz(l)|0)|0;rz(m,a);m=sz(a,m)|0;a=jz(m)|0;j=+tz(m);k=(a|0)==1;f=+(a|0);i=f*.15915494309189535*(j+d);g=k?0.0:i;a=m;while(1){a=c[a>>2]|0;if(!a)break;if(c[(c[(c[(c[a>>2]|0)+16>>2]|0)+112>>2]|0)+4>>2]&8|0){e=4;break}a=a+4|0}if((e|0)==4)gz(m,a);d=1.0/f;e=0;a=m;while(1){a=c[a>>2]|0;if(!a)break;n=(c[a>>2]|0)+16|0;c[(c[(c[n>>2]|0)+112>>2]|0)+16>>2]=e;h[(c[(c[n>>2]|0)+112>>2]|0)+24>>3]=0.0;f=6.283185307179586*d*+(e|0);o=+E(+f)*g;n=c[(c[n>>2]|0)+132>>2]|0;h[n>>3]=o;h[n+8>>3]=+F(+f)*g;e=e+1|0;a=a+4|0}o=k?j*.5:i;h[b+16>>3]=o;h[b+24>>3]=o;h[b+48>>3]=-1.0;sB(l)|0;return m|0}function nz(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=c[b+8>>2]|0;d=jC(f)|0;while(1){if(!d)break;e=XA(a,d)|0;while(1){if(!e)break;if((c[(c[(c[(c[((c[e>>2]&3|0)==2?e:e+-48|0)+40>>2]|0)+16>>2]|0)+112>>2]|0)+12>>2]|0)==(b|0))mB(f,e,1)|0;e=ZA(a,e)|0}d=kC(f,d)|0}return}function oz(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;k=l;l=l+16|0;g=k;f=zz(a,g)|0;g=c[g>>2]|0;i=tB(g)|0;h=Az(g)|0;i=i+-3|0;e=0;while(1){if((e|0)>=(i|0))break;j=Jz(h)|0;d=aB(g,j)|0;while(1){if(!d)break;b=c[d>>2]&3;a=c[((b|0)==2?d:d+-48|0)+40>>2]|0;if((j|0)==(a|0))a=c[((b|0)==3?d:d+48|0)+40>>2]|0;Iz(h,a);d=bB(g,d,j)|0}Bz(g,j,f);d=aB(g,j)|0;while(1){if(!d)break;b=c[d>>2]&3;a=c[((b|0)==2?d:d+-48|0)+40>>2]|0;if((j|0)==(a|0))a=c[((b|0)==3?d:d+48|0)+40>>2]|0;b=(c[a+16>>2]|0)+236|0;c[b>>2]=(c[b>>2]|0)+-1;Hz(h,a);d=bB(g,d,j)|0}wC(g,j)|0;e=e+1|0}sB(g)|0;Gz(h);l=k;return f|0}function pz(a){a=a|0;var b=0,d=0,e=0,f=0;f=l;l=l+144|0;b=f;e=f+8|0;d=c[46933]|0;c[46933]=d+1;c[b>>2]=d;m4(e,96303,b)|0;e=ND(a,e,1)|0;TC(e,137483,280,1)|0;b=jC(a)|0;while(1){if(!b)break;oC(e,b,1)|0;d=b+16|0;c[(c[(c[d>>2]|0)+112>>2]|0)+16+12>>2]=0;c[(c[(c[d>>2]|0)+112>>2]|0)+32>>2]=0;d=(c[(c[d>>2]|0)+112>>2]|0)+4|0;c[d>>2]=c[d>>2]&-2;b=kC(a,b)|0}b=jC(a)|0;while(1){if(!b)break;d=c[(c[b+16>>2]|0)+112>>2]|0;if(!(c[d+4>>2]&1)){c[d+16>>2]=0;yz(a,b,e)}b=kC(a,b)|0}l=f;return e|0}function qz(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;if((tB(a)|0)!=1){d=jC(a)|0;while(1){if(!d)break;b=0;e=aB(a,d)|0;while(1){if(!e)break;b=b+1|0;e=bB(a,e,d)|0}if((b|0)==1)xz(d,d,0,0);d=kC(a,d)|0}b=0;f=0;d=jC(a)|0;while(1){if(!d)break;g=c[(c[d+16>>2]|0)+112>>2]|0;g=(c[g+32>>2]|0)+(c[g+16+12>>2]|0)|0;e=(g|0)>(b|0);b=e?g:b;f=e?d:f;d=kC(a,d)|0}b=bz()|0;e=f+16|0;d=(c[(c[e>>2]|0)+112>>2]|0)+16+4|0;while(1){d=c[d>>2]|0;if((d|0)==(f|0))break;dz(b,0,d);d=c[(c[d+16>>2]|0)+112>>2]|0;g=d+4|0;c[g>>2]=c[g>>2]|16;d=d+16|0}dz(b,0,f);g=c[(c[e>>2]|0)+112>>2]|0;a=g+4|0;c[a>>2]=c[a>>2]|16;if(c[g+32>>2]|0){a=bz()|0;d=(c[(c[e>>2]|0)+112>>2]|0)+24|0;while(1){d=c[d>>2]|0;if((d|0)==(f|0))break;dz(a,0,d);d=c[(c[d+16>>2]|0)+112>>2]|0;g=d+4|0;c[g>>2]=c[g>>2]|16;d=d+16|0}kz(b,a)}}else{b=bz()|0;g=jC(a)|0;dz(b,0,g);g=(c[(c[g+16>>2]|0)+112>>2]|0)+4|0;c[g>>2]=c[g>>2]|16}return b|0}function rz(a,b){a=a|0;b=b|0;var d=0;d=jC(a)|0;while(1){if(!d)break;if(!(c[(c[(c[d+16>>2]|0)+112>>2]|0)+4>>2]&16))wz(a,d,b);d=kC(a,d)|0}return}function sz(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;g=l;l=l+16|0;f=g;d=uz(a,b)|0;c[f>>2]=d;a:do if(d){e=0;while(1){if((e|0)>=10)break a;a=vz(a,b,f)|0;h=d;d=c[f>>2]|0;if((h|0)==(d|0)|(d|0)==0)break;else e=e+1|0}}while(0);l=g;return a|0}function tz(a){a=a|0;var b=0.0,d=0.0,e=0.0,f=0;b=0.0;while(1){a=c[a>>2]|0;if(!a)break;f=c[(c[c[(c[(c[a>>2]|0)+16>>2]|0)+112>>2]>>2]|0)+16>>2]|0;d=+h[f+32>>3];d=d>b?d:b;e=+h[f+40>>3];b=e>d?e:d;a=a+4|0}return +b}function uz(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;k=Kz()|0;e=jC(b)|0;while(1){if(!e)break;d=XA(b,e)|0;while(1){if(!d)break;c[c[(c[d+16>>2]|0)+120>>2]>>2]=0;d=ZA(b,d)|0}e=kC(b,e)|0}j=1;d=0;while(1){h=c[a>>2]|0;if(!h)break;i=c[h>>2]|0;g=aB(b,i)|0;while(1){if(!g)break;f=g+16|0;if((c[c[(c[f>>2]|0)+120>>2]>>2]|0)>0){a=nb[c[k>>2]&63](k,0,128)|0;while(1){if(!a)break;e=c[a+8>>2]|0;if((c[c[(c[e+16>>2]|0)+120>>2]>>2]|0)>(c[c[(c[f>>2]|0)+120>>2]>>2]|0)?(l=c[e>>2]&3,(c[((l|0)==2?e:e+-48|0)+40>>2]|0)!=(i|0)):0)d=d+((c[((l|0)==3?e:e+48|0)+40>>2]|0)!=(i|0)&1)|0;a=nb[c[k>>2]&63](k,a,8)|0}Qz(k,g)}g=bB(b,g,i)|0}e=aB(b,i)|0;while(1){if(!e)break;a=c[(c[e+16>>2]|0)+120>>2]|0;if(!(c[a>>2]|0)){c[a>>2]=j;Pz(k,e)}e=bB(b,e,i)|0}a=h+4|0;j=j+1|0}Oz(k);return d|0}function vz(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;e=c[d>>2]|0;k=jC(b)|0;a:while(1){if(!k)break;j=aB(b,k)|0;while(1){if(!j)break;g=c[j>>2]&3;f=c[((g|0)==3?j:j+48|0)+40>>2]|0;if((f|0)==(k|0))f=c[((g|0)==2?j:j+-48|0)+40>>2]|0;i=0;while(1){if((i|0)>=2)break;h=hz(a)|0;iz(a,k,f,i);g=uz(a,b)|0;if((g|0)<(e|0)){cz(h);if(!g){e=0;break a}else e=g}else{cz(a);a=h}i=i+1|0}j=bB(b,j,k)|0}k=kC(b,k)|0}c[d>>2]=e;return a|0}function wz(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=bz()|0;e=XA(a,b)|0;while(1){if(!e)break;f=e+-48|0;dz(h,0,c[((c[e>>2]&3|0)==2?e:f)+40>>2]|0);f=(c[(c[(c[((c[e>>2]&3|0)==2?e:f)+40>>2]|0)+16>>2]|0)+112>>2]|0)+4|0;c[f>>2]=c[f>>2]|32;e=ZA(a,e)|0}e=_A(a,b)|0;while(1){if(!e)break;f=e+48|0;dz(h,0,c[((c[e>>2]&3|0)==3?e:f)+40>>2]|0);f=(c[(c[(c[((c[e>>2]&3|0)==3?e:f)+40>>2]|0)+16>>2]|0)+112>>2]|0)+4|0;c[f>>2]=c[f>>2]|32;e=$A(a,e)|0}a:do if((jz(h)|0)>1){f=d+4|0;a=d;while(1){e=c[a>>2]|0;if(!e){g=13;break a}a=e+4|0;if(!(c[(c[(c[(c[e>>2]|0)+16>>2]|0)+112>>2]|0)+4>>2]&32))continue;if(c[(c[(c[(c[c[((e|0)==(c[f>>2]|0)?d:a)>>2]>>2]|0)+16>>2]|0)+112>>2]|0)+4>>2]&32|0)break}dz(d,e,b)}else g=13;while(0);b:do if((g|0)==13){c:do if((jz(h)|0)>0){e=d;while(1){e=c[e>>2]|0;if(!e)break c;if(c[(c[(c[(c[e>>2]|0)+16>>2]|0)+112>>2]|0)+4>>2]&32|0)break;e=e+4|0}dz(d,e,b);break b}while(0);dz(d,0,b)}while(0);e=h;while(1){e=c[e>>2]|0;if(!e)break;d=(c[(c[(c[e>>2]|0)+16>>2]|0)+112>>2]|0)+4|0;c[d>>2]=c[d>>2]&-33;e=e+4|0}cz(h);return}function xz(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;while(1){g=c[(c[(c[b+16>>2]|0)+112>>2]|0)+16>>2]|0;if(!g)break;h=d+1|0;i=g+16|0;j=c[(c[i>>2]|0)+112>>2]|0;b=j+16|0;f=c[b+12>>2]|0;if(f){if((f|0)>(d|0)){k=11;break}b=c[b+4>>2]|0;f=b;if((b|0)==(e|0))b=j;else{d=j+24|0;if(!((c[j+32>>2]|0)!=0?(c[d>>2]|0)==(e|0):0))e=b;c[d>>2]=f;b=c[(c[i>>2]|0)+112>>2]|0;c[b+32>>2]=c[b+16+12>>2];b=c[(c[i>>2]|0)+112>>2]|0}b=b+16|0}c[b+4>>2]=a;c[(c[(c[i>>2]|0)+112>>2]|0)+16+12>>2]=h;b=g;d=h}if((k|0)==11?(c[j+32>>2]|0)<=(d|0):0){c[j+24>>2]=a;c[(c[(c[i>>2]|0)+112>>2]|0)+32>>2]=h}return}function yz(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;g=(c[(c[b+16>>2]|0)+112>>2]|0)+4|0;c[g>>2]=c[g>>2]|1;g=aB(a,b)|0;while(1){if(!g)break;f=c[g>>2]&3;e=c[((f|0)==2?g:g+-48|0)+40>>2]|0;if((e|0)==(b|0))e=c[((f|0)==3?g:g+48|0)+40>>2]|0;f=e+16|0;if(!(c[(c[(c[f>>2]|0)+112>>2]|0)+4>>2]&1)){mB(d,g,1)|0;c[(c[(c[f>>2]|0)+112>>2]|0)+16>>2]=b;yz(a,e,d)}g=bB(a,g,b)|0}return}function zz(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;k=l;l=l+144|0;j=k+8|0;i=k;e=k+16|0;h=c[46934]|0;c[46934]=h+1;c[i>>2]=h;m4(e,96312,i)|0;i=ND(b,e,1)|0;TC(i,137483,280,1)|0;h=c[46934]|0;c[46934]=h+1;c[j>>2]=h;m4(e,96312,j)|0;h=b+24|0;a[j>>0]=a[h>>0]|0;a[j+1>>0]=a[h+1>>0]|0;a[j+2>>0]=a[h+2>>0]|0;a[j+3>>0]=a[h+3>>0]|0;j=oB(e,j,0)|0;e=jC(b)|0;while(1){if(!e)break;oC(i,e,1)|0;h=tC(j,KB(e)|0,1)|0;TC(h,137447,304,1)|0;c[(c[(c[e+16>>2]|0)+112>>2]|0)+16>>2]=h;e=kC(b,e)|0}f=jC(b)|0;while(1){if(!f)break;g=c[(c[(c[f+16>>2]|0)+112>>2]|0)+16>>2]|0;h=g+16|0;e=XA(b,f)|0;while(1){if(!e)break;mB(i,e,1)|0;m=c[(c[(c[(c[((c[e>>2]&3|0)==2?e:e+-48|0)+40>>2]|0)+16>>2]|0)+112>>2]|0)+16>>2]|0;n=iB(j,g,m,0,1)|0;TC(n,137460,176,1)|0;c[(c[n+16>>2]|0)+116>>2]=e;n=(c[h>>2]|0)+236|0;c[n>>2]=(c[n>>2]|0)+1;m=(c[m+16>>2]|0)+236|0;c[m>>2]=(c[m>>2]|0)+1;e=ZA(b,e)|0}f=kC(b,f)|0}c[d>>2]=j;l=k;return i|0}function Az(a){a=a|0;var b=0,c=0;c=Cz()|0;b=jC(a)|0;while(1){if(!b)break;Hz(c,b);b=kC(a,b)|0}return c|0}function Bz(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;m=c[(c[b+16>>2]|0)+236>>2]|0;p=m<<2;o=KK(p)|0;p=KK(p)|0;i=0;l=aB(a,b)|0;n=0;f=0;while(1){if(!l)break;e=c[l>>2]&3;g=c[((e|0)==2?l:l+-48|0)+40>>2]|0;if((g|0)==(b|0))g=c[((e|0)==3?l:l+48|0)+40>>2]|0;h=0;k=aB(a,b)|0;j=i;while(1){if(!k)break;if((k|0)!=(l|0)){i=c[k>>2]&3;e=c[((i|0)==2?k:k+-48|0)+40>>2]|0;if((e|0)==(b|0))e=c[((i|0)==3?k:k+48|0)+40>>2]|0;i=iB(a,g,e,0,0)|0;if(i)if(g>>>0>>0){e=j+1|0;h=i+16|0;i=c[(c[h>>2]|0)+116>>2]|0;if(!i)h=1;else{wC(d,i)|0;c[(c[h>>2]|0)+116>>2]=0;h=1}}else{h=1;e=j}else e=j}else e=j;k=bB(a,k,b)|0;j=e}if(!h){c[p+(n<<2)>>2]=g;e=n+1|0}else{c[o+(f<<2)>>2]=g;e=n;f=f+1|0}i=j;l=bB(a,l,b)|0;n=e}e=m+-1-i|0;a:do if((e|0)>0){if((e|0)<(n|0))g=0;else{if((e|0)!=(n|0))break;f=c[o>>2]|0;g=f+16|0;e=0;while(1){if((e|0)>=(n|0))break a;m=c[p+(e<<2)>>2]|0;TC(iB(a,f,m,0,1)|0,137460,176,1)|0;d=(c[g>>2]|0)+236|0;c[d>>2]=(c[d>>2]|0)+1;m=(c[m+16>>2]|0)+236|0;c[m>>2]=(c[m>>2]|0)+1;e=e+1|0}}while(1){if((g|0)>=(n|0)){f=2;break}f=g|1;if((f|0)>=(n|0)){f=2;break}d=c[p+(g<<2)>>2]|0;m=c[p+(f<<2)>>2]|0;TC(iB(a,d,m,0,1)|0,137460,176,1)|0;d=(c[d+16>>2]|0)+236|0;c[d>>2]=(c[d>>2]|0)+1;m=(c[m+16>>2]|0)+236|0;c[m>>2]=(c[m>>2]|0)+1;g=g+2|0;e=e+-1|0}while(1){if((e|0)<=0)break a;m=c[p>>2]|0;n=c[p+(f<<2)>>2]|0;TC(iB(a,m,n,0,1)|0,137460,176,1)|0;m=(c[m+16>>2]|0)+236|0;c[m>>2]=(c[m>>2]|0)+1;n=(c[n+16>>2]|0)+236|0;c[n>>2]=(c[n>>2]|0)+1;f=f+1|0;e=e+-1|0}}while(0);U1(p);U1(o);return}function Cz(){return Vz(18240,c[4581]|0)|0}function Dz(a,b,d){a=a|0;b=b|0;d=d|0;d=KK(16)|0;c[d+12>>2]=0;c[d+8>>2]=c[b+8>>2];return d|0}function Ez(a,b,c){a=a|0;b=b|0;c=c|0;U1(b);return}function Fz(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;b=c[b>>2]|0;e=c[d>>2]|0;return ((b|0)<(e|0)?-1:(b|0)>(e|0)&1)|0}function Gz(a){a=a|0;Rz(a)|0;return}function Hz(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d;e=b+16|0;c[f+8>>2]=c[(c[e>>2]|0)+236>>2];a=(nb[c[a>>2]&63](a,f,1)|0)+12|0;c[(c[e>>2]|0)+164>>2]=c[a>>2];c[a>>2]=b;l=d;return}function Iz(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;h=l;l=l+16|0;g=h;f=b+16|0;c[g+8>>2]=c[(c[f>>2]|0)+236>>2];g=nb[c[a>>2]&63](a,g,4)|0;if(!g)qa(96322,96325,107,96335);e=g+12|0;d=c[e>>2]|0;if((d|0)==(b|0)){b=c[(c[f>>2]|0)+164>>2]|0;c[e>>2]=b;if(!b)nb[c[a>>2]&63](a,g,2)|0}else{do{a=(c[d+16>>2]|0)+164|0;d=c[a>>2]|0;e=(d|0)!=0}while(e&(d|0)!=(b|0));if(e)c[a>>2]=c[(c[d+16>>2]|0)+164>>2]}l=h;return}function Jz(a){a=a|0;var b=0,d=0,e=0,f=0;d=nb[c[a>>2]&63](a,0,128)|0;if(d){f=d+12|0;b=c[f>>2]|0;e=c[(c[b+16>>2]|0)+164>>2]|0;c[f>>2]=e;if(!e)nb[c[a>>2]&63](a,d,2)|0}else b=0;return b|0}function Kz(){return Vz(18276,c[4581]|0)|0}function Lz(a,b,d){a=a|0;b=b|0;d=d|0;d=KK(12)|0;c[d+8>>2]=c[b+8>>2];return d|0}function Mz(a,b,c){a=a|0;b=b|0;c=c|0;U1(b);return}function Nz(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;b=c[b>>2]|0;e=c[d>>2]|0;return (b>>>0>e>>>0?1:(b>>>0>>0)<<31>>31)|0}function Oz(a){a=a|0;Rz(a)|0;return}function Pz(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e+8>>2]=b;nb[c[a>>2]&63](a,e,1)|0;l=d;return}function Qz(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e+8>>2]=b;nb[c[a>>2]&63](a,e,2)|0;l=d;return}function Rz(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;do if((a|0)!=0?(c[a+24>>2]|0)<=0:0){h=c[a+4>>2]|0;g=h+32|0;b=c[g>>2]|0;if(b){b=ob[b&127](a,2,0,h)|0;if((b|0)<0){b=-1;break}}else b=0;if(c[a+28>>2]|0)_z(a,0)|0;f=(b|0)==0;if(f){nb[c[c[a+16>>2]>>2]&63](a,0,64)|0;if((Xz(a)|0)>0){b=-1;break}d=a+8|0;b=c[d>>2]|0;if((c[b+12>>2]|0)>0){e=a+12|0;ob[c[e>>2]&127](a,c[b+8>>2]|0,0,h)|0;b=c[d>>2]|0}else e=a+12|0;ob[c[e>>2]&127](a,b,0,h)|0}b=c[a+20>>2]|0;if(b){if(f&(b|0)==1)ob[c[a+12>>2]&127](a,a,0,h)|0}else U1(a);b=c[g>>2]|0;if(!b)b=0;else{ob[b&127](a,6,0,h)|0;b=0}}else b=-1;while(0);return b|0}function Sz(a){a=a|0;var b=0,d=0,e=0;e=a+8|0;b=c[e>>2]|0;d=c[b>>2]|0;a:do if(!(d&12)){if(!(d&3)){d=b+8|0;a=c[d>>2]|0;c[d>>2]=0;break}a=Tz(a)|0;d=c[e>>2]|0;b=c[d+8>>2]|0;d=b+(c[d+12>>2]<<2)|0;while(1){if(b>>>0>=d>>>0)break a;c[b>>2]=0;b=b+4|0}}else a=c[b+4>>2]|0;while(0);e=c[e>>2]|0;c[e>>2]=c[e>>2]&-4097;c[e+16>>2]=0;c[e+4>>2]=0;return a|0}function Tz(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;g=a+8|0;a=c[g>>2]|0;b=c[a>>2]|0;if(!(b&4096)){a:do if(!(b&3)){if(b&112|0){a=c[a+8>>2]|0;break}a=c[a+4>>2]|0;if(!a)a=0;else{while(1){b=a+4|0;d=c[b>>2]|0;if(!d){e=a;break}c[b>>2]=c[d>>2];c[d>>2]=a;a=d}while(1){b=c[e>>2]|0;if(!b)break a;d=c[b+4>>2]|0;if(!d){e=b;continue}while(1){c[b+4>>2]=c[d>>2];c[d>>2]=b;b=c[d+4>>2]|0;if(!b)break;else{f=d;d=b;b=f}}c[e>>2]=d;e=d}}}else{e=c[a+8>>2]|0;f=e+(c[a+12>>2]<<2)|0;b=0;a=0;while(1){if(e>>>0>=f>>>0)break a;d=c[e>>2]|0;if(d){if(!b){b=d;a=d}else c[b>>2]=d;while(1){d=c[b>>2]|0;if(!d)break;else b=d}c[e>>2]=b}e=e+4|0}}while(0);g=c[g>>2]|0;c[g+4>>2]=a;c[g>>2]=c[g>>2]|4096}else a=c[a+4>>2]|0;return a|0}function Uz(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;s=a+8|0;if(c[c[s>>2]>>2]&4096|0)Wz(a,0)|0;r=c[a+4>>2]|0;m=c[r>>2]|0;n=c[r+4>>2]|0;q=r+8|0;u=c[q>>2]|0;o=c[r+20>>2]|0;p=a+20|0;f=c[p>>2]&-32769;c[p>>2]=f;a:do if(!b){if(d&384|0){f=c[s>>2]|0;e=c[f+8>>2]|0;if(!e){e=0;break}if(d&256){e=c[e+4>>2]|0;c[f+4>>2]=e;if(!e){e=0;break}}else c[f+4>>2]=e;if((u|0)<0){e=c[e+8>>2]|0;break}else{e=e+(0-u)|0;break}}if(d&4098|0){e=c[s>>2]|0;if(c[e>>2]&144|0){e=0;break}e=c[e+8>>2]|0;if(!e){e=0;break}else{h=e;t=84;break}}if(!(d&64))e=0;else{i=r+16|0;b:do if((c[i>>2]|0)!=0|(u|0)<0){j=a+12|0;k=(u|0)<0;f=0-u|0;e=c[(c[s>>2]|0)+8>>2]|0;while(1){if(!e)break b;g=c[e>>2]|0;h=c[i>>2]|0;if(h|0){if(k)b=c[e+8>>2]|0;else b=e+f|0;vb[h&127](a,b,r)}if((c[q>>2]|0)>=0){e=g;continue}ob[c[j>>2]&127](a,e,0,r)|0;e=g}}while(0);e=c[s>>2]|0;c[e+4>>2]=0;c[e+8>>2]=0;c[(c[s>>2]|0)+16>>2]=0;e=0}}else{if(d&2049|0){g=r+12|0;e=c[g>>2]|0;h=(d&1|0)==0;if(!(h|(e|0)==0)){e=nb[e&63](a,b,r)|0;if(!e){e=0;break}else f=e}else f=b;do if((u|0)>-1)h=f+u|0;else{e=ob[c[a+12>>2]&127](a,0,12,r)|0;if(e|0){c[e+8>>2]=f;h=e;break}if(!(c[g>>2]|0)){e=0;break a}e=c[r+16>>2]|0;if(h|(e|0)==0){e=0;break a}vb[e&127](a,f,r);e=0;break a}while(0);g=c[s>>2]|0;e=c[g>>2]|0;do if(!(e&128)){if(!(e&16))if(!(e&32)){t=51;break}else{t=48;break}f=c[g+4>>2]|0;e=(f|0)!=0;if(!(d&8192)){if(!e){t=48;break}if((f|0)==(c[g+8>>2]|0)){t=48;break}r=f+4|0;a=c[r>>2]|0;c[h+4>>2]=a;c[a>>2]=h;c[h>>2]=f;c[r>>2]=h;break}else{if(!e){t=51;break}e=c[f>>2]|0;if(!e){t=51;break}c[h>>2]=e;c[e+4>>2]=h;c[h+4>>2]=f;c[f>>2]=h;break}}else if(!(d&8192))t=48;else t=51;while(0);if((t|0)==48){e=c[g+8>>2]|0;c[h>>2]=e;if(!e)e=h;else c[h+4>>2]=c[e+4>>2];c[e+4>>2]=h;c[(c[s>>2]|0)+8>>2]=h}else if((t|0)==51){f=g+8|0;e=c[f>>2]|0;if(!e){c[f>>2]=h;e=h}else{r=e+4|0;c[c[r>>2]>>2]=h;c[h+4>>2]=c[r>>2]}c[e+4>>2]=h;c[h>>2]=0}e=c[s>>2]|0;f=e+16|0;g=c[f>>2]|0;if((g|0)>-1)c[f>>2]=g+1;c[e+4>>2]=h;if((u|0)<0){e=c[h+8>>2]|0;break}else{e=h+(0-u)|0;break}}h=c[s>>2]|0;do if(!(d&512)){e=c[h+4>>2]|0;if(e|0){if((u|0)<0)g=c[e+8>>2]|0;else g=e+(0-u)|0;if((g|0)==(b|0))break}e=b+m|0;if((n|0)<0){b=c[e>>2]|0;t=68}else{b=e;t=68}}else t=68;while(0);if((t|0)==68){g=(u|0)<0;i=(n|0)<0;j=(o|0)==0;k=(n|0)<1;l=0-u|0;e=h+8|0;do{e=c[e>>2]|0;if(!e){e=0;break a}if(g)f=c[e+8>>2]|0;else f=e+l|0;f=f+m|0;if(i)f=c[f>>2]|0;do if(j)if(k){f=s2(b,f)|0;break}else{f=$3(b,f,n)|0;break}else f=ob[o&127](a,b,f,r)|0;while(0)}while((f|0)!=0);f=c[p>>2]|0}c[p>>2]=f|32768;if(!(d&4098)){do if(!(d&8)){f=c[s>>2]|0;if(!(d&16)){c[f+4>>2]=e;break}if((e|0)==(c[f+8>>2]|0)){c[f+4>>2]=0;e=0;break a}else{e=e+4|0;t=108;break}}else{f=c[s>>2]|0;t=108}while(0);if((t|0)==108){e=c[e>>2]|0;c[f+4>>2]=e;if(!e){e=0;break}}if((u|0)<0){e=c[e+8>>2]|0;break}else{e=e+(0-u)|0;break}}else{h=e;t=84}}while(0);if((t|0)==84){e=c[h>>2]|0;if(e){c[e+4>>2]=c[h+4>>2];e=c[h>>2]|0}f=(c[s>>2]|0)+8|0;g=c[f>>2]|0;if((h|0)==(g|0)){c[f>>2]=e;e=c[(c[s>>2]|0)+8>>2]|0;if(e|0)c[e+4>>2]=c[h+4>>2]}else{f=h+4|0;c[c[f>>2]>>2]=e;e=g+4|0;if((h|0)==(c[e>>2]|0))c[e>>2]=c[f>>2]}e=c[s>>2]|0;f=e+4|0;if((h|0)==(c[f>>2]|0))g=c[h>>2]|0;else g=0;c[f>>2]=g;t=e+16|0;c[t>>2]=(c[t>>2]|0)+-1;if((u|0)<0)e=c[h+8>>2]|0;else e=h+(0-u)|0;f=c[r+16>>2]|0;if(!((d&2|0)==0|(f|0)==0))vb[f&127](a,e,r);if((c[q>>2]|0)<0)ob[c[a+12>>2]&127](a,h,0,r)|0}return e|0}function Vz(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;j=l;l=l+16|0;g=j;a:do if((a|0)!=0&(b|0)!=0?(f=T1(40)|0,(f|0)!=0):0){c[f>>2]=0;c[f+16>>2]=0;c[f+4>>2]=0;bA(f,a,0)|0;d=f+20|0;i=a+32|0;c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=0;c[d+16>>2]=0;d=c[i>>2]|0;do if(d){c[g>>2]=0;d=ob[d&127](f,1,g,a)|0;if((d|0)>=0)if(d){e=c[g>>2]|0;if(e|0)if(!(c[b+4>>2]&c[e>>2])){d=f;h=12;break}else{d=f;break}d=a+28|0;if(!(c[d>>2]|0)){d=f;h=12}else{U1(f);e=ob[c[d>>2]&127](0,0,40,a)|0;if(!e){d=0;break a}c[e>>2]=0;c[e+16>>2]=0;c[e+4>>2]=0;bA(e,a,0)|0;c[e+20>>2]=1;c[e+24>>2]=0;c[e+32>>2]=0;c[e+28>>2]=0;d=e;f=e;h=11}}else{d=f;h=11}else{d=f;h=12}}else{d=f;h=11}while(0);if((h|0)==11){e=ob[c[d+12>>2]&127](d,0,28,a)|0;c[g>>2]=e;if(!e){d=f;h=12}else{c[e>>2]=c[b+4>>2];g=e+4|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;c[g+12>>2]=0;c[g+16>>2]=0;c[g+20>>2]=0}}if((h|0)==12){U1(d);d=0;break}c[d+8>>2]=e;c[d>>2]=c[b>>2];c[d+16>>2]=b;e=c[i>>2]|0;if(e)ob[e&127](d,5,f,a)|0}else d=0;while(0);l=j;return d|0}function Wz(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;f=c[c[a+16>>2]>>2]|0;j=a+8|0;g=c[j>>2]|0;h=c[g>>2]|0;d=h&4096;if(!b)if(!d)b=-1;else{e=d;b=c[g+4>>2]|0;i=5}else if(!(c[g+16>>2]|0)){e=0;i=5}else b=-1;a:do if((i|0)==5){c[g>>2]=h&-4097;if(!(h&3)){d=g+4|0;if(!(h&12)){c[d>>2]=0;d=g+8|0}c[d>>2]=b;if(e|0){b=0;break}c[(c[j>>2]|0)+16>>2]=-1;b=0;break}c[g+4>>2]=0;if(!e){c[g+16>>2]=0;while(1){if(!b){b=0;break a}j=c[b>>2]|0;nb[f&63](a,b,32)|0;b=j}}e=c[g+8>>2]|0;a=e+(c[g+12>>2]<<2)|0;while(1){if(e>>>0>=a>>>0){b=0;break a}d=c[e>>2]|0;if(d){c[e>>2]=b;b=c[d>>2]|0;c[d>>2]=0}e=e+4|0}}while(0);return b|0}function Xz(a){a=a|0;var b=0,d=0,e=0;b=a+8|0;d=c[b>>2]|0;if(c[d>>2]&4096){Wz(a,0)|0;d=c[b>>2]|0}e=d+16|0;a=c[e>>2]|0;do if((a|0)<0){b=c[d>>2]|0;if(b&12|0){a=Yz(c[d+4>>2]|0)|0;c[e>>2]=a;break}if(b&112){a=0;b=d+8|0;while(1){b=c[b>>2]|0;if(!b)break;a=a+1|0}c[e>>2]=a}}while(0);return a|0}function Yz(a){a=a|0;var b=0;if(!a)return 0;else{b=Yz(c[a+4>>2]|0)|0;return b+1+(Yz(c[a>>2]|0)|0)|0}return 0}function Zz(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0;G=l;l=l+128|0;z=G+120|0;r=G;F=a+8|0;e=c[F>>2]|0;if(c[e>>2]&4096){Wz(a,0)|0;e=c[F>>2]|0}E=c[a+4>>2]|0;A=c[E>>2]|0;B=c[E+4>>2]|0;x=E+8|0;D=c[x>>2]|0;C=c[E+20>>2]|0;t=a+20|0;c[t>>2]=c[t>>2]&-32769;h=c[e+4>>2]|0;a:do if(!b)if((d&448|0)==0|(h|0)==0)e=0;else{if(!(d&64)){b:do if(!(d&256)){e=h;while(1){f=e+4|0;g=c[f>>2]|0;if(!g)break b;c[f>>2]=c[g>>2];c[g>>2]=e;e=g}}else{e=h;while(1){f=c[e>>2]|0;if(!f)break b;a=f+4|0;c[e>>2]=c[a>>2];c[a>>2]=e;e=f}}while(0);c[(c[F>>2]|0)+4>>2]=e;if((D|0)<0){e=c[e+8>>2]|0;break}else{e=e+(0-D)|0;break}}b=E+16|0;if((c[b>>2]|0)!=0|(D|0)<0){j=a+12|0;k=(D|0)<0;i=0-D|0;e=h;do{h=e;while(1){e=h+4|0;f=c[e>>2]|0;if(!f)break;c[e>>2]=c[f>>2];c[f>>2]=h;h=f}e=c[h>>2]|0;f=c[b>>2]|0;if(f|0){if(k)g=c[h+8>>2]|0;else g=h+i|0;vb[f&127](a,g,E)}if((c[x>>2]|0)<0)ob[c[j>>2]&127](a,h,0,E)|0}while((e|0)!=0);e=c[F>>2]|0}c[e+16>>2]=0;c[e+4>>2]=0;e=0}else{y=a+16|0;u=(d&4098|0)==0;c:do if(u|(c[(c[y>>2]|0)+4>>2]|0)!=8)v=45;else{k=(B|0)<0;e=b+A|0;if(k)e=c[e>>2]|0;i=(C|0)==0;j=(B|0)<1;g=nb[c[a>>2]&63](a,b,4)|0;while(1){if(!g){v=45;break c}f=g+A|0;if(k)f=c[f>>2]|0;do if(i)if(j){f=s2(e,f)|0;break}else{f=$3(e,f,B)|0;break}else f=ob[C&127](a,e,f,E)|0;while(0);if(f|0){v=45;break c}if((g|0)==(b|0))break;g=nb[c[a>>2]&63](a,g,8)|0}h=c[(c[F>>2]|0)+4>>2]|0;c[z>>2]=c[h+4>>2];c[z+4>>2]=c[h>>2];e=z;v=180}while(0);d:do if((v|0)==45){do if(!(d&2565)){if(d&32|0){if((D|0)<0)g=c[b+8>>2]|0;else g=b+(0-D)|0;e=g+A|0;if((B|0)<0)f=c[e>>2]|0;else f=e;if(!h){e=b;f=z;h=z;v=198;break}else{e=b;s=f;j=b;v=64;break}}if(h){if((D|0)<0)e=c[h+8>>2]|0;else e=h+(0-D)|0;if((e|0)!=(b|0)){f=b+A|0;if((B|0)<0){g=b;e=0;s=c[f>>2]|0;j=0;v=64}else{g=b;e=0;s=f;j=0;v=64}}else{e=0;g=b;f=z;k=z;j=0;v=141}}else{e=0;g=b;f=z;h=z;v=198}}else{if(!(d&512)){e=b+A|0;if((B|0)<0)f=c[e>>2]|0;else f=e}else f=b;if(!h){e=0;g=b;f=z;h=z;v=198}else{g=b;e=0;s=f;j=0;v=64}}while(0);e:do if((v|0)==64){f:do if((c[(c[y>>2]|0)+4>>2]|0)==4?(q=c[(c[F>>2]|0)+24>>2]|0,!((d&516|0)==0|(q|0)==0)):0){b=(D|0)<0;m=(B|0)<0;n=(C|0)==0;o=(B|0)<1;p=0-D|0;k=0;f=h;while(1){if((k|0)>=(q|0)){f=z;k=z;m=0;break}if(b)i=c[f+8>>2]|0;else i=f+p|0;i=i+A|0;if(m)i=c[i>>2]|0;do if(n)if(o){i=s2(s,i)|0;break}else{i=$3(s,i,B)|0;break}else i=ob[C&127](a,s,i,E)|0;while(0);if(!i){v=80;break}c[r+(k<<2)>>2]=i;f=c[((i|0)<0?f+4|0:f)>>2]|0;if(!f){e=0;break a}else k=k+1|0}if((v|0)==80)if(b){e=c[f+8>>2]|0;break a}else{e=f+p|0;break a}while(1){if((m|0)>=(q|0))break f;do if((c[r+(m<<2)>>2]|0)<0){i=h+4|0;b=c[i>>2]|0;if((c[r+((m|1)<<2)>>2]|0)<0){c[i>>2]=c[b>>2];c[b>>2]=h;c[f+4>>2]=b;f=b;h=k;i=b+4|0;break}else{c[k>>2]=b;c[f+4>>2]=h;f=h;h=b;i=b;break}}else{i=c[h>>2]|0;if((c[r+((m|1)<<2)>>2]|0)>0){p=i+4|0;c[h>>2]=c[p>>2];c[p>>2]=h;c[k>>2]=i;h=i;break}else{c[f+4>>2]=i;c[k>>2]=h;f=i;i=i+4|0;break}}while(0);k=h;m=m+2|0;h=c[i>>2]|0}}else{f=z;k=z}while(0);n=(D|0)<0;o=(B|0)<0;p=(C|0)!=0;q=(B|0)<1;r=0-D|0;i=h;g:while(1){h=i;while(1){if(n)i=c[h+8>>2]|0;else i=h+r|0;i=i+A|0;if(o)i=c[i>>2]|0;do if(!p)if(q){i=s2(s,i)|0;break}else{i=$3(s,i,B)|0;break}else i=ob[C&127](a,s,i,E)|0;while(0);if(!i){v=140;break g}if((i|0)>=0)break;b=h+4|0;m=c[b>>2]|0;if(!m){v=121;break g}if(n)i=c[m+8>>2]|0;else i=m+r|0;i=i+A|0;if(o)i=c[i>>2]|0;do if(!p)if(q){i=s2(s,i)|0;break}else{i=$3(s,i,B)|0;break}else i=ob[C&127](a,s,i,E)|0;while(0);if((i|0)>=0){v=118;break}c[b>>2]=c[m>>2];c[m>>2]=h;c[f+4>>2]=m;h=c[m+4>>2]|0;if(!h){f=m;h=k;v=198;break e}else f=m}if((v|0)==118){v=0;if(!i){v=119;break}c[k>>2]=m;c[f+4>>2]=h;i=c[m>>2]|0;if(!i){f=h;h=m;v=198;break e}else{f=h;k=m;continue}}b=c[h>>2]|0;if(!b){v=139;break}if(n)i=c[b+8>>2]|0;else i=b+r|0;i=i+A|0;if(o)i=c[i>>2]|0;do if(!p)if(q){i=s2(s,i)|0;break}else{i=$3(s,i,B)|0;break}else i=ob[C&127](a,s,i,E)|0;while(0);if((i|0)>0){i=b+4|0;c[h>>2]=c[i>>2];c[i>>2]=h;c[k>>2]=b;i=c[b>>2]|0;if(!i){h=b;v=198;break e}else{k=b;continue}}if(!i){v=137;break}c[f+4>>2]=b;c[k>>2]=h;i=c[b+4>>2]|0;if(!i){f=b;v=198;break e}else{f=b;k=h}}if((v|0)==119){c[f+4>>2]=h;f=h;h=m;v=141;break}else if((v|0)==121){c[f+4>>2]=h;f=h;h=k;v=198;break}else if((v|0)==137){c[k>>2]=h;k=h;h=b;v=141;break}else if((v|0)==139){c[k>>2]=h;v=198;break}else if((v|0)==140)if(!h){h=k;v=198;break}else{v=141;break}}while(0);do if((v|0)==141){c[t>>2]=c[t>>2]|32768;i=h+4|0;c[k>>2]=c[i>>2];c[f+4>>2]=c[h>>2];if(!(d&516)){if(d&8|0){c[i>>2]=c[z>>2];c[h>>2]=0;c[z>>2]=h;v=169;break}if(d&16|0){v=z+4|0;c[h>>2]=c[v>>2];c[i>>2]=0;c[v>>2]=h;v=175;break}if(!u){e=f;v=180;break d}if(d&2049|0){if(c[(c[y>>2]|0)+4>>2]&4|0){e=h;break}c[i>>2]=0;e=z+4|0;c[h>>2]=c[e>>2];c[e>>2]=h;e=h;v=205;break}if(!(d&32)){e=0;break a}if(!(c[(c[y>>2]|0)+4>>2]&4)){c[e+4>>2]=0;x=z+4|0;c[e>>2]=c[x>>2];c[x>>2]=j;e=(c[F>>2]|0)+16|0;c[e>>2]=(c[e>>2]|0)+1;e=h;break}e=c[E+16>>2]|0;if(e|0)vb[e&127](a,g,E);if((c[x>>2]|0)<0){ob[c[a+12>>2]&127](a,j,0,E)|0;e=h}else e=h}else e=h}else if((v|0)==198){c[f+4>>2]=0;c[h>>2]=0;if(!(d&8))if(!(d&16)){if(d&516|0){e=f;break d}if(!(d&2049)){if(!(d&32)){g=0;e=f;break d}x=(c[F>>2]|0)+16|0;c[x>>2]=(c[x>>2]|0)+1}else{e=0;v=205}}else v=175;else v=169}while(0);if((v|0)==169){h=z+4|0;e=c[h>>2]|0;if(!e){e=f;break}while(1){f=e+4|0;g=c[f>>2]|0;if(!g)break;c[f>>2]=c[g>>2];c[g>>2]=e;e=g}c[h>>2]=c[e>>2]}else if((v|0)==175){e=c[z>>2]|0;if(!e){e=f;break}while(1){f=c[e>>2]|0;if(!f)break;x=f+4|0;c[e>>2]=c[x>>2];c[x>>2]=e;e=f}c[z>>2]=c[e+4>>2]}else if((v|0)==205){i=E+12|0;h=c[i>>2]|0;j=(d&1|0)==0;if(!(j|(h|0)==0))g=nb[h&63](a,g,E)|0;do if(g){if((D|0)>-1){e=g+D|0;v=215;break}e=ob[c[a+12>>2]&127](a,0,12,E)|0;if(e|0){c[e+8>>2]=g;break}if((c[i>>2]|0)!=0?(w=c[E+16>>2]|0,!(j|(w|0)==0)):0){vb[w&127](a,g,E);v=215}else v=215}else v=215;while(0);if((v|0)==215)if(!e){e=f;break}f=(c[F>>2]|0)+16|0;g=c[f>>2]|0;if((g|0)>-1)c[f>>2]=g+1}c[e+4>>2]=c[z>>2];c[e>>2]=c[z+4>>2];h:do if(!((d&516|0)==0?1:(c[(c[y>>2]|0)+4>>2]&8|0)==0)){m=(D|0)<0;if(m)f=c[e+8>>2]|0;else f=e+(0-D)|0;n=(B|0)<0;f=f+A|0;if(n)f=c[f>>2]|0;j=(C|0)==0;k=(B|0)<1;b=0-D|0;while(1){i=e+4|0;g=c[i>>2]|0;if(!g)break h;while(1){h=c[g>>2]|0;if(!h)break;z=h+4|0;c[g>>2]=c[z>>2];c[z>>2]=g;g=h}c[i>>2]=g;if(m)h=c[g+8>>2]|0;else h=g+b|0;h=h+A|0;if(n)h=c[h>>2]|0;do if(j)if(k){h=s2(f,h)|0;break}else{h=$3(f,h,B)|0;break}else h=ob[C&127](a,f,h,E)|0;while(0);if(h|0)break h;c[i>>2]=c[g>>2];c[g>>2]=e;e=g}}while(0);c[(c[F>>2]|0)+4>>2]=e;if((D|0)<0){e=c[e+8>>2]|0;break a}else{e=e+(0-D)|0;break a}}while(0);if((v|0)==180){if((D|0)<0)g=c[h+8>>2]|0;else g=h+(0-D)|0;f=c[E+16>>2]|0;if(!((d&2|0)==0|(f|0)==0))vb[f&127](a,g,E);if((c[x>>2]|0)<0)ob[c[a+12>>2]&127](a,h,0,E)|0;a=(c[F>>2]|0)+16|0;E=c[a>>2]|0;c[a>>2]=(E|0)<1?-1:E+-1|0}do{f=e+4|0;e=c[f>>2]|0}while((e|0)!=0);c[f>>2]=c[z>>2];c[(c[F>>2]|0)+4>>2]=c[z+4>>2];e=d&2|0?g:0}while(0);l=G;return e|0}function _z(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;if(c[c[a+8>>2]>>2]&4096|0)Wz(a,0)|0;f=(b|0)!=0;if(f){if(c[c[b+8>>2]>>2]&4096|0)Wz(b,0)|0;if((c[b+16>>2]|0)==(c[a+16>>2]|0)){d=b;e=7}else b=0}else{d=0;e=7}a:do if((e|0)==7){while(1){if(!d)break;if((d|0)==(a|0)){b=0;break a}d=c[d+28>>2]|0;e=7}d=a+28|0;e=c[d>>2]|0;if(e|0){g=e+24|0;c[g>>2]=(c[g>>2]|0)+-1}c[a+32>>2]=0;c[d>>2]=0;if(f){c[d>>2]=b;c[a>>2]=28;g=b+24|0;c[g>>2]=(c[g>>2]|0)+1;break}else{c[a>>2]=c[c[a+16>>2]>>2];b=e;break}}while(0);return b|0}function $z(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;a:do if(!(d&99)){if((d&516|0)==0?(e=c[(c[a+16>>2]|0)+4>>2]|0,!((d&384|0)!=0&(e&12|0)==0)):0){if(e&12|0){if(!(d&408)){e=0;break}o=(d&136|0)!=0;p=(d&272|0)!=0;l=0;f=0;e=0;n=a;while(1){if(!n)break;m=nb[c[c[n+16>>2]>>2]&63](n,b,d)|0;do if(!m)g=l;else{h=c[n+4>>2]|0;i=c[h+4>>2]|0;j=c[h+20>>2]|0;g=m+(c[h>>2]|0)|0;if((i|0)<0)k=c[g>>2]|0;else k=g;if(e|0){do if(!j)if((i|0)<1){g=s2(k,f)|0;break}else{g=$3(k,f,i)|0;break}else g=ob[j&127](n,k,f,h)|0;while(0);if(!(o&(g|0)<0|p&(g|0)>0)){g=l;break}}g=n;f=k;e=m}while(0);l=g;n=c[n+28>>2]|0}c[a+32>>2]=l;break}if(!(d&24)){e=0;break}j=a+32|0;f=c[j>>2]|0;if(f){e=c[(c[f+4>>2]|0)+8>>2]|0;g=c[(c[f+8>>2]|0)+4>>2]|0;if((e|0)<0)e=c[g+8>>2]|0;else e=g+(0-e)|0;if((e|0)==(b|0))e=b;else{f=a;h=32}}else{f=a;h=32}do if((h|0)==32){while(1){if(!f){h=33;break}e=nb[c[c[f+16>>2]>>2]&63](f,b,4)|0;if(e|0){h=36;break}f=c[f+28>>2]|0;h=32}if((h|0)==33){c[j>>2]=0;e=0;break a}else if((h|0)==36){c[j>>2]=f;break}}while(0);i=(d<<4&128^128)+128|0;e=nb[c[c[f+16>>2]>>2]&63](f,e,d)|0;while(1){h=f+16|0;while(1){if(!e)break;else g=a;while(1){if((g|0)==(f|0))break a;if(nb[c[c[g+16>>2]>>2]&63](g,e,4)|0)break;g=c[g+28>>2]|0}e=nb[c[c[h>>2]>>2]&63](f,e,d)|0}f=c[f+28>>2]|0;c[j>>2]=f;if(!f){e=0;break a}e=nb[c[c[f+16>>2]>>2]&63](f,0,i)|0}}else f=a;while(1){if(!f){f=0;e=0;break}e=nb[c[c[f+16>>2]>>2]&63](f,b,d)|0;if(e|0)break;f=c[f+28>>2]|0}c[a+32>>2]=f}else e=nb[c[c[a+16>>2]>>2]&63](a,b,d)|0;while(0);return e|0}function aA(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;g=a+32|0;f=nb[c[a>>2]&63](a,0,128)|0;do{if(!f){e=0;break}h=c[g>>2]|0;e=f;f=nb[c[a>>2]&63](a,f,8)|0;e=nb[b&63]((h|0)==0?a:h,e,d)|0}while((e|0)>=0);return e|0}function bA(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;f=a+4|0;n=c[f>>2]|0;a:do if(n)if(b){m=c[c[a+16>>2]>>2]|0;g=a+8|0;if(c[c[g>>2]>>2]&4096|0)Wz(a,0)|0;e=c[n+32>>2]|0;if(e|0?(ob[e&127](a,3,b,n)|0)<0:0){b=0;break}c[f>>2]=b;e=c[b+28>>2]|0;c[a+12>>2]=(e|0)==0?52:e;e=c[c[g>>2]>>2]|0;if(!(e&112)){do if(!(e&2))if(!(e&3))if(!(d&1))break;else{b=n;break a}else if((d&3|0)==3){b=n;break a}else break;else if(d&2|0){b=n;break a}while(0);h=Tz(a)|0;e=c[g>>2]|0;l=c[e>>2]|0;c[e>>2]=l&-4097;c[e+4>>2]=0;c[e+16>>2]=0;b:do if(l&3|0){l=c[e+8>>2]|0;f=l+(c[e+12>>2]<<2)|0;e=l;while(1){if(e>>>0>=f>>>0)break b;c[e>>2]=0;e=e+4|0}}while(0);i=(d&2|0)==0;j=b+8|0;k=b+4|0;l=b+24|0;while(1){if(!h){b=n;break a}d=c[h>>2]|0;if(i){e=c[j>>2]|0;if((e|0)<0)e=c[h+8>>2]|0;else e=h+(0-e)|0;g=c[k>>2]|0;e=e+(c[b>>2]|0)|0;if((g|0)<0)e=c[e>>2]|0;f=c[l>>2]|0;if(!f)e=dA(0,e,g)|0;else e=nb[f&63](a,e,b)|0;c[h+4>>2]=e}nb[m&63](a,h,32)|0;h=d}}else b=n}else b=n;else{c[f>>2]=b;n=c[b+28>>2]|0;c[a+12>>2]=(n|0)==0?52:n}while(0);return b|0}function cA(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;a=(c|0)==0;do if(!b)if(a)a=0;else a=T1(c)|0;else if(a){U1(b);a=0;break}else{a=W1(b,c)|0;break}while(0);return a|0}function dA(b,c,e){b=b|0;c=c|0;e=e|0;var f=0,g=0,h=0;g=c;if((e|0)>=1){h=c+e+-1|0;g=(h>>>0>>0?c:h)+(1-g)&-2;f=c;while(1){if(f>>>0>=h>>>0)break;b=O(((d[f>>0]|0)<<8)+b+(d[f+1>>0]|0)|0,17109811)|0;f=f+2|0}f=c+g|0;if(f>>>0>h>>>0)c=e;else{c=e;b=O(((d[f>>0]|0)<<8)+b|0,17109811)|0}}else{while(1){f=a[c>>0]|0;if(!(f<<24>>24))break;h=a[c+1>>0]|0;e=O(((f&255)<<8)+b+(h&255)|0,17109811)|0;b=e;c=c+(h<<24>>24?2:1)|0}c=c-g|0}return O(b+c|0,17109811)|0}function eA(a){a=a|0;var b=0;b=c[46935]|0;c[46935]=a;return b|0}function fA(a){a=a|0;var b=0;b=c[46936]|0;c[46936]=a;return b|0}function gA(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=d;d=hA(a,b,f)|0;l=e;return d|0}function hA(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;g=l;l=l+16|0;e=g;f=(a|0)==3;h=f?c[46938]|0:(a|0)==2?1:a;c[46938]=h;i=c[46939]|0;c[46939]=i>>>0>h>>>0?i:h;do if(h>>>0<(c[46936]|0)>>>0){a=c[46937]|0;if(!a){a=C6()|0;c[46937]=a;if(!a){a=1;break}}if(!f){F6(a)|0;a=c[46937]|0}H3(a,b,d)|0;a=0}else{if(c[46935]|0){iA(a,b,d);a=0;break}if(f)a=c[15712]|0;else{i=c[15712]|0;c[e>>2]=(a|0)==1?96349:96355;w4(i,96363,e)|0;a=i}H3(a,b,d)|0;a=0}while(0);l=g;return a|0}function iA(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;if((c[46940]|0)==0?(f=T1(c[4590]|0)|0,c[46940]=f,(f|0)==0):0)T4(96368,c[15712]|0)|0;else e=4;do if((e|0)==4){if((a|0)!=3){kb[c[46935]&63]((a|0)==1?96349:96355)|0;kb[c[46935]&63](97027)|0}while(1){a=G3(c[46940]|0,c[4590]|0,b,d)|0;e=c[4590]|0;if((a|0)>-1&(a|0)<(e|0)){e=7;break}e=e<<1;f=a+1|0;f=(e|0)>(f|0)?e:f;c[4590]=f;if(!(W1(c[46940]|0,f)|0)){e=9;break}}if((e|0)==7){kb[c[46935]&63](c[46940]|0)|0;break}else if((e|0)==9){T4(96368,c[15712]|0)|0;break}}while(0);return}function jA(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;hA(1,a,e)|0;l=d;return}function kA(b,d,e){b=b|0;d=d|0;e=e|0;var f=0;if(!e){e=(d|0)==0?1024:d;d=e;e=T1(e)|0;f=1}else f=0;c[b+12>>2]=f;c[b>>2]=e;c[b+8>>2]=e+d;c[b+4>>2]=e;a[e>>0]=0;return}function lA(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;h=a+8|0;f=c[a>>2]|0;g=(c[h>>2]|0)-f|0;e=g<<1;g=g+b|0;e=g>>>0>e>>>0?g:e;g=a+4|0;b=f;f=(c[g>>2]|0)-f|0;d=a+12|0;if(!(c[d>>2]|0)){i=T1(e)|0;W6(i|0,b|0,f|0)|0;c[d>>2]=1;b=i}else b=W1(b,e)|0;c[a>>2]=b;c[g>>2]=b+f;c[h>>2]=b+e;return 0}function mA(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;f=a+4|0;e=c[f>>2]|0;if((e+d|0)>>>0>(c[a+8>>2]|0)>>>0){lA(a,d)|0;e=c[f>>2]|0}W6(e|0,b|0,d|0)|0;c[f>>2]=(c[f>>2]|0)+d;return d|0}function nA(a,b){a=a|0;b=b|0;return mA(a,b,l2(b)|0)|0}function oA(a){a=a|0;if(c[a+12>>2]|0)U1(c[a>>2]|0);return}function pA(a){a=a|0;var b=0,e=0;b=a+4|0;e=c[b>>2]|0;if(e>>>0>(c[a>>2]|0)>>>0){c[b>>2]=e+-1;a=d[e>>0]|0}else a=-1;return a|0}function qA(a,b,d){a=a|0;b=b|0;d=d|0;hD(c[46942]|0,c[b+8>>2]|0)|0;hD(c[46942]|0,c[b+12>>2]|0)|0;eC(c[46942]|0,b);return}function rA(a,b){a=a|0;b=b|0;var c=0;c=RC(a,96416,0)|0;if((b|0)!=0&(c|0)==0){sA(a);c=RC(a,96416,0)|0}return c|0}function sA(a){a=a|0;var b=0,c=0,d=0;d=yC(a)|0;BE(d,d,107,0,1)|0;c=jC(d)|0;while(1){if(!c)break;uA(a,c);b=XA(d,c)|0;while(1){if(!b)break;vA(a,b);b=ZA(d,b)|0}c=kC(d,c)|0}return}function tA(b){b=b|0;var c=0;c=b+24|0;a[c>>0]=a[c>>0]|64;AA(b);c=QD(b)|0;xA((c|0)==0?b:c,b);return}function uA(a,b){a=a|0;b=b|0;var d=0;d=wA(b)|0;if(!((d|0)!=0?(c[d+8>>2]|0)!=0:0))xA(a,b);return}function vA(a,b){a=a|0;b=b|0;var d=0;d=wA(b)|0;if(!((d|0)!=0?(c[d+8>>2]|0)!=0:0))xA(a,b);return}function wA(a){a=a|0;return RC(a,96404,0)|0}function xA(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=TC(b,96404,16,0)|0;f=yA(a,c[b>>2]&3)|0;e=d+8|0;a:do if(!(c[e>>2]|0)){a=yC(a)|0;c[e>>2]=yA(a,c[b>>2]&3)|0;a=zA(b)|0;d=d+12|0;c[d>>2]=dC(xC(b)|0,((a|0)>4?a:4)<<2)|0;a=nb[c[f>>2]&63](f,0,128)|0;while(1){if(!a)break a;e=xC(b)|0;e=fD(e,c[a+12>>2]|0)|0;c[(c[d>>2]|0)+(c[a+16>>2]<<2)>>2]=e;a=nb[c[f>>2]&63](f,a,8)|0}}while(0);return}function yA(a,b){a=a|0;b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;a=rA(a,0)|0;a:do if(!a)a=0;else switch(b|0){case 0:{a=c[a+16>>2]|0;break a}case 1:{a=c[a+8>>2]|0;break a}case 2:case 3:{a=c[a+12>>2]|0;break a}default:{c[d>>2]=b;gA(1,96429,d)|0;a=0;break a}}while(0);l=e;return a|0}function zA(a){a=a|0;var b=0;b=yC(xC(a)|0)|0;a=yA(b,c[a>>2]&3)|0;if(!a)a=0;else a=Xz(a)|0;return a|0}function AA(a){a=a|0;var b=0,d=0,e=0,f=0;d=TC(a,96416,20,0)|0;e=d+8|0;c[e>>2]=UD(a,18364,c[4589]|0)|0;f=d+12|0;c[f>>2]=UD(a,18364,c[4589]|0)|0;d=d+16|0;c[d>>2]=UD(a,18364,c[4589]|0)|0;b=QD(a)|0;if(!b){b=c[46941]|0;if(!((b|0)==0|(b|0)==(a|0))){b=rA(b,0)|0;BA(c[b+8>>2]|0,c[e>>2]|0,a,1);BA(c[b+12>>2]|0,c[f>>2]|0,a,2);BA(c[b+16>>2]|0,c[d>>2]|0,a,0)}}else{a=rA(b,0)|0;_z(c[e>>2]|0,c[a+8>>2]|0)|0;_z(c[f>>2]|0,c[a+12>>2]|0)|0;_z(c[d>>2]|0,c[a+16>>2]|0)|0}return}function BA(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;g=nb[c[b>>2]&63](b,0,128)|0;while(1){if(!g)break;h=CA(e,c[g+8>>2]|0,c[g+12>>2]|0,c[g+16>>2]|0,f)|0;a[h+22>>0]=a[g+22>>0]|0;a[h+21>>0]=a[g+21>>0]|0;nb[c[d>>2]&63](d,h,1)|0;g=nb[c[b>>2]&63](b,g,8)|0}return}function CA(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0;h=dC(b,24)|0;a[h+20>>0]=g;c[h+8>>2]=fD(b,d)|0;c[h+12>>2]=fD(b,e)|0;c[h+16>>2]=f;return h|0}function DA(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+32|0;e=d;c[e+8>>2]=b;b=nb[c[a>>2]&63](a,e,4)|0;l=d;return b|0}function EA(a,b){a=a|0;b=b|0;var c=0;c=_z(a,0)|0;b=DA(a,b)|0;_z(a,c)|0;return b|0}function FA(a,b){a=a|0;b=b|0;a=wA(a)|0;if(!a)a=0;else a=DA(c[a+8>>2]|0,b)|0;return a|0}function GA(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;h=l;l=l+16|0;g=h;if(!b){b=c[46941]|0;if(!b){a[g>>0]=a[18400]|0;a[g+1>>0]=a[18401]|0;a[g+2>>0]=a[18402]|0;a[g+3>>0]=a[18403]|0;b=oB(0,g,0)|0;c[46941]=b}}if(!f)b=IA(b,d,e)|0;else b=HA(b,d,e,f)|0;l=h;return b|0}function HA(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;i=yC(a)|0;rA(a,1)|0;g=yA(a,b)|0;f=EA(g,d)|0;a:do if(!f){f=DA(g,d)|0;if(f|0){f=CA(a,d,e,c[f+16>>2]|0,b)|0;nb[c[g>>2]&63](g,f,1)|0;h=16;break}g=yA(i,b)|0;f=CA(a,d,e,Xz(g)|0,b)|0;nb[c[g>>2]&63](g,f,1)|0;switch(b|0){case 0:{BE(i,i,57,f,1)|0;h=16;break a}case 1:{d=jC(i)|0;while(1){if(!d){h=16;break a}JA(a,d,f);d=kC(i,d)|0}}case 2:case 3:{g=jC(i)|0;while(1){if(!g){h=16;break a}d=XA(i,g)|0;while(1){if(!d)break;JA(a,d,f);d=ZA(i,d)|0}g=kC(i,g)|0}}default:break a}}else{h=f+12|0;hD(a,c[h>>2]|0)|0;c[h>>2]=fD(a,e)|0;h=16}while(0);if((h|0)==16)if((b|0)==0&(f|0)!=0)KA(a,f,e)|0;BC(a,a,f);return f|0}function IA(a,b,c){a=a|0;b=b|0;c=c|0;a=yA(a,b)|0;if(!a)a=0;else a=DA(a,c)|0;return a|0}function JA(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;b=wA(b)|0;f=d+16|0;e=c[f>>2]|0;if((e|0)>3){g=c[a+64>>2]|0;b=b+12|0;e=e<<2;c[b>>2]=ob[c[(c[g>>2]|0)+8>>2]&127](c[g+12>>2]|0,c[b>>2]|0,e,e+4|0)|0}else b=b+12|0;g=fD(a,c[d+12>>2]|0)|0;c[(c[b>>2]|0)+(c[f>>2]<<2)>>2]=g;return}function KA(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;h=xC(a)|0;g=(wA(a)|0)+12|0;i=b+16|0;hD(h,c[(c[g>>2]|0)+(c[i>>2]<<2)>>2]|0)|0;f=fD(h,d)|0;c[(c[g>>2]|0)+(c[i>>2]<<2)>>2]=f;do if(!(c[a>>2]&3)){e=c[(rA(h,0)|0)+16>>2]|0;f=b+8|0;g=EA(e,c[f>>2]|0)|0;if(!g){i=CA(h,c[f>>2]|0,d,c[i>>2]|0,c[a>>2]&3)|0;nb[c[e>>2]&63](e,i,1)|0;break}else{i=g+12|0;hD(h,c[i>>2]|0)|0;c[i>>2]=fD(h,d)|0;break}}while(0);BC(h,a,b);return 0}function LA(a,b,d){a=a|0;b=b|0;d=d|0;a=yA(a,b)|0;do if(a){b=c[a>>2]|0;if(!d){a=nb[b&63](a,0,128)|0;break}else{a=nb[b&63](a,d,8)|0;break}}else a=0;while(0);return a|0}function MA(a){a=a|0;var b=0;c[46942]=a;b=wA(a)|0;if(b|0){NA(a,b);VC(a,c[b>>2]|0)|0}b=rA(a,0)|0;if(b)if(((WD(a,c[b+8>>2]|0)|0)==0?(WD(a,c[b+12>>2]|0)|0)==0:0)?(WD(a,c[b+16>>2]|0)|0)==0:0){VC(a,c[b>>2]|0)|0;b=0}else b=1;else b=0;return b|0}function NA(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=xC(a)|0;e=zA(a)|0;b=b+12|0;a=0;while(1){d=c[b>>2]|0;if((a|0)>=(e|0))break;hD(f,c[d+(a<<2)>>2]|0)|0;a=a+1|0}eC(f,d);return}function OA(a){a=a|0;var b=0;b=wA(a)|0;if(b|0){NA(a,b);VC(a,96404)|0}return}function PA(a){a=a|0;var b=0;b=wA(a)|0;if(b|0){NA(a,b);VC(a,96404)|0}return}function QA(a,b){a=a|0;b=b|0;b=FA(a,b)|0;if(!b)b=0;else{a=c[(wA(a)|0)+12>>2]|0;b=c[a+(c[b+16>>2]<<2)>>2]|0}return b|0}function RA(a,b){a=a|0;b=b|0;a=c[(wA(a)|0)+12>>2]|0;return c[a+(c[b+16>>2]<<2)>>2]|0}function SA(a,b,c){a=a|0;b=b|0;c=c|0;b=FA(a,b)|0;if(!b)b=-1;else{KA(a,b,c)|0;b=0}return b|0}function TA(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0;f=xC(a)|0;f=GA(f,c[a>>2]&3,b,0)|0;if(!f){f=xC(a)|0;f=GA(f,c[a>>2]&3,b,e)|0}KA(a,f,d)|0;return 0}function UA(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;g=xC(a)|0;f=c[a>>2]|0;a:do if(!((c[b>>2]^f)&3)){d=1;e=0;while(1){e=LA(g,f&3,e)|0;if(!e)break a;d=FA(b,c[e+8>>2]|0)|0;if(!d){d=1;break a}f=RA(a,e)|0;KA(b,d,f)|0;if(iD(f)|0)jD(RA(b,d)|0);d=0;f=c[a>>2]|0}}else d=1;while(0);return d|0}function VA(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;a=c[b+40>>2]|0;f=c[d+40>>2]|0;if((a|0)==(f|0)){e=(c[b>>2]|0)>>>4;a=(c[d>>2]|0)>>>4;if(e>>>0>=a>>>0)if(e>>>0>a>>>0)a=1;else g=6;else a=-1}else{e=(c[a>>2]|0)>>>4;a=(c[f>>2]|0)>>>4;if(e>>>0>=a>>>0)if(e>>>0>a>>>0)a=1;else g=6;else a=-1}if((g|0)==6)a=0;return a|0}function WA(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;a=(c[b+40>>2]|0)+8|0;g=c[a>>2]|0;a=c[a+4>>2]|0;f=(c[d+40>>2]|0)+8|0;e=c[f>>2]|0;f=c[f+4>>2]|0;do if(!(a>>>0>>0|(a|0)==(f|0)&g>>>0>>0))if(a>>>0>f>>>0|(a|0)==(f|0)&g>>>0>e>>>0)a=1;else{e=b+8|0;a=c[e>>2]|0;e=c[e+4>>2]|0;if(!((a|0)==0&(e|0)==0)?(i=d+8|0,h=c[i>>2]|0,i=c[i+4>>2]|0,!((h|0)==0&(i|0)==0)):0){if(e>>>0>>0|(e|0)==(i|0)&a>>>0>>0){a=-1;break}if(e>>>0>i>>>0|(e|0)==(i|0)&a>>>0>h>>>0){a=1;break}}a=0}else a=-1;while(0);return a|0}function XA(a,b){a=a|0;b=b|0;var d=0;b=YA(a,b)|0;if(!b)b=0;else{d=a+44|0;a=b+32|0;Wz(c[d>>2]|0,c[a>>2]|0)|0;b=c[d>>2]|0;b=nb[c[b>>2]&63](b,0,128)|0;c[a>>2]=Sz(c[d>>2]|0)|0}return b|0}function YA(a,b){a=a|0;b=b|0;var d=0,e=0;e=l;l=l+48|0;d=e;if((c[b+24>>2]|0)==(a|0))a=b+28|0;else{c[d+16>>2]=b;a=c[a+40>>2]|0;a=nb[c[a>>2]&63](a,d,4)|0}l=e;return a|0}function ZA(a,b){a=a|0;b=b|0;var d=0,e=0;d=YA(a,c[((c[b>>2]&3|0)==3?b:b+48|0)+40>>2]|0)|0;if(!d)a=0;else{e=a+44|0;d=d+32|0;Wz(c[e>>2]|0,c[d>>2]|0)|0;a=c[e>>2]|0;a=nb[c[a>>2]&63](a,b,8)|0;c[d>>2]=Sz(c[e>>2]|0)|0}return a|0}function _A(a,b){a=a|0;b=b|0;var d=0;b=YA(a,b)|0;if(!b)b=0;else{d=a+44|0;a=b+28|0;Wz(c[d>>2]|0,c[a>>2]|0)|0;b=c[d>>2]|0;b=nb[c[b>>2]&63](b,0,128)|0;c[a>>2]=Sz(c[d>>2]|0)|0}return b|0}function $A(a,b){a=a|0;b=b|0;var d=0,e=0;d=YA(a,c[((c[b>>2]&3|0)==2?b:b+-48|0)+40>>2]|0)|0;if(!d)a=0;else{e=a+44|0;d=d+28|0;Wz(c[e>>2]|0,c[d>>2]|0)|0;a=c[e>>2]|0;a=nb[c[a>>2]&63](a,b,8)|0;c[d>>2]=Sz(c[e>>2]|0)|0}return a|0}function aB(a,b){a=a|0;b=b|0;var c=0;c=XA(a,b)|0;if(!c)c=_A(a,b)|0;return c|0}function bB(a,b,d){a=a|0;b=b|0;d=d|0;a:do if((c[b>>2]&3|0)==2){b=ZA(a,b)|0;if(!b){b=0;do{if(!b)b=_A(a,d)|0;else b=$A(a,b)|0;if(!b){b=0;break a}}while((c[b+40>>2]|0)==(d|0))}}else do{b=$A(a,b)|0;if(!b){b=0;break a}}while((c[b+40>>2]|0)==(d|0));while(0);return b|0}function cB(a,b,e){a=a|0;b=b|0;e=e|0;var f=0,g=0,h=0;h=l;l=l+32|0;f=h+16|0;g=h;if((zB(a)|0)!=0?(c[g>>2]=0,c[g+4>>2]=0,c[g+8>>2]=0,c[g+12>>2]=0,c[f>>2]=c[g>>2],c[f+4>>2]=c[g+4>>2],c[f+8>>2]=c[g+8>>2],c[f+12>>2]=c[g+12>>2],(gB(a,b,e,f)|0)!=0):0)f=0;else f=((d[a+24>>0]|0)>>>2&1^1)&255|(b|0)!=(e|0);l=h;return f|0}function dB(a,b){a=a|0;b=b|0;fB(a,b);return}function eB(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0;oC(b,d,1)|0;oC(b,e,1)|0;h=dC(b,96)|0;i=h+48|0;l=rB(b,2)|0;j=c[i>>2]|0;k=c[h>>2]|0;m=h+8|0;c[m>>2]=f;c[m+4>>2]=g;m=h+56|0;c[m>>2]=f;c[m+4>>2]=g;g=l<<4;c[h>>2]=k&12|g|2;c[i>>2]=j&12|g|3;c[h+88>>2]=d;c[h+40>>2]=e;fB(b,h);if(a[b+24>>0]&64){TC(h,96404,16,0)|0;vA(b,h)}zC(b,h);return h|0}function fB(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0;i=l;l=l+16|0;d=i;h=c[b>>2]&3;g=(h|0)==2?b:b+-48|0;h=(h|0)==3?b:b+48|0;e=c[h+40>>2]|0;f=c[g+40>>2]|0;while(1){if(!a)break;c[d>>2]=c[b>>2];c[d+4>>2]=c[b+4>>2];c[d+8>>2]=c[b+8>>2];c[d+12>>2]=c[b+12>>2];if(gB(a,e,f,d)|0)break;j=YA(a,e)|0;m=a+44|0;hB(c[m>>2]|0,j+32|0,g);k=a+48|0;hB(c[k>>2]|0,j+24|0,g);j=YA(a,f)|0;hB(c[m>>2]|0,j+28|0,h);hB(c[k>>2]|0,j+20|0,h);a=QD(a)|0}l=i;return}function gB(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;h=l;l=l+48|0;f=h;if(!((b|0)==0|(d|0)==0)?(c[f>>2]=c[e>>2],c[f+4>>2]=c[e+4>>2],c[f+8>>2]=c[e+8>>2],c[f+12>>2]=c[e+12>>2],c[f+40>>2]=b,g=YA(a,d)|0,(g|0)!=0):0){e=a+48|0;g=g+20|0;Wz(c[e>>2]|0,c[g>>2]|0)|0;a=c[e>>2]|0;a=nb[c[a>>2]&63](a,f,4)|0;c[g>>2]=Sz(c[e>>2]|0)|0}else a=0;l=h;return a|0}function hB(a,b,d){a=a|0;b=b|0;d=d|0;Wz(a,c[b>>2]|0)|0;nb[c[a>>2]&63](a,d,1)|0;c[b>>2]=Sz(a)|0;return}function iB(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;n=l;l=l+48|0;i=n+24|0;k=n+16|0;j=n;do if(!(HB(a,2,e,k,0)|0))if(!e){if(f|0?(zB(a)|0)==0:0){m=18;break};c[j>>2]=0;c[j+4>>2]=0;c[j+8>>2]=0;c[j+12>>2]=0;m=7}else m=17;else{o=j;c[o>>2]=0;c[o+4>>2]=0;o=k;g=c[o+4>>2]|0;m=j+8|0;c[m>>2]=c[o>>2];c[m+4>>2]=g;c[j>>2]=2;m=7}while(0);a:do if((m|0)==7){c[i>>2]=c[j>>2];c[i+4>>2]=c[j+4>>2];c[i+8>>2]=c[j+8>>2];c[i+12>>2]=c[j+12>>2];g=gB(a,b,d,i)|0;b:do if(!g){if(yB(a)|0?(c[i>>2]=c[j>>2],c[i+4>>2]=c[j+4>>2],c[i+8>>2]=c[j+8>>2],c[i+12>>2]=c[j+12>>2],h=gB(a,d,b,i)|0,h|0):0){g=h;break}do if(f|0){g=yC(a)|0;c[i>>2]=c[j>>2];c[i+4>>2]=c[j+4>>2];c[i+8>>2]=c[j+8>>2];c[i+12>>2]=c[j+12>>2];g=gB(g,b,d,i)|0;if(!g){if(!(yB(a)|0))break;g=yC(a)|0;c[i>>2]=c[j>>2];c[i+4>>2]=c[j+4>>2];c[i+8>>2]=c[j+8>>2];c[i+12>>2]=c[j+12>>2];g=gB(g,d,b,i)|0;if(!g)break}dB(a,g);break b}while(0);m=17;break a}while(0)}while(0);if((m|0)==17)if(!f)g=0;else m=18;if((m|0)==18)if((cB(a,b,d)|0)!=0?(HB(a,2,e,k,1)|0)!=0:0){g=k;g=eB(a,b,d,c[g>>2]|0,c[g+4>>2]|0)|0;LB(a,2,g)}else g=0;l=n;return g|0}function jB(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;d=(c[b>>2]&3|0)==3;g=d?b+-48|0:b;d=d?b:b+48|0;b=c[g+40>>2]|0;h=YA(a,c[d+40>>2]|0)|0;f=a+44|0;kB(c[f>>2]|0,h+32|0,g);e=a+48|0;kB(c[e>>2]|0,h+24|0,g);b=YA(a,b)|0;kB(c[f>>2]|0,b+28|0,d);kB(c[e>>2]|0,b+20|0,d);return}function kB(a,b,d){a=a|0;b=b|0;d=d|0;Wz(a,c[b>>2]|0)|0;nb[c[a>>2]&63](a,d,2)|0;c[b>>2]=Sz(a)|0;return}function lB(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=l;l=l+16|0;f=e;d=(c[d>>2]&3|0)==2?d:d+-48|0;g=c[d>>2]&3;h=c[((g|0)==3?d:d+48|0)+40>>2]|0;g=c[((g|0)==2?d:d+-48|0)+40>>2]|0;c[f>>2]=c[d>>2];c[f+4>>2]=c[d+4>>2];c[f+8>>2]=c[d+8>>2];c[f+12>>2]=c[d+12>>2];if(gB(b,h,g,f)|0){if((yC(b)|0)==(b|0)){if(a[b+24>>0]&64)PA(d);DC(b,d);$C(d);h=d+8|0;JB(b,2,c[h>>2]|0,c[h+4>>2]|0)}if(!(BE(b,d,58,0,0)|0))if((yC(b)|0)==(b|0)){eC(b,d);d=0}else d=0;else d=-1}else d=-1;l=e;return d|0}function mB(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=l;l=l+16|0;e=h;f=oC(a,c[((c[b>>2]&3|0)==3?b:b+48|0)+40>>2]|0,d)|0;g=oC(a,c[((c[b>>2]&3|0)==2?b:b+-48|0)+40>>2]|0,d)|0;do if((f|0)!=0&(g|0)!=0){c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];e=gB(a,f,g,e)|0;f=(e|0)==0;if(!((d|0)!=0&f)){if(f)break}else{fB(a,b);e=b}d=c[e>>2]&3;l=h;return ((d|0)==(c[b>>2]&3|0)?e:e+(((d|0)==3?-1:1)*48|0)|0)|0}while(0);l=h;return 0}function nB(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;b=b+8|0;e=d+8|0;e=K6(c[b>>2]|0,c[b+4>>2]|0,c[e>>2]|0,c[e+4>>2]|0)|0;return ((e|0)==0?0:e>>31|1)|0}function oB(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;h=l;l=l+16|0;g=h;j=pB(e)|0;f=lb[c[(c[j>>2]|0)+4>>2]&127](c[j+12>>2]|0,72)|0;c[f>>2]=c[f>>2]&-4;i=f+64|0;c[i>>2]=j;k=f+24|0;d=c[d>>2]|0;c[k>>2]=d;a[k>>0]=d&255|8;c[f+60>>2]=f;e=lb[c[c[j+4>>2]>>2]&127](f,e)|0;c[(c[i>>2]|0)+16>>2]=e;if(HB(f,0,b,g,1)|0){i=g;j=c[i+4>>2]|0;k=f+8|0;c[k>>2]=c[i>>2];c[k+4>>2]=j}k=qB(f)|0;LB(k,0,f);l=h;return k|0}function pB(b){b=b|0;var d=0,e=0,f=0,g=0;d=(b|0)!=0;if(d){e=c[b>>2]|0;e=(e|0)==0?18736:e}else e=18736;g=kb[c[e>>2]&63](b)|0;f=lb[c[e+4>>2]&127](g,80)|0;c[f>>2]=e;c[f+12>>2]=g;if(d){g=c[b+4>>2]|0;c[f+4>>2]=(g|0)==0?18612:g;b=c[b+8>>2]|0;b=(b|0)==0?18712:b}else{c[f+4>>2]=18612;b=18712}c[f+8>>2]=b;a[f+52>>0]=1;return f|0}function qB(b){b=b|0;var d=0,e=0;c[b+36>>2]=UD(b,18792,c[4589]|0)|0;c[b+40>>2]=UD(b,18756,c[4589]|0)|0;d=(yC(b)|0)==(b|0);c[b+44>>2]=UD(b,d?18404:18440,c[4589]|0)|0;d=(yC(b)|0)==(b|0);c[b+48>>2]=UD(b,d?18476:18512,c[4589]|0)|0;c[b+52>>2]=UD(b,18548,c[4589]|0)|0;d=QD(b)|0;if(!((d|0)!=0?(e=rB(d,0)|0,c[b>>2]=c[b>>2]&15|e<<4,e=c[d+52>>2]|0,nb[c[e>>2]&63](e,b,1)|0,!(a[d+24>>0]&64)):0))tA(b);zC(b,b);return b|0}function rB(a,b){a=a|0;b=b|0;var d=0;d=(c[a+64>>2]|0)+24+(b<<3)|0;b=d;b=J6(c[b>>2]|0,c[b+4>>2]|0,1,0)|0;a=z;c[d>>2]=b;c[d+4>>2]=a;z=a;return b|0}function sB(b){b=b|0;var d=0,e=0,f=0,g=0;f=QD(b)|0;g=(f|0)==0;if(g?(d=b+64|0,(c[(c[c[d>>2]>>2]|0)+16>>2]|0)!=0):0){DC(b,b);g=b+8|0;JB(b,0,c[g>>2]|0,c[g+4>>2]|0);d=c[d>>2]|0;tb[c[(c[d>>2]|0)+16>>2]&127](c[d+12>>2]|0);d=0}else e=4;do if((e|0)==4){d=OD(b)|0;while(1){if(!d)break;e=PD(d)|0;sB(d)|0;d=e}d=jC(b)|0;while(1){if(!d)break;e=kC(b,d)|0;vC(b,d)|0;d=e}UB(b);DC(b,b);if(((((WD(b,c[b+40>>2]|0)|0)==0?(WD(b,c[b+36>>2]|0)|0)==0:0)?(WD(b,c[b+48>>2]|0)|0)==0:0)?(WD(b,c[b+44>>2]|0)|0)==0:0)?(WD(b,c[b+52>>2]|0)|0)==0:0){if(a[b+24>>0]&64?MA(b)|0:0){d=-1;break}$C(b);e=b+8|0;JB(b,0,c[e>>2]|0,c[e+4>>2]|0);if(!g){RD(f,b)|0;eC(f,b);d=0;break}d=b+64|0;while(1){e=c[d>>2]|0;f=c[e+48>>2]|0;if(!f)break;GC(b,c[f>>2]|0)|0}tb[c[(c[e+4>>2]|0)+20>>2]&127](c[e+16>>2]|0);if(!(aD(b)|0)){d=c[d>>2]|0;g=c[d+12>>2]|0;f=(c[d>>2]|0)+12|0;ub[c[f>>2]&63](g,b);ub[c[f>>2]&63](g,d);d=0}else d=-1}else d=-1}while(0);return d|0}function tB(a){a=a|0;return Xz(c[a+40>>2]|0)|0}function uB(a){a=a|0;var b=0,c=0,d=0;b=0;c=jC(a)|0;while(1){if(!c)break;d=(vB(a,c,0,1)|0)+b|0;b=d;c=kC(a,c)|0}return b|0}function vB(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0;f=YA(a,b)|0;if(f){if(!e)b=0;else b=wB(c[a+44>>2]|0,f+32|0)|0;if(d)b=(wB(c[a+44>>2]|0,f+28|0)|0)+b|0}else b=0;return b|0}function wB(a,b){a=a|0;b=b|0;var d=0;Wz(a,c[b>>2]|0)|0;d=Xz(a)|0;c[b>>2]=Sz(a)|0;return d|0}function xB(b){b=b|0;return a[b+24>>0]&1|0}function yB(a){a=a|0;return (xB(a)|0)==0|0}function zB(a){a=a|0;return (d[a+24>>0]|0)>>>1&1|0}function AB(a,b){a=a|0;b=b|0;return a|0}function BB(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;if(!d){f=1392;d=c[f>>2]|0;f=c[f+4>>2]|0;c[e>>2]=d;c[e+4>>2]=f;f=J6(d|0,f|0,2,0)|0;e=1392;c[e>>2]=f;c[e+4>>2]=z}else{if(!f)a=cD(a,d)|0;else a=fD(a,d)|0;c[e>>2]=a;c[e+4>>2]=0}return 1}function CB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return 0}function DB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;if((c&1|0)==0&0==0)hD(a,c)|0;return}function EB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return ((c&1|0)==0&0==0?c:0)|0}function FB(a){a=a|0;return}function GB(a,b,c){a=a|0;b=b|0;c=c|0;return}function HB(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0;i=(e|0)!=0;do if(i){if((a[e>>0]|0)!=37?(h=c[b+64>>2]|0,h=pb[c[(c[h+4>>2]|0)+4>>2]&127](c[h+16>>2]|0,d,e,f,g)|0,h|0):0)break;h=MB(b,d,e,f)|0;if(!h)j=5}else j=5;while(0);if((j|0)==5)if(g){h=c[b+64>>2]|0;h=pb[c[(c[h+4>>2]|0)+4>>2]&127](c[h+16>>2]|0,d,0,f,g)|0;if(i&(h|0)!=0){j=f;NB(b,d,e,c[j>>2]|0,c[j+4>>2]|0)}}else h=0;return h|0}function IB(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;a=c[a+64>>2]|0;return ob[c[(c[a+4>>2]|0)+8>>2]&127](c[a+16>>2]|0,b,d,e)|0}function JB(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;SB(a,b,d,e)|0;a=c[a+64>>2]|0;xb[c[(c[a+4>>2]|0)+12>>2]&31](c[a+16>>2]|0,b,d,e);return}function KB(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;h=l;l=l+16|0;g=h;d=xC(a)|0;f=a+8|0;b=f;b=QB(d,c[a>>2]&3,c[b>>2]|0,c[b+4>>2]|0)|0;do if(!b){b=c[d+64>>2]|0;d=c[(c[b+4>>2]|0)+16>>2]|0;if(d|0?(e=f,e=ob[d&127](c[b+16>>2]|0,c[a>>2]&3,c[e>>2]|0,c[e+4>>2]|0)|0,e|0):0){b=e;break}if((c[a>>2]&3|0)==2)b=0;else{e=c[f>>2]|0;f=c[f+4>>2]|0;c[g>>2]=37;b=g+8|0;c[b>>2]=e;c[b+4>>2]=f;m4(194773,96456,g)|0;b=194773}}while(0);l=h;return b|0}function LB(a,b,d){a=a|0;b=b|0;d=d|0;a=c[a+64>>2]|0;vb[c[(c[a+4>>2]|0)+24>>2]&127](c[a+16>>2]|0,b,d);return}function MB(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;i=l;l=l+32|0;h=i;b=c[(c[a+64>>2]|0)+56+(((b|0)==3?2:b)<<2)>>2]|0;if(((b|0)!=0?(f=cD(a,d)|0,(f|0)!=0):0)?(c[h+24>>2]=f,g=nb[c[b>>2]&63](b,h,4)|0,(g|0)!=0):0){d=g+16|0;h=c[d+4>>2]|0;b=e;c[b>>2]=c[d>>2];c[b+4>>2]=h;b=1}else b=0;l=i;return b|0}function NB(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;h=dC(a,32)|0;g=h+16|0;c[g>>2]=e;c[g+4>>2]=f;c[h+24>>2]=fD(a,d)|0;e=(b|0)==3?2:b;g=a+64|0;d=c[g>>2]|0;b=c[d+56+(e<<2)>>2]|0;if(!b){f=UD(a,18640,c[4589]|0)|0;c[(c[g>>2]|0)+56+(e<<2)>>2]=f;b=c[g>>2]|0}else{f=b;b=d}b=c[b+68+(e<<2)>>2]|0;if(!b){b=UD(a,18676,c[4589]|0)|0;c[(c[g>>2]|0)+68+(e<<2)>>2]=b}nb[c[f>>2]&63](f,h,1)|0;nb[c[b>>2]&63](b,h,1)|0;return}function OB(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;a=b+16|0;b=c[a>>2]|0;a=c[a+4>>2]|0;d=d+16|0;e=c[d>>2]|0;d=c[d+4>>2]|0;return (a>>>0>d>>>0|(a|0)==(d|0)&b>>>0>e>>>0?1:(a>>>0>>0|(a|0)==(d|0)&b>>>0>>0)<<31>>31)|0}function PB(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;b=c[b+24>>2]|0;e=c[d+24>>2]|0;return (b>>>0>e>>>0?1:(b>>>0>>0)<<31>>31)|0}function QB(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;a=RB(a,b,d,e)|0;if(!a)a=0;else a=c[a+24>>2]|0;return a|0}function RB(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;g=l;l=l+32|0;f=g;a=c[(c[a+64>>2]|0)+68+(((b|0)==3?2:b)<<2)>>2]|0;if(!a)a=0;else{b=f+16|0;c[b>>2]=d;c[b+4>>2]=e;a=nb[c[a>>2]&63](a,f,4)|0}l=g;return a|0}function SB(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0;f=(b|0)==3?2:b;b=RB(a,f,d,e)|0;if(!b)b=0;else{e=a+64|0;d=c[(c[e>>2]|0)+56+(f<<2)>>2]|0;nb[c[d>>2]&63](d,b,2)|0;e=c[(c[e>>2]|0)+68+(f<<2)>>2]|0;nb[c[e>>2]&63](e,b,2)|0;hD(a,c[b+24>>2]|0)|0;eC(a,b);b=1}return b|0}function TB(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;c[46942]=b;g=c[b+64>>2]|0;f=0;while(1){if((f|0)==3)break;h=g+56+(f<<2)|0;d=c[h>>2]|0;a:do if(d|0){d=nb[c[d>>2]&63](d,0,128)|0;while(1){if(!d)break a;e=c[h>>2]|0;e=nb[c[e>>2]&63](e,d,8)|0;if((a[c[d+24>>2]>>0]|0)!=37){d=e;continue}i=d+16|0;SB(b,f,c[i>>2]|0,c[i+4>>2]|0)|0;d=e}}while(0);f=f+1|0}return}function UB(a){a=a|0;c[46942]=a;a=a+64|0;VB((c[a>>2]|0)+56|0);VB((c[a>>2]|0)+68|0);return}function VB(a){a=a|0;var b=0,d=0,e=0;b=0;while(1){if((b|0)==3)break;d=a+(b<<2)|0;e=c[d>>2]|0;if(e|0){Rz(e)|0;c[d>>2]=0}b=b+1|0}return}function WB(a,b,c){a=a|0;b=b|0;c=c|0;if(!(c4(b,c,a)|0))a=0;else a=l2(b)|0;return a|0}function XB(a,b){a=a|0;b=b|0;return T4(b,a)|0}function YB(a){a=a|0;return M4(a)|0}function ZB(a){a=a|0;var b=0,d=0,e=0;b=l;l=l+32|0;e=b+12|0;d=b;c[4682]=c[4679];c[4683]=c[4680];c[e>>2]=a;c[e+4>>2]=l2(a)|0;c[e+8>>2]=0;c[d>>2]=18736;c[d+4>>2]=18612;c[d+8>>2]=18724;a=jF(e,d)|0;kD(0);l=b;return a|0}function _B(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;if((e|0)!=0?(h=b+8|0,f=c[h>>2]|0,(f|0)<(c[b+4>>2]|0)):0){i=(c[b>>2]|0)+f|0;b=0;g=a[i>>0]|0;f=d;d=i;while(1){d=d+1|0;a[f>>0]=g;b=b+1|0;if(!(g<<24>>24!=10&(b|0)<(e|0)))break;g=a[d>>0]|0;if(!(g<<24>>24))break;else f=f+1|0}c[h>>2]=(c[h>>2]|0)+b}else b=0;return b|0}function $B(a){a=a|0;return 0}function aC(a,b){a=a|0;b=b|0;a=T1(b)|0;Y6(a|0,0,b|0)|0;return a|0}function bC(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;a=W1(b,d)|0;if(d>>>0>c>>>0)Y6(a+c|0,0,d-c|0)|0;return a|0}function cC(a,b){a=a|0;b=b|0;U1(b);return}function dC(a,b){a=a|0;b=b|0;var d=0;d=l;l=l+16|0;a=c[a+64>>2]|0;a=lb[c[(c[a>>2]|0)+4>>2]&127](c[a+12>>2]|0,b)|0;if(!a)gA(1,96462,d)|0;l=d;return a|0}function eC(a,b){a=a|0;b=b|0;if(b|0){a=c[a+64>>2]|0;ub[c[(c[a>>2]|0)+12>>2]&63](c[a+12>>2]|0,b)}return}function fC(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;a=(c[b+16>>2]|0)+8|0;b=c[a>>2]|0;a=c[a+4>>2]|0;d=(c[d+16>>2]|0)+8|0;e=c[d>>2]|0;d=c[d+4>>2]|0;return (a>>>0>>0|(a|0)==(d|0)&b>>>0>>0?-1:(a>>>0>d>>>0|(a|0)==(d|0)&b>>>0>e>>>0)&1)|0}function gC(a,b,d){a=a|0;b=b|0;d=d|0;a=c[b+16>>2]|0;if((a+28|0)!=(b|0))eC(c[a+24>>2]|0,b);return}function hC(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;b=(c[c[b+16>>2]>>2]|0)>>>4;e=(c[c[d+16>>2]>>2]|0)>>>4;return (b>>>0>>0?-1:b>>>0>e>>>0&1)|0}function iC(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=186256;c[e>>2]=b;c[e+4>>2]=d;c[46947]=186248;a=c[a+40>>2]|0;a=nb[c[a>>2]&63](a,187772,4)|0;if(!a)a=0;else a=c[a+16>>2]|0;return a|0}function jC(a){a=a|0;a=c[a+36>>2]|0;a=nb[c[a>>2]&63](a,0,128)|0;if(!a)a=0;else a=c[a+16>>2]|0;return a|0}function kC(a,b){a=a|0;b=b|0;var d=0;b=YA(a,b)|0;if((b|0)!=0?(d=c[a+36>>2]|0,d=nb[c[d>>2]&63](d,b,8)|0,(d|0)!=0):0)b=c[d+16>>2]|0;else b=0;return b|0}function lC(a){a=a|0;a=c[a+36>>2]|0;a=nb[c[a>>2]&63](a,0,256)|0;if(!a)a=0;else a=c[a+16>>2]|0;return a|0}function mC(a,b){a=a|0;b=b|0;var d=0;b=YA(a,b)|0;if((b|0)!=0?(d=c[a+36>>2]|0,d=nb[c[d>>2]&63](d,b,16)|0,(d|0)!=0):0)b=c[d+16>>2]|0;else b=0;return b|0}function nC(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;e=iC(a,b,c)|0;do if((d|0)!=0&(e|0)==0){e=yC(a)|0;if((e|0)!=(a|0)?(f=iC(e,b,c)|0,f|0):0){oC(a,f,1)|0;e=f;break}if(!(IB(a,1,b,c)|0))e=0;else{e=rB(a,1)|0;e=pC(a,b,c,e,z)|0;qC(a,e);rC(a,e)}}while(0);return e|0}function oC(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=yC(a)|0;if((e|0)==(c[b+24>>2]|0)){e=b+8|0;e=iC(a,c[e>>2]|0,c[e+4>>2]|0)|0;if((d|0)!=0&(e|0)==0){e=QD(a)|0;if(!e)e=0;else{d=oC(e,b,d)|0;sC(a,d);return d|0}}}else e=0;return e|0}function pC(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0;g=dC(b,64)|0;h=c[g>>2]|0;i=g+8|0;c[i>>2]=d;c[i+4>>2]=e;c[g>>2]=h&12|f<<4|1;c[g+24>>2]=yC(b)|0;if(a[(yC(b)|0)+24>>0]&64)TC(g,96404,16,0)|0;return g|0}function qC(a,b){a=a|0;b=b|0;do{sC(a,b);a=QD(a)|0}while((a|0)!=0);return}function rC(b,c){b=b|0;c=c|0;if(a[(yC(b)|0)+24>>0]&64)uA(b,c);zC(b,c);return}function sC(a,b){a=a|0;b=b|0;var d=0,e=0;e=a+40|0;Xz(c[e>>2]|0)|0;if((yC(a)|0)==(a|0))d=b+28|0;else d=dC(a,36)|0;c[d+16>>2]=b;e=c[e>>2]|0;nb[c[e>>2]&63](e,d,1)|0;e=c[a+36>>2]|0;nb[c[e>>2]&63](e,d,1)|0;return}function tC(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;j=l;l=l+16|0;g=j;h=yC(a)|0;if(HB(a,1,b,g,0)|0){e=g;e=iC(a,c[e>>2]|0,c[e+4>>2]|0)|0;if(!e)if(!((d|0)==0|(h|0)==(a|0))?(f=g,f=iC(h,c[f>>2]|0,c[f+4>>2]|0)|0,(f|0)!=0):0)e=oC(a,f,1)|0;else i=6}else i=6;if((i|0)==6)if((d|0)!=0?(HB(a,1,b,g,1)|0)!=0:0){i=g;h=c[i>>2]|0;i=c[i+4>>2]|0;e=rB(a,1)|0;e=pC(a,h,i,e,z)|0;qC(a,e);rC(a,e);LB(a,1,e)}else e=0;l=j;return e|0}function uC(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;c[46956]=b;d=aB(a,b)|0;while(1){if(!d)break;e=bB(a,d,b)|0;jB(a,d,0);d=e}e=c[a+40>>2]|0;nb[c[e>>2]&63](e,187808,2)|0;e=c[a+36>>2]|0;nb[c[e>>2]&63](e,187808,2)|0;return}function vC(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;f=d+8|0;e=f;if(iC(b,c[e>>2]|0,c[e+4>>2]|0)|0){if((yC(b)|0)==(b|0)){e=aB(b,d)|0;while(1){if(!e)break;g=bB(b,e,d)|0;lB(b,e)|0;e=g}if(a[b+24>>0]&64)OA(d);DC(b,d);$C(d);g=f;JB(b,1,c[g>>2]|0,c[g+4>>2]|0)}if(!(BE(b,d,59,0,0)|0))if((yC(b)|0)==(b|0)){eC(b,d);e=0}else e=0;else e=-1}else e=-1;return e|0}function wC(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;h=l;l=l+16|0;e=h;d=c[b>>2]|0;do if(!(d&3))if((QD(b)|0)==(a|0)){d=c[b>>2]|0;g=5;break}else{gA(1,96488,e)|0;f=-1;break}else g=5;while(0);a:do if((g|0)==5)switch(d&3){case 1:{f=vC(a,b)|0;break a}case 2:case 3:{f=lB(a,b)|0;break a}case 0:{f=sB(b)|0;break a}default:{}}while(0);l=h;return f|0}function xC(a){a=a|0;var b=0;switch(c[a>>2]&3){case 2:case 3:{b=c[(c[a+40>>2]|0)+24>>2]|0;break}case 1:{b=c[a+24>>2]|0;break}case 0:{b=a;break}default:{}}return b|0}function yC(a){a=a|0;var b=0;switch(c[a>>2]&3){case 2:case 3:{b=(c[a+40>>2]|0)+24|0;break}case 1:{b=a+24|0;break}case 0:{b=a+60|0;break}default:{}}return c[b>>2]|0}function zC(b,d){b=b|0;d=d|0;var e=0;e=c[b+64>>2]|0;if(!(a[e+52>>0]|0))JC(b,d,100,0);else AC(b,d,c[e+48>>2]|0);return}function AC(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;a:do if(d|0){AC(a,b,c[d+8>>2]|0);switch(c[b>>2]&3){case 0:{e=c[d>>2]|0;break}case 1:{e=(c[d>>2]|0)+12|0;break}case 2:{e=(c[d>>2]|0)+24|0;break}default:break a}e=c[e>>2]|0;if(e|0)vb[e&127](a,b,c[d+4>>2]|0)}while(0);return}function BC(b,d,e){b=b|0;d=d|0;e=e|0;var f=0;f=c[b+64>>2]|0;if(!(a[f+52>>0]|0))JC(b,d,101,e);else CC(b,d,e,c[f+48>>2]|0);return}function CC(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0;a:do if(e|0){CC(a,b,d,c[e+8>>2]|0);switch(c[b>>2]&3){case 0:{f=(c[e>>2]|0)+4|0;break}case 1:{f=(c[e>>2]|0)+16|0;break}case 2:{f=(c[e>>2]|0)+28|0;break}default:break a}f=c[f>>2]|0;if(f|0)xb[f&31](a,b,c[e+4>>2]|0,d)}while(0);return}function DC(b,d){b=b|0;d=d|0;var e=0;e=c[b+64>>2]|0;if(!(a[e+52>>0]|0))JC(b,d,102,0);else EC(b,d,c[e+48>>2]|0);return}function EC(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;a:do if(d|0){EC(a,b,c[d+8>>2]|0);switch(c[b>>2]&3){case 0:{e=(c[d>>2]|0)+8|0;break}case 1:{e=(c[d>>2]|0)+20|0;break}case 2:{e=(c[d>>2]|0)+32|0;break}default:break a}e=c[e>>2]|0;if(e|0)vb[e&127](a,b,c[d+4>>2]|0)}while(0);return}function FC(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=dC(a,12)|0;c[e>>2]=b;c[e+4>>2]=d;d=(c[a+64>>2]|0)+48|0;c[e+8>>2]=c[d>>2];c[d>>2]=e;return}function GC(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;e=(c[a+64>>2]|0)+48|0;d=c[e>>2]|0;a:do if(!d)d=-1;else{if((c[d>>2]|0)!=(b|0)){while(1){if(!d){d=-1;break a}e=d+8|0;f=c[e>>2]|0;if((c[f>>2]|0)==(b|0))break;else d=f}if(f)c[e>>2]=c[f+8>>2]}else c[e>>2]=c[d+8>>2];eC(a,d);d=0}while(0);return d|0}function HC(a,b){a=a|0;b=b|0;var d=0;d=yC(a)|0;a:do if((d|0)==(yC(b)|0))switch(c[b>>2]&3){case 0:{while(1){if((b|0)==(a|0)){b=1;break a}b=QD(b)|0;if(!b){b=0;break}}break}case 1:{b=b+8|0;b=(nC(a,c[b>>2]|0,c[b+4>>2]|0,0)|0)!=0;break a}default:{b=(mB(a,b,0)|0)!=0;break a}}else b=0;while(0);return b&1|0}function IC(a){a=a|0;return c[a>>2]&3|0}function JC(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0;h=l;l=l+16|0;g=h;f=TC(a,96512,44,0)|0;switch(c|0){case 100:{e=KC(f,b,100)|0;if(!(LC(e,b)|0))MC(e,a,b,d)|0;break}case 101:{if(((LC(KC(f,b,100)|0,b)|0)==0?(LC(KC(f,b,102)|0,b)|0)==0:0)?(e=KC(f,b,101)|0,(LC(e,b)|0)==0):0)MC(e,a,b,d)|0;break}case 102:{NC(KC(f,b,100)|0,b);NC(KC(f,b,101)|0,b);e=KC(f,b,102)|0;if(!(LC(e,b)|0))MC(e,a,b,d)|0;break}default:gA(1,96524,g)|0}l=h;return}function KC(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;g=l;l=l+16|0;e=g;a:do switch(c[b>>2]&3){case 0:switch(d|0){case 100:{d=a+8|0;break a}case 101:{d=a+20|0;break a}case 102:{d=a+32|0;break a}default:{f=14;break a}}case 1:switch(d|0){case 100:{d=a+12|0;break a}case 101:{d=a+24|0;break a}case 102:{d=a+36|0;break a}default:{f=14;break a}}case 2:switch(d|0){case 100:{d=a+16|0;break a}case 101:{d=a+28|0;break a}case 102:{d=a+40|0;break a}default:{f=14;break a}}default:f=14}while(0);if((f|0)==14){gA(1,96558,e)|0;d=0}a=c[d>>2]|0;if(!a){a=xC(b)|0;a=UD(a,18828,c[4589]|0)|0;c[d>>2]=a}l=g;return a|0}function LC(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+32|0;e=d;f=OC(b)|0;b=e+8|0;c[b>>2]=f;c[b+4>>2]=z;b=nb[c[a>>2]&63](a,e,4)|0;l=d;return b|0}function MC(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;f=dC(xC(d)|0,32)|0;c[f+20>>2]=d;g=OC(d)|0;d=f+8|0;c[d>>2]=g;c[d+4>>2]=z;c[f+16>>2]=b;if(e|0){g=dC(b,8)|0;c[f+24>>2]=g;c[g>>2]=e}nb[c[a>>2]&63](a,f,1)|0;return f|0}function NC(a,b){a=a|0;b=b|0;b=LC(a,b)|0;if(b|0)nb[c[a>>2]&63](a,b,2)|0;return}function OC(a){a=a|0;a=a+8|0;z=c[a+4>>2]|0;return c[a>>2]|0}function PC(a,b,d){a=a|0;b=b|0;d=d|0;QC(b);eC(c[b+16>>2]|0,b);return}function QC(a){a=a|0;var b=0,d=0;b=a+16|0;a=c[a+24>>2]|0;while(1){if(!a)break;d=c[a+4>>2]|0;eC(c[b>>2]|0,a);a=d}return}function RC(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;k=l;l=l+16|0;i=k;h=c[b+16>>2]|0;f=h;while(1){if(!f){f=0;break}g=c[f>>2]|0;if((g|0)==(d|0)){j=7;break}if((a[d>>0]|0)==(a[g>>0]|0)?(s2(d,g)|0)==0:0){j=7;break}f=c[f+4>>2]|0;if((f|0)==(h|0)){f=0;break}}do if((j|0)==7){if(!(c[b>>2]&4)){if((f|0)==(h|0)&(e|0)==0){f=h;break}SC(b,f,e);break}if(e)if((h|0)==(f|0))f=h;else gA(1,96583,i)|0}while(0);l=k;return f|0}function SC(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;c[a+16>>2]=b;e=c[a>>2]|0;d=d<<2&4;c[a>>2]=e&-5|d;if(e&2|0){e=(e&3|0)==3?-1:1;c[a+(e*48|0)+16>>2]=b;e=a+(e*48|0)|0;c[e>>2]=c[e>>2]&-5|d}return}function TC(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;h=xC(a)|0;f=RC(a,b,0)|0;a:do if((d|0)!=0&(f|0)==0){d=dC(h,d)|0;c[d>>2]=fD(h,b)|0;switch(c[a>>2]&3){case 0:{UC(a,d);g=d;break a}case 1:{UC(a,d);g=d;break a}case 2:case 3:{UC(a,d);g=d;break a}default:{}}}else g=f;while(0);if(e|0)RC(a,b,1)|0;return g|0}function UC(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=c[a+16>>2]|0;do if(d){e=d+4|0;f=c[e>>2]|0;if((f|0)==(d|0)){c[e>>2]=b;e=d;d=b;break}else{c[b+4>>2]=f;e=b;break}}else{e=b;d=b}while(0);c[d+4>>2]=e;if(!(c[a>>2]&4))SC(a,b,0);return}function VC(a,b){a=a|0;b=b|0;var d=0,e=0;e=xC(a)|0;d=RC(a,b,0)|0;if(!d)b=-1;else{WC(a,d);if(!(c[a>>2]&3)){XC(e,a,d);b=d}else{BE(yC(e)|0,a,60,d,0)|0;b=d}hD(e,c[d>>2]|0)|0;eC(e,b);b=0}return b|0}function WC(a,b){a=a|0;b=b|0;var d=0;a=c[a+16>>2]|0;do{d=a+4|0;a=c[d>>2]|0}while((a|0)!=(b|0));c[d>>2]=c[b+4>>2];return}function XC(a,b,d){a=a|0;b=b|0;d=d|0;if((c[b+16>>2]|0)==(d|0)){a=c[d+4>>2]|0;SC(b,(a|0)==(d|0)?0:a,0)}return}function YC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0;f=(d|0)>-1;g=f?d:0-d|0;a:do switch(b|0){case 0:{TC(a,c,g,e)|0;if(!f){b=OD(a)|0;while(1){if(!b)break a;YC(b,0,c,d,e);b=PD(b)|0}}break}case 3:case 2:case 1:{d=(b|0)==1;b=jC(a)|0;while(1){if(!b)break a;b:do if(d)TC(b,c,g,e)|0;else{f=XA(a,b)|0;while(1){if(!f)break b;TC(f,c,g,e)|0;f=ZA(a,f)|0}}while(0);b=kC(a,b)|0}}default:{}}while(0);return}function ZC(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;a:do switch(b|0){case 0:{BE(a,a,61,c,1)|0;break}case 3:case 2:case 1:{e=(b|0)==1;d=jC(a)|0;while(1){if(!d)break a;b:do if(e)VC(d,c)|0;else{b=XA(a,d)|0;while(1){if(!b)break b;VC(b,c)|0;b=ZA(a,b)|0}}while(0);d=kC(a,d)|0}}default:{}}while(0);return}function _C(a,b,c){a=a|0;b=b|0;c=c|0;VC(b,c)|0;return}function $C(a){a=a|0;var b=0,d=0,e=0;d=xC(a)|0;b=a+16|0;a=c[b>>2]|0;if(a|0)do{e=a;a=c[a+4>>2]|0;hD(d,c[e>>2]|0)|0;eC(d,e)}while((a|0)!=(c[b>>2]|0));c[b>>2]=0;return}function aD(a){a=a|0;return WD(a,bD(a)|0)|0}function bD(a){a=a|0;var b=0,d=0;if(!a)d=187844;else d=(c[a+64>>2]|0)+20|0;b=c[d>>2]|0;if(!b){b=UD(a,18864,c[4589]|0)|0;c[d>>2]=b;a=186312;c[a>>2]=-2147483648;c[a+4>>2]=0;a=186320;c[a>>2]=2147483647;c[a+4>>2]=-1}return b|0}function cD(a,b){a=a|0;b=b|0;return dD(bD(a)|0,b)|0}function dD(a,b){a=a|0;b=b|0;a=eD(a,b)|0;if(!a)a=0;else a=c[a+16>>2]|0;return a|0}function eD(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+32|0;e=d;c[e+16>>2]=b;b=nb[c[a>>2]&63](a,e,4)|0;l=d;return b|0}function fD(a,b){a=a|0;b=b|0;var d=0,e=0;if(!b)d=0;else{e=bD(a)|0;d=eD(e,b)|0;if(!d){d=(l2(b)|0)+24|0;if(!a)d=T1(d)|0;else d=dC(a,d)|0;a=d+8|0;c[a>>2]=1;c[a+4>>2]=0;a=d+20|0;r3(a,b)|0;c[d+16>>2]=a;nb[c[e>>2]&63](e,d,1)|0}else{e=d+8|0;b=e;b=J6(c[b>>2]|0,c[b+4>>2]|0,1,0)|0;c[e>>2]=b;c[e+4>>2]=z}d=c[d+16>>2]|0}return d|0}function gD(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;if(!b)d=0;else{e=bD(a)|0;d=eD(e,b)|0;if(!d){d=(l2(b)|0)+24|0;if(!a)d=T1(d)|0;else d=dC(a,d)|0;g=186312;f=c[g+4>>2]|0;a=d+8|0;c[a>>2]=c[g>>2]|1;c[a+4>>2]=f;a=d+20|0;r3(a,b)|0;c[d+16>>2]=a;nb[c[e>>2]&63](e,d,1)|0}else{g=d+8|0;f=g;f=J6(c[f>>2]|0,c[f+4>>2]|0,1,0)|0;c[g>>2]=f;c[g+4>>2]=z}d=c[d+16>>2]|0}return d|0}function hD(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;if((b|0)!=0?(d=bD(a)|0,e=eD(d,b)|0,(e|0)!=0):0)if((c[e+16>>2]|0)==(b|0)?(b=e+8|0,g=b,g=J6(c[g>>2]|0,c[g+4>>2]|0,-1,-1)|0,f=z,b,c[b>>2]=g,c[b+4>>2]=f,b=186320,(g|0)==0&(f|0)==0|(c[b>>2]|0)==0&(c[b+4>>2]|0)==0):0){VD(a,d,e)|0;a=0}else a=0;else a=-1;return a|0}function iD(a){a=a|0;var b=0;if(!a)a=0;else{a=a+-12|0;b=186312;a=c[b>>2]&c[a>>2]}return a|0}function jD(a){a=a|0;var b=0,d=0,e=0;if(a|0){d=186312;a=a+-12|0;e=a;b=c[e+4>>2]|c[d+4>>2];c[a>>2]=c[e>>2]|c[d>>2];c[a+4>>2]=b}return}function kD(a){a=a|0;c[46966]=a;c[4725]=1;return}function lD(a,b){a=a|0;b=b|0;c[46967]=a;c[46968]=b;c[46969]=0;return}function mD(){var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;if(!(c[46970]|0)){c[46970]=1;if(!(c[46971]|0))c[46971]=1;if(!(c[46962]|0))c[46962]=c[15647];if(!(c[46963]|0))c[46963]=c[15679];k=c[46972]|0;if(!((k|0)!=0?(c[k>>2]|0)!=0:0)){nD();k=oD(c[46962]|0,16384)|0;c[c[46972]>>2]=k}pD()}a:while(1){j=c[46973]|0;a[j>>0]=a[194805]|0;e=(c[(c[c[46972]>>2]|0)+28>>2]|0)+(c[46971]|0)|0;f=j;b:while(1){h=f;while(1){f=c[18904+(d[h>>0]<<2)>>2]|0;if(b[63856+(e<<1)>>1]|0){c[46974]=e;c[46975]=h}c:while(1){g=f&255;do{f=g+(b[64042+(e<<1)>>1]|0)|0;if((e|0)==(b[64252+(f<<1)>>1]|0))break c;k=b[64788+(e<<1)>>1]|0;e=k<<16>>16}while(k<<16>>16<=92);f=c[19928+(g<<2)>>2]|0}e=b[64998+(f<<1)>>1]|0;f=h+1|0;if((b[64042+(e<<1)>>1]|0)==219)break;else h=f}d:while(1){k=j;e:while(1){e=b[63856+(e<<1)>>1]|0;if(!(e<<16>>16)){e=b[63856+(c[46974]<<1)>>1]|0;f=c[46975]|0}else e=e<<16>>16;c[46964]=j;i=f;c[46965]=i-k;a[194805]=a[f>>0]|0;a[f>>0]=0;c[46973]=f;f:while(1){switch(e|0){case 1:{m=27;break a}case 12:{m=53;break a}case 13:{m=55;break a}case 14:{m=57;break a}case 15:{m=61;break a}case 16:{m=65;break a}case 17:{m=67;break a}case 18:{m=69;break a}case 19:{m=72;break a}case 20:{m=75;break a}case 21:{m=78;break a}case 23:{m=86;break a}case 33:{m=118;break a}case 39:case 38:case 37:case 36:{l=0;break a}case 2:{m=29;break b}case 3:{m=32;break b}case 4:{m=35;break b}case 5:{m=37;break b}case 6:{m=39;break b}case 7:{m=42;break b}case 8:{m=44;break b}case 9:{m=47;break b}case 10:{m=49;break b}case 11:{m=51;break b}case 22:{m=83;break b}case 24:{m=89;break b}case 25:{m=92;break b}case 26:{m=95;break b}case 27:{m=98;break b}case 28:{m=101;break b}case 29:{m=104;break b}case 30:{m=109;break b}case 31:{m=112;break b}case 32:{m=115;break b}case 34:{m=121;break b}case 0:break f;case 35:break;default:{m=134;break a}}h=c[46964]|0;a[f>>0]=a[194805]|0;e=c[46972]|0;g=c[e>>2]|0;if(!(c[g+44>>2]|0)){n=c[g+16>>2]|0;c[46977]=n;c[g>>2]=c[46962];g=c[e>>2]|0;c[g+44>>2]=1;e=n}else e=c[46977]|0;if((c[46973]|0)>>>0<=((c[g+4>>2]|0)+e|0)>>>0){m=128;break e}switch(yD()|0){case 0:{m=132;break d}case 2:{m=133;break e}case 1:break;default:continue a}c[46973]=c[46964];e=(((c[46971]|0)+-1|0)/2|0)+36|0}a[f>>0]=a[194805]|0;f=c[46975]|0;e=c[46974]|0}if((m|0)==128){m=0;g=i-h|0;h=c[46964]|0;f=h+(g+-1)|0;c[46973]=f;e=wD()|0;i=xD(e)|0;j=c[46964]|0;if(!i)continue;else{m=129;break}}else if((m|0)==133){m=0;f=(c[(c[c[46972]>>2]|0)+4>>2]|0)+(c[46977]|0)|0;c[46973]=f;e=wD()|0;j=c[46964]|0;continue}}if((m|0)==129){m=0;f=h+g|0;c[46973]=f;e=i;continue}else if((m|0)==132){m=0;f=(c[46964]|0)+(i-h+-1)|0;c[46973]=f;e=wD()|0;j=c[46964]|0;continue}}switch(m|0){case 29:{m=0;e=c[46965]|0;if(e|0)c[(c[c[46972]>>2]|0)+28>>2]=(a[(c[46964]|0)+(e+-1)>>0]|0)==10&1;c[4725]=(c[4725]|0)+1;continue a}case 32:{m=0;e=c[46965]|0;if(e|0)c[(c[c[46972]>>2]|0)+28>>2]=(a[(c[46964]|0)+(e+-1)>>0]|0)==10&1;c[46971]=3;continue a}case 35:{m=0;e=c[46965]|0;if(!e)continue a;c[(c[c[46972]>>2]|0)+28>>2]=(a[(c[46964]|0)+(e+-1)>>0]|0)==10&1;continue a}case 37:{m=0;e=c[46965]|0;if(!e)continue a;c[(c[c[46972]>>2]|0)+28>>2]=(a[(c[46964]|0)+(e+-1)>>0]|0)==10&1;continue a}case 39:{m=0;e=c[46965]|0;if(e|0)c[(c[c[46972]>>2]|0)+28>>2]=(a[(c[46964]|0)+(e+-1)>>0]|0)==10&1;c[46971]=1;continue a}case 42:{m=0;e=c[46965]|0;if(!e)continue a;c[(c[c[46972]>>2]|0)+28>>2]=(a[(c[46964]|0)+(e+-1)>>0]|0)==10&1;continue a}case 44:{m=0;e=c[46965]|0;if(e|0)c[(c[c[46972]>>2]|0)+28>>2]=(a[(c[46964]|0)+(e+-1)>>0]|0)==10&1;qD();continue a}case 47:{m=0;e=c[46965]|0;if(!e)continue a;c[(c[c[46972]>>2]|0)+28>>2]=(a[(c[46964]|0)+(e+-1)>>0]|0)==10&1;continue a}case 49:{m=0;e=c[46965]|0;if(!e)continue a;c[(c[c[46972]>>2]|0)+28>>2]=(a[(c[46964]|0)+(e+-1)>>0]|0)==10&1;continue a}case 51:{m=0;e=c[46965]|0;if(!e)continue a;c[(c[c[46972]>>2]|0)+28>>2]=(a[(c[46964]|0)+(e+-1)>>0]|0)==10&1;continue a}case 83:{m=0;e=c[46965]|0;if(e|0)c[(c[c[46972]>>2]|0)+28>>2]=(a[(c[46964]|0)+(e+-1)>>0]|0)==10&1;c[46971]=5;sD();continue a}case 89:{m=0;e=c[46965]|0;if(e|0)c[(c[c[46972]>>2]|0)+28>>2]=(a[(c[46964]|0)+(e+-1)>>0]|0)==10&1;uD(98744);continue a}case 92:{m=0;e=c[46965]|0;if(e|0)c[(c[c[46972]>>2]|0)+28>>2]=(a[(c[46964]|0)+(e+-1)>>0]|0)==10&1;uD(96616);continue a}case 95:{m=0;e=c[46965]|0;if(e|0)c[(c[c[46972]>>2]|0)+28>>2]=(a[(c[46964]|0)+(e+-1)>>0]|0)==10&1;c[4725]=(c[4725]|0)+1;continue a}case 98:{m=0;f=c[46965]|0;e=c[46964]|0;if(f|0)c[(c[c[46972]>>2]|0)+28>>2]=(a[e+(f+-1)>>0]|0)==10&1;uD(e);continue a}case 101:{m=0;e=c[46965]|0;if(e|0)c[(c[c[46972]>>2]|0)+28>>2]=(a[(c[46964]|0)+(e+-1)>>0]|0)==10&1;c[46971]=7;c[46976]=1;sD();continue a}case 104:{m=0;e=c[46965]|0;if(e|0)c[(c[c[46972]>>2]|0)+28>>2]=(a[(c[46964]|0)+(e+-1)>>0]|0)==10&1;n=(c[46976]|0)+-1|0;c[46976]=n;if(!n){m=108;break a}uD(c[46964]|0);continue a}case 109:{m=0;f=c[46965]|0;e=c[46964]|0;if(f|0)c[(c[c[46972]>>2]|0)+28>>2]=(a[e+(f+-1)>>0]|0)==10&1;c[46976]=(c[46976]|0)+1;uD(e);continue a}case 112:{m=0;f=c[46965]|0;e=c[46964]|0;if(f|0)c[(c[c[46972]>>2]|0)+28>>2]=(a[e+(f+-1)>>0]|0)==10&1;uD(e);c[4725]=(c[4725]|0)+1;continue a}case 115:{m=0;f=c[46965]|0;e=c[46964]|0;if(f|0)c[(c[c[46972]>>2]|0)+28>>2]=(a[e+(f+-1)>>0]|0)==10&1;uD(e);continue a}case 121:{m=0;f=c[46965]|0;e=c[46964]|0;if(f|0)c[(c[c[46972]>>2]|0)+28>>2]=(a[e+(f+-1)>>0]|0)==10&1;U4(e,f,1,c[46963]|0)|0;continue a}}}switch(m|0){case 27:{e=c[46965]|0;if(!e)l=-1;else{c[(c[c[46972]>>2]|0)+28>>2]=(a[(c[46964]|0)+(e+-1)>>0]|0)==10&1;l=-1}break}case 53:{e=c[46965]|0;if(!e)l=259;else{c[(c[c[46972]>>2]|0)+28>>2]=(a[(c[46964]|0)+(e+-1)>>0]|0)==10&1;l=259}break}case 55:{e=c[46965]|0;if(!e)l=260;else{c[(c[c[46972]>>2]|0)+28>>2]=(a[(c[46964]|0)+(e+-1)>>0]|0)==10&1;l=260}break}case 57:{e=c[46965]|0;if(e|0)c[(c[c[46972]>>2]|0)+28>>2]=(a[(c[46964]|0)+(e+-1)>>0]|0)==10&1;if(!(c[46969]|0)){c[46969]=258;l=258}else l=258;break}case 61:{e=c[46965]|0;if(e|0)c[(c[c[46972]>>2]|0)+28>>2]=(a[(c[46964]|0)+(e+-1)>>0]|0)==10&1;if(!(c[46969]|0)){c[46969]=261;l=261}else l=261;break}case 65:{e=c[46965]|0;if(!e)l=263;else{c[(c[c[46972]>>2]|0)+28>>2]=(a[(c[46964]|0)+(e+-1)>>0]|0)==10&1;l=263}break}case 67:{e=c[46965]|0;if(!e)l=262;else{c[(c[c[46972]>>2]|0)+28>>2]=(a[(c[46964]|0)+(e+-1)>>0]|0)==10&1;l=262}break}case 69:{e=c[46965]|0;if(e|0)c[(c[c[46972]>>2]|0)+28>>2]=(a[(c[46964]|0)+(e+-1)>>0]|0)==10&1;l=(c[46969]|0)==261?264:45;break}case 72:{e=c[46965]|0;if(e|0)c[(c[c[46972]>>2]|0)+28>>2]=(a[(c[46964]|0)+(e+-1)>>0]|0)==10&1;l=(c[46969]|0)==258?264:45;break}case 75:{f=c[46965]|0;e=c[46964]|0;if(f|0)c[(c[c[46972]>>2]|0)+28>>2]=(a[e+(f+-1)>>0]|0)==10&1;c[46992]=fD(c[46942]|0,e)|0;l=267;break}case 78:{e=c[46965]|0;if(e|0)c[(c[c[46972]>>2]|0)+28>>2]=(a[(c[46964]|0)+(e+-1)>>0]|0)==10&1;if(rD()|0){m=(c[46965]|0)+-1|0;a[f>>0]=a[194805]|0;n=j+m|0;c[46973]=n;c[46964]=j;c[46965]=m;a[194805]=a[n>>0]|0;a[n>>0]=0;c[46973]=n}c[46992]=fD(c[46942]|0,c[46964]|0)|0;l=267;break}case 86:{e=c[46965]|0;if(e|0)c[(c[c[46972]>>2]|0)+28>>2]=(a[(c[46964]|0)+(e+-1)>>0]|0)==10&1;c[46971]=1;tD();l=268;break}case 108:{c[46971]=1;vD();l=268;break}case 118:{f=c[46965]|0;e=c[46964]|0;if(f|0)c[(c[c[46972]>>2]|0)+28>>2]=(a[e+(f+-1)>>0]|0)==10&1;l=a[e>>0]|0;break}case 134:{zD(96619);break}}return l|0}function nD(){var a=0,b=0,d=0;b=c[46972]|0;do if(!b){a=GD(4)|0;c[46972]=a;if(!a)zD(96977);else{c[a>>2]=0;a=1;d=9;break}}else{a=c[46983]|0;if(0>=(a+-1|0)>>>0){a=a+8|0;b=AD(b,a<<2)|0;c[46972]=b;if(!b)zD(96977);else{d=b+(c[46983]<<2)|0;c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=0;c[d+16>>2]=0;c[d+20>>2]=0;c[d+24>>2]=0;c[d+28>>2]=0;d=9;break}}}while(0);if((d|0)==9)c[46983]=a;return}function oD(a,b){a=a|0;b=b|0;var d=0;d=GD(48)|0;if(!d)zD(96932);c[d+12>>2]=b;b=GD(b+2|0)|0;c[d+4>>2]=b;if(!b)zD(96932);else{c[d+20>>2]=1;CD(d,a);return d|0}return 0}function pD(){var b=0,d=0;d=c[46972]|0;b=c[d>>2]|0;c[46977]=c[b+16>>2];b=c[b+8>>2]|0;c[46973]=b;c[46964]=b;c[46962]=c[c[d>>2]>>2];a[194805]=a[b>>0]|0;return}function qD(){var b=0,d=0,e=0,f=0,g=0,h=0,i=0;g=l;l=l+32|0;f=g;d=g+16|0;e=g+12|0;h=c[46964]|0;b=h+1|0;i=(Q2(b,96916,4)|0)==0;b=i?h+5|0:b;c[f>>2]=e;c[f+4>>2]=g+20;c[f+8>>2]=d;f=b5(b,96921,f)|0;if((f|0)>0?(c[4725]=(c[e>>2]|0)+-1,(f|0)!=1):0){d=b+(c[d>>2]|0)|0;b=d;a:while(1){e=a[b>>0]|0;switch(e<<24>>24){case 0:case 34:break a;default:{}}b=b+1|0}if((b|0)!=(d|0)&e<<24>>24==34){a[b>>0]=0;FD(d,b-d|0)}}l=g;return}function rD(){var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;j=l;l=l+2080|0;i=j+8|0;f=j;b=j+1056|0;d=j+32|0;h=j+16|0;k=a[(c[46964]|0)+((c[46965]|0)+-1)>>0]|0;e=k<<24>>24==46;if(e|((k&255)+-48|0)>>>0<10)if(e?(ED()|0)!=0:0)g=4;else b=0;else g=4;if((g|0)==4){k=c[46966]|0;kA(h,1024,b);nA(h,96827)|0;nA(h,c[46964]|0)|0;c[f>>2]=c[4725];m4(d,96871,f)|0;nA(h,d)|0;nA(h,(k|0)==0?96821:k)|0;nA(h,96888)|0;d=h+4|0;b=c[d>>2]|0;if(b>>>0>=(c[h+8>>2]|0)>>>0){lA(h,1)|0;b=c[d>>2]|0}a[b>>0]=0;b=c[h>>2]|0;c[d>>2]=b;c[i>>2]=b;gA(0,96913,i)|0;oA(h);b=1}l=j;return b|0}function sD(){var b=0;b=c[46978]|0;if(!b){b=T1(1024)|0;c[46978]=b;c[46980]=b+1024}c[46979]=b;a[b>>0]=0;return}function tD(){c[46992]=fD(c[46942]|0,c[46978]|0)|0;a[c[46978]>>0]=0;return}function uD(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;e=c[46979]|0;d=c[46978]|0;if(e>>>0>d>>>0){e=e+-1|0;f=3}a:while(1){if((f|0)==3)c[46979]=e;f=c[46980]|0;g=f;do{h=b;b=b+1|0;h=a[h>>0]|0;i=e;e=e+1|0;a[i>>0]=h;if(!(h<<24>>24))break a}while(e>>>0>>0);c[46979]=e;f=d;i=g-f<<1;d=W1(d,i)|0;c[46978]=d;c[46980]=d+i;e=d+(e-f)|0;f=3}c[46979]=e;return}function vD(){c[46992]=gD(c[46942]|0,c[46978]|0)|0;a[c[46978]>>0]=0;return}function wD(){var d=0,e=0,f=0,g=0,h=0;h=c[46973]|0;g=c[46964]|0;e=(c[(c[c[46972]>>2]|0)+28>>2]|0)+(c[46971]|0)|0;while(1){if(g>>>0>=h>>>0)break;d=a[g>>0]|0;if(!(d<<24>>24))d=1;else d=c[18904+((d&255)<<2)>>2]|0;if(b[63856+(e<<1)>>1]|0){c[46974]=e;c[46975]=g}a:while(1){f=d&255;do{d=f+(b[64042+(e<<1)>>1]|0)|0;if((e|0)==(b[64252+(d<<1)>>1]|0))break a;d=b[64788+(e<<1)>>1]|0;e=d<<16>>16}while(d<<16>>16<=92);d=c[19928+(f<<2)>>2]|0}g=g+1|0;e=b[64998+(d<<1)>>1]|0}return e|0}function xD(a){a=a|0;var d=0;if(b[63856+(a<<1)>>1]|0){d=c[46973]|0;c[46974]=a;c[46975]=d}while(1){d=(b[64042+(a<<1)>>1]|0)+1|0;if((a|0)==(b[64252+(d<<1)>>1]|0))break;a=b[64788+(a<<1)>>1]|0}d=b[64998+(d<<1)>>1]|0;return (d<<16>>16==92?0:d<<16>>16)|0}function yD(){var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;j=c[46972]|0;g=c[j>>2]|0;i=c[g+4>>2]|0;f=c[46964]|0;l=c[46973]|0;k=l;if(l>>>0>(i+((c[46977]|0)+1)|0)>>>0)zD(96674);h=k-f|0;if(!(c[g+40>>2]|0))b=(h|0)==1?1:2;else{l=h+-1|0;h=i;g=0;while(1){if((g|0)>=(l|0))break;a[h>>0]=a[f>>0]|0;h=h+1|0;f=f+1|0;g=g+1|0}f=c[j>>2]|0;do if((c[f+44>>2]|0)==2){c[46977]=0;c[f+16>>2]=0;e=f;m=17}else{while(1){i=f+12|0;h=c[i>>2]|0;g=h-l+-1|0;if(g|0){m=16;break}g=f+4|0;j=c[g>>2]|0;if(!(c[f+20>>2]|0)){m=12;break}f=h<<1;f=(f|0)==0?(h>>>3)+h|0:f;c[i>>2]=f;f=AD(j,f+2|0)|0;c[g>>2]=f;if(!f)break;j=f+(k-j)|0;c[46973]=j;f=c[c[46972]>>2]|0;k=j}if((m|0)==12)c[g>>2]=0;else if((m|0)==16){d=nb[c[c[(c[46967]|0)+8>>2]>>2]&63](c[46968]|0,(c[f+4>>2]|0)+l|0,g>>>0<8192?g:8192)|0;e=c[c[46972]>>2]|0;c[46977]=d;c[e+16>>2]=d;if(!d){m=17;break}else{b=0;break}}zD(96730)}while(0);do if((m|0)==17)if(!l){BD(c[46962]|0);b=1;d=c[46977]|0;e=c[c[46972]>>2]|0;break}else{c[e+44>>2]=2;b=2;d=0;break}while(0);f=d+l|0;do if(f>>>0>(c[e+12>>2]|0)>>>0){m=AD(c[e+4>>2]|0,f+(d>>>1)|0)|0;d=c[46972]|0;c[(c[d>>2]|0)+4>>2]=m;d=c[(c[d>>2]|0)+4>>2]|0;if(!d)zD(96774);else{n=c[46977]|0;o=d;break}}else{n=d;o=c[e+4>>2]|0}while(0);n=n+l|0;c[46977]=n;a[o+n>>0]=0;o=c[46972]|0;a[(c[(c[o>>2]|0)+4>>2]|0)+((c[46977]|0)+1)>>0]=0;c[46964]=c[(c[o>>2]|0)+4>>2]}return b|0}function zD(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=c[15712]|0;c[b>>2]=a;w4(d,96670,b)|0;Sa(2)}function AD(a,b){a=a|0;b=b|0;return W1(a,b)|0}function BD(a){a=a|0;var b=0,d=0,e=0;d=c[46972]|0;if((d|0)!=0?(b=c[d>>2]|0,(b|0)!=0):0)e=4;else{nD();b=oD(c[46962]|0,16384)|0;d=c[46972]|0;c[d>>2]=b;if(!d)b=0;else e=4}CD(b,a);pD();return}function CD(a,b){a=a|0;b=b|0;var d=0;d=c[(d2()|0)>>2]|0;DD(a);c[a>>2]=b;c[a+40>>2]=1;b=c[46972]|0;if(!b)b=0;else b=c[b>>2]|0;if((b|0)!=(a|0)){c[a+32>>2]=1;c[a+36>>2]=0}c[a+24>>2]=0;c[(d2()|0)>>2]=d;return}function DD(b){b=b|0;var d=0;if(b|0){c[b+16>>2]=0;d=b+4|0;a[c[d>>2]>>0]=0;a[(c[d>>2]|0)+1>>0]=0;c[b+8>>2]=c[d>>2];c[b+28>>2]=1;c[b+44>>2]=0;d=c[46972]|0;if(!d)d=0;else d=c[d>>2]|0;if((d|0)==(b|0))pD()}return}function ED(){var b=0,d=0;d=c[46964]|0;b=(c[46965]|0)+-2|0;while(1){if((b|0)<=-1){b=0;break}if((a[d+b>>0]|0)==46){b=1;break}else b=b+-1|0}return b|0}function FD(a,b){a=a|0;b=b|0;var d=0;d=c[46981]|0;if((d|0)<(b|0)){if(!d)d=T1(b+1|0)|0;else d=W1(c[46982]|0,b+1|0)|0;c[46982]=d;c[46981]=b}else d=c[46982]|0;r3(d,a)|0;c[46966]=c[46982];return}function GD(a){a=a|0;return T1(a)|0}function HD(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0;m=l;l=l+2112|0;k=m+32|0;i=m+24|0;h=m+16|0;g=m+8|0;f=m;d=m+56|0;j=m+40|0;kA(j,1024,m+1080|0);e=c[46966]|0;if(e|0){nA(j,e)|0;nA(j,97027)|0}nA(j,b)|0;c[f>>2]=c[4725];m4(d,97030,f)|0;nA(j,d)|0;a:do if(!(a[c[46964]>>0]|0))switch(((c[46971]|0)+-1|0)/2|0|0){case 2:{c[g>>2]=16384;m4(d,97050,g)|0;nA(j,d)|0;b=c[46978]|0;if(!(a[b>>0]|0))break a;i=l2(b)|0;nA(j,97112)|0;b=c[46978]|0;if((i|0)>80)a[b+80>>0]=0;nA(j,b)|0;break a}case 3:{c[h>>2]=16384;m4(d,97131,h)|0;nA(j,d)|0;b=c[46978]|0;if(!(a[b>>0]|0))break a;i=l2(b)|0;nA(j,97199)|0;b=c[46978]|0;if((i|0)>80)a[b+80>>0]=0;nA(j,b)|0;break a}case 1:{c[i>>2]=16384;m4(d,97218,i)|0;nA(j,d)|0;break a}default:break a}else{nA(j,97042)|0;nA(j,c[46964]|0)|0;d=j+4|0;b=c[d>>2]|0;if(b>>>0>=(c[j+8>>2]|0)>>>0){lA(j,1)|0;b=c[d>>2]|0}c[d>>2]=b+1;a[b>>0]=39}while(0);e=j+4|0;b=c[e>>2]|0;d=j+8|0;if(b>>>0>=(c[d>>2]|0)>>>0){lA(j,1)|0;b=c[e>>2]|0}c[e>>2]=b+1;a[b>>0]=10;b=c[e>>2]|0;if(b>>>0>=(c[d>>2]|0)>>>0){lA(j,1)|0;b=c[e>>2]|0}a[b>>0]=0;i=c[j>>2]|0;c[e>>2]=i;c[k>>2]=i;gA(1,96913,k)|0;oA(j);l=m;return}function ID(){JD(c[46964]|0);return}function JD(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;j=c[46973]|0;a[j>>0]=a[194805]|0;i=c[46972]|0;e=c[i>>2]|0;d=c[e+4>>2]|0;if(j>>>0<(d+2|0)>>>0){f=d+((c[46977]|0)+2)|0;g=d+((c[e+12>>2]|0)+2)|0;k=d;h=e;while(1){if(f>>>0<=k>>>0)break;e=f+-1|0;k=g+-1|0;a[k>>0]=a[e>>0]|0;h=c[i>>2]|0;f=e;g=k;k=c[h+4>>2]|0}e=g-f|0;d=j+e|0;j=c[h+12>>2]|0;c[46977]=j;c[h+16>>2]=j;if(d>>>0<(k+2|0)>>>0)zD(97277);else{l=b+e|0;m=d}}else{l=b;m=j}b=m+-1|0;a[b>>0]=64;c[46964]=l;a[194805]=a[b>>0]|0;c[46973]=b;return}function KD(){var a=0;a=c[46972]|0;if(!a)a=0;else a=c[a>>2]|0;DD(a);return}function LD(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+80|0;f=e;g=a+52|0;XD(a,c[g>>2]|0,18548);a=f+8|0;c[a>>2]=b;c[a+4>>2]=d;d=c[g>>2]|0;d=nb[c[d>>2]&63](d,f,4)|0;l=e;return d|0}function MD(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;f=LD(b,d,e)|0;if(!f){f=dC(b,72)|0;c[f+64>>2]=c[b+64>>2];g=f+24|0;h=c[b+24>>2]|0;c[g>>2]=h;a[g>>0]=h&255&-9;c[f+56>>2]=b;c[f+60>>2]=c[b+60>>2];b=f+8|0;c[b>>2]=d;c[b+4>>2]=e;qB(f)|0}return f|0}function ND(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;g=l;l=l+16|0;f=g;if(!(((b|0)!=0?(HB(a,0,b,f,0)|0)!=0:0)?(e=f,e=LD(a,c[e>>2]|0,c[e+4>>2]|0)|0,(e|0)!=0):0))if((d|0)!=0?(HB(a,0,b,f,1)|0)!=0:0){e=f;e=MD(a,c[e>>2]|0,c[e+4>>2]|0)|0;LB(a,0,e)}else e=0;l=g;return e|0}function OD(a){a=a|0;a=c[a+52>>2]|0;return nb[c[a>>2]&63](a,0,128)|0}function PD(a){a=a|0;var b=0;b=QD(a)|0;if(!b)a=0;else{b=c[b+52>>2]|0;a=nb[c[b>>2]&63](b,a,8)|0}return a|0}function QD(a){a=a|0;return c[a+56>>2]|0}function RD(a,b){a=a|0;b=b|0;a=c[a+52>>2]|0;return nb[c[a>>2]&63](a,b,2)|0}function SD(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;a=c[46984]|0;e=(b|0)!=0;do if(!a)if(e){U1(b);a=0;break}else{a=T1(d)|0;break}else if(e){eC(a,b);a=0;break}else{a=dC(a,d)|0;break}while(0);return a|0}function TD(a,b,d){a=a|0;b=b|0;d=d|0;a=c[46984]|0;if(!a)U1(b);else eC(a,b);return}function UD(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=b+28|0;f=c[e>>2]|0;c[e>>2]=7;c[46984]=a;d=Vz(b,d)|0;c[e>>2]=f;c[46984]=0;return d|0}function VD(a,b,d){a=a|0;b=b|0;d=d|0;c[46984]=a;return nb[c[b>>2]&63](b,d,2)|0}function WD(a,b){a=a|0;b=b|0;var d=0,e=0;d=(bA(b,0,0)|0)+28|0;e=c[d>>2]|0;c[d>>2]=7;c[46984]=a;if(!(Rz(b)|0)){c[d>>2]=e;c[46984]=0;a=0}else a=1;return a|0}function XD(a,b,c){a=a|0;b=b|0;c=c|0;if(c|0?(bA(b,0,0)|0)!=(c|0):0)bA(b,c,0)|0;return}function YD(a,b){a=a|0;b=b|0;if(!(iD(a)|0))b=_D(a,b)|0;else ZD(a,b)|0;return b|0}function ZD(b,c){b=b|0;c=c|0;var d=0,e=0,f=0;a[c>>0]=60;e=c;while(1){d=e+1|0;f=a[b>>0]|0;if(!(f<<24>>24))break;a[d>>0]=f;b=b+1|0;e=d}a[d>>0]=62;a[e+2>>0]=0;return c|0}function _D(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;a:do if((b|0)!=0?(a[b>>0]|0)!=0:0){a[d>>0]=34;l=a[b>>0]|0;q=0;g=((l+-45&255)<2|((l&255)+-48|0)>>>0<10)&1;h=0;i=0;j=0;e=d+1|0;f=b+1|0;b:while(1){k=e;while(1){if(!(l<<24>>24))break b;e=l&255;c:do if(l<<24>>24==34){a[k>>0]=92;m=g;n=1;k=k+1|0}else{if(!g){n=l<<24>>24>-1&(l<<24>>24!=95&(a3(e)|0)==0);m=0;n=n?1:h;break}switch(l<<24>>24){case 45:{n=(j|0)==0;m=n?g:0;n=n?h:1;break c}case 46:{n=(i|0)==0;m=n?g:0;n=n?h:1;i=i+1|0;break c}default:{n=(e+-48|0)>>>0<10;m=n?g:0;n=n?h:1;break c}}}while(0);e=k+1|0;a[k>>0]=l;p=f+1|0;o=a[f>>0]|0;j=j+1|0;f=c[5031]|0;if(!f){g=m;h=n;k=e;f=p;l=o;continue}g=o&255;h=o<<24>>24!=0;if((q&h?!(l<<24>>24==92|l<<24>>24>-1&((l+-45&255)>1&(a3(l<<24>>24)|0)==0)^1):0)?!(o<<24>>24>-1&((o+-45&255)>1&(a3(g)|0)==0)):0)break;if((j|0)<(f|0)|h^1){g=m;h=n;k=e;f=p;l=o;continue}if(l<<24>>24==92|l<<24>>24>-1&((a3(l<<24>>24)|0)==0&(l+-45&255)>1)^1){q=1;g=m;h=n;l=o;f=p;continue b}if(o<<24>>24>-1&((o+-45&255)>1&(a3(g)|0)==0)){q=1;g=m;h=n;l=o;f=p;continue b}a[e>>0]=92;a[k+2>>0]=10;g=m;h=1;j=0;k=k+3|0;f=p;l=o}a[e>>0]=92;a[k+2>>0]=10;q=0;g=m;h=1;j=0;l=o;e=k+3|0;f=p}a[k>>0]=34;a[k+1>>0]=0;if(!h){if((j|0)==1?((a[b>>0]|0)+-45&255)<2:0){b=d;break}else e=20128;while(1){f=c[e>>2]|0;if(!f)break a;if(!(c3(f,b)|0)){b=d;break}else e=e+4|0}}else b=d}else b=97309;while(0);return b|0}function $D(a){a=a|0;return YD(a,aE(a)|0)|0}function aE(a){a=a|0;var b=0;b=((l2(a)|0)<<1)+2|0;b=b>>>0>1024?b:1024;a=c[46986]|0;if(b>>>0>(c[46985]|0)>>>0){if(!a)a=T1(b)|0;else a=W1(a,b)|0;c[46986]=a;c[46985]=b}return a|0}function bE(a,b){a=a|0;b=b|0;a=OD(a)|0;while(1){if(!a){a=0;break}if((cE(a)|0)==0?oC(a,b,0)|0:0){a=1;break}a=PD(a)|0}return a|0}function cE(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;h=KB(b)|0;if((h|0)!=0?(a[h>>0]|0)!=37:0)d=0;else e=3;a:do if((e|0)==3){d=wA(b)|0;b:do if(d|0?(f=wA(QD(b)|0)|0,f|0):0){h=Xz(c[(wA(yC(b)|0)|0)+8>>2]|0)|0;g=d+12|0;e=f+12|0;d=0;while(1){if((d|0)>=(h|0))break b;f=c[(c[g>>2]|0)+(d<<2)>>2]|0;if((f|0?(i=c[(c[e>>2]|0)+(d<<2)>>2]|0,i|0):0)?s2(f,i)|0:0){d=0;break a}d=d+1|0}}while(0);d=rA(b,0)|0;if(d)if((Xz(c[d+8>>2]|0)|0)>0)d=0;else return (Xz(c[d+12>>2]|0)|0)<1|0;else d=1}while(0);return d|0}function dE(b,d){b=b|0;d=d|0;var e=0,f=0;c[46987]=0;e=QA(b,97319)|0;if((e|0?((a[e>>0]|0)+-48|0)>>>0<10:0)?(f=y4(e,0,10)|0,(f|0)==0|(f|0)>59):0)c[5031]=f;eE(b,1);if(((fE(b,d,1)|0)!=-1?(gE(b,d)|0)!=-1:0)?(hE(b,d)|0)!=-1:0){c[5031]=128;b=kb[c[(c[(c[b+64>>2]|0)+8>>2]|0)+8>>2]&63](d)|0}else b=-1;return b|0}function eE(a,b){a=a|0;b=b|0;var d=0;c[a>>2]=c[a>>2]&-9;d=OD(a)|0;while(1){if(!d)break;eE(d,0);d=PD(d)|0}a:do if(b|0){b=jC(a)|0;while(1){if(!b)break a;c[b>>2]=c[b>>2]&-9;d=XA(a,b)|0;while(1){if(!d)break;c[d>>2]=c[d>>2]&-9;d=ZA(a,d)|0}b=kC(a,b)|0}}while(0);return}function fE(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;if((e|0)==0?(QD(b)|0)!=0:0){i=0;g=195059;k=109514}else{k=(a[b+24>>0]&1)==0?195059:97363;g=(zB(b)|0)==0;c[46988]=GA(b,2,111455,0)|0;c[46989]=GA(b,2,111464,0)|0;i=1;g=g?195059:97366}f=KB(b)|0;if((f|0)!=0?(a[f>>0]|0)!=37:0){h=1;j=102604}else{h=0;j=195059;f=195059}do if((iE(b,d)|0)!=-1?(jE(b,d,g)|0)!=-1:0){g=(h|0)==0;if(h|i|0){if((jE(b,d,k)|0)==-1){f=-1;break}if((jE(b,d,102597)|0)==-1){f=-1;break}}if(!g?(uE(b,d,f)|0)==-1:0){f=-1;break}if(((jE(b,d,j)|0)!=-1?(jE(b,d,97374)|0)!=-1:0)?(c[46987]=(c[46987]|0)+1,(zE(b,d,e)|0)!=-1):0){c[b>>2]=c[b>>2]|8;f=0}else f=-1}else f=-1;while(0);return f|0}function gE(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;a:do if((kE(a,b)|0)==-1)d=-1;else{k=rA(yC(a)|0,0)|0;i=(k|0)==0;j=k+12|0;k=k+8|0;h=jC(a)|0;while(1){if(!h){d=0;break a}if(lE(a,h,(c[h>>2]|0)>>>4,0)|0){if(i)d=0;else d=c[k>>2]|0;if((mE(h,b,d)|0)==-1){d=-1;break a}}g=XA(a,h)|0;d=h;while(1){if(!g)break;f=g+-48|0;e=c[((c[g>>2]&3|0)==2?g:f)+40>>2]|0;if((d|0)!=(e|0)?(lE(a,e,(c[h>>2]|0)>>>4,0)|0)!=0:0){if(i)d=0;else d=c[k>>2]|0;if((mE(c[((c[g>>2]&3|0)==2?g:f)+40>>2]|0,b,d)|0)==-1){d=-1;break a}d=c[((c[g>>2]&3|0)==2?g:f)+40>>2]|0}if(nE(a,g)|0){if(i)e=0;else e=c[j>>2]|0;if((oE(g,b,e)|0)==-1){d=-1;break a}}g=ZA(a,g)|0}h=kC(a,h)|0}}while(0);return d|0}function hE(a,b){a=a|0;b=b|0;c[46987]=(c[46987]|0)+-1;if((iE(a,b)|0)==-1)a=-1;else a=((jE(a,b,111008)|0)==-1)<<31>>31;return a|0}function iE(a,b){a=a|0;b=b|0;var d=0;d=c[46987]|0;while(1){if((d|0)<=0){d=0;break}if((jE(a,b,153597)|0)==-1){d=-1;break}else d=d+-1|0}return d|0}function jE(a,b,d){a=a|0;b=b|0;d=d|0;return lb[c[(c[(c[a+64>>2]|0)+8>>2]|0)+4>>2]&127](b,d)|0}function kE(a,b){a=a|0;b=b|0;a=OD(a)|0;while(1){if(!a){a=0;break}if(!(cE(a)|0)){if((fE(a,b,0)|0)==-1){a=-1;break}if((gE(a,b)|0)==-1){a=-1;break}if((hE(a,b)|0)==-1){a=-1;break}}else kE(a,b)|0;a=PD(a)|0}return a|0}function lE(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0;if((bE(a,b)|0)==0?(wE(a,b,c,d)|0)!=0:0)if((xE(a,b)|0)==0?(yE(b)|0)==0:0)e=5;else a=1;else e=5;if((e|0)==5)a=0;return a|0}function mE(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;d=xC(a)|0;do if((iE(d,b)|0)!=-1?(pE(a,b)|0)!=-1:0){if((rE(a)|0)==0?(sE(a,b,c)|0)==-1:0){a=-1;break}a=jE(d,b,97330)|0}else a=-1;while(0);return a|0}function nE(a,b){a=a|0;b=b|0;a=OD(a)|0;while(1){if(!a){a=1;break}if((cE(a)|0)==0?mB(a,b,0)|0:0){a=0;break}a=PD(a)|0}return a|0}function oE(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;e=c[a>>2]&3;g=c[((e|0)==3?a:a+48|0)+40>>2]|0;e=c[((e|0)==2?a:a+-48|0)+40>>2]|0;f=xC(g)|0;do if((((((iE(f,b)|0)!=-1?(pE(g,b)|0)!=-1:0)?(qE(a,b,c[46988]|0)|0)!=-1:0)?(g=(xB(xC(g)|0)|0)!=0,(jE(f,b,g?100079:100084)|0)!=-1):0)?(pE(e,b)|0)!=-1:0)?(qE(a,b,c[46989]|0)|0)!=-1:0){if(!(rE(a)|0)){if((sE(a,b,d)|0)==-1){a=-1;break}}else if((tE(a,b,1)|0)==-1){a=-1;break}a=jE(f,b,97330)|0}else a=-1;while(0);return a|0}function pE(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;i=l;l=l+32|0;g=i;d=i+8|0;e=KB(a)|0;f=xC(a)|0;if(!e){j=a+8|0;a=c[j+4>>2]|0;e=g;c[e>>2]=c[j>>2];c[e+4>>2]=a;m4(d,97350,g)|0;if((jE(f,b,d)|0)==-1)a=-1;else h=4}else if((uE(f,b,e)|0)==-1)a=-1;else h=4;if((h|0)==4)a=0;l=i;return a|0}function qE(b,c,d){b=b|0;c=c|0;d=d|0;var e=0,f=0;a:do if((d|0)!=0?(e=xC(b)|0,f=RA(b,d)|0,(a[f>>0]|0)!=0):0)if((jE(e,c,107984)|0)==-1)b=-1;else{do if(iD(f)|0){if((uE(e,c,f)|0)==-1){b=-1;break a}}else{b=R2(f,58)|0;if(!b)if((vE(e,c,f,0)|0)==-1){b=-1;break a}else break;a[b>>0]=0;if((vE(e,c,f,0)|0)==-1){b=-1;break a}if((jE(e,c,107984)|0)==-1){b=-1;break a}if((vE(e,c,b+1|0,0)|0)==-1){b=-1;break a}a[b>>0]=58}while(0);b=0}else b=0;while(0);return b|0}function rE(a){a=a|0;return (c[a>>2]|0)>>>3&1|0}function sE(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;a:do if(!(c[a>>2]&2)){e=0;k=4}else{switch(tE(a,b,0)|0){case -1:{e=-1;break a}case 0:{e=0;k=4;break a}default:{}}e=1;k=4}while(0);b:do if((k|0)==4){f=wA(a)|0;j=xC(a)|0;c:do if(f){i=f+12|0;h=nb[c[d>>2]&63](d,0,128)|0;while(1){if(!h)break c;do if(c[a>>2]&2){g=c[46988]|0;if(g|0?(c[h+16>>2]|0)==(c[g+16>>2]|0):0)break;g=c[46989]|0;if(!((g|0)!=0?(c[h+16>>2]|0)==(c[g+16>>2]|0):0))k=12}else k=12;while(0);if((k|0)==12){k=0;f=h+16|0;if((c[(c[i>>2]|0)+(c[f>>2]<<2)>>2]|0)!=(c[h+12>>2]|0)){g=e+1|0;if(e){if((jE(j,b,97345)|0)==-1){e=-1;break b}if((iE(j,b)|0)==-1){e=-1;break b}}else{if((iE(j,b)|0)==-1){e=-1;break b}if((jE(j,b,97342)|0)==-1){e=-1;break b}c[46987]=(c[46987]|0)+1}if((uE(j,b,c[h+8>>2]|0)|0)==-1){e=-1;break b}if((jE(j,b,97348)|0)==-1){e=-1;break b}if((uE(j,b,c[(c[i>>2]|0)+(c[f>>2]<<2)>>2]|0)|0)==-1){e=-1;break b}else e=g}}h=nb[c[d>>2]&63](d,h,8)|0}}while(0);if((e|0)>0){if((jE(j,b,97340)|0)==-1){e=-1;break}c[46987]=(c[46987]|0)+-1}c[a>>2]=c[a>>2]|8;e=0}while(0);return e|0}function tE(b,c,d){b=b|0;c=c|0;d=d|0;var e=0,f=0;e=KB(b)|0;b=xC(b)|0;if((e|0)!=0?(a[e>>0]|0)!=0:0)if((jE(b,c,97333)|0)!=-1?(uE(b,c,e)|0)!=-1:0)if((d|0)!=0?(jE(b,c,97340)|0)==-1:0)b=-1;else{b=1;f=7}else b=-1;else{b=0;f=7}return b|0}function uE(a,b,c){a=a|0;b=b|0;c=c|0;return vE(a,b,c,1)|0}function vE(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;if(!d)c=_D(c,aE(c)|0)|0;else c=$D(c)|0;return jE(a,b,c)|0}function wE(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;a:do if(0>>0|(0==(e|0)?(c[b>>2]|0)>>>4>>>0>>0:0))b=0;else{b=_A(a,b)|0;while(1){if(!b){b=1;break a}if(0>>0|(0==(e|0)?(c[c[b+40>>2]>>2]|0)>>>4>>>0>>0:0)){b=0;break a}b=$A(a,b)|0}}while(0);return b|0}function xE(a,b){a=a|0;b=b|0;if(!(_A(a,b)|0))a=(XA(a,b)|0)==0&1;else a=0;return a|0}function yE(a){a=a|0;var b=0,d=0,e=0;a=wA(a)|0;a:do if(!a)a=0;else{d=a+8|0;e=c[d>>2]|0;b=a+12|0;a=nb[c[e>>2]&63](e,0,128)|0;while(1){if(!a){a=0;break a}if((c[(c[b>>2]|0)+(c[a+16>>2]<<2)>>2]|0)!=(c[a+12>>2]|0)){a=1;break a}e=c[d>>2]|0;a=nb[c[e>>2]&63](e,a,8)|0}}while(0);return a|0}function zE(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=rA(a,0)|0;if(e)if(((AE(a,b,111494,c[e+16>>2]|0,d)|0)!=-1?(AE(a,b,111481,c[e+8>>2]|0,d)|0)!=-1:0)?(AE(a,b,111450,c[e+12>>2]|0,d)|0)!=-1:0)f=5;else a=-1;else f=5;if((f|0)==5)a=0;return a|0}function AE(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;m=(g|0)!=0;if(m)l=0;else l=_z(f,0)|0;k=(l|0)==0;j=nb[c[f>>2]&63](f,0,128)|0;g=0;while(1){if(!j){n=23;break}i=j+12|0;n=c[i>>2]|0;if((n|0)!=0?(a[n>>0]|0)!=0:0)n=12;else n=7;do if((n|0)==7){n=0;if(!(a[j+22>>0]|0)){if(!k){h=nb[c[l>>2]&63](l,j,4)|0;o=c[h+12>>2]|0;if(o|0?a[o>>0]|0:0){n=12;break}if(!(a[h+22>>0]|0))n=12}}else n=12}while(0);if((n|0)==12){n=0;h=g+1|0;if(g){if((jE(b,d,97345)|0)==-1){g=-1;break}if((iE(b,d)|0)==-1){g=-1;break}}else{if((iE(b,d)|0)==-1){g=-1;break}if((jE(b,d,e)|0)==-1){g=-1;break}if((jE(b,d,97342)|0)==-1){g=-1;break}c[46987]=(c[46987]|0)+1}if((uE(b,d,c[j+8>>2]|0)|0)==-1){g=-1;break}if((jE(b,d,97348)|0)==-1){g=-1;break}if((uE(b,d,c[i>>2]|0)|0)==-1){g=-1;break}else g=h}j=nb[c[f>>2]&63](f,j,8)|0}do if((n|0)==23){if((g|0)>0){c[46987]=(c[46987]|0)+-1;if((g|0)!=1){if((jE(b,d,153599)|0)==-1){g=-1;break}if((iE(b,d)|0)==-1){g=-1;break}}g=(jE(b,d,97377)|0)==-1;if(m|g){g=g<<31>>31;break}}else if(m){g=0;break}_z(f,l)|0;g=0}while(0);return g|0}function BE(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0;switch(c[b>>2]&3){case 0:{g=82;break}case 1:{g=83;break}case 3:case 2:{g=84;break}default:{}}b=lb[g&127](a,b)|0;if(!b)b=-1;else{FE(a,b,d,e,g,f);b=0}return b|0}function CE(a,b){a=a|0;b=b|0;if((xC(b)|0)!=(a|0))b=mB(a,b,0)|0;return b|0}function DE(a,b){a=a|0;b=b|0;if((xC(b)|0)!=(a|0))b=oC(a,b,0)|0;return b|0}function EE(a,b){a=a|0;b=b|0;return a|0}function FE(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;h=(f|0)!=0;if(h)vb[c&127](a,b,d);g=OD(a)|0;while(1){if(!g)break;i=lb[e&127](g,b)|0;if(i|0)FE(g,i,c,d,e,f);g=PD(g)|0}if(!h)vb[c&127](a,b,d);return}function GE(){var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;t=l;l=l+1200|0;r=t+800|0;g=t;c[46990]=0;c[46991]=-2;f=r;i=200;n=g;p=0;q=0;o=r;a:while(1){b[o>>1]=p;if((f+(i<<1)+-2|0)>>>0>o>>>0)k=i;else{m=o-f>>1;e=m+1|0;if(i>>>0>9999){s=75;break}k=i<<1;k=k>>>0<1e4?k:1e4;h=T1(k*6|3)|0;if(h){W6(h|0,f|0,e<<1|0)|0;i=h+(k>>>1<<2)|0;W6(i|0,n|0,e<<2|0)|0;if((f|0)==(r|0)){e=0;f=h}else{U1(f);e=0;f=h}}else{e=4;i=n}j=(e|0)==0;h=f+(m<<1)|0;switch((j?((f+(k<<1)+-2|0)>>>0>h>>>0?0:9):e)&15){case 9:{e=1;s=76;break a}case 4:{s=75;break a}case 0:{g=j?i+(m<<2)|0:g;n=i;o=j?h:o;break}default:{e=0;break a}}}if((p|0)==6){e=0;s=76;break}e=a[97381+p>>0]|0;j=e<<24>>24;do if(e<<24>>24!=-18){h=c[46991]|0;if((h|0)==-2){h=mD()|0;c[46991]=h}if((h|0)>=1)if(h>>>0<269)i=d[97461+h>>0]|0;else i=2;else{c[46991]=0;i=0}h=i+j|0;if(h>>>0<=59?(i|0)==(d[97730+h>>0]|0):0){p=a[97790+h>>0]|0;e=p<<24>>24;if(p<<24>>24<1){h=0-e|0;s=23;break}else{c[46991]=-2;g=g+4|0;c[g>>2]=c[46992];j=(q|0)==0?0:q+-1|0;h=o;break}}else s=22}else s=22;while(0);if((s|0)==22){s=0;p=a[97850+p>>0]|0;h=p&255;if(!(p<<24>>24)){h=c[46991]|0;b:do switch(q|0){case 0:{c[46990]=(c[46990]|0)+1;HD(143761);h=o;break}case 3:if((h|0)<1)if(!h){e=1;s=76;break a}else{h=o;break b}else{c[46991]=-2;h=o;break b}default:h=o}while(0);while(1){if(e<<24>>24==18)break;if((h|0)==(f|0)){e=1;s=76;break a}e=h+-2|0;g=g+-4|0;h=e;e=a[97381+(b[e>>1]|0)>>0]|0}g=g+4|0;c[g>>2]=c[46992];e=1;j=3}else s=23}do if((s|0)==23){s=0;i=d[97930+h>>0]|0;e=c[g+(1-i<<2)>>2]|0;c:do switch(h|0){case 2:{HE();IE();break}case 3:{if(c[46993]|0){HE();IE();sB(c[46993]|0)|0;c[46942]=0;c[46993]=0}break}case 6:{JE(c[g>>2]|0,c[g+-4>>2]|0,c[g+-8>>2]|0);break}case 7:{e=c[g>>2]|0;break}case 8:{e=0;break}case 9:{e=1;break}case 10:{e=0;break}case 11:{e=0;break}case 12:{e=1;break}case 21:if(!(c[g+-4>>2]|0)){LE();break c}else{KE();break c}case 24:{ME();break}case 25:{ME();break}case 26:{e=1;break}case 27:{e=0;break}case 30:{NE(c[g>>2]|0,0,0);break}case 31:{NE(c[g+-8>>2]|0,c[g>>2]|0,0);break}case 32:{NE(c[g+-16>>2]|0,c[g+-8>>2]|0,c[g>>2]|0);break}case 33:{OE(c[g+-8>>2]|0,c[g+-4>>2]|0);break}case 34:{OE(258,0);break}case 35:{e=258;break}case 36:{e=259;break}case 37:{e=260;break}case 38:{e=c[g+-4>>2]|0;break}case 39:{e=0;break}case 48:{PE(c[g+-8>>2]|0,c[g>>2]|0);break}case 49:{PE(c[g>>2]|0,0);break}case 51:{QE(c[g>>2]|0);break}case 52:{RE();break}case 53:{e=c[g>>2]|0;break}case 54:{e=0;break}case 55:{e=0;break}case 59:{e=c[g>>2]|0;break}case 60:{e=c[g>>2]|0;break}case 61:{e=c[g>>2]|0;break}case 62:{e=SE(c[g+-8>>2]|0,c[g>>2]|0)|0;break}default:{}}while(0);i=0-i|0;p=g+(i<<2)|0;i=o+(i<<1)|0;g=p+4|0;c[p+4>>2]=e;e=(d[97993+h>>0]|0)+-24|0;p=b[i>>1]|0;h=p+(a[98056+e>>0]|0)|0;if(h>>>0<60?(d[97730+h>>0]|0)==(p|0):0){e=a[97790+h>>0]|0;j=q;h=i;break}e=a[98091+e>>0]|0;j=q;h=i}while(0);i=k;p=e;q=j;o=h+2|0}if((s|0)==75){HD(140558);e=2;s=76}if((s|0)==76)if((f|0)!=(r|0))U1(f);l=t;return e|0}function HE(){var a=0,b=0;a=c[46994]|0;while(1){if(!a)break;_E(a+8|0);_E((c[46994]|0)+24|0);_E((c[46994]|0)+16|0);b=TE(c[46994]|0)|0;c[46994]=b;a=b}return}function IE(){ID();TB(c[46993]|0);return}function JE(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;h=l;l=l+16|0;g=h;f=c[46993]|0;if(!f){a[187980]=d&1|(e&255)<<1&2|a[187980]&-12|8;f=c[46996]|0;a[g>>0]=a[187980]|0;a[g+1>>0]=a[187981]|0;a[g+2>>0]=a[187982]|0;a[g+3>>0]=a[187983]|0;f=oB(b,g,f)|0;c[46993]=f}c[46942]=f;c[46994]=UE(c[46994]|0,f)|0;hD(0,b)|0;l=h;return}function KE(){var b=0,d=0,e=0,f=0,g=0,h=0;ZE(2);e=c[46994]|0;f=a[98126]|0;h=0;b=e+24|0;while(1){d=c[b>>2]|0;if(!d)break;if(((c[d>>2]|0)==267?(g=c[d+4>>2]|0,(a[g>>0]|0)==f<<24>>24):0)?(s2(g,98126)|0)==0:0)b=c[d+8>>2]|0;else b=h;h=b;b=d+12|0}b=e+16|0;a:while(1){e=c[b>>2]|0;b=e+12|0;if(!(c[b>>2]|0))break;d=e+4|0;if((c[e>>2]|0)==262){e=c[d>>2]|0;d=jC(e)|0;while(1){if(!d)continue a;g=oC(c[c[46994]>>2]|0,d,0)|0;fF(g,0,c[b>>2]|0,h);d=kC(e,d)|0}}else while(1){d=c[d>>2]|0;if(!d)continue a;fF(c[d+4>>2]|0,c[d+8>>2]|0,c[b>>2]|0,h);d=d+12|0}}_E((c[46994]|0)+8|0);_E((c[46994]|0)+16|0);_E((c[46994]|0)+24|0);c[(c[46994]|0)+4>>2]=0;return}function LE(){var a=0;ZE(1);a=(c[46994]|0)+8|0;while(1){a=c[a>>2]|0;if(!a)break;eF(c[a+4>>2]|0);a=a+12|0}_E((c[46994]|0)+8|0);_E((c[46994]|0)+24|0);_E((c[46994]|0)+16|0);c[(c[46994]|0)+4>>2]=0;return}function ME(){var a=0,b=0;a=c[46994]|0;b=c[a+8>>2]|0;if(!b){b=c[a+4>>2]|0;if(!b)b=0;else{b=dF(b)|0;a=c[46994]|0}c[a+4>>2]=0}else{b=cF(b)|0;a=c[46994]|0;c[a+12>>2]=0;c[a+8>>2]=0}if(b|0)WE(a+16|0,b);return}function NE(a,b,d){a=a|0;b=b|0;d=d|0;if(d)b=aF(b,d)|0;d=bF(tC(c[c[46994]>>2]|0,a,1)|0,b)|0;WE((c[46994]|0)+8|0,d);hD(c[46993]|0,a)|0;return}function OE(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;if(d|0)YE();d=(c[46994]|0)+24|0;while(1){d=c[d>>2]|0;if(!d)break;if(!(c[d+8>>2]|0))YE();d=d+12|0}g=(b|0)==260?2:(b|0)==259&1;ZE(g);b=c[46994]|0;d=b+24|0;while(1){f=c[d>>2]|0;if(!f)break;do if((c[f>>2]|0)!=267){d=c[f+4>>2]|0;e=c[b>>2]|0;if(!((a[d+21>>0]|0)!=0&(e|0)==(c[46993]|0))){d=GA(e,g,c[d+8>>2]|0,c[f+8>>2]|0)|0;b=c[46994]|0;if((c[b>>2]|0)!=(c[46993]|0))break}a[d+22>>0]=1}while(0);d=f+12|0}_E(b+24|0);return}function PE(a,b){a=a|0;b=b|0;b=VE(a,b)|0;WE((c[46994]|0)+24|0,b);return}function QE(a){a=a|0;var b=0;b=c[46994]|0;c[46994]=UE(b,ND(c[b>>2]|0,a,1)|0)|0;hD(c[46993]|0,a)|0;return}function RE(){var a=0,b=0;a=c[46994]|0;b=c[a>>2]|0;a=TE(a)|0;c[46994]=a;c[a+4>>2]=b;return}function SE(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;g=l;l=l+1024|0;f=g;d=l2(a)|0;d=d+1+(l2(b)|0)|0;if(d>>>0<1025)d=f;else d=T1(d)|0;r3(d,a)|0;F4(d,b)|0;e=fD(c[46993]|0,d)|0;hD(c[46993]|0,a)|0;hD(c[46993]|0,b)|0;if((d|0)!=(f|0))U1(d);l=g;return e|0}function TE(a){a=a|0;var b=0;b=c[(c[46994]|0)+32>>2]|0;eC(c[46993]|0,a);return b|0}function UE(a,b){a=a|0;b=b|0;var d=0;d=dC(c[46993]|0,36)|0;c[d+32>>2]=a;c[d>>2]=b;return d|0}function VE(a,b){a=a|0;b=b|0;return XE(267,a,b)|0}function WE(a,b){a=a|0;b=b|0;var d=0,e=0;d=a+4|0;e=c[d>>2]|0;if(e|0)c[e+12>>2]=b;c[d>>2]=b;if(!(c[a>>2]|0))c[a>>2]=b;return}function XE(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=dC(c[46993]|0,16)|0;c[e>>2]=a;c[e+4>>2]=b;c[e+8>>2]=d;return e|0}function YE(){var a=0;a=l;l=l+16|0;gA(0,98130,a)|0;l=a;return}function ZE(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;g=(b|0)==2;d=(c[46994]|0)+24|0;while(1){d=c[d>>2]|0;if(!d)break;e=d+4|0;f=c[e>>2]|0;if(!((g?(a[f>>0]|0)==(a[98126]|0):0)?!(s2(f,98126)|0):0)){h=GA(c[c[46994]>>2]|0,b,f,0)|0;c[e>>2]=h;if(!h)c[e>>2]=GA(c[c[46994]>>2]|0,b,f,195059)|0;c[d>>2]=266;hD(c[46993]|0,f)|0}d=d+12|0}return}function _E(a){a=a|0;$E(c[a>>2]|0);c[a+4>>2]=0;c[a>>2]=0;return}function $E(a){a=a|0;var b=0;while(1){if(!a)break;b=c[a+12>>2]|0;switch(c[a>>2]|0){case 265:{$E(c[a+4>>2]|0);break}case 266:case 267:{hD(c[46993]|0,c[a+8>>2]|0)|0;break}default:{}}eC(c[46993]|0,a);a=b}return}function aF(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;h=l;l=l+1040|0;f=h;g=h+8|0;d=l2(a)|0;d=d+2+(l2(b)|0)|0;if(d>>>0<1025)e=g;else e=T1(d)|0;c[f>>2]=a;c[f+4>>2]=b;m4(e,98163,f)|0;d=fD(c[46993]|0,e)|0;hD(c[46993]|0,a)|0;hD(c[46993]|0,b)|0;if((e|0)!=(g|0))U1(e);l=h;return d|0}function bF(a,b){a=a|0;b=b|0;return XE(259,a,b)|0}function cF(a){a=a|0;return XE(265,a,0)|0}function dF(a){a=a|0;return XE(262,a,0)|0}function eF(a){a=a|0;var b=0,d=0;b=(c[46994]|0)+24|0;while(1){b=c[b>>2]|0;if(!b)break;if((c[b>>2]|0)==266?(d=c[b+4>>2]|0,d|0):0)KA(a,d,c[b+8>>2]|0)|0;b=b+12|0}return}function fF(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0;f=d+4|0;a:do if((c[d>>2]|0)==262){d=c[f>>2]|0;f=jC(d)|0;while(1){if(!f)break a;gF(a,b,oC(c[c[46994]>>2]|0,f,0)|0,0,e);f=kC(d,f)|0}}else while(1){f=c[f>>2]|0;if(!f)break a;d=oC(c[c[46994]>>2]|0,c[f+4>>2]|0,0)|0;gF(a,b,d,c[f+8>>2]|0,e);f=f+12|0}while(0);return}function gF(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0;d=iB(c[c[46994]>>2]|0,a,d,f,1)|0;if(d|0){g=c[d>>2]&3;f=c[((g|0)==2?d:d+-48|0)+40>>2]|0;a=(f|0)==(a|0)?(c[((g|0)==3?d:d+48|0)+40>>2]|0)!=(f|0):0;hF(d,111455,a?e:b);hF(d,111464,a?b:e);eF(d)}return}function hF(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;if(d|0){e=GA(c[c[46994]>>2]|0,2,b,0)|0;if(!e)e=GA(c[c[46994]>>2]|0,2,b,195059)|0;KA(a,e,d)|0}return}function iF(a,b,d){a=a|0;b=b|0;d=d|0;c[46962]=b;c[46993]=a;c[46942]=0;a=d|0?d:18600;c[46996]=a;lD(a,b);GE()|0;a=c[46942]|0;if(!a){KD();a=c[46942]|0}return a|0}function jF(a,b){a=a|0;b=b|0;return iF(0,a,b)|0}function kF(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;k=l;l=l+16|0;j=k+8|0;i=k;d=c[b+76>>2]|0;f=c[b>>2]|0;if((d|0)!=0?(e=c[d>>2]|0,(e|0)!=0):0){tb[e&127](b);g=12}else g=4;do if((g|0)==4)if((c[b+40>>2]|0)==0?(h=b+36|0,(c[h>>2]|0)==0):0){if(a[f+13>>0]|0)lF(b);d=b+32|0;e=c[d>>2]|0;if(!e){c[h>>2]=c[15679];g=12;break}f=$4(e,106512)|0;c[h>>2]=f;if(!f){j=c[(c[b+12>>2]|0)+16>>2]|0;h=c[d>>2]|0;d=t2(c[(d2()|0)>>2]|0)|0;c[i>>2]=h;c[i+4>>2]=d;ub[j&63](98169,i);d=1}else g=12}else g=12;while(0);if((g|0)==12)if(!(c[b+152>>2]&1024))d=0;else{ub[c[(c[b+12>>2]|0)+16>>2]&63](98207,j);d=1}l=k;return d|0}function lF(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;h=l;l=l+112|0;e=h;g=h+4|0;d=c[b+24>>2]|0;if(!d)a[g>>0]=0;else{c[e>>2]=d+1;m4(g,98225,e)|0}e=c[b+20>>2]|0;e=e|0?e:98229;d=l2(e)|0;i=l2(g)|0;f=b+52|0;i=d+1+i+(l2(c[f>>2]|0)|0)|0;d=i+11|0;if((c[46997]|0)>>>0<(i+1|0)>>>0){c[46997]=d;d=W1(c[46998]|0,d)|0;c[46998]=d}else d=c[46998]|0;r3(d,e)|0;F4(c[46998]|0,g)|0;d=c[46998]|0;d=d+(l2(d)|0)|0;a[d>>0]=46;a[d+1>>0]=0;d=D4(c[f>>2]|0)|0;f=c[46998]|0;while(1){e=E4(d,58)|0;if(!e)break;F4(f,e+1|0)|0;i=c[46998]|0;g=i+(l2(i)|0)|0;a[g>>0]=46;a[g+1>>0]=0;a[e>>0]=0;f=i}F4(f,d)|0;U1(d);c[b+32>>2]=c[46998];l=h;return}function mF(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=l;l=l+16|0;g=h+8|0;f=h;if((b|0)!=0&(d|0)!=0){if(c[a+152>>2]&1024|0){ub[c[(c[a+12>>2]|0)+16>>2]&63](98207,f);Sa(1)}if((nF(a,b,d)|0)==(d|0))e=d;else{f=c[(c[a+12>>2]|0)+16>>2]|0;c[g>>2]=d;ub[f&63](98239,g);Sa(1)}}else e=0;l=h;return e|0}function nF(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;o=l;l=l+16|0;n=o;f=c[(c[b>>2]|0)+104>>2]|0;do if(!f){j=b+40|0;h=c[j>>2]|0;if(!h){e=U4(d,1,e,c[b+36>>2]|0)|0;break}f=b+44|0;i=b+48|0;g=c[i>>2]|0;do if(((c[f>>2]|0)+-1-g|0)>>>0>>0){g=e+4096+g&-4096;c[f>>2]=g;f=W1(h,g)|0;c[j>>2]=f;if(!f){ub[c[(c[b+12>>2]|0)+16>>2]&63](98264,n);Sa(1)}else{k=f;m=c[i>>2]|0;break}}else{k=h;m=g}while(0);W6(k+m|0,d|0,e|0)|0;n=(c[i>>2]|0)+e|0;c[i>>2]=n;a[(c[j>>2]|0)+n>>0]=0}else e=nb[f&63](b,d,e)|0;while(0);l=o;return e|0}function oF(a,b){a=a|0;b=b|0;var c=0;c=l2(b)|0;b=(mF(a,b,c)|0)==(c|0);return (b?1:-1)|0}function pF(b,c){b=b|0;c=c|0;var d=0,e=0;d=l;l=l+16|0;e=d;a[e>>0]=c;b=(mF(b,e,1)|0)==1;l=d;return (b?c:-1)|0}function qF(b){b=b|0;var d=0;d=c[b+36>>2]|0;if(((d|0)!=0?(a[b+144>>0]|0)==0:0)?(c[(c[b>>2]|0)+104>>2]|0)==0:0)b=M4(d)|0;else b=0;return b|0}function rF(a){a=a|0;var b=0,d=0;b=c[a+76>>2]|0;if(b|0?(d=c[b+4>>2]|0,d|0):0)tb[d&127](a);qF(a)|0;return}function sF(a){a=a|0;var b=0,d=0,e=0;e=l;l=l+16|0;d=c[a+76>>2]|0;if(c[a+152>>2]&1024|0){ub[c[(c[a+12>>2]|0)+16>>2]&63](98291,e);Sa(1)}if((d|0)!=0?(b=c[d+8>>2]|0,(b|0)!=0):0)tb[b&127](a);else{qF(a)|0;tF(a)}l=e;return}function tF(b){b=b|0;var d=0,e=0,f=0;d=b+32|0;if((c[d>>2]|0?(e=b+36|0,f=c[e>>2]|0,(f|0)!=(c[15679]|0)):0)?(a[b+144>>0]|0)==0:0){if(f|0){I4(f)|0;c[e>>2]=0}c[d>>2]=0}return}function uF(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;i=l;l=l+1056|0;f=i;h=i+24|0;g=i+8|0;c[g>>2]=d;e=G3(h,1024,b,g)|0;if((e|0)>=0){if((e|0)>1023){e=KK(e+1|0)|0;c[g>>2]=d;f=e;e=n4(e,b,g)|0}else f=h;mF(a,f,e)|0;if((f|0)!=(h|0))U1(f)}else{c[f>>2]=t2(c[(d2()|0)>>2]|0)|0;gA(1,98308,f)|0}l=i;return}function vF(a,b){a=a|0;b=+b;var d=0,e=0,f=0;d=l;l=l+16|0;e=d;f=wF(e,b)|0;mF(a,f,c[e>>2]|0)|0;l=d;return}function wF(b,d){b=b|0;d=+d;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;if(!(d<-1.0e15))if(!(d>1.0e15)){d=d*1.0e4;f=~~((d<0.0?-.5:.5)+d);if(!f){f=138394;e=1}else{l=(f|0)<0;k=4;i=0;e=194826;f=l?0-f|0:f;while(1){if(!((f|0)!=0|(k|0)>0))break;g=(f|0)%10|0;j=(f|0)/10|0;h=e+-1|0;if((g|0)==0&i<<24>>24==0)f=0;else{a[h>>0]=g|48;f=1;e=h}if((k|0)==1)if(!(f<<24>>24))f=1;else{e=e+-1|0;a[e>>0]=46;f=1}k=k+-1|0;i=f;f=j}if(l){e=e+-1|0;a[e>>0]=45}f=e;e=194826-e|0}}else{f=98323;e=18}else{f=98322;e=19}c[b>>2]=e;return f|0}function xF(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d;f=wF(e,+h[b>>3])|0;mF(a,f,c[e>>2]|0)|0;mF(a,102604,1)|0;b=wF(e,+h[b+8>>3])|0;mF(a,b,c[e>>2]|0)|0;l=d;return}function yF(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;g=l;l=l+16|0;f=g;e=0;while(1){h=b+(e<<4)|0;c[f>>2]=c[h>>2];c[f+4>>2]=c[h+4>>2];c[f+8>>2]=c[h+8>>2];c[f+12>>2]=c[h+12>>2];xF(a,f);e=e+1|0;if((e|0)>=(d|0))break;mF(a,102604,1)|0}l=g;return}function zF(a,b){a=a|0;b=b|0;var d=0;d=JK(392)|0;if(d|0){c[d>>2]=20156;c[d+16>>2]=23;c[d+32>>2]=a;c[d+36>>2]=b}return d|0}function AF(a){a=a|0;var b=0,d=0,e=0,f=0;b=JK(392)|0;d=b;e=a;f=d+40|0;do{c[d>>2]=c[e>>2];d=d+4|0;e=e+4|0}while((d|0)<(f|0));f=b+60|0;e=a+60|0;c[f>>2]=c[e>>2];c[f+4>>2]=c[e+4>>2];c[f+8>>2]=c[e+8>>2];c[f+12>>2]=c[e+12>>2];c[f+16>>2]=c[e+16>>2];f=b+80|0;e=a+80|0;c[f>>2]=c[e>>2];c[f+4>>2]=c[e+4>>2];c[f+8>>2]=c[e+8>>2];c[f+12>>2]=c[e+12>>2];c[f+16>>2]=c[e+16>>2];return b|0}function BF(a){a=a|0;IF(a);U1(a);return}function CF(a,b){a=a|0;b=b|0;var d=0,e=0;e=a+160|0;d=c[e>>2]|0;if(d){e=c[46999]|0;if(e){d=c[e+4>>2]|0;if(!d){d=JK(632)|0;c[(c[46999]|0)+4>>2]=d}}}else{d=JK(632)|0;c[e>>2]=d;c[a+164>>2]=d}c[46999]=d;c[d+32>>2]=b;c[d>>2]=a;return}function DF(a,b){a=a|0;b=b|0;var d=0,e=0;e=a+160|0;d=c[e>>2]|0;if(d){e=c[47e3]|0;if(e){d=c[e+4>>2]|0;if(!d){d=JK(632)|0;c[(c[47e3]|0)+4>>2]=d}}}else{d=JK(632)|0;c[e>>2]=d;c[a+164>>2]=d}c[47e3]=d;c[d+52>>2]=b;c[d>>2]=a;return (LF(a,3,b)|0)!=0|0}function EF(a){a=a|0;var b=0;b=c[a+160>>2]|0;c[a+164>>2]=b;return b|0}function FF(a){a=a|0;var b=0,d=0,e=0;a=a+164|0;b=c[a>>2]|0;d=c[b+4>>2]|0;if(d|0?(e=d+52|0,(c[e>>2]|0)==0):0)c[e>>2]=c[b+52>>2];c[a>>2]=d;return d|0}function GF(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=a+8|0;f=b+10|0;if((c[e>>2]|0)>(b|0))a=c[a>>2]|0;else{c[e>>2]=f;f=MK(c[a>>2]|0,f<<2)|0;c[a>>2]=f;a=f}c[a+(b<<2)>>2]=d;return}function HF(a){a=a|0;var b=0;b=c[a>>2]|0;if(b|0)U1(b);c[a>>2]=0;c[a+8>>2]=0;c[a+4>>2]=0;return}function IF(a){a=a|0;var b=0,d=0,e=0;d=a+160|0;b=c[d>>2]|0;while(1){if(!b)break;e=c[b+4>>2]|0;HF(b+604|0);HF(b+592|0);U1(c[b+584>>2]|0);U1(c[b+588>>2]|0);U1(b);b=e}c[47e3]=0;c[46999]=0;c[a+192>>2]=0;c[a+164>>2]=0;c[d>>2]=0;c[a+28>>2]=0;return}function JF(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0;n=l;l=l+128|0;k=n+64|0;m=n;i4(k,e,63)|0;i=R2(k,58)|0;if(i|0)a[i>>0]=0;b=b+60+(d<<2)|0;while(1){d=c[b>>2]|0;if(!d){d=b;b=0;break}i4(m,c[d+4>>2]|0,63)|0;d=R2(m,58)|0;if(d|0)a[d>>0]=0;if((s2(k,m)|0)<1){j=9;break}b=c[b>>2]|0}while(1){if((j|0)==9){d=b;b=c[b>>2]|0}if(!b)break;i4(m,c[b+4>>2]|0,63)|0;b=R2(m,58)|0;if(b|0)a[b>>0]=0;if(s2(k,m)|0)break;b=c[d>>2]|0;if((c[b+8>>2]|0)<=(f|0))break;j=9}m=KK(20)|0;c[m>>2]=c[d>>2];c[d>>2]=m;c[m+4>>2]=e;c[m+8>>2]=f;c[m+12>>2]=g;c[m+16>>2]=h;l=n;return 1}function KF(a,b){a=a|0;b=b|0;b=l;l=l+16|0;gA(1,98396,b)|0;l=b;return 0}function LF(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=l;l=l+144|0;r=s;o=s+80|0;p=s+16|0;n=(d+-3|0)>>>0<2?0:d;i4(o,e,63)|0;e=R2(o,58)|0;if(e){f=e+1|0;a[e>>0]=0;e=R2(f,58)|0;if(!e)m=0;else{a[e>>0]=0;m=e+1|0}}else{m=0;f=0}i=(f|0)!=0;j=(m|0)==0;k=(n|0)==(d|0);h=b+60+(d<<2)|0;a:while(1){e=c[h>>2]|0;if(!e){e=0;break}i4(p,c[e+4>>2]|0,63)|0;e=R2(p,58)|0;if(!e)e=0;else{a[e>>0]=0;e=e+1|0}do if(!(s2(p,o)|0)){g=(e|0)!=0;if(i&g?s2(e,f)|0:0)break;if(!j?s2(m,c[(c[(c[h>>2]|0)+12>>2]|0)+8>>2]|0)|0:0)break;if(k|g^1){q=16;break a}if(LF(b,n,e)|0){q=16;break a}}while(0);h=c[h>>2]|0}do if((q|0)==16){e=c[h>>2]|0;if(e){f=e+16|0;if((c[f>>2]|0)==0?(KF(0,0)|0,(c[f>>2]|0)==0):0){e=0;break}if((c[b+8>>2]|0)>0){q=c[15712]|0;o=c[e+4>>2]|0;p=c[(c[e+12>>2]|0)+8>>2]|0;c[r>>2]=c[20168+(d<<2)>>2];c[r+4>>2]=o;c[r+8>>2]=p;w4(q,98427,r)|0}}else e=0}while(0);c[b+80+(d<<2)>>2]=e;l=s;return e|0}function MF(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;do if(!e)e=0;else{if(c[5047]|0){kA(188004,0,0);c[5047]=0}h=D4(e)|0;e=R2(h,58)|0;if(e){a[e>>0]=0;f=b+60+(d<<2)|0;e=1;g=f;while(1){b=c[g>>2]|0;if(!b)break;d=D4(c[b+4>>2]|0)|0;b=R2(d,58)|0;if(b|0)a[b>>0]=0;if(!((a[h>>0]|0)!=0?(c3(h,d)|0)!=0:0)){e=c[47002]|0;if(e>>>0>=(c[47003]|0)>>>0){lA(188004,1)|0;e=c[47002]|0}c[47002]=e+1;a[e>>0]=32;nA(188004,c[(c[g>>2]|0)+4>>2]|0)|0;e=c[47002]|0;if(e>>>0>=(c[47003]|0)>>>0){lA(188004,1)|0;e=c[47002]|0}c[47002]=e+1;a[e>>0]=58;nA(188004,c[(c[(c[g>>2]|0)+12>>2]|0)+8>>2]|0)|0;e=0}U1(d);g=c[g>>2]|0}U1(h);if(e<<24>>24){g=0;i=19}}else{U1(h);g=0;f=b+60+(d<<2)|0;e=1;i=19}if((i|0)==19){while(1){b=c[f>>2]|0;if(!b)break;d=D4(c[b+4>>2]|0)|0;b=R2(d,58)|0;if(b|0)a[b>>0]=0;if(!((g|0)!=0?(c3(g,d)|0)==0:0)){e=c[47002]|0;if(e>>>0>=(c[47003]|0)>>>0){lA(188004,1)|0;e=c[47002]|0}c[47002]=e+1;a[e>>0]=32;nA(188004,d)|0;e=0}g=d;f=c[f>>2]|0;i=19}if(e<<24>>24){e=195059;break}}e=c[47002]|0;if(e>>>0>=(c[47003]|0)>>>0){lA(188004,1)|0;e=c[47002]|0}a[e>>0]=0;e=c[47001]|0;c[47002]=e}while(0);return e|0}function NF(b){b=b|0;var d=0;if(!b)qa(111208,98444,573,98458);if(!(a[b>>0]|0))qa(111213,98444,574,98458);d=c[47005]|0;if(!d)b=0;else b=nb[c[d>>2]&63](d,b,512)|0;return b|0}function OF(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;k=l;l=l+16|0;j=k+8|0;i=k;if(!b)qa(111312,98444,589,98475);g=b+8|0;e=c[g>>2]|0;if(!e)qa(111315,98444,590,98475);if(!(a[e>>0]|0))qa(111324,98444,591,98475);h=b+20|0;f=c[h>>2]|0;do if(!f){d=mP(e)|0;if(!d){c[i>>2]=c[g>>2];gA(0,98499,i)|0;d=0;break}i=$4(d,138821)|0;c[h>>2]=i;if(!i){c[j>>2]=t2(c[(d2()|0)>>2]|0)|0;c[j+4>>2]=d;gA(0,98524,j)|0;d=0;break}d=c[47006]|0;if((d|0)>49){a[b+17>>0]=1;d=1;break}else{c[47006]=d+1;d=1;break}}else{n5(f,0,0)|0;if(!(c[h>>2]|0))qa(98545,98444,614,98475);else d=1}while(0);l=k;return d|0}function PF(b){b=b|0;var d=0,e=0;if(a[b+17>>0]|0?(d=b+20|0,e=c[d>>2]|0,e|0):0){I4(e)|0;c[d>>2]=0}return}function QF(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0.0,g=0.0;if(!b){e=-1;d=-1}else{e=c[b+48>>2]|0;f=+(e|0);if(!e){g=+h[d>>3];f=+h[d+8>>3]}else{h[d+8>>3]=f;h[d>>3]=f;g=f}e=~~(+((c[b+40>>2]|0)*72|0)/g);d=~~(+((c[b+44>>2]|0)*72|0)/f)}c[a>>2]=e;c[a+4>>2]=d;return}function RF(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0,k=0,m=0,n=0.0;m=l;l=l+48|0;f=m+16|0;j=m;k=m+32|0;if((e|0)!=0?(a[e>>0]|0)!=0:0){if((0==0?(g=c[47133]|0,(c[47007]|0)!=(g|0)):0)?(c[47007]=g,i=c[47005]|0,i|0):0){Rz(i)|0;c[47005]=0}n=+h[(c[(c[d+16>>2]|0)+8>>2]|0)+24>>3];n=!(n>=1.0)?96.0:n;h[j+8>>3]=n;h[j>>3]=n;d=SF(e)|0;c[f>>2]=c[j>>2];c[f+4>>2]=c[j+4>>2];c[f+8>>2]=c[j+8>>2];c[f+12>>2]=c[j+12>>2];QF(k,d,f);d=c[k>>2]|0;f=c[k+4>>2]|0}else{d=-1;f=-1}c[b>>2]=d;c[b+4>>2]=f;l=m;return}function SF(a){a=a|0;var b=0,d=0,e=0,f=0;f=l;l=l+16|0;e=f;if(!a)qa(111208,98444,638,98551);if(!(c[47005]|0))c[47005]=Vz(20192,c[4589]|0)|0;b=NF(a)|0;a:do if(!b){b=JK(64)|0;if(!b)b=0;else{d=b+8|0;c[d>>2]=fD(0,a)|0;if(!((OF(b)|0)<<24>>24)){TF(b);b=0;break}if(!(c[b+20>>2]|0))qa(98545,98444,653,98551);do switch(UF(b)|0){case 0:{a=iN(c[d>>2]|0)|0;c[b+52>>2]=a;if(!a){c[e>>2]=c[d>>2];gA(0,98568,e)|0;TF(b);b=0;break a}break}case 2:{VF(b);break}case 3:{WF(b);break}case 1:{XF(b);break}case 4:{YF(b);break}case 6:{ZF(b);break}case 11:{_F(b);break}case 8:{$F(b);break}case 5:{aG(b);break}case 12:{bG(b);break}default:{}}while(0);PF(b);e=c[47005]|0;nb[c[e>>2]&63](e,b,1)|0}}else PF(b);while(0);l=f;return b|0}function TF(a){a=a|0;var b=0;b=c[a+8>>2]|0;if(b|0)hD(0,b)|0;U1(a);return}function UF(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;j=l;l=l+224|0;f=j+200|0;g=j;h=a+20|0;b=c[h>>2]|0;a:do if((b|0)!=0?(x6(f,1,20,b)|0)==20:0){d=0;while(1){if(d>>>0>=10){i=13;break a}if(!($3(f,c[20228+(d<<4)>>2]|0,c[20228+(d<<4)+4>>2]|0)|0))break;d=d+1|0}e=a+28|0;c[e>>2]=c[20228+(d<<4)+12>>2];b=c[20228+(d<<4)+8>>2]|0;a=a+24|0;c[a>>2]=b;switch(d|0){case 7:break;case 8:{if($3(f+8|0,98784,4)|0)break a;c[e>>2]=98789;c[a>>2]=11;b=11;break a}default:break a}while(1){if(!(c4(g,200,c[h>>2]|0)|0)){i=11;break}if(!($3(g,98779,4)|0)){i=8;break}}if((i|0)==8){c[e>>2]=101803;c[a>>2]=8;b=8;break}else if((i|0)==11){b=c[a>>2]|0;break}}else i=13;while(0);if((i|0)==13){c[a+28>>2]=98794;c[a+24>>2]=0;b=0}l=j;return b|0}function VF(a){a=a|0;var b=0,d=0,e=0,f=0;f=l;l=l+16|0;b=f+4|0;d=f;c[a+48>>2]=0;e=a+20|0;n5(c[e>>2]|0,6,0)|0;if((kG(c[e>>2]|0,2,b)|0)<<24>>24?(kG(c[e>>2]|0,2,d)|0)<<24>>24:0){c[a+40>>2]=c[b>>2];c[a+44>>2]=c[d>>2]}l=f;return}function WF(a){a=a|0;var b=0,d=0,e=0,f=0;f=l;l=l+16|0;b=f+4|0;d=f;c[a+48>>2]=0;e=a+20|0;n5(c[e>>2]|0,16,0)|0;if((cG(c[e>>2]|0,4,b)|0)<<24>>24?(cG(c[e>>2]|0,4,d)|0)<<24>>24:0){c[a+40>>2]=c[b>>2];c[a+44>>2]=c[d>>2]}l=f;return}function XF(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;h=l;l=l+16|0;b=h+12|0;d=h+8|0;e=h+4|0;f=h;c[a+48>>2]=0;g=a+20|0;n5(c[g>>2]|0,16,0)|0;if((((kG(c[g>>2]|0,2,b)|0)<<24>>24?(kG(c[g>>2]|0,2,d)|0)<<24>>24:0)?(kG(c[g>>2]|0,2,e)|0)<<24>>24:0)?(kG(c[g>>2]|0,2,f)|0)<<24>>24:0){c[a+40>>2]=c[b>>2]<<16|c[d>>2];c[a+44>>2]=c[e>>2]<<16|c[f>>2]}l=h;return}function YF(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0;m=l;l=l+32|0;b=m+16|0;e=m+12|0;f=m+8|0;h=m+4|0;i=m;c[a+48>>2]=0;j=a+20|0;while(1){if(!((cG(c[j>>2]|0,1,b)|0)<<24>>24))break;d=c[b>>2]|0;if((d|0)==255)continue;if(R2(98767,d)|0)continue;if((d|0)==192){k=6;break}g=c[j>>2]|0;if((d|0)==194){k=11;break}if(!((cG(g,2,e)|0)<<24>>24))break;n5(c[j>>2]|0,(c[e>>2]|0)+-2|0,1)|0}if((k|0)==6){if(((cG(c[j>>2]|0,3,i)|0)<<24>>24?(cG(c[j>>2]|0,2,f)|0)<<24>>24:0)?(cG(c[j>>2]|0,2,h)|0)<<24>>24:0){c[a+44>>2]=c[f>>2];c[a+40>>2]=c[h>>2]}}else if((((k|0)==11?(cG(g,3,i)|0)<<24>>24:0)?(cG(c[j>>2]|0,2,f)|0)<<24>>24:0)?(cG(c[j>>2]|0,2,h)|0)<<24>>24:0){c[a+44>>2]=c[f>>2];c[a+40>>2]=c[h>>2]}l=m;return}function ZF(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0;m=l;l=l+1056|0;j=m;b=m+32|0;e=m+28|0;f=m+24|0;g=m+20|0;h=m+16|0;c[a+48>>2]=72;i=a+20|0;n5(c[i>>2]|0,0,0)|0;while(1){if(!(c4(b,1024,c[i>>2]|0)|0))break;d=d4(b,98752)|0;if(!d)continue;c[j>>2]=e;c[j+4>>2]=f;c[j+8>>2]=g;c[j+12>>2]=h;if((b5(d,104311,j)|0)==4){k=5;break}}if((k|0)==5){j=c[e>>2]|0;c[a+32>>2]=j;k=c[f>>2]|0;c[a+36>>2]=k;c[a+40>>2]=(c[g>>2]|0)-j;c[a+44>>2]=(c[h>>2]|0)-k}l=m;return}function _F(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;g=l;l=l+16|0;b=g+4|0;d=g;c[a+48>>2]=0;e=a+20|0;n5(c[e>>2]|0,15,0)|0;h=(D6(c[e>>2]|0)|0)==88;f=c[e>>2]|0;if(h){n5(f,24,0)|0;if((kG(c[e>>2]|0,4,b)|0)<<24>>24?(kG(c[e>>2]|0,4,d)|0)<<24>>24:0){c[a+40>>2]=c[b>>2];c[a+44>>2]=c[d>>2]}}else{n5(f,26,0)|0;if((kG(c[e>>2]|0,2,b)|0)<<24>>24?(kG(c[e>>2]|0,2,d)|0)<<24>>24:0){c[a+40>>2]=c[b>>2];c[a+44>>2]=c[d>>2]}}l=g;return}function $F(b){b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0;F=l;l=l+352|0;C=F+80|0;B=F+72|0;E=F+64|0;D=F+56|0;A=F+48|0;d=F+40|0;s=F+32|0;t=F+24|0;u=F+16|0;v=F+8|0;w=F;x=F+328|0;y=F+128|0;z=F+96|0;if(!(c[47008]|0)){if(F5(188036,98637,1)|0){c[d>>2]=98637;gA(1,98664,d)|0}c[47008]=188036}m=b+20|0;n5(c[m>>2]|0,0,0)|0;n=z+12|0;o=z+20|0;p=z+8|0;q=z+16|0;r=z+4|0;d=0;g=0;f=0;e=0;a:while(1){if(!(c4(y,200,c[m>>2]|0)|0))break;if(g<<24>>24==0|d<<24>>24==0){i=y;k=e}else break;b:while(1){j=f;c:while(1){while(1){if(r6(188036,i,4,z,0)|0){f=j;e=k;continue a}a[i+(c[n>>2]|0)>>0]=0;a[i+(c[o>>2]|0)>>0]=0;e=i+(c[p>>2]|0)|0;f=i+(c[q>>2]|0)|0;i=i+((c[r>>2]|0)+1)|0;if(!(s2(e,141116)|0))break;if(!(s2(e,141048)|0))break c;if(s2(e,98711)|0)continue;c[C>>2]=t;c[C+4>>2]=u;c[C+8>>2]=v;c[C+12>>2]=w;if((b5(f,98719,C)|0)==4)break b}c[A>>2]=s;c[A+4>>2]=x;if((b5(f,98701,A)|0)!=2){c[D>>2]=s;if((b5(f,101209,D)|0)==1){e=1;f=jG(+h[s>>3],98708)|0}else{e=g;f=j}}else{e=1;f=jG(+h[s>>3],x)|0}if(!(d<<24>>24)){d=0;g=e;j=f}else{g=e;e=k;continue a}}c[E>>2]=s;c[E+4>>2]=x;if((b5(f,98701,E)|0)!=2){c[B>>2]=s;if((b5(f,101209,B)|0)==1){d=1;e=jG(+h[s>>3],98708)|0}else e=k}else{d=1;e=jG(+h[s>>3],x)|0}if(!(g<<24>>24)){g=0;f=j;k=e}else{f=j;continue a}}d=1;g=1;f=~~(+h[v>>3]+1.0-+h[t>>3])>>>0;e=~~(+h[w>>3]+1.0-+h[u>>3])>>>0}c[b+48>>2]=0;c[b+40>>2]=f;c[b+44>>2]=e;l=F;return}function aG(a){a=a|0;var b=0,d=0,e=0,f=0.0,g=0.0;d=l;l=l+32|0;b=d;c[a+48>>2]=0;e=a+20|0;n5(c[e>>2]|0,0,0)|0;if(!(dG(c[e>>2]|0,b)|0)){g=+h[b>>3];c[a+32>>2]=~~g;f=+h[b+8>>3];c[a+36>>2]=~~f;c[a+40>>2]=~~(+h[b+16>>3]-g);c[a+44>>2]=~~(+h[b+24>>3]-f)}l=d;return}function bG(a){a=a|0;var b=0,d=0,e=0,f=0;f=l;l=l+16|0;b=f+4|0;d=f;c[a+48>>2]=0;e=a+20|0;n5(c[e>>2]|0,6,0)|0;if((cG(c[e>>2]|0,1,b)|0)<<24>>24?(cG(c[e>>2]|0,1,d)|0)<<24>>24:0){c[a+40>>2]=c[b>>2];c[a+44>>2]=c[d>>2]}l=f;return}function cG(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;c[d>>2]=0;e=0;while(1){if(e>>>0>=b>>>0){e=1;break}f=D6(a)|0;if(H4(a)|0){e=0;break}c[d>>2]=c[d>>2]<<8|f;e=e+1|0}return e|0}function dG(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;h=l;l=l+1040|0;d=h;e=h+16|0;while(1){if(!(c4(e,1024,a)|0)){a=1;break}f=d4(e,98627)|0;if(f|0){g=4;break}}if((g|0)==4){c[d+4>>2]=e;c[d>>2]=f+9;c[d+8>>2]=a;a=eG(d,b)|0}l=h;return a|0}function eG(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;g=l;l=l+1024|0;f=g;fG(b);e=a[c[b>>2]>>0]|0;if(!(e<<24>>24))e=(gG(b)|0)&255;else e=e<<24>>24;if((((e|0)==91?(c[b>>2]=(c[b>>2]|0)+1,hG(b,f),(iG(f,d)|0)==0):0)?(hG(b,f),(iG(f,d+8|0)|0)==0):0)?(hG(b,f),(iG(f,d+16|0)|0)==0):0){hG(b,f);e=(iG(f,d+24|0)|0)!=0&1}else e=1;l=g;return e|0}function fG(b){b=b|0;var d=0;d=c[b>>2]|0;while(1){d=a[d>>0]|0;if(!(d<<24>>24))d=(gG(b)|0)&255;else d=d<<24>>24;if(!((d&255)<<24>>24))break;if(!(S2(d&255)|0))break;d=(c[b>>2]|0)+1|0;c[b>>2]=d}return}function gG(b){b=b|0;var d=0;d=b+4|0;if(!(c4(c[d>>2]|0,1024,c[b+8>>2]|0)|0))b=0;else{d=c[d>>2]|0;c[b>>2]=d;b=a[d>>0]|0}return b|0}function hG(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;fG(b);e=0;f=c[b>>2]|0;while(1){f=a[f>>0]|0;if(!(f<<24>>24))g=(gG(b)|0)&255;else g=f<<24>>24;f=g<<24>>24;if(!f)break;if(!((f|0)==46|(f+-48|0)>>>0<10))break;a[d+e>>0]=g;e=e+1|0;f=(c[b>>2]|0)+1|0;c[b>>2]=f;if((e|0)==1023){e=1023;break}}a[d+e>>0]=0;return}function iG(a,b){a=a|0;b=b|0;var d=0.0,e=0,f=0;e=l;l=l+16|0;f=e;d=+s5(a,f);if((c[f>>2]|0)==(a|0))a=1;else{h[b>>3]=d;a=0}l=e;return a|0}function jG(a,b){a=+a;b=b|0;var c=0.0;do if(!(s2(b,98735)|0)){a=a*72.0;c=a;a=a>=0.0?.5:-.5}else{if(!(s2(b,98738)|0)){a=a*.75;c=a;a=a>=0.0?.5:-.5;break}if(!(s2(b,98741)|0)){a=a*12.0;c=a;a=a>=0.0?.5:-.5;break}if(s2(b,98708)|0?s2(b,98744)|0:0)if(!(s2(b,98746)|0)){a=a*28.346456664;c=a;a=a>=0.0?.5:-.5;break}else{b=(s2(b,98749)|0)==0;c=a*2.8346456663999997;return (b?~~(c+(c>=0.0?.5:-.5)):0)|0}c=a>=0.0?.5:-.5}while(0);return ~~(a+c)|0}function kG(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;c[d>>2]=0;e=0;while(1){if(e>>>0>=b>>>0){e=1;break}f=D6(a)|0;if(H4(a)|0){e=0;break}c[d>>2]=c[d>>2]|f<<(e<<3);e=e+1|0}return e|0}function lG(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;a=c[b+20>>2]|0;if(a|0)I4(a)|0;if(c[b+52>>2]|0?(e=c[b+60>>2]|0,e|0):0)tb[e&127](b);U1(b);return}function mG(){var a=0;GA(0,1,108224,105493)|0;a=zF(0,1)|0;aT(a,0);return a|0}function nG(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0,k=0,m=0.0,n=0.0,o=0.0,p=0.0;k=l;l=l+304|0;j=k+24|0;i=k+8|0;f=k;g=k+40|0;if((vS(b,e)|0)!=999)if((wS(b,d)|0)==-1)b=-1;else{b=c[d+16>>2]|0;e=b+16|0;if(!(a[(c[b+8>>2]|0)+81>>0]|0)){p=+h[e>>3];o=+h[b+24>>3];n=+h[b+32>>3];m=+h[b+40>>3];c[j>>2]=~~(p+(p>=0.0?.5:-.5));c[j+4>>2]=~~(o+(o>=0.0?.5:-.5));c[j+8>>2]=~~(n+(n>=0.0?.5:-.5));c[j+12>>2]=~~(m+(m>=0.0?.5:-.5));m4(g,98899,j)|0}else{m=+h[b+24>>3];n=+h[e>>3];o=+h[b+40>>3];p=+h[b+32>>3];c[i>>2]=~~(m+(m>=0.0?.5:-.5));c[i+4>>2]=~~(n+(n>=0.0?.5:-.5));c[i+8>>2]=~~(o+(o>=0.0?.5:-.5));c[i+12>>2]=~~(p+(p>=0.0?.5:-.5));m4(g,98899,i)|0}TA(d,102671,g,195059)|0;b=0}else{b=MF(b,1,e)|0;c[f>>2]=e;c[f+4>>2]=b;gA(1,111233,f)|0;b=-1}l=k;return b|0}function oG(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;i=l;l=l+16|0;g=i;f=c[b+60>>2]|0;DF(a,d)|0;b=c[a+164>>2]|0;c[b+56>>2]=JR(b,c[b+52>>2]|0)|0;if((TC(f,137483,0,1)|0)!=0?(c[(c[f+16>>2]|0)+8>>2]|0)!=0:0)h=5;else if(!(c[b+152>>2]&67108864)){jA(98911,g);b=-1}else h=5;if((h|0)==5){c[b+36>>2]=e;if(!e){h=b+152|0;c[h>>2]=c[h>>2]|134217728}h=SJ(a,f)|0;LR(b);IF(a);b=h}l=i;return b|0}function pG(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;i=l;l=l+16|0;g=i;f=c[b+60>>2]|0;DF(a,d)|0;b=c[a+164>>2]|0;c[b+56>>2]=JR(b,c[b+52>>2]|0)|0;if((TC(f,137483,0,1)|0)!=0?(c[(c[f+16>>2]|0)+8>>2]|0)!=0:0)h=5;else if(!(c[b+152>>2]&67108864)){jA(98911,g);b=-1}else h=5;if((h|0)==5){CF(a,e);h=SJ(a,f)|0;LR(b);sF(b);IF(a);b=h}l=i;return b|0}function qG(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0;m=l;l=l+16|0;h=m+8|0;g=m;b=c[b+60>>2]|0;DF(a,d)|0;j=c[a+164>>2]|0;c[j+56>>2]=JR(j,c[j+52>>2]|0)|0;if((TC(b,137483,0,1)|0)!=0?(c[(c[b+16>>2]|0)+8>>2]|0)!=0:0)k=5;else if(!(c[j+152>>2]&67108864)){jA(98911,g);b=-1}else k=5;do if((k|0)==5){if(e|0?(i=T1(4096)|0,c[e>>2]=i,i|0):0){g=j+40|0;c[g>>2]=i;c[j+44>>2]=4096;d=j+48|0;c[d>>2]=0;b=SJ(a,b)|0;LR(j);if(!b){c[e>>2]=c[g>>2];c[f>>2]=c[d>>2]}IF(a);break}gA(1,98932,h)|0;b=-1}while(0);l=m;return b|0}function rG(a,b){a=a|0;b=b|0;_S(a,0,b);return}function sG(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0;H=l;l=l+4288|0;E=H+8|0;D=H;F=4;G=T1(40)|0;c[G>>2]=0;A=H+4152|0;B=H+4148|0;C=H+4128|0;j=H+4112|0;k=H+16|0;o=0;i=$(24,b|0)|0;g=o;o=0;if((g|0)!=0&(p|0)!=0){h=V6(c[g>>2]|0,G|0,F|0)|0;if(!h)bb(g|0,p|0);z=p}else h=-1;a:do if((h|0)!=1){if(!i){c[d>>2]=0;g=0;break}o=0;n=ca(29,e|0,B|0,A|0)|0;g=o;o=0;if((g|0)!=0&(p|0)!=0){h=V6(c[g>>2]|0,G|0,F|0)|0;if(!h)bb(g|0,p|0);z=p}else h=-1;if((h|0)!=1){o=0;m=$(23,40)|0;g=o;o=0;if((g|0)!=0&(p|0)!=0){h=V6(c[g>>2]|0,G|0,F|0)|0;if(!h)bb(g|0,p|0);z=p}else h=-1;if((h|0)!=1){o=0;na(7,C|0,j|0,k|0,24,85);g=o;o=0;if((g|0)!=0&(p|0)!=0){h=V6(c[g>>2]|0,G|0,F|0)|0;if(!h)bb(g|0,p|0);z=p}else h=-1;if((h|0)!=1){o=0;e=$(25,b|0)|0;g=o;o=0;if((g|0)!=0&(p|0)!=0){h=V6(c[g>>2]|0,G|0,F|0)|0;if(!h)bb(g|0,p|0);z=p}else h=-1;if((h|0)!=1){j=C+16|0;i=c[j>>2]|0;g=e;while(1){if(!g)break;o=0;aa(i|0,g|0,0)|0;h=o;o=0;if((h|0)!=0&(p|0)!=0){e=V6(c[h>>2]|0,G|0,F|0)|0;if(!e)bb(h|0,p|0);z=p}else e=-1;if((e|0)==1){y=0;x=j;w=m;v=n;g=z;m=15;break a}o=0;g=aa(86,b|0,g|0)|0;h=o;o=0;if((h|0)!=0&(p|0)!=0){e=V6(c[h>>2]|0,G|0,F|0)|0;if(!e)bb(h|0,p|0);z=p}else e=-1;if((e|0)==1){y=0;x=j;w=m;v=n;g=z;m=15;break a}}G=U6(188068,1,G|0,F|0)|0;F=z;o=0;g=o;o=0;if((g|0)!=0&(p|0)!=0){h=V6(c[g>>2]|0,G|0,F|0)|0;if(!h)bb(g|0,p|0);z=p}else h=-1;if((h|0)==1){y=m;x=j;w=m;v=n;g=z;m=15}else{y=m;x=j;w=m;v=n;g=0;m=15}}else{y=0;x=0;w=m;v=n;g=z;m=15}}else{y=0;x=0;w=m;v=n;g=z;m=15}}else{y=0;x=0;w=m;v=n;g=z;m=15}}else{y=0;x=0;w=0;v=n;g=z;m=15}}else{y=0;x=0;w=0;v=0;g=z;m=15}while(0);do if((m|0)==15){b:while(1){c:do if(!g){o=0;e=$(25,b|0)|0;g=o;o=0;if((g|0)!=0&(p|0)!=0){h=V6(c[g>>2]|0,G|0,F|0)|0;if(!h)bb(g|0,p|0);z=p}else h=-1;if((h|0)==1){s=v;t=w;u=x;m=y;g=z;v=s;w=t;x=u;y=m;m=15;continue b}u=v+(c[B>>2]|0)|0;k=0;m=0;j=0;while(1){if(!e)break;o=0;g=aa(c[x>>2]|0,e|0,-1)|0;h=o;o=0;if((h|0)!=0&(p|0)!=0){i=V6(c[h>>2]|0,G|0,F|0)|0;if(!i)bb(h|0,p|0);z=p}else i=-1;if((i|0)==1){s=v;t=w;u=x;m=y;g=z;v=s;w=t;x=u;y=m;m=15;continue b}if((g|0)==0?(a[(c[e+16>>2]|0)+119>>0]|0)==3:0){if(!m){o=0;c[D>>2]=j;ca(30,u|0,137395,D|0)|0;g=o;o=0;if((g|0)!=0&(p|0)!=0){h=V6(c[g>>2]|0,G|0,F|0)|0;if(!h)bb(g|0,p|0);z=p}else h=-1;if((h|0)==1){s=v;t=w;u=x;m=y;g=z;v=s;w=t;x=u;y=m;m=15;continue b}o=0;i=ca(31,b|0,v|0,1)|0;g=o;o=0;if((g|0)!=0&(p|0)!=0){h=V6(c[g>>2]|0,G|0,F|0)|0;if(!h)bb(g|0,p|0);z=p}else h=-1;if((h|0)==1){s=v;t=w;u=x;m=y;g=z;v=s;w=t;x=u;y=m;m=15;continue b}o=0;da(53,i|0,137483,280,1)|0;g=o;o=0;if((g|0)!=0&(p|0)!=0){h=V6(c[g>>2]|0,G|0,F|0)|0;if(!h)bb(g|0,p|0);z=p}else h=-1;if((h|0)==1){s=v;t=w;u=x;m=y;g=z;v=s;w=t;x=u;y=m;m=15;continue b}c[y+(j<<2)>>2]=i;k=1;j=j+1|0}else i=m;o=0;da(54,b|0,e|0,i|0,C|0)|0;g=o;o=0;if((g|0)!=0&(p|0)!=0){h=V6(c[g>>2]|0,G|0,F|0)|0;if(!h)bb(g|0,p|0);z=p}else h=-1;if((h|0)==1){s=v;t=w;u=x;m=y;g=z;v=s;w=t;x=u;y=m;m=15;continue b}}else i=m;o=0;e=aa(86,b|0,e|0)|0;g=o;o=0;if((g|0)!=0&(p|0)!=0){h=V6(c[g>>2]|0,G|0,F|0)|0;if(!h)bb(g|0,p|0);z=p}else h=-1;if((h|0)==1){s=v;t=w;u=x;m=y;g=z;v=s;w=t;x=u;y=m;m=15;continue b}m=i}o=0;e=$(25,b|0)|0;g=o;o=0;if((g|0)!=0&(p|0)!=0){h=V6(c[g>>2]|0,G|0,F|0)|0;if(!h)bb(g|0,p|0);z=p}else h=-1;if((h|0)==1){s=v;t=w;u=x;m=y;g=z;v=s;w=t;x=u;y=m;m=15;continue b}i=10;n=y;q=w;r=w;t=w;while(1){if(!e){m=0;i=r;e=t;break c}o=0;g=aa(c[x>>2]|0,e|0,-1)|0;h=o;o=0;if((h|0)!=0&(p|0)!=0){m=V6(c[h>>2]|0,G|0,F|0)|0;if(!m)bb(h|0,p|0);z=p}else m=-1;if((m|0)==1){s=v;t=w;u=x;m=y;g=z;v=s;w=t;x=u;y=m;m=15;continue b}if(!g){o=0;c[E>>2]=j;ca(30,u|0,137395,E|0)|0;g=o;o=0;if((g|0)!=0&(p|0)!=0){h=V6(c[g>>2]|0,G|0,F|0)|0;if(!h)bb(g|0,p|0);z=p}else h=-1;if((h|0)==1){s=v;t=w;u=x;m=y;g=z;v=s;w=t;x=u;y=m;m=15;continue b}o=0;s=ca(31,b|0,v|0,1)|0;g=o;o=0;if((g|0)!=0&(p|0)!=0){h=V6(c[g>>2]|0,G|0,F|0)|0;if(!h)bb(g|0,p|0);z=p}else h=-1;if((h|0)==1){s=v;t=w;u=x;m=y;g=z;v=s;w=t;x=u;y=m;m=15;continue b}o=0;da(53,s|0,137483,280,1)|0;h=o;o=0;if((h|0)!=0&(p|0)!=0){g=V6(c[h>>2]|0,G|0,F|0)|0;if(!g)bb(h|0,p|0);z=p}else g=-1;if((g|0)==1){s=v;t=w;u=x;m=y;g=z;v=s;w=t;x=u;y=m;m=15;continue b}o=0;da(54,b|0,e|0,s|0,C|0)|0;g=o;o=0;if((g|0)!=0&(p|0)!=0){h=V6(c[g>>2]|0,G|0,F|0)|0;if(!h)bb(g|0,p|0);z=p}else h=-1;if((h|0)==1){s=v;t=w;u=x;m=y;g=z;v=s;w=t;x=u;y=m;m=15;continue b}if((j|0)==(i|0)){i=j<<1;o=0;m=aa(87,q|0,j<<3|0)|0;g=o;o=0;if((g|0)!=0&(p|0)!=0){h=V6(c[g>>2]|0,G|0,F|0)|0;if(!h)bb(g|0,p|0);z=p}else h=-1;if((h|0)==1){s=v;t=w;u=x;m=y;g=z;v=s;w=t;x=u;y=m;m=15;continue b}g=m;q=m;r=m;h=m}else{g=n;h=t}c[g+(j<<2)>>2]=s;n=g;j=j+1|0;m=h}else m=t;o=0;e=aa(86,b|0,e|0)|0;g=o;o=0;if((g|0)!=0&(p|0)!=0){h=V6(c[g>>2]|0,G|0,F|0)|0;if(!h)bb(g|0,p|0);z=p}else h=-1;if((h|0)==1){s=v;t=w;u=x;m=y;g=z;v=s;w=t;x=u;y=m;m=15;continue b}t=m}}else{m=1;k=0;n=y;j=0;i=w;e=w}while(0);o=0;ia(108,C|0);g=o;o=0;if((g|0)!=0&(p|0)!=0){h=V6(c[g>>2]|0,G|0,F|0)|0;if(!h)bb(g|0,p|0);z=p}else h=-1;if((h|0)==1){s=v;t=w;u=x;m=y;g=z;v=s;w=t;x=u;y=m;m=15;continue}if((v|0)!=(A|0)){o=0;ia(105,v|0);g=o;o=0;if((g|0)!=0&(p|0)!=0){h=V6(c[g>>2]|0,G|0,F|0)|0;if(!h)bb(g|0,p|0);z=p}else h=-1;if((h|0)==1){s=v;t=w;u=x;m=y;g=z;v=s;w=t;x=u;y=m;m=15;continue}}if(!m){o=0;g=aa(87,e|0,j<<2|0)|0;h=o;o=0;if((h|0)!=0&(p|0)!=0){e=V6(c[h>>2]|0,G|0,F|0)|0;if(!e)bb(h|0,p|0);z=p}else e=-1;if((e|0)==1){s=v;t=w;u=x;m=y;g=z;v=s;w=t;x=u;y=m;m=15;continue}else{m=58;break}}c[d>>2]=0;g=0;while(1){if((g|0)>=(j|0))break;o=0;$(26,c[n+(g<<2)>>2]|0)|0;h=o;o=0;if((h|0)!=0&(p|0)!=0){e=V6(c[h>>2]|0,G|0,F|0)|0;if(!e)bb(h|0,p|0);z=p}else e=-1;if((e|0)==1){s=v;t=w;u=x;m=y;g=z;v=s;w=t;x=u;y=m;m=15;continue b}g=g+1|0}o=0;ia(105,i|0);g=o;o=0;if((g|0)!=0&(p|0)!=0){h=V6(c[g>>2]|0,G|0,F|0)|0;if(!h)bb(g|0,p|0);z=p}else h=-1;if((h|0)==1){s=v;t=w;u=x;m=y;g=z;v=s;w=t;x=u;y=m;m=15}else{m=56;break}}if((m|0)==56){g=0;break}else if((m|0)==58){c[d>>2]=j;a[f>>0]=k;break}}while(0);U1(G|0);l=H;return g|0}function tG(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;if(!((a|0)!=0?(CG(a)|0)!=0:0))a=98988;e=l2(a)|0;if((e|0)>=104){d=KK(e+25|0)|0;if(!d)d=0;else f=6}else f=6;if((f|0)==6){r3(d,a)|0;c[b>>2]=e}return d|0}function uG(a,b){a=a|0;b=b|0;oC(b,a,1)|0;return}function vG(b,d){b=b|0;d=d|0;var e=0;b=(c[b+16>>2]|0)+157|0;e=a[b>>0]|0;if((d|0)>=0)a[b>>0]=d;return e|0}function wG(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;c[b>>2]=d;c[b+4>>2]=d+4096;c[b+12>>2]=0;c[b+8>>2]=0;c[a>>2]=b;c[a+4>>2]=b;c[a+8>>2]=d;c[a+12>>2]=e;c[a+16>>2]=f;return}function xG(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;AG(e,b);i=e+12|0;j=e+16|0;b=0;a:while(1){k=BG(e)|0;if(!k)break;b=b+1|0;f=c[i>>2]|0;if(f|0)ub[f&63](k,d);h=aB(a,k)|0;while(1){if(!h)continue a;g=c[h>>2]&3;f=c[((g|0)==3?h:h+48|0)+40>>2]|0;if((f|0)==(k|0))f=c[((g|0)==2?h:h+-48|0)+40>>2]|0;if(!(lb[c[j>>2]&127](f,-1)|0))AG(e,f);h=bB(a,h,k)|0}}return b|0}function yG(a){a=a|0;var b=0;a=c[(c[a>>2]|0)+12>>2]|0;while(1){if(!a)break;b=c[a+12>>2]|0;zG(a);a=b}return}function zG(a){a=a|0;U1(c[a>>2]|0);U1(a);return}function AG(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;k=l;l=l+16|0;j=k+8|0;f=k;g=a+8|0;i=a+4|0;d=c[i>>2]|0;if((c[g>>2]|0)==(c[d+4>>2]|0)){d=c[d+12>>2]|0;do if(!d){e=KK(16)|0;if(!e){gA(1,98969,f)|0;bb(188068,1)}c[e+8>>2]=c[i>>2];c[e+12>>2]=0;d=KK(4e6)|0;c[e>>2]=d;if(!d){gA(1,98969,j)|0;bb(188068,1)}else{c[e+4>>2]=d+4e6;c[(c[i>>2]|0)+12>>2]=e;h=e;break}}else h=d;while(0);c[i>>2]=h;c[g>>2]=c[h>>2]}lb[c[a+16>>2]&127](b,1)|0;j=c[g>>2]|0;c[g>>2]=j+4;c[j>>2]=b;l=k;return}function BG(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;f=a+8|0;b=c[f>>2]|0;d=a+4|0;e=c[d>>2]|0;if((b|0)==(c[e>>2]|0))if((e|0)==(c[a>>2]|0))b=0;else{b=c[e+8>>2]|0;c[d>>2]=b;b=c[b+4>>2]|0;c[f>>2]=b;g=4}else g=4;if((g|0)==4){b=b+-4|0;c[f>>2]=b;b=c[b>>2]|0}return b|0}function CG(b){b=b|0;var c=0;a:while(1){c=b;b=b+1|0;c=a[c>>0]|0;switch(c<<24>>24){case 95:continue a;case 0:{b=1;break a}default:{}}if(!(a3(c&255)|0)){b=0;break}}return b|0}function DG(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,A=0,B=0;B=l;l=l+4272|0;x=B;y=4;A=T1(40)|0;c[A>>2]=0;u=B+4144|0;v=B+4140|0;w=B+4120|0;h=B+4104|0;i=B+8|0;o=0;f=$(24,a|0)|0;g=o;o=0;if((g|0)!=0&(p|0)!=0){e=V6(c[g>>2]|0,A|0,y|0)|0;if(!e)bb(g|0,p|0);z=p}else e=-1;a:do if((e|0)!=1)if(f){o=0;k=ca(29,d|0,v|0,u|0)|0;e=o;o=0;if((e|0)!=0&(p|0)!=0){d=V6(c[e>>2]|0,A|0,y|0)|0;if(!d)bb(e|0,p|0);z=p}else d=-1;if((d|0)!=1){o=0;j=$(23,40)|0;e=o;o=0;if((e|0)!=0&(p|0)!=0){d=V6(c[e>>2]|0,A|0,y|0)|0;if(!d)bb(e|0,p|0);z=p}else d=-1;if((d|0)!=1){o=0;na(7,w|0,h|0,i|0,24,85);e=o;o=0;if((e|0)!=0&(p|0)!=0){d=V6(c[e>>2]|0,A|0,y|0)|0;if(!d)bb(e|0,p|0);z=p}else d=-1;if((d|0)!=1){o=0;f=$(25,a|0)|0;e=o;o=0;if((e|0)!=0&(p|0)!=0){d=V6(c[e>>2]|0,A|0,y|0)|0;if(!d)bb(e|0,p|0);z=p}else d=-1;if((d|0)!=1){h=w+16|0;g=c[h>>2]|0;e=f;while(1){if(!e)break;o=0;aa(g|0,e|0,0)|0;d=o;o=0;if((d|0)!=0&(p|0)!=0){f=V6(c[d>>2]|0,A|0,y|0)|0;if(!f)bb(d|0,p|0);z=p}else f=-1;if((f|0)==1){t=h;s=j;r=k;e=z;j=14;break a}o=0;e=aa(86,a|0,e|0)|0;d=o;o=0;if((d|0)!=0&(p|0)!=0){f=V6(c[d>>2]|0,A|0,y|0)|0;if(!f)bb(d|0,p|0);z=p}else f=-1;if((f|0)==1){t=h;s=j;r=k;e=z;j=14;break a}}A=U6(188068,1,A|0,y|0)|0;y=z;o=0;e=o;o=0;if((e|0)!=0&(p|0)!=0){d=V6(c[e>>2]|0,A|0,y|0)|0;if(!d)bb(e|0,p|0);z=p}else d=-1;if((d|0)==1){t=h;s=j;r=k;e=z;j=14}else{t=h;s=j;r=k;e=0;j=14}}else{t=0;s=j;r=k;e=z;j=14}}else{t=0;s=j;r=k;e=z;j=14}}else{t=0;s=j;r=k;e=z;j=14}}else{t=0;s=0;r=k;e=z;j=14}}else{d=0;e=0}else{t=0;s=0;r=0;e=z;j=14}while(0);b:do if((j|0)==14){c:while(1){if(e|0){o=0;ia(108,w|0);e=o;o=0;if((e|0)!=0&(p|0)!=0){d=V6(c[e>>2]|0,A|0,y|0)|0;if(!d)bb(e|0,p|0);z=p}else d=-1;if((d|0)==1){n=r;q=s;j=t;e=z;r=n;s=q;t=j;j=14;continue}o=0;ia(105,s|0);e=o;o=0;if((e|0)!=0&(p|0)!=0){d=V6(c[e>>2]|0,A|0,y|0)|0;if(!d)bb(e|0,p|0);z=p}else d=-1;if((d|0)==1){n=r;q=s;j=t;e=z;r=n;s=q;t=j;j=14;continue}if((r|0)==(u|0)){d=0;e=0;break b}o=0;ia(105,r|0);e=o;o=0;if((e|0)!=0&(p|0)!=0){d=V6(c[e>>2]|0,A|0,y|0)|0;if(!d)bb(e|0,p|0);z=p}else d=-1;if((d|0)==1){n=r;q=s;j=t;e=z;r=n;s=q;t=j;j=14;continue}else{j=19;break}}o=0;f=$(25,a|0)|0;e=o;o=0;if((e|0)!=0&(p|0)!=0){d=V6(c[e>>2]|0,A|0,y|0)|0;if(!d)bb(e|0,p|0);z=p}else d=-1;if((d|0)==1){n=r;q=s;j=t;e=z;r=n;s=q;t=j;j=14;continue}q=r+(c[v>>2]|0)|0;h=10;k=s;e=0;j=s;n=s;while(1){if(!f)break;o=0;d=aa(c[t>>2]|0,f|0,-1)|0;g=o;o=0;if((g|0)!=0&(p|0)!=0){i=V6(c[g>>2]|0,A|0,y|0)|0;if(!i)bb(g|0,p|0);z=p}else i=-1;if((i|0)==1){n=r;q=s;j=t;e=z;r=n;s=q;t=j;j=14;continue c}if(!d){o=0;c[x>>2]=e;ca(30,q|0,137395,x|0)|0;d=o;o=0;if((d|0)!=0&(p|0)!=0){g=V6(c[d>>2]|0,A|0,y|0)|0;if(!g)bb(d|0,p|0);z=p}else g=-1;if((g|0)==1){n=r;q=s;j=t;e=z;r=n;s=q;t=j;j=14;continue c}o=0;m=ca(31,a|0,r|0,1)|0;d=o;o=0;if((d|0)!=0&(p|0)!=0){g=V6(c[d>>2]|0,A|0,y|0)|0;if(!g)bb(d|0,p|0);z=p}else g=-1;if((g|0)==1){n=r;q=s;j=t;e=z;r=n;s=q;t=j;j=14;continue c}o=0;da(53,m|0,137483,280,1)|0;d=o;o=0;if((d|0)!=0&(p|0)!=0){g=V6(c[d>>2]|0,A|0,y|0)|0;if(!g)bb(d|0,p|0);z=p}else g=-1;if((g|0)==1){n=r;q=s;j=t;e=z;r=n;s=q;t=j;j=14;continue c}o=0;da(54,a|0,f|0,m|0,w|0)|0;d=o;o=0;if((d|0)!=0&(p|0)!=0){g=V6(c[d>>2]|0,A|0,y|0)|0;if(!g)bb(d|0,p|0);z=p}else g=-1;if((g|0)==1){n=r;q=s;j=t;e=z;r=n;s=q;t=j;j=14;continue c}if((e|0)==(h|0)){h=e<<1;o=0;i=aa(87,j|0,e<<3|0)|0;d=o;o=0;if((d|0)!=0&(p|0)!=0){g=V6(c[d>>2]|0,A|0,y|0)|0;if(!g)bb(d|0,p|0);z=p}else g=-1;if((g|0)==1){n=r;q=s;j=t;e=z;r=n;s=q;t=j;j=14;continue c}g=i;j=i;d=i}else{g=k;d=n}c[g+(e<<2)>>2]=m;e=e+1|0;k=g;i=d}else i=n;o=0;f=aa(86,a|0,f|0)|0;d=o;o=0;if((d|0)!=0&(p|0)!=0){g=V6(c[d>>2]|0,A|0,y|0)|0;if(!g)bb(d|0,p|0);z=p}else g=-1;if((g|0)==1){n=r;q=s;j=t;e=z;r=n;s=q;t=j;j=14;continue c}n=i}o=0;ia(108,w|0);d=o;o=0;if((d|0)!=0&(p|0)!=0){f=V6(c[d>>2]|0,A|0,y|0)|0;if(!f)bb(d|0,p|0);z=p}else f=-1;if((f|0)==1){n=r;q=s;j=t;e=z;r=n;s=q;t=j;j=14;continue}o=0;d=aa(87,n|0,e<<2|0)|0;f=o;o=0;if((f|0)!=0&(p|0)!=0){g=V6(c[f>>2]|0,A|0,y|0)|0;if(!g)bb(f|0,p|0);z=p}else g=-1;if((g|0)==1){n=r;q=s;j=t;e=z;r=n;s=q;t=j;j=14;continue}if((r|0)==(u|0))break b;o=0;ia(105,r|0);f=o;o=0;if((f|0)!=0&(p|0)!=0){g=V6(c[f>>2]|0,A|0,y|0)|0;if(!g)bb(f|0,p|0);z=p}else g=-1;if((g|0)==1){n=r;q=s;j=t;e=z;r=n;s=q;t=j;j=14}else{j=39;break}}if((j|0)==19){d=0;e=0;break}else if((j|0)==39)break}while(0);c[b>>2]=e;U1(A|0);l=B;return d|0}function EG(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=0;f=jC(a)|0;while(1){if(!f)break;e=XA(b,f)|0;while(1){if(!e)break;if(oC(a,c[((c[e>>2]&3|0)==2?e:e+-48|0)+40>>2]|0,0)|0){mB(a,e,1)|0;d=d+1|0}e=ZA(b,e)|0}f=kC(a,f)|0}return d|0}function FG(a){a=a|0;a=RC(a,98993,0)|0;if(!a)qa(98998,99001,529,99010);else return c[a+8>>2]|0;return 0}function GG(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;u=l;l=l+4320|0;s=u+24|0;r=u+8|0;q=u;t=u+4184|0;p=u+4160|0;f=u+40|0;if(tB(b)|0){YC(b,0,99019,-12,0);YC(b,1,99031,16,0);o=tG(e,f,t)|0;k=HG(b)|0;m=KK((tB(k)|0)<<2)|0;wG(p,u+4144|0,u+48|0,24,88);h=jC(k)|0;n=p+16|0;i=o+(c[f>>2]|0)|0;j=c[15712]|0;e=0;while(1){if(!h)break;if(!(lb[c[n>>2]&127](h,-1)|0)){c[q>>2]=e;m4(i,99933,q)|0;v=ND(k,o,1)|0;w=ND(b,o,1)|0;TC(w,99019,12,0)|0;a[(RC(w,99019,0)|0)+8>>0]=1;f=xG(k,h,v,p)|0;JG(v,w);g=KG(w)|0;LG(b,w);c[m+(e<<2)>>2]=w;wC(k,v)|0;if(0){c[r>>2]=e;c[r+4>>2]=f;c[r+8>>2]=g;w4(j,99043,r)|0}e=e+1|0}h=kC(k,h)|0}if(0){r=tB(b)|0;v=uB(b)|0;w=KB(b)|0;c[s>>2]=r;c[s+4>>2]=v;c[s+8>>2]=e;c[s+12>>2]=w;w4(j,99073,s)|0}sB(k)|0;ZC(b,0,99019);ZC(b,1,99031);yG(p);f=MK(m,e<<2)|0;if((o|0)!=(t|0))U1(o)}else{f=0;e=0}c[d>>2]=e;l=u;return f|0}function HG(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=l;l=l+16|0;h=i;a[h>>0]=a[18596]|0;a[h+1>>0]=a[18597]|0;a[h+2>>0]=a[18598]|0;a[h+3>>0]=a[18599]|0;h=oB(99120,h,0)|0;OG(h,b);d=jC(b)|0;while(1){if(!d)break;if(!(c[(RC(d,99031,0)|0)+12>>2]|0)){g=tC(h,KB(d)|0,1)|0;TC(g,99031,16,1)|0;c[(c[g+16>>2]|0)+12>>2]=d;c[(RC(d,99031,0)|0)+12>>2]=g}d=kC(b,d)|0}e=jC(b)|0;while(1){if(!e)break;f=c[(RC(e,99031,0)|0)+12>>2]|0;d=XA(b,e)|0;while(1){if(!d)break;g=c[(RC(c[((c[d>>2]&3|0)==2?d:d+-48|0)+40>>2]|0,99031,0)|0)+12>>2]|0;do if((g|0)!=(f|0))if(g>>>0>f>>>0){iB(h,f,g,0,1)|0;break}else{iB(h,g,f,0,1)|0;break}while(0);d=ZA(b,d)|0}e=kC(b,e)|0}l=i;return h|0}function IG(b,d){b=b|0;d=d|0;var e=0;b=(c[b+16>>2]|0)+8|0;e=a[b>>0]|0;if((d|0)>=0)a[b>>0]=d;return e|0}function JG(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;e=jC(a)|0;while(1){if(!e)break;f=c[(c[e+16>>2]|0)+12>>2]|0;a:do if((c[f>>2]&3|0)==1)oC(b,f,1)|0;else{d=jC(f)|0;while(1){if(!d)break a;oC(b,d,1)|0;d=kC(f,d)|0}}while(0);e=kC(a,e)|0}return}function KG(a){a=a|0;return EG(a,c[a+60>>2]|0)|0}function LG(a,b){a=a|0;b=b|0;MG(a,b,0);return}function MG(b,c,d){b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;g=(d|0)==0;b=OD(b)|0;while(1){if(!b)break;if((a[(RC(b,99019,0)|0)+8>>0]|0)==0?(f=NG(b,c,d)|0,f|0):0){if(g)e=(Q2(KB(b)|0,108006,7)|0)==0;else e=1;MG(b,f,e&1)}b=PD(b)|0}return}function NG(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;e=0;g=jC(a)|0;while(1){if(!g)break;f=tC(b,KB(g)|0,0)|0;if(f){if(!e)e=ND(b,KB(a)|0,1)|0;oC(e,f,1)|0}g=kC(a,g)|0}if((d|0)!=0&(e|0)==0)e=ND(b,KB(a)|0,1)|0;if(e|0?(EG(e,a)|0,UA(a,e)|0,(Q2(KB(e)|0,108006,7)|0)==0):0)c[(TC(e,98993,12,0)|0)+8>>2]=a;return e|0}function OG(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;h=l;l=l+16|0;g=h;d=OD(b)|0;e=c[15712]|0;while(1){if(!d)break;a:do if(!(Q2(KB(d)|0,108006,7)|0)){f=tC(a,KB(d)|0,1)|0;TC(f,99031,16,1)|0;c[(c[f+16>>2]|0)+12>>2]=d;b=jC(d)|0;while(1){if(!b)break a;if(c[(RC(b,99031,0)|0)+12>>2]|0){k=KB(b)|0;j=KB(d)|0;i=KB(c[(RC(b,99031,0)|0)+12>>2]|0)|0;c[g>>2]=k;c[g+4>>2]=j;c[g+8>>2]=i;w4(e,99123,g)|0}c[(RC(b,99031,0)|0)+12>>2]=f;b=kC(d,b)|0}}else OG(a,d);while(0);d=PD(d)|0}l=h;return}function PG(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,i=0,j=0,k=0,l=0,m=0,n=0.0;n=+h[a>>3];j=~~(n+(n>=0.0?.5:-.5));n=+h[a+8>>3];a=~~(n+(n>=0.0?.5:-.5));n=+h[b>>3];g=~~(n+(n>=0.0?.5:-.5));n=+h[b+8>>3];f=~~(n+(n>=0.0?.5:-.5));l=g-j|0;i=((l|0)>-1?l:0-l|0)<<1;l=l>>31|1;m=f-a|0;k=((m|0)>-1?m:0-m|0)<<1;m=m>>31|1;a:do if((i|0)>(k|0)){e=0-i|0;d=k-(i>>1)|0;b=j;while(1){QL(c,b,a);if((b|0)==(g|0))break a;j=(d|0)>-1;d=d+k+(j?e:0)|0;b=b+l|0;a=(j?m:0)+a|0}}else{e=0-k|0;d=j;b=i-(k>>1)|0;while(1){QL(c,d,a);if((a|0)==(f|0))break a;k=(b|0)>-1;d=(k?l:0)+d|0;b=b+i+(k?e:0)|0;a=a+m|0}}while(0);return}function QG(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+16|0;k=n;j=n+4|0;do if((a|0)<1)d=0;else{f=e+16|0;if((c[f>>2]|0)>>>0<4){d=RG(a,b,d,e)|0;break}m=KK(a<<5)|0;d=0;while(1){if((d|0)==(a|0))break;g=c[b+(d<<2)>>2]|0;BP(g);h=m+(d<<5)|0;g=(c[g+16>>2]|0)+16|0;c[h>>2]=c[g>>2];c[h+4>>2]=c[g+4>>2];c[h+8>>2]=c[g+8>>2];c[h+12>>2]=c[g+12>>2];c[h+16>>2]=c[g+16>>2];c[h+20>>2]=c[g+20>>2];c[h+24>>2]=c[g+24>>2];c[h+28>>2]=c[g+28>>2];d=d+1|0}if((c[f>>2]|0)==4){h=e+28|0;a:do if(c[h>>2]&2|0){f=e+24|0;c[f>>2]=JK(a<<2)|0;d=0;while(1){if((d|0)==(a|0))break a;g=QA(c[b+(d<<2)>>2]|0,99190)|0;if(g|0?(c[k>>2]=j,g=(b5(g,137395,k)|0)>0,i=c[j>>2]|0,g&(i|0)>-1):0)c[(c[f>>2]|0)+(d<<2)>>2]=i;d=d+1|0}}while(0);d=SG(a,m,e)|0;if(c[h>>2]&2)U1(c[e+24>>2]|0)}else d=0;U1(m)}while(0);l=n;return d|0}function RG(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0.0,I=0.0,J=0.0,K=0.0;G=l;l=l+144|0;B=G+136|0;A=G+64|0;F=G+48|0;v=G+40|0;u=G;t=G+120|0;x=G+104|0;C=G+96|0;D=c[f+20>>2]|0;c[x>>2]=0;c[x+4>>2]=0;c[x+8>>2]=0;c[x+12>>2]=0;a:do if((b|0)>=1){o=(D|0)==0;E=c[15712]|0;p=t+4|0;q=t+8|0;r=t+12|0;y=x+4|0;w=x+8|0;z=x+12|0;n=0;g=0;while(1){if((n|0)==(b|0))break;s=c[d+(n<<2)>>2]|0;BP(s);if(!o?(a[D+n>>0]|0)!=0:0){m=c[s+16>>2]|0;H=+h[m+16>>3];i=~~(H+(H>=0.0?.5:-.5));c[t>>2]=i;H=+h[m+24>>3];j=~~(H+(H>=0.0?.5:-.5));c[p>>2]=j;H=+h[m+32>>3];k=~~(H+(H>=0.0?.5:-.5));c[q>>2]=k;H=+h[m+40>>3];m=~~(H+(H>=0.0?.5:-.5));c[r>>2]=m;if(!g){c[x>>2]=c[t>>2];c[x+4>>2]=c[t+4>>2];c[x+8>>2]=c[t+8>>2];c[x+12>>2]=c[t+12>>2]}else{c[x>>2]=c[((c[x>>2]|0)>(i|0)?t:x)>>2];c[y>>2]=c[((c[y>>2]|0)>(j|0)?t:x)+4>>2];c[w>>2]=c[((c[w>>2]|0)<(k|0)?t:x)+8>>2];c[z>>2]=c[((c[z>>2]|0)<(m|0)?t:x)+12>>2]}g=g+1|0}if(0>2){m=KB(s)|0;s=c[s+16>>2]|0;K=+h[s+16>>3];J=+h[s+24>>3];I=+h[s+32>>3];H=+h[s+40>>3];c[u>>2]=m;h[u+8>>3]=K;h[u+16>>3]=J;h[u+24>>3]=I;h[u+32>>3]=H;w4(E,99257,u)|0}n=n+1|0}q=KK(b<<5)|0;g=0;while(1){if((g|0)==(b|0))break;u=q+(g<<5)|0;t=(c[(c[d+(g<<2)>>2]|0)+16>>2]|0)+16|0;c[u>>2]=c[t>>2];c[u+4>>2]=c[t+4>>2];c[u+8>>2]=c[t+8>>2];c[u+12>>2]=c[t+12>>2];c[u+16>>2]=c[t+16>>2];c[u+20>>2]=c[t+20>>2];c[u+24>>2]=c[t+24>>2];c[u+28>>2]=c[t+28>>2];g=g+1|0}o=f+8|0;p=VG(b,q,c[o>>2]|0)|0;if(0){c[v>>2]=p;w4(E,99285,v)|0}if((p|0)>=1){n=(D|0)!=0;if(n){i=((c[w>>2]|0)+(c[x>>2]|0)|0)/2|0;g=((c[z>>2]|0)+(c[y>>2]|0)|0)/2|0}else{i=0;g=0}c[C+4>>2]=g;c[C>>2]=i;m=JK(b<<4)|0;k=f+16|0;g=0;while(1){if((g|0)>=(b|0))break;i=c[d+(g<<2)>>2]|0;j=m+(g<<4)|0;c[m+(g<<4)+12>>2]=g;if((c[k>>2]|0)==3){x=(c[i+16>>2]|0)+16|0;y=c[o>>2]|0;z=KB(i)|0;c[A>>2]=c[x>>2];c[A+4>>2]=c[x+4>>2];c[A+8>>2]=c[x+8>>2];c[A+12>>2]=c[x+12>>2];c[A+16>>2]=c[x+16>>2];c[A+20>>2]=c[x+20>>2];c[A+24>>2]=c[x+24>>2];c[A+28>>2]=c[x+28>>2];c[B>>2]=c[C>>2];c[B+4>>2]=c[C+4>>2];WG(A,j,p,y,B,z)}else{c[B>>2]=c[C>>2];c[B+4>>2]=c[C+4>>2];XG(e,i,j,p,f,B)}g=g+1|0}j=JK(b<<2)|0;g=0;while(1){if((g|0)>=(b|0))break;c[j+(g<<2)>>2]=m+(g<<4);g=g+1|0}o4(j,b,4,89);k=KL()|0;g=JK(b<<3)|0;b:do if(n){i=0;while(1){if((i|0)>=(b|0)){i=0;break}if(a[D+i>>0]|0){e=c[j+(i<<2)>>2]|0;f=g+(c[e+12>>2]<<3)|0;c[B>>2]=c[C>>2];c[B+4>>2]=c[C+4>>2];ZG(e,k,f,B)}i=i+1|0}while(1){if((i|0)>=(b|0))break b;if(!(a[D+i>>0]|0)){C=c[j+(i<<2)>>2]|0;_G(i,C,k,g+(c[C+12>>2]<<3)|0,p,c[o>>2]|0,q)}i=i+1|0}}else{i=0;while(1){if((i|0)>=(b|0))break b;D=c[j+(i<<2)>>2]|0;_G(i,D,k,g+(c[D+12>>2]<<3)|0,p,c[o>>2]|0,q);i=i+1|0}}while(0);U1(j);i=0;while(1){if((i|0)>=(b|0))break;U1(c[m+(i<<4)+4>>2]|0);i=i+1|0}U1(m);NL(k);U1(q);if(0>1){i=0;while(1){if((i|0)>=(b|0))break a;C=c[g+(i<<3)>>2]|0;D=c[g+(i<<3)+4>>2]|0;c[F>>2]=i;c[F+4>>2]=C;c[F+8>>2]=D;w4(E,99301,F)|0;i=i+1|0}}}else g=0}else g=0;while(0);l=G;return g|0}function SG(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,i=0.0,j=0,k=0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;z=l;l=l+16|0;g=z;x=JK(a<<3)|0;f=c[d+4>>2]|0;y=d+28|0;e=(f|0)>0;do if(!(c[y>>2]&1))if(e){k=1;w=(a+-1+f|0)/(f|0)|0;break}else{f=~~+N(+(+C(+(+(a|0)))));k=1;w=(a+-1+f|0)/(f|0)|0;break}else if(e){k=0;w=f;f=(a+-1+f|0)/(f|0)|0;break}else{f=~~+N(+(+C(+(+(a|0)))));k=0;w=f;f=(a+-1+f|0)/(f|0)|0;break}while(0);if(0){v=c[15712]|0;c[g>>2]=k|0?99196:99206;c[g+4>>2]=w;c[g+8>>2]=f;w4(v,99219,g)|0}t=JK((f<<3)+8|0)|0;u=JK((w<<3)+8|0)|0;v=JK(a*24|0)|0;j=d+8|0;e=0;g=v;while(1){if((e|0)>=(a|0))break;p=+h[b+(e<<5)+8>>3];o=+h[b+(e<<5)+24>>3];q=+((c[j>>2]|0)>>>0);h[g>>3]=+h[b+(e<<5)+16>>3]-+h[b+(e<<5)>>3]+q;h[g+8>>3]=o-p+q;c[g+16>>2]=e;e=e+1|0;g=g+24|0}s=JK(a<<2)|0;e=0;while(1){if((e|0)>=(a|0))break;c[s+(e<<2)>>2]=v+(e*24|0);e=e+1|0}e=c[d+24>>2]|0;if(!e){if(!(c[y>>2]&64))o4(s,a,4,91)}else{c[47056]=e;o4(s,a,4,90)}r=(k|0)==0;e=0;g=0;j=0;while(1){if((j|0)>=(a|0)){i=0.0;e=0;break}k=c[s+(j<<2)>>2]|0;d=t+(g<<3)|0;q=+h[d>>3];p=+h[k>>3];h[d>>3]=q>p?q:p;d=u+(e<<3)|0;p=+h[d>>3];q=+h[k+8>>3];h[d>>3]=p>q?p:q;if(r){e=e+1|0;d=(e|0)==(w|0);e=d?0:e;g=g+(d&1)|0}else{g=g+1|0;d=(g|0)==(f|0);e=e+(d&1)|0;g=d?0:g}j=j+1|0}while(1){if((e|0)>(f|0)){i=0.0;e=w;break}d=t+(e<<3)|0;q=+h[d>>3];h[d>>3]=i;i=q+i;e=e+1|0}while(1){if((e|0)<=0)break;d=e+-1|0;q=+h[u+(d<<3)>>3];h[u+(e<<3)>>3]=i;i=q+i;e=d}h[u>>3]=i;e=0;g=0;d=0;while(1){if((d|0)>=(a|0))break;k=c[(c[s+(d<<2)>>2]|0)+16>>2]|0;i=+h[b+(k<<5)>>3];m=-i;p=+h[b+(k<<5)+8>>3];q=-p;n=+h[b+(k<<5)+16>>3];o=+h[b+(k<<5)+24>>3];j=c[y>>2]|0;do if(!(j&4))if(!(j&8)){i=(m-n+ +h[t+(g<<3)>>3]+ +h[t+(g+1<<3)>>3])*.5;break}else{i=i-n+ +h[t+(g+1<<3)>>3];break}else i=+h[t+(g<<3)>>3];while(0);c[x+(k<<3)>>2]=~~i;do if(!(j&16))if(!(j&32)){i=(q-o+ +h[u+(e<<3)>>3]+ +h[u+(e+1<<3)>>3])*.5;break}else{i=+h[u+(e+1<<3)>>3];break}else i=p-o+ +h[u+(e<<3)>>3];while(0);c[x+(k<<3)+4>>2]=~~i;if(r){e=e+1|0;k=(e|0)==(w|0);e=k?0:e;g=g+(k&1)|0}else{g=g+1|0;k=(g|0)==(f|0);e=e+(k&1)|0;g=k?0:g}d=d+1|0}U1(v);U1(s);U1(t);U1(u);l=z;return x|0}function TG(a,b){a=a|0;b=b|0;var d=0;d=c[47056]|0;a=c[d+(c[(c[a>>2]|0)+16>>2]<<2)>>2]|0;b=c[d+(c[(c[b>>2]|0)+16>>2]<<2)>>2]|0;return ((a|0)>(b|0)?1:((a|0)<(b|0))<<31>>31)|0}function UG(a,b){a=a|0;b=b|0;var d=0.0,e=0.0;a=c[a>>2]|0;b=c[b>>2]|0;e=+h[a>>3]+ +h[a+8>>3];d=+h[b>>3]+ +h[b+8>>3];return (ed)<<31>>31)|0}function VG(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0.0,g=0.0,i=0.0,j=0.0,k=0,m=0,n=0.0,o=0.0,p=0,q=0,r=0,s=0;s=l;l=l+96|0;q=s+80|0;r=s+48|0;p=s+8|0;m=s;k=(a*100|0)+-1|0;e=+(d<<1|0);n=0.0;o=0.0;d=0;while(1){if((d|0)>=(a|0))break;j=+h[b+(d<<5)+16>>3]-+h[b+(d<<5)>>3]+e;i=+h[b+(d<<5)+24>>3]-+h[b+(d<<5)+8>>3]+e;n=n-j-i;o=o-i*j;d=d+1|0}i=+(k|0);j=n*n-i*4.0*o;if(!(j<0.0)){e=+C(+j);g=i*2.0;f=(e-n)/g;g=(-n-e)/g;d=~~f;d=(d|0)==0?1:d;if(0>2){m=c[15712]|0;U4(99444,27,1,m)|0;h[p>>3]=i;h[p+8>>3]=n;h[p+16>>3]=o;h[p+24>>3]=j;h[p+32>>3]=e;w4(m,99472,p)|0;c[r>>2]=d;h[r+8>>3]=f;c[r+16>>2]=~~g;h[r+24>>3]=g;w4(m,99498,r)|0;h[q>>3]=(f*i+n)*f+o;h[q+8>>3]=(g*i+n)*g+o;w4(m,99520,q)|0}}else{h[m>>3]=j;gA(1,99417,m)|0;d=-1}l=s;return d|0}function WG(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var i=0,j=0,k=0,m=0,n=0.0,o=0.0,p=0.0,q=0.0,r=0,s=0,t=0,u=0,v=0.0,w=0.0;u=l;l=l+32|0;t=u+16|0;s=u;p=+h[a>>3];q=+h[a+8>>3];n=+h[a+16>>3];o=+h[a+24>>3];r=KL()|0;j=c[f>>2]|0;a=j-e|0;k=c[f+4>>2]|0;i=k-e|0;j=e-~~(p+(p>=0.0?.5:-.5))+j+~~(n+(n>=0.0?.5:-.5))|0;k=e-~~(q+(q>=0.0?.5:-.5))+k+~~(o+(o>=0.0?.5:-.5))|0;if((a|0)>-1)f=(a|0)/(d|0)|0;else f=((a+1|0)/(d|0)|0)+-1|0;if((i|0)>-1)m=(i|0)/(d|0)|0;else m=((i+1|0)/(d|0)|0)+-1|0;if((j|0)>-1)j=(j|0)/(d|0)|0;else j=((j+1|0)/(d|0)|0)+-1|0;if((k|0)>-1)i=(k|0)/(d|0)|0;else i=((k+1|0)/(d|0)|0)+-1|0;while(1){if((f|0)>(j|0))break;else a=m;while(1){if((a|0)>(i|0))break;QL(r,f,a);a=a+1|0}f=f+1|0}k=b+4|0;c[k>>2]=UL(r)|0;j=TL(r)|0;m=b+8|0;c[m>>2]=j;w=+(e<<1|0);v=+(d|0);i=~~+N(+((n+w-p)/v));a=~~+N(+((o+w-q)/v));c[b>>2]=a+i;a:do if(0>2){f=c[15712]|0;c[s>>2]=g;c[s+4>>2]=j;c[s+8>>2]=i;c[s+12>>2]=a;w4(f,99376,s)|0;a=0;while(1){if((a|0)>=(c[m>>2]|0))break a;g=c[k>>2]|0;s=c[g+(a<<3)+4>>2]|0;c[t>>2]=c[g+(a<<3)>>2];c[t+4>>2]=s;w4(f,99403,t)|0;a=a+1|0}}while(0);NL(r);l=u;return}function XG(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0.0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,O=0,P=0,Q=0.0,R=0.0;P=l;l=l+128|0;F=P+112|0;E=P+104|0;O=P+16|0;M=P;H=P+64|0;I=P+56|0;z=P+40|0;A=P+96|0;y=P+88|0;v=P+24|0;w=P+80|0;x=P+72|0;K=c[f+8>>2]|0;G=c[f+12>>2]|0;C=(a|0)==0?b:a;L=KL()|0;J=b+16|0;B=c[J>>2]|0;t=+h[B+16>>3];D=(c[g>>2]|0)-~~(t+(t>=0.0?.5:-.5))|0;t=+h[B+24>>3];B=(c[g+4>>2]|0)-~~(t+(t>=0.0?.5:-.5))|0;a:do if((c[f+16>>2]|0)==1){v=KK((tB(b)|0)<<2)|0;a=0;g=jC(b)|0;while(1){if(!g)break;x=g+16|0;c[v+(a<<2)>>2]=c[(c[x>>2]|0)+112>>2];c[(c[x>>2]|0)+112>>2]=0;a=a+1|0;g=kC(b,g)|0}o=D-K|0;p=B-K|0;q=D+K|0;r=B+K|0;n=1;while(1){a=c[J>>2]|0;if((n|0)>(c[a+180>>2]|0))break;m=c[(c[a+184>>2]|0)+(n<<2)>>2]|0;i=c[m+16>>2]|0;t=+h[i+16>>3];a=~~(t+(t>=0.0?.5:-.5));t=+h[i+24>>3];g=~~(t+(t>=0.0?.5:-.5));t=+h[i+32>>3];f=~~(t+(t>=0.0?.5:-.5));t=+h[i+40>>3];i=~~(t+(t>=0.0?.5:-.5));b:do if((f|0)>(a|0)&(i|0)>(g|0)){a=o+a|0;j=p+g|0;f=q+f|0;k=r+i|0;if((a|0)>-1)g=(a|0)/(e|0)|0;else g=((a+1|0)/(e|0)|0)+-1|0;if((j|0)>-1)j=(j|0)/(e|0)|0;else j=((j+1|0)/(e|0)|0)+-1|0;if((f|0)>-1)i=(f|0)/(e|0)|0;else i=((f+1|0)/(e|0)|0)+-1|0;if((k|0)>-1)f=(k|0)/(e|0)|0;else f=((k+1|0)/(e|0)|0)+-1|0;while(1){if((g|0)>(i|0))break;else a=j;while(1){if((a|0)>(f|0))break;QL(L,g,a);a=a+1|0}g=g+1|0}a=jC(m)|0;while(1){if(!a)break b;c[(c[a+16>>2]|0)+212>>2]=m;a=kC(m,a)|0}}while(0);n=n+1|0}r=z+8|0;s=H+4|0;t=+(K|0);u=I+4|0;q=A+4|0;p=y+4|0;o=jC(b)|0;while(1){if(!o)break;jP(z,o);R=+h[z>>3];Q=+h[r>>3];m=D+~~(R+(R>=0.0?.5:-.5))|0;c[H>>2]=m;n=B+~~(Q+(Q>=0.0?.5:-.5))|0;c[s>>2]=n;g=o+16|0;a=c[g>>2]|0;c:do if(!(c[a+212>>2]|0)){c[I>>2]=~~((+h[a+96>>3]+ +h[a+88>>3])*.5+t);c[u>>2]=~~(+h[a+80>>3]*.5+t);c[E>>2]=c[H>>2];c[E+4>>2]=c[H+4>>2];c[F>>2]=c[I>>2];c[F+4>>2]=c[I+4>>2];aH(A,E,F);a=c[A>>2]|0;f=c[q>>2]|0;c[E>>2]=c[H>>2];c[E+4>>2]=c[H+4>>2];c[F>>2]=c[I>>2];c[F+4>>2]=c[I+4>>2];bH(y,E,F);i=c[y>>2]|0;j=c[p>>2]|0;if((a|0)>-1)g=(a|0)/(e|0)|0;else g=((a+1|0)/(e|0)|0)+-1|0;if((f|0)>-1)k=(f|0)/(e|0)|0;else k=((f+1|0)/(e|0)|0)+-1|0;if((i|0)>-1)i=(i|0)/(e|0)|0;else i=((i+1|0)/(e|0)|0)+-1|0;if((j|0)>-1)f=(j|0)/(e|0)|0;else f=((j+1|0)/(e|0)|0)+-1|0;while(1){if((g|0)>(i|0))break;else a=k;while(1){if((a|0)>(f|0))break;QL(L,g,a);a=a+1|0}g=g+1|0}if((m|0)>-1)a=(m|0)/(e|0)|0;else a=((m+1|0)/(e|0)|0)+-1|0;c[H>>2]=a;if((n|0)>-1)a=(n|0)/(e|0)|0;else a=((n+1|0)/(e|0)|0)+-1|0;c[s>>2]=a;a=XA(C,o)|0;while(1){if(!a)break c;c[F>>2]=c[H>>2];c[F+4>>2]=c[H+4>>2];cH(a,F,L,D,B,e,G);a=ZA(C,a)|0}}else{if((m|0)>-1)a=(m|0)/(e|0)|0;else a=((m+1|0)/(e|0)|0)+-1|0;c[H>>2]=a;if((n|0)>-1)a=(n|0)/(e|0)|0;else a=((n+1|0)/(e|0)|0)+-1|0;c[s>>2]=a;a=XA(C,o)|0;while(1){if(!a)break c;if((c[(c[g>>2]|0)+212>>2]|0)!=(c[(c[(c[((c[a>>2]&3|0)==2?a:a+-48|0)+40>>2]|0)+16>>2]|0)+212>>2]|0)){c[F>>2]=c[H>>2];c[F+4>>2]=c[H+4>>2];cH(a,F,L,D,B,e,G)}a=ZA(C,a)|0}}while(0);o=kC(b,o)|0}a=0;g=jC(b)|0;while(1){if(!g)break;c[(c[g+16>>2]|0)+112>>2]=c[v+(a<<2)>>2];a=a+1|0;g=kC(b,g)|0}U1(v)}else{r=v+8|0;s=H+4|0;t=+(K|0);u=I+4|0;q=w+4|0;p=x+4|0;o=jC(b)|0;while(1){if(!o)break a;jP(v,o);Q=+h[v>>3];R=+h[r>>3];m=D+~~(Q+(Q>=0.0?.5:-.5))|0;c[H>>2]=m;n=B+~~(R+(R>=0.0?.5:-.5))|0;c[s>>2]=n;a=c[o+16>>2]|0;c[I>>2]=~~((+h[a+96>>3]+ +h[a+88>>3])*.5+t);c[u>>2]=~~(+h[a+80>>3]*.5+t);c[E>>2]=c[H>>2];c[E+4>>2]=c[H+4>>2];c[F>>2]=c[I>>2];c[F+4>>2]=c[I+4>>2];aH(w,E,F);a=c[w>>2]|0;f=c[q>>2]|0;c[E>>2]=c[H>>2];c[E+4>>2]=c[H+4>>2];c[F>>2]=c[I>>2];c[F+4>>2]=c[I+4>>2];bH(x,E,F);i=c[x>>2]|0;j=c[p>>2]|0;if((a|0)>-1)g=(a|0)/(e|0)|0;else g=((a+1|0)/(e|0)|0)+-1|0;if((f|0)>-1)k=(f|0)/(e|0)|0;else k=((f+1|0)/(e|0)|0)+-1|0;if((i|0)>-1)i=(i|0)/(e|0)|0;else i=((i+1|0)/(e|0)|0)+-1|0;if((j|0)>-1)f=(j|0)/(e|0)|0;else f=((j+1|0)/(e|0)|0)+-1|0;while(1){if((g|0)>(i|0))break;else a=k;while(1){if((a|0)>(f|0))break;QL(L,g,a);a=a+1|0}g=g+1|0}if((m|0)>-1)a=(m|0)/(e|0)|0;else a=((m+1|0)/(e|0)|0)+-1|0;c[H>>2]=a;if((n|0)>-1)a=(n|0)/(e|0)|0;else a=((n+1|0)/(e|0)|0)+-1|0;c[s>>2]=a;a=XA(C,o)|0;while(1){if(!a)break;c[F>>2]=c[H>>2];c[F+4>>2]=c[H+4>>2];cH(a,F,L,D,B,e,G);a=ZA(C,a)|0}o=kC(b,o)|0}}while(0);i=d+4|0;c[i>>2]=UL(L)|0;j=d+8|0;c[j>>2]=TL(L)|0;g=c[J>>2]|0;Q=+(K<<1|0);R=+(e|0);a=~~+N(+((+h[g+32>>3]+Q-+h[g+16>>3])/R));g=~~+N(+((+h[g+40>>3]+Q-+h[g+24>>3])/R));c[d>>2]=g+a;d:do if(0>2){f=c[15712]|0;d=KB(b)|0;b=c[j>>2]|0;c[M>>2]=d;c[M+4>>2]=b;c[M+8>>2]=a;c[M+12>>2]=g;w4(f,99376,M)|0;a=0;while(1){if((a|0)>=(c[j>>2]|0))break d;b=c[i>>2]|0;M=c[b+(a<<3)+4>>2]|0;c[O>>2]=c[b+(a<<3)>>2];c[O+4>>2]=M;w4(f,99403,O)|0;a=a+1|0}}while(0);NL(L);l=P;return}function YG(a,b){a=a|0;b=b|0;return (c[c[b>>2]>>2]|0)-(c[c[a>>2]>>2]|0)|0}function ZG(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;j=l;l=l+32|0;h=j+16|0;i=j;k=c[a+4>>2]|0;g=c[a+8>>2]|0;c[d>>2]=0-(c[e>>2]|0);f=d+4|0;c[f>>2]=0-(c[e+4>>2]|0);a=0;e=k;while(1){if((a|0)>=(g|0))break;c[h>>2]=c[e>>2];c[h+4>>2]=c[e+4>>2];OL(b,h);a=a+1|0;e=e+8|0}if(0>1){k=c[15712]|0;b=c[d>>2]|0;d=c[f>>2]|0;c[i>>2]=g;c[i+4>>2]=b;c[i+8>>2]=d;w4(k,99350,i)|0}l=j;return}function _G(a,b,d,e,f,g,i){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;i=i|0;var j=0,k=0,l=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0;k=c[b+12>>2]|0;l=+h[i+(k<<5)>>3];m=+h[i+(k<<5)+8>>3];n=+h[i+(k<<5)+16>>3];o=+h[i+(k<<5)+24>>3];if(!((a|0)==0?(q=+(g<<1|0),p=+(f|0),($G((~~+N(+((q-l+n)/p))|0)/-2|0,(~~+N(+((q-m+o)/p))|0)/-2|0,b,d,e,f,i)|0)!=0):0))j=3;a:do if((j|0)==3?($G(0,0,b,d,e,f,i)|0)==0:0)if((~~+N(+(n-l))|0)<(~~+N(+(o-m))|0)){k=1;while(1){j=0-k|0;a=0;while(1){if((a|0)<=(j|0)){g=j;break}if($G(j,a,b,d,e,f,i)|0)break a;a=a+-1|0}while(1){if((g|0)>=(k|0))break;if($G(g,a,b,d,e,f,i)|0)break a;g=g+1|0}while(1){if((a|0)>=(k|0))break;if($G(g,a,b,d,e,f,i)|0)break a;a=a+1|0}while(1){if((g|0)<=(j|0))break;if($G(g,a,b,d,e,f,i)|0)break a;g=g+-1|0}while(1){if((a|0)<=0)break;if(!($G(g,a,b,d,e,f,i)|0))a=a+-1|0;else break a}k=k+1|0}}else{k=1;while(1){j=0-k|0;a=0;while(1){if((a|0)>=(k|0)){g=j;break}if($G(a,j,b,d,e,f,i)|0)break a;a=a+1|0}while(1){if((g|0)>=(k|0))break;if($G(a,g,b,d,e,f,i)|0)break a;g=g+1|0}while(1){if((a|0)<=(j|0))break;if($G(a,g,b,d,e,f,i)|0)break a;a=a+-1|0}while(1){if((g|0)<=(j|0))break;if($G(a,g,b,d,e,f,i)|0)break a;g=g+-1|0}while(1){if((a|0)>=0)break;if(!($G(a,g,b,d,e,f,i)|0))a=a+1|0;else break a}k=k+1|0}}while(0);return}function $G(a,b,d,e,f,g,i){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0.0,x=0.0;t=l;l=l+48|0;r=t+32|0;s=t+8|0;q=t;m=d+4|0;o=c[d+8>>2]|0;p=q+4|0;j=c[m>>2]|0;k=0;while(1){if((k|0)>=(o|0)){n=5;break}v=j;u=c[v+4>>2]|0;c[q>>2]=(c[v>>2]|0)+a;c[p>>2]=u+b;c[r>>2]=c[q>>2];c[r+4>>2]=c[q+4>>2];if(RL(e,r)|0){j=0;break}j=j+8|0;k=k+1|0}if((n|0)==5){d=c[d+12>>2]|0;x=+h[i+(d<<5)>>3];w=+h[i+(d<<5)+8>>3];c[f>>2]=(O(g,a)|0)-~~(x+(x>=0.0?.5:-.5));d=f+4|0;c[d>>2]=(O(g,b)|0)-~~(w+(w>=0.0?.5:-.5));j=c[m>>2]|0;k=0;while(1){if((k|0)>=(o|0))break;u=j;v=c[u+4>>2]|0;c[q>>2]=(c[u>>2]|0)+a;c[p>>2]=v+b;c[r>>2]=c[q>>2];c[r+4>>2]=c[q+4>>2];OL(e,r);j=j+8|0;k=k+1|0}if(0>1){j=c[15712]|0;u=c[f>>2]|0;v=c[d>>2]|0;c[s>>2]=o;c[s+4>>2]=a;c[s+8>>2]=b;c[s+12>>2]=u;c[s+16>>2]=v;w4(j,99316,s)|0;j=1}else j=1}l=t;return j|0}function aH(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=(c[b+4>>2]|0)-(c[d+4>>2]|0)|0;c[a>>2]=(c[b>>2]|0)-(c[d>>2]|0);c[a+4>>2]=e;return}function bH(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=(c[d+4>>2]|0)+(c[b+4>>2]|0)|0;c[a>>2]=(c[d>>2]|0)+(c[b>>2]|0);c[a+4>>2]=e;return}function cH(a,b,d,e,f,g,i){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;i=i|0;var j=0.0,k=0.0,m=0,n=0,o=0.0,p=0.0,q=0.0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;A=l;l=l+112|0;x=A+96|0;w=A+80|0;r=A+48|0;s=A+32|0;y=A+16|0;z=A;n=A+64|0;h[y>>3]=+(c[b>>2]|0);t=y+8|0;h[t>>3]=+(c[b+4>>2]|0);a:do if((i|0)!=0?(u=a+16|0,m=c[(c[u>>2]|0)+8>>2]|0,(m|0)!=0):0){q=+(e|0);p=+(f|0);o=1.0/+(g|0);n=z+8|0;i=0;while(1){if((i|0)>=(c[m+4>>2]|0))break a;f=c[m>>2]|0;a=c[f+(i*48|0)>>2]|0;b=c[f+(i*48|0)+4>>2]|0;g=c[f+(i*48|0)+8>>2]|0;e=c[f+(i*48|0)+12>>2]|0;m=f+(i*48|0)+16|0;c[r>>2]=c[m>>2];c[r+4>>2]=c[m+4>>2];c[r+8>>2]=c[m+8>>2];c[r+12>>2]=c[m+12>>2];f=f+(i*48|0)+32|0;c[s>>2]=c[f>>2];c[s+4>>2]=c[f+4>>2];c[s+8>>2]=c[f+8>>2];c[s+12>>2]=c[f+12>>2];if(!g){c[y>>2]=c[a>>2];c[y+4>>2]=c[a+4>>2];c[y+8>>2]=c[a+8>>2];c[y+12>>2]=c[a+12>>2];m=a+16|0;c[z>>2]=c[m>>2];c[z+4>>2]=c[m+4>>2];c[z+8>>2]=c[m+8>>2];c[z+12>>2]=c[m+12>>2];m=2}else{c[y>>2]=c[r>>2];c[y+4>>2]=c[r+4>>2];c[y+8>>2]=c[r+8>>2];c[y+12>>2]=c[r+12>>2];c[z>>2]=c[a>>2];c[z+4>>2]=c[a+4>>2];c[z+8>>2]=c[a+8>>2];c[z+12>>2]=c[a+12>>2];m=1}j=+h[y>>3]+q;h[y>>3]=j;k=+h[t>>3]+p;h[t>>3]=k;if(!(j>=0.0))j=(j+1.0)*o+-1.0;else j=j*o;h[y>>3]=j;if(!(k>=0.0))j=(k+1.0)*o+-1.0;else j=k*o;h[t>>3]=j;j=+h[z>>3]+q;h[z>>3]=j;k=+h[n>>3]+p;h[n>>3]=k;if(!(j>=0.0))j=(j+1.0)*o+-1.0;else j=j*o;h[z>>3]=j;if(!(k>=0.0))j=(k+1.0)*o+-1.0;else j=k*o;h[n>>3]=j;c[w>>2]=c[y>>2];c[w+4>>2]=c[y+4>>2];c[w+8>>2]=c[y+8>>2];c[w+12>>2]=c[y+12>>2];c[x>>2]=c[z>>2];c[x+4>>2]=c[z+4>>2];c[x+8>>2]=c[z+8>>2];c[x+12>>2]=c[z+12>>2];PG(w,x,d);while(1){if((m|0)>=(b|0))break;c[y>>2]=c[z>>2];c[y+4>>2]=c[z+4>>2];c[y+8>>2]=c[z+8>>2];c[y+12>>2]=c[z+12>>2];g=a+(m<<4)|0;c[z>>2]=c[g>>2];c[z+4>>2]=c[g+4>>2];c[z+8>>2]=c[g+8>>2];c[z+12>>2]=c[g+12>>2];j=+h[z>>3]+q;h[z>>3]=j;k=+h[n>>3]+p;h[n>>3]=k;if(!(j>=0.0))j=(j+1.0)*o+-1.0;else j=j*o;h[z>>3]=j;if(!(k>=0.0))j=(k+1.0)*o+-1.0;else j=k*o;h[n>>3]=j;c[w>>2]=c[y>>2];c[w+4>>2]=c[y+4>>2];c[w+8>>2]=c[y+8>>2];c[w+12>>2]=c[y+12>>2];c[x>>2]=c[z>>2];c[x+4>>2]=c[z+4>>2];c[x+8>>2]=c[z+8>>2];c[x+12>>2]=c[z+12>>2];PG(w,x,d);m=m+1|0}if(e|0){c[y>>2]=c[z>>2];c[y+4>>2]=c[z+4>>2];c[y+8>>2]=c[z+8>>2];c[y+12>>2]=c[z+12>>2];c[z>>2]=c[s>>2];c[z+4>>2]=c[s+4>>2];c[z+8>>2]=c[s+8>>2];c[z+12>>2]=c[s+12>>2];j=+h[z>>3]+q;h[z>>3]=j;k=+h[n>>3]+p;h[n>>3]=k;if(!(j>=0.0))j=(j+1.0)*o+-1.0;else j=j*o;h[z>>3]=j;if(!(k>=0.0))j=(k+1.0)*o+-1.0;else j=k*o;h[n>>3]=j;c[w>>2]=c[y>>2];c[w+4>>2]=c[y+4>>2];c[w+8>>2]=c[y+8>>2];c[w+12>>2]=c[y+12>>2];c[x>>2]=c[z>>2];c[x+4>>2]=c[z+4>>2];c[x+8>>2]=c[z+8>>2];c[x+12>>2]=c[z+12>>2];PG(w,x,d)}i=i+1|0;m=c[(c[u>>2]|0)+8>>2]|0}}else v=4;while(0);if((v|0)==4){jP(n,c[((c[a>>2]&3|0)==2?a:a+-48|0)+40>>2]|0);c[z>>2]=c[n>>2];c[z+4>>2]=c[n+4>>2];c[z+8>>2]=c[n+8>>2];c[z+12>>2]=c[n+12>>2];j=+h[z>>3]+ +(e|0);h[z>>3]=j;m=z+8|0;k=+h[m>>3]+ +(f|0);h[m>>3]=k;if(!(j>=0.0))j=(j+1.0)/+(g|0)+-1.0;else j=j/+(g|0);h[z>>3]=j;if(!(k>=0.0))j=(k+1.0)/+(g|0)+-1.0;else j=k/+(g|0);h[m>>3]=j;c[w>>2]=c[y>>2];c[w+4>>2]=c[y+4>>2];c[w+8>>2]=c[y+8>>2];c[w+12>>2]=c[y+12>>2];c[x>>2]=c[z>>2];c[x+4>>2]=c[z+4>>2];c[x+8>>2]=c[z+8>>2];c[x+12>>2]=c[z+12>>2];PG(w,x,d)}l=A;return}function dH(a,b,d){a=a|0;b=b|0;d=d|0;a:do if((a|0)<1)a=0;else switch(c[d+16>>2]|0){case 4:{a=SG(a,b,d)|0;break a}case 3:{a=eH(a,b,d)|0;break a}default:{a=0;break a}}while(0);return a|0}function eH(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;n=l;l=l+80|0;g=n+64|0;f=n+24|0;m=n+8|0;e=n;h=n+56|0;j=d+8|0;k=VG(a,b,c[j>>2]|0)|0;if(0){i=c[15712]|0;c[e>>2]=k;w4(i,99285,e)|0}a:do if((k|0)>=1){c[h+4>>2]=0;c[h>>2]=0;i=JK(a<<4)|0;d=0;while(1){if((d|0)>=(a|0))break;c[i+(d<<4)+12>>2]=d;o=b+(d<<5)|0;e=c[j>>2]|0;c[f>>2]=c[o>>2];c[f+4>>2]=c[o+4>>2];c[f+8>>2]=c[o+8>>2];c[f+12>>2]=c[o+12>>2];c[f+16>>2]=c[o+16>>2];c[f+20>>2]=c[o+20>>2];c[f+24>>2]=c[o+24>>2];c[f+28>>2]=c[o+28>>2];c[g>>2]=c[h>>2];c[g+4>>2]=c[h+4>>2];WG(f,i+(d<<4)|0,k,e,g,195059);d=d+1|0}f=JK(a<<2)|0;d=0;while(1){if((d|0)>=(a|0))break;c[f+(d<<2)>>2]=i+(d<<4);d=d+1|0}o4(f,a,4,89);g=KL()|0;d=JK(a<<3)|0;e=0;while(1){if((e|0)>=(a|0))break;o=c[f+(e<<2)>>2]|0;_G(e,o,g,d+(c[o+12>>2]<<3)|0,k,c[j>>2]|0,b);e=e+1|0}U1(f);e=0;while(1){if((e|0)>=(a|0))break;U1(c[i+(e<<4)+4>>2]|0);e=e+1|0}U1(i);NL(g);if(0>1){f=c[15712]|0;e=0;while(1){if((e|0)>=(a|0))break a;b=c[d+(e<<3)>>2]|0;o=c[d+(e<<3)+4>>2]|0;c[m>>2]=e;c[m+4>>2]=b;c[m+8>>2]=o;w4(f,99301,m)|0;e=e+1|0}}}else d=0;while(0);l=n;return d|0}function fH(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,i=0,j=0,k=0,l=0,m=0.0,n=0.0,o=0.0,p=0.0,q=0,r=0,s=0,t=0;a:do if((a|0)<1)f=0-a|0;else{s=(e|0)==0;q=(f|0)==0;j=0;while(1){if((j|0)==(a|0)){f=0;break a}r=c[b+(j<<2)>>2]|0;g=s?r:e;k=c[d+(j<<3)>>2]|0;l=c[d+(j<<3)+4>>2]|0;m=+(k|0);n=m*.013888888888888888;o=+(l|0);p=o*.013888888888888888;i=jC(r)|0;while(1){if(!i)break;f=c[i+16>>2]|0;t=c[f+132>>2]|0;h[t>>3]=+h[t>>3]+n;t=t+8|0;h[t>>3]=+h[t>>3]+p;t=f+16|0;h[t>>3]=+h[t>>3]+m;t=f+24|0;h[t>>3]=+h[t>>3]+o;f=c[f+108>>2]|0;if(f|0){t=f+56|0;h[t>>3]=+h[t>>3]+m;t=f+64|0;h[t>>3]=+h[t>>3]+o}b:do if(!q){f=XA(g,i)|0;while(1){if(!f)break b;gH(f,k,l);f=ZA(g,f)|0}}while(0);i=kC(r,i)|0}hH(r,k,l);j=j+1|0}}while(0);return f|0}function gH(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,i=0,j=0.0,k=0,l=0.0,m=0,n=0;e=c[a+16>>2]|0;a=c[e+96>>2]|0;if(a|0){m=a+56|0;h[m>>3]=+h[m>>3]+ +(b|0);m=a+64|0;h[m>>3]=+h[m>>3]+ +(d|0)}a=c[e+108>>2]|0;if(a|0){m=a+56|0;h[m>>3]=+h[m>>3]+ +(b|0);m=a+64|0;h[m>>3]=+h[m>>3]+ +(d|0)}a=c[e+100>>2]|0;if(a|0){m=a+56|0;h[m>>3]=+h[m>>3]+ +(b|0);m=a+64|0;h[m>>3]=+h[m>>3]+ +(d|0)}a=c[e+104>>2]|0;if(a|0){m=a+56|0;h[m>>3]=+h[m>>3]+ +(b|0);m=a+64|0;h[m>>3]=+h[m>>3]+ +(d|0)}m=c[e+8>>2]|0;a:do if(m|0){l=+(b|0);j=+(d|0);b=c[m+4>>2]|0;a=0;while(1){if((a|0)>=(b|0))break a;k=c[m>>2]|0;d=c[k+(a*48|0)>>2]|0;f=c[k+(a*48|0)+4>>2]|0;g=c[k+(a*48|0)+8>>2]|0;i=c[k+(a*48|0)+12>>2]|0;e=0;while(1){if((e|0)>=(f|0))break;n=d+(e<<4)|0;h[n>>3]=+h[n>>3]+l;n=d+(e<<4)+8|0;h[n>>3]=+h[n>>3]+j;e=e+1|0}if(g|0){n=k+(a*48|0)+16|0;h[n>>3]=+h[n>>3]+l;n=k+(a*48|0)+24|0;h[n>>3]=+h[n>>3]+j}if(i|0){n=k+(a*48|0)+32|0;h[n>>3]=+h[n>>3]+l;n=k+(a*48|0)+40|0;h[n>>3]=+h[n>>3]+j}a=a+1|0}}while(0);return}function hH(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0.0,i=0.0,j=0,k=0.0,l=0.0,m=0,n=0.0,o=0;j=b+16|0;b=c[j>>2]|0;o=b+16|0;m=b+24|0;f=b+32|0;b=b+40|0;g=+(d|0);l=+h[f>>3]+g;i=+(e|0);n=+h[m>>3]+i;k=+h[b>>3]+i;h[o>>3]=+h[o>>3]+g;h[m>>3]=n;h[f>>3]=l;h[b>>3]=k;b=c[j>>2]|0;f=c[b+12>>2]|0;if((f|0)!=0?(a[f+81>>0]|0)!=0:0){o=f+56|0;h[o>>3]=+h[o>>3]+g;f=f+64|0;h[f>>3]=+h[f>>3]+i;f=1}else f=1;while(1){if((f|0)>(c[b+180>>2]|0))break;hH(c[(c[b+184>>2]|0)+(f<<2)>>2]|0,d,e);f=f+1|0;b=c[j>>2]|0}return}function iH(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0;f=QG(a,b,d,e)|0;if(!f)a=1;else{a=fH(a,b,f,d,c[e+12>>2]|0)|0;U1(f)}return a|0}function jH(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;p=l;l=l+32|0;o=p;n=iH(a,b,d,e)|0;if(!n){BP(d);m=(c[d+16>>2]|0)+16|0;c[o>>2]=c[m>>2];c[o+4>>2]=c[m+4>>2];c[o+8>>2]=c[m+8>>2];c[o+12>>2]=c[m+12>>2];c[o+16>>2]=c[m+16>>2];c[o+20>>2]=c[m+20>>2];c[o+24>>2]=c[m+24>>2];c[o+28>>2]=c[m+28>>2];f=o+8|0;g=o+16|0;i=o+24|0;e=0;while(1){if((e|0)>=(a|0))break;k=c[(c[b+(e<<2)>>2]|0)+16>>2]|0;j=c[k+180>>2]|0;k=k+184|0;d=1;while(1){if((d|0)>(j|0))break;r=(c[(c[(c[k>>2]|0)+(d<<2)>>2]|0)+16>>2]|0)+16|0;h[o>>3]=+h[(+h[o>>3]<+h[r>>3]?o:r)>>3];r=c[(c[(c[k>>2]|0)+(d<<2)>>2]|0)+16>>2]|0;q=r+16|0;h[f>>3]=+h[(+h[f>>3]<+h[r+24>>3]?o:q)+8>>3];h[g>>3]=+h[(+h[g>>3]>+h[r+32>>3]?o:q)+16>>3];h[i>>3]=+h[(+h[i>>3]>+h[r+40>>3]?o:q)+24>>3];d=d+1|0}e=e+1|0}c[m>>2]=c[o>>2];c[m+4>>2]=c[o+4>>2];c[m+8>>2]=c[o+8>>2];c[m+12>>2]=c[o+12>>2];c[m+16>>2]=c[o+16>>2];c[m+20>>2]=c[o+20>>2];c[m+24>>2]=c[o+24>>2];c[m+28>>2]=c[o+28>>2]}l=p;return n|0}function kH(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;g=l;l=l+16|0;f=g;if(!e)qa(99534,99540,1400,99547);d=lH(a,d,d)|0;c[e+8>>2]=d;if(0){h=c[15712]|0;c[f>>2]=d;w4(h,99559,f)|0}c[e+12>>2]=0;c[e+20>>2]=0;mH(a,b,e)|0;l=g;return c[e+16>>2]|0}function lH(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;i=l;l=l+16|0;h=i;f=i+4|0;g=QA(b,99689)|0;a:do if(g){c[h>>2]=f;h=(b5(g,137395,h)|0)==1;b=c[f>>2]|0;if(h&(b|0)>-1)d=b;else{switch(a[g>>0]|0){case 84:case 116:break;default:break a}d=e}}while(0);l=i;return d|0}function mH(a,b,c){a=a|0;b=b|0;c=c|0;return nH(QA(a,99572)|0,b,c)|0}function nH(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0.0;u=l;l=l+64|0;r=u+40|0;q=u+32|0;t=u+24|0;s=u+16|0;m=u+8|0;k=u;i=u+48|0;j=u+44|0;if(!e)qa(99534,99540,1292,99581);o=e+28|0;c[o>>2]=0;p=e+16|0;c[p>>2]=d;n=e+4|0;c[n>>2]=0;c[e+24>>2]=0;a:do if(b|0?(f=a[b>>0]|0,f<<24>>24):0)switch(f<<24>>24|0){case 97:if(!(Q2(b,99599,5)|0)){c[p>>2]=4;m=oH(b+5|0,e)|0;c[k>>2]=j;m=(b5(m,137395,k)|0)>0;d=c[j>>2]|0;if(!(m&(d|0)>0))break a;c[n>>2]=d;break a}else{if(Q2(b,99605,6)|0)break a;c[p>>2]=5;c[m>>2]=i;m=(b5(b+5|0,99612,m)|0)>0;v=+g[i>>2];g[e>>2]=m&v>0.0?v:1.0;break a}case 99:{if(f<<24>>24!=99)break a;if(s2(b,108006)|0)break a;c[p>>2]=1;break a}case 103:{if(f<<24>>24!=103)break a;if(s2(b,111494)|0)break a;c[p>>2]=3;break a}case 110:{if(f<<24>>24!=110)break a;if(s2(b,111481)|0)break a;c[p>>2]=2;break a}default:break a}while(0);if(0){d=c[15712]|0;U4(99615,11,1,d)|0;c[s>>2]=pH(c[p>>2]|0)|0;w4(d,99627,s)|0;if((c[p>>2]|0)==5){h[t>>3]=+g[e>>2];w4(d,99640,t)|0}c[q>>2]=c[n>>2];w4(d,99653,q)|0;c[r>>2]=c[o>>2];w4(d,99666,r)|0}l=u;return c[p>>2]|0}function oH(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;a:do if((a[b>>0]|0)==95){f=d+28|0;e=1;while(1){b=b+1|0;b:while(1){if(!e)break a;d=a[b>>0]|0;if(!(d<<24>>24))break a;switch(d<<24>>24|0){case 99:{g=10;break b}case 105:{g=9;break b}case 117:{g=11;break b}case 116:{g=12;break b}case 98:{d=32;break b}case 108:{g=7;break b}case 114:{g=8;break b}default:e=0}}if((g|0)==7){g=0;d=4}else if((g|0)==8){g=0;d=8}else if((g|0)==9){g=0;d=64}else if((g|0)==10){g=0;d=1}else if((g|0)==11){g=0;d=2}else if((g|0)==12){g=0;d=16}c[f>>2]=c[f>>2]|d}}while(0);return b|0}function pH(a){a=a|0;switch(a|0){case 1:{a=108006;break}case 2:{a=111481;break}case 3:{a=111494;break}case 4:{a=99599;break}case 5:{a=99605;break}default:a=99679}return a|0}function qH(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+96|0;k=n;m=n+80|0;do if(a){if(!e){e=V1(1,20)|0;c[e+4>>2]=d>>>0>80?d:80}d=c[e>>2]|0;j=c[e+4>>2]|0;if(!d){h=100;d=a;i=V1(100,j)|0}else{h=d+100|0;i=W1(c[e+8>>2]|0,O(h,j)|0)|0;Y6(i+(O(j,d)|0)|0,0,j*100|0)|0;d=a}while(1){d=rH(k,d,b,m)|0;if(!d)break;a=c[e>>2]|0;f=h<<1;g=O(h,j)|0;if((a|0)==(h|0)){i=W1(i,O(f,j)|0)|0;Y6(i+g|0,0,g|0)|0;a=c[e>>2]|0}else f=h;a=i+(O(a,j)|0)|0;g=k;h=a+80|0;do{c[a>>2]=c[g>>2];a=a+4|0;g=g+4|0}while((a|0)<(h|0));c[e>>2]=(c[e>>2]|0)+1;h=f}if(c[m>>2]|0){m=e+16|0;c[m>>2]=c[m>>2]|1}d=c[e>>2]|0;if(!d){U1(i);U1(e);e=0;break}else{c[e+8>>2]=W1(i,O(d,j)|0)|0;break}}while(0);l=n;return e|0}function rH(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0;j=l;l=l+80|0;h=j+64|0;i=j;c[f>>2]=0;do{g=a[d>>0]|0;d=d+1|0}while((S2(g)|0)!=0);a:do switch(g|0){case 69:{c[b>>2]=0;d=sH(d,b+8|0)|0;if(!d){c[f>>2]=1;d=0;break a}if(e)c[b+72>>2]=c[e>>2];break}case 101:{c[b>>2]=1;d=sH(d,b+8|0)|0;if(!d){c[f>>2]=1;d=0;break a}if(e)c[b+72>>2]=c[e>>2];break}case 80:{c[b>>2]=2;d=tH(d,b+8|0)|0;if(!d){c[f>>2]=1;d=0;break a}if(e)c[b+72>>2]=c[e+4>>2];break}case 112:{c[b>>2]=3;d=tH(d,b+8|0)|0;if(!d){c[f>>2]=1;d=0;break a}if(e)c[b+72>>2]=c[e+4>>2];break}case 98:{c[b>>2]=4;d=tH(d,b+8|0)|0;if(!d){c[f>>2]=1;d=0;break a}if(e)c[b+72>>2]=c[e+8>>2];break}case 66:{c[b>>2]=5;d=tH(d,b+8|0)|0;if(!d){c[f>>2]=1;d=0;break a}if(e)c[b+72>>2]=c[e+8>>2];break}case 99:{d=uH(d,h)|0;if(!d){c[f>>2]=1;d=0;break a}g=vH(c[h>>2]|0,i)|0;c[h>>2]=g;if(!g){c[f>>2]=1;d=0;break a}if(!(c[i>>2]|0)){c[b>>2]=9;c[b+8>>2]=c[i+8>>2];if(!e)break a;c[b+72>>2]=c[e+24>>2];break a}else{c[b>>2]=14;f=b+8|0;g=i;h=f+64|0;do{c[f>>2]=c[g>>2];f=f+4|0;g=g+4|0}while((f|0)<(h|0));if(!e)break a;c[b+72>>2]=c[e+40>>2];break a}}case 67:{d=uH(d,h)|0;if(!d){c[f>>2]=1;d=0;break a}g=vH(c[h>>2]|0,i)|0;c[h>>2]=g;if(!g){c[f>>2]=1;d=0;break a}if(!(c[i>>2]|0)){c[b>>2]=8;c[b+8>>2]=c[i+8>>2];if(!e)break a;c[b+72>>2]=c[e+20>>2];break a}else{c[b>>2]=13;f=b+8|0;g=i;h=f+64|0;do{c[f>>2]=c[g>>2];f=f+4|0;g=g+4|0}while((f|0)<(h|0));if(!e)break a;c[b+72>>2]=c[e+40>>2];break a}}case 76:{c[b>>2]=6;d=tH(d,b+8|0)|0;if(!d){c[f>>2]=1;d=0;break a}if(e)c[b+72>>2]=c[e+12>>2];break}case 84:{c[b>>2]=7;d=wH(d,b+8|0)|0;if(!d){c[f>>2]=1;d=0;break a}d=wH(d,b+16|0)|0;if(!d){c[f>>2]=1;d=0;break a}d=xH(d,b+24|0)|0;if(!d){c[f>>2]=1;d=0;break a}d=wH(d,b+32|0)|0;if(!d){c[f>>2]=1;d=0;break a}d=uH(d,b+40|0)|0;if(!d){c[f>>2]=1;d=0;break a}if(e)c[b+72>>2]=c[e+16>>2];break}case 70:{c[b>>2]=10;d=wH(d,b+8|0)|0;if(!d){c[f>>2]=1;d=0;break a}d=uH(d,b+16|0)|0;if(!d){c[f>>2]=1;d=0;break a}if(e)c[b+72>>2]=c[e+28>>2];break}case 83:{c[b>>2]=11;d=uH(d,b+8|0)|0;if(!d){c[f>>2]=1;d=0;break a}if(e)c[b+72>>2]=c[e+32>>2];break}case 73:{c[b>>2]=12;d=sH(d,b+8|0)|0;if(!d){c[f>>2]=1;d=0;break a}d=uH(d,b+40|0)|0;if(!d){c[f>>2]=1;d=0;break a}if(e)c[b+72>>2]=c[e+36>>2];break}case 116:{c[b>>2]=15;d=yH(d,b+8|0)|0;if(!d){c[f>>2]=1;d=0;break a}if(e)c[b+72>>2]=c[e+44>>2];break}case 0:{d=0;break}default:{c[f>>2]=1;d=0}}while(0);l=j;return d|0}function sH(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,i=0;i=l;l=l+16|0;e=i;h[b>>3]=+s5(a,e);f=c[e>>2]|0;if(((f|0)!=(a|0)?(h[b+8>>3]=+s5(f,e),g=c[e>>2]|0,(f|0)!=(g|0)):0)?(h[b+16>>3]=+s5(g,e),d=c[e>>2]|0,(g|0)!=(d|0)):0){h[b+24>>3]=+s5(d,e);a=c[e>>2]|0;a=(d|0)==(a|0)?0:a}else a=0;l=i;return a|0}function tH(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0,k=0;k=l;l=l+16|0;j=k+4|0;g=k;a=zH(a,j)|0;do if(a){d=c[j>>2]|0;i=V1(d,24)|0;c[b>>2]=d;e=i;f=0;while(1){if((f|0)>=(d|0)){d=9;break}h[e>>3]=+s5(a,g);d=c[g>>2]|0;if((a|0)==(d|0)){d=5;break}h[e+8>>3]=+s5(d,g);a=c[g>>2]|0;if((d|0)==(a|0)){d=7;break}h[e+16>>3]=0.0;e=e+24|0;d=c[b>>2]|0;f=f+1|0}if((d|0)==5){c[j>>2]=f;U1(i);a=0;break}else if((d|0)==7){c[j>>2]=f;U1(i);a=0;break}else if((d|0)==9){c[j>>2]=f;c[b+4>>2]=i;break}}else a=0;while(0);l=k;return a|0}function uH(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;j=l;l=l+16|0;i=j;b=zH(b,i)|0;f=c[i>>2]|0;do if(!((b|0)==0|(f|0)<1)){while(1){h=a[b>>0]|0;e=h<<24>>24==0;if(e^h<<24>>24!=45)b=b+1|0;else break}if(!e){h=V1(f+1|0,1)|0;g=h;e=f;while(1){b=b+1|0;if((e|0)<=0){e=9;break}e=a[b>>0]|0;if(!(e<<24>>24)){e=8;break}a[g>>0]=e;e=(c[i>>2]|0)+-1|0;c[i>>2]=e;g=g+1|0}if((e|0)==8){U1(h);b=0;break}else if((e|0)==9){a[g>>0]=0;c[d>>2]=h;break}}else b=0}else b=0;while(0);l=j;return b|0}function vH(b,d){b=b|0;d=d|0;var e=0;e=a[b>>0]|0;switch(e|0){case 91:{b=AH(b+1|0,d)|0;break}case 40:{b=BH(b+1|0,d)|0;break}case 47:case 35:{c[d>>2]=0;c[d+8>>2]=b;break}default:if(!(a3(e)|0))b=0;else{c[d>>2]=0;c[d+8>>2]=b}}return b|0}function wH(a,b){a=a|0;b=b|0;var d=0,e=0.0,f=0;f=l;l=l+16|0;d=f;e=+s5(a,d);d=c[d>>2]|0;if((d|0)==(a|0))d=0;else h[b>>3]=e;l=f;return d|0}function xH(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;a=zH(a,e)|0;e=c[e>>2]|0;c[b>>2]=(e|0)<0?0:e|0?2:1;l=d;return a|0}function yH(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[b>>2]=T2(a,e,10)|0;b=c[e>>2]|0;l=d;return ((b|0)==(a|0)?0:b)|0}function zH(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[b>>2]=y4(a,e,10)|0;b=c[e>>2]|0;l=d;return ((b|0)==(a|0)?0:b)|0}function AH(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,i=0,j=0,k=0,m=0,n=0,o=0;o=l;l=l+16|0;m=o;c[b>>2]=1;n=b+8|0;i=wH(a,n)|0;do if(((((i|0)!=0?(j=wH(i,b+16|0)|0,(j|0)!=0):0)?(e=wH(j,b+24|0)|0,(e|0)!=0):0)?(f=wH(e,b+32|0)|0,(f|0)!=0):0)?(k=b+40|0,d=zH(f,k)|0,(d|0)!=0):0){b=c[k>>2]|0;f=V1(b,8)|0;e=0;while(1){if((e|0)>=(b|0)){d=13;break}d=wH(d,m)|0;if(!d){d=9;break}g[f+(e<<3)>>2]=+h[m>>3];d=uH(d,f+(e<<3)+4|0)|0;if(!d){d=12;break}e=e+1|0;b=c[k>>2]|0}if((d|0)==9){U1(f);a=0;break}else if((d|0)==12){U1(f);a=0;break}else if((d|0)==13){c[n+36>>2]=f;break}}else a=0;while(0);l=o;return a|0}function BH(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;p=l;l=l+16|0;n=p;c[b>>2]=2;k=wH(a,b+8|0)|0;do if(((((((k|0)!=0?(m=wH(k,b+16|0)|0,(m|0)!=0):0)?(e=wH(m,b+24|0)|0,(e|0)!=0):0)?(f=wH(e,b+32|0)|0,(f|0)!=0):0)?(i=wH(f,b+40|0)|0,(i|0)!=0):0)?(j=wH(i,b+48|0)|0,(j|0)!=0):0)?(o=b+56|0,d=zH(j,o)|0,(d|0)!=0):0){e=c[o>>2]|0;i=V1(e,8)|0;f=0;while(1){if((f|0)>=(e|0)){d=15;break}d=wH(d,n)|0;if(!d){d=11;break}g[i+(f<<3)>>2]=+h[n>>3];d=uH(d,i+(f<<3)+4|0)|0;if(!d){d=14;break}f=f+1|0;e=c[o>>2]|0}if((d|0)==11){U1(i);a=0;break}else if((d|0)==14){U1(i);a=0;break}else if((d|0)==15){c[b+60>>2]=i;break}}else a=0;while(0);l=p;return a|0}function CH(a,b,c){a=a|0;b=b|0;c=c|0;return qH(a,b,c,0)|0}function DH(a){a=a|0;return CH(a,0,0)|0}function EH(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;e=c[a+12>>2]|0;if(a|0){f=c[a+8>>2]|0;g=a+4|0;h=(e|0)==0;b=0;while(1){if((b|0)>=(c[a>>2]|0))break;d=f+(O(c[g>>2]|0,b)|0)|0;if(!h)tb[e&127](d);FH(d);b=b+1|0}U1(f);U1(a)}return}function FH(a){a=a|0;switch(c[a>>2]|0){case 3:case 2:{U1(c[a+8+4>>2]|0);break}case 5:case 4:{U1(c[a+8+4>>2]|0);break}case 6:{U1(c[a+8+4>>2]|0);break}case 7:{U1(c[a+40>>2]|0);break}case 9:case 8:{U1(c[a+8>>2]|0);break}case 14:case 13:{GH(a+8|0);break}case 10:{U1(c[a+16>>2]|0);break}case 11:{U1(c[a+8>>2]|0);break}case 12:{U1(c[a+40>>2]|0);break}default:{}}return}function GH(a){a=a|0;var b=0,d=0,e=0;switch(c[a>>2]|0){case 1:{e=a+40|0;b=a+8+36|0;a=0;while(1){d=c[b>>2]|0;if((a|0)>=(c[e>>2]|0))break;U1(c[d+(a<<3)+4>>2]|0);a=a+1|0}U1(d);break}case 2:{e=a+56|0;d=a+60|0;a=0;while(1){b=c[d>>2]|0;if((a|0)>=(c[e>>2]|0))break;U1(c[b+(a<<3)+4>>2]|0);a=a+1|0}U1(b);break}default:{}}return}function HH(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;o=l;l=l+16|0;k=o+4|0;n=o;c[d>>2]=0;c[e>>2]=(xB(xC(b)|0)|0)!=0&1;f=c[47184]|0;a:do if(f|0?(h=RA(b,f)|0,i=a[h>>0]|0,i<<24>>24):0){f=20388;while(1){g=c[f>>2]|0;if(!g)break a;if(i<<24>>24==(a[g>>0]|0)?(s2(h,g)|0)==0:0)break;f=f+12|0}c[d>>2]=c[f+4>>2];c[e>>2]=c[f+8>>2]}while(0);f=c[47195]|0;if((f|0?(c[e>>2]|0)==1:0)?(j=RA(b,f)|0,a[j>>0]|0):0)IH(j,e);f=c[47196]|0;if((f|0?(c[d>>2]|0)==1:0)?(m=RA(b,f)|0,a[m>>0]|0):0)IH(m,d);if(a[(c[b+16>>2]|0)+153>>0]|0){j=b+-48|0;i=xC(c[((c[b>>2]&3|0)==2?b:j)+40>>2]|0)|0;m=c[b>>2]&3;HH(iB(i,c[((m|0)==2?b:j)+40>>2]|0,c[((m|0)==3?b:b+48|0)+40>>2]|0,0,0)|0,k,n);c[e>>2]=c[k>>2]|c[e>>2];c[d>>2]=c[n>>2]|c[d>>2]}l=o;return}function IH(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;o=l;l=l+16|0;m=o;k=o+4|0;j=0;e=0;a:while(1){c[d>>2]=e;g=(j|0)<4;h=(j|0)==3;i=(j|0)==0;while(1){if(!(g&(a[b>>0]|0)!=0))break a;c[k>>2]=0;f=JH(b,k)|0;e=c[k>>2]|0;if(!e){n=5;break a}b=(e|0)==8;if(!(h&b)){if(!(i&b))break;if(a[f>>0]|0)break}c[k>>2]=0;b=f}e=c[d>>2]|e<<(j<<3);j=j+1|0;b=f}if((n|0)==5){c[m>>2]=b;gA(0,99694,m)|0}l=o;return}function JH(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=l;l=l+16|0;e=f;c[e>>2]=0;d=KH(a,20448,e)|0;if((d|0)==(a|0)){while(1){d=KH(a,20464,e)|0;if((a|0)==(d|0))break;else a=d}d=KH(a,20512,e)|0}a=c[e>>2]|0;if((a|0)!=0&(a&15|0)==0){a=a|1;c[e>>2]=a}c[b>>2]=c[b>>2]|a;l=f;return d|0}function KH(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;while(1){e=c[b>>2]|0;if(!e)break;f=l2(e)|0;if(!(Q2(a,e,f)|0)){g=4;break}b=b+8|0}if((g|0)==4){c[d>>2]=c[d>>2]|c[b+4>>2];a=a+f|0}return a|0}function LH(a,b){a=a|0;b=b|0;var d=0.0,e=0,f=0,g=0,i=0;g=0;d=0.0;while(1){if((g|0)==4)break;f=b>>(g<<3)&15;e=1400;while(1){if(!(c[e+16>>2]|0))break;if((f|0)==(c[e>>2]|0)){i=6;break}e=e+24|0}if((i|0)==6){i=0;d=+h[e+8>>3]+d}g=g+1|0}return +(d*10.0*+_O(a,c[47188]|0,1.0,0.0))}function MH(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=+e;f=+f;g=g|0;var i=0.0,j=0.0,k=0.0,m=0,n=0.0,o=0,p=0;p=l;l=l+96|0;m=p+80|0;o=p;k=f>4.0?f*.0875:.35;i=+h[d+8>>3];n=i*k;j=+h[d>>3];k=j*k;e=+h[b>>3];j=e+j;h[m>>3]=j;f=+h[b+8>>3];i=i+f;h[m+8>>3]=i;d=o+64|0;if(!(g&32)){c[d>>2]=c[m>>2];c[d+4>>2]=c[m+4>>2];c[d+8>>2]=c[m+8>>2];c[d+12>>2]=c[m+12>>2];c[o>>2]=c[m>>2];c[o+4>>2]=c[m+4>>2];c[o+8>>2]=c[m+8>>2];c[o+12>>2]=c[m+12>>2];m=o+32|0;c[m>>2]=c[b>>2];c[m+4>>2]=c[b+4>>2];c[m+8>>2]=c[b+8>>2];c[m+12>>2]=c[b+12>>2];f=i;e=j}else{c[d>>2]=c[b>>2];c[d+4>>2]=c[b+4>>2];c[d+8>>2]=c[b+8>>2];c[d+12>>2]=c[b+12>>2];c[o>>2]=c[b>>2];c[o+4>>2]=c[b+4>>2];c[o+8>>2]=c[b+8>>2];c[o+12>>2]=c[b+12>>2];b=o+32|0;c[b>>2]=c[m>>2];c[b+4>>2]=c[m+4>>2];c[b+8>>2]=c[m+8>>2];c[b+12>>2]=c[m+12>>2]}h[o+16>>3]=e+n;h[o+24>>3]=f-k;h[o+48>>3]=e-n;h[o+56>>3]=f+k;do if(!(g&64))if(!(g&128)){nS(a,o+16|0,3,g>>>4&1^1);break}else{nS(a,o+32|0,3,g>>>4&1^1);break}else nS(a,o,3,g>>>4&1^1);while(0);l=p;return}function NH(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=+e;f=+f;g=g|0;var i=0.0,j=0.0,k=0.0,m=0.0,n=0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0.0,u=0.0,v=0.0,w=0,x=0,y=0;x=l;l=l+160|0;n=x+144|0;w=x;q=e*4.0;y=(g&32|0)==0;q=!(q1.0)|y?0.0:(f+-1.0)*.05/e;u=+h[d+8>>3];r=-u;v=q*r;t=+h[d>>3];q=t*q;r=s*r;s=t*s;p=+h[b>>3];e=p+t;h[n>>3]=e;o=+h[b+8>>3];f=u+o;h[n+8>>3]=f;t=t*.5+p;u=u*.5+o;d=w+128|0;if(y){c[d>>2]=c[n>>2];c[d+4>>2]=c[n+4>>2];c[d+8>>2]=c[n+8>>2];c[d+12>>2]=c[n+12>>2];c[w>>2]=c[n>>2];c[w+4>>2]=c[n+4>>2];c[w+8>>2]=c[n+8>>2];c[w+12>>2]=c[n+12>>2];y=w+64|0;c[y>>2]=c[b>>2];c[y+4>>2]=c[b+4>>2];c[y+8>>2]=c[b+8>>2];c[y+12>>2]=c[b+12>>2];i=o;j=p;k=o;m=p;f=o;e=p}else{c[d>>2]=c[b>>2];c[d+4>>2]=c[b+4>>2];c[d+8>>2]=c[b+8>>2];c[d+12>>2]=c[b+12>>2];c[w>>2]=c[b>>2];c[w+4>>2]=c[b+4>>2];c[w+8>>2]=c[b+8>>2];c[w+12>>2]=c[b+12>>2];y=w+64|0;c[y>>2]=c[n>>2];c[y+4>>2]=c[n+4>>2];c[y+8>>2]=c[n+8>>2];c[y+12>>2]=c[n+12>>2];i=f+s;j=e+r;k=f-s;m=e-r}h[w+16>>3]=e-v;h[w+24>>3]=f-q;h[w+32>>3]=t-r;h[w+40>>3]=u-s;h[w+48>>3]=m;h[w+56>>3]=k;h[w+80>>3]=j;h[w+88>>3]=i;h[w+96>>3]=t+r;h[w+104>>3]=u+s;h[w+112>>3]=e+v;h[w+120>>3]=f+q;do if(!(g&64))if(!(g&128)){nS(a,w,9,1);break}else{nS(a,w+48|0,6,1);break}else nS(a,w,6,1);while(0);l=x;return}function OH(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=+e;f=+f;g=g|0;var i=0.0,j=0.0,k=0.0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0.0,t=0.0;q=l;l=l+64|0;p=q;t=+h[d+8>>3];s=+h[d>>3];k=+h[b>>3];e=k+s;m=+h[b+8>>3];f=m+t;i=k+s*.2;j=m+t*.2;k=k+s*.6;m=m+t*.6;h[p>>3]=i-t;h[p+8>>3]=j+s;n=p+16|0;h[n>>3]=i+t;o=p+24|0;h[o>>3]=j-s;h[p+32>>3]=k+t;h[p+40>>3]=m-s;h[p+48>>3]=k-t;h[p+56>>3]=m+s;if(!(g&64)){if(g&128|0){d=2;g=1;r=3}}else{d=3;g=0;r=3}if((r|0)==3){h[p+(g<<4)>>3]=i;h[p+(g<<4)+8>>3]=j;h[p+(d<<4)>>3]=k;h[p+(d<<4)+8>>3]=m}nS(a,p,4,1);c[p>>2]=c[b>>2];c[p+4>>2]=c[b+4>>2];c[p+8>>2]=c[b+8>>2];c[p+12>>2]=c[b+12>>2];h[n>>3]=e;h[o>>3]=f;qS(a,p,2);l=q;return}function PH(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=+e;f=+f;g=g|0;var i=0.0,j=0.0,k=0,m=0,n=0,o=0,p=0,q=0.0,r=0.0,s=0.0,t=0.0;o=l;l=l+64|0;n=o;j=+h[d+8>>3];r=j*-.4;i=+h[d>>3];q=i*.4;t=+h[b>>3];e=t+i*.8;s=+h[b+8>>3];f=s+j*.8;i=t+i;j=s+j;h[n>>3]=t+r;k=n+8|0;h[k>>3]=s+q;d=n+16|0;h[d>>3]=t-r;m=n+24|0;h[m>>3]=s-q;h[n+32>>3]=e-r;h[n+40>>3]=f-q;h[n+48>>3]=e+r;h[n+56>>3]=f+q;if(!(g&64)){if(g&128|0){c[d>>2]=c[b>>2];c[d+4>>2]=c[b+4>>2];c[d+8>>2]=c[b+8>>2];c[d+12>>2]=c[b+12>>2];d=2;p=5}}else{c[n>>2]=c[b>>2];c[n+4>>2]=c[b+4>>2];c[n+8>>2]=c[b+8>>2];c[n+12>>2]=c[b+12>>2];d=3;p=5}if((p|0)==5){h[n+(d<<4)>>3]=e;h[n+(d<<4)+8>>3]=f}nS(a,n,4,g>>>4&1^1);h[n>>3]=e;h[k>>3]=f;h[n+16>>3]=i;h[m>>3]=j;qS(a,n,2);l=o;return}function QH(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=+e;f=+f;g=g|0;var i=0,j=0,k=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0;j=l;l=l+80|0;i=j;n=+h[d+8>>3];k=n*-.3333333333333333;p=+h[d>>3];f=p*.3333333333333333;q=+h[b>>3];m=q+p*.5;o=+h[b+8>>3];e=o+n*.5;d=i+64|0;h[i+64>>3]=q+p;h[i+72>>3]=o+n;c[i>>2]=c[d>>2];c[i+4>>2]=c[d+4>>2];c[i+8>>2]=c[d+8>>2];c[i+12>>2]=c[d+12>>2];h[i+16>>3]=m+k;h[i+24>>3]=e+f;d=i+32|0;c[d>>2]=c[b>>2];c[d+4>>2]=c[b+4>>2];c[d+8>>2]=c[b+8>>2];c[d+12>>2]=c[b+12>>2];h[i+48>>3]=m-k;h[i+56>>3]=e-f;do if(!(g&64)){d=g>>>4&1^1;if(!(g&128)){nS(a,i,4,d);break}else{nS(a,i,3,d);break}}else nS(a,d,3,g>>>4&1^1);while(0);l=j;return}function RH(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=f|0;var g=0,i=0,j=0.0,k=0.0,m=0.0;g=l;l=l+32|0;i=g;k=+h[c>>3];e=+h[c+8>>3];d=+C(+(e*e+k*k))*.5;m=+h[b>>3];k=k*.5;h[i>>3]=m+k-d;j=+h[b+8>>3];e=e*.5;h[i+8>>3]=j-d+e;h[i+16>>3]=m+d+k;h[i+24>>3]=j+d+e;mS(a,i,2,f>>>4&1^1);l=g;return}function SH(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=+e;f=+f;g=g|0;var i=0.0,j=0.0,k=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0,r=0,s=0,t=0;t=l;l=l+112|0;q=t+48|0;r=t+16|0;s=t;n=f>4.0?f*.125:.5;p=+h[b>>3];o=+h[d>>3];i=+h[b+8>>3];m=+h[d+8>>3];e=m*n;f=o*n;c[r>>2]=c[b>>2];c[r+4>>2]=c[b+4>>2];c[r+8>>2]=c[b+8>>2];c[r+12>>2]=c[b+12>>2];h[r+16>>3]=o+p;h[r+24>>3]=m+i;h[q>>3]=n*(o-m)+p;j=n*(m+o);k=j+i;h[q+8>>3]=k;h[q+48>>3]=j+p;i=n*(m-o)+i;h[q+56>>3]=i;o=e*-.95;m=o+f+p;n=f*1.3333333333333333;if(!(g&32)){e=e*1.3333333333333333;j=f*-.33333333333333326;i=i-e;f=k-e;e=m-n}else{e=e*1.3333333333333333;j=f*2.333333333333333;i=i+e;f=k+e;e=m+n}h[q+16>>3]=e;h[q+24>>3]=f;h[q+32>>3]=j-o+p;h[q+40>>3]=i;qS(a,r,2);if(!(g&64)){if(g&128|0)kP(s,q,3,.5,q,0)}else kP(s,q,3,.5,0,q);pS(a,q,4,0,0,0);l=t;return}function TH(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=+e;f=+f;g=g|0;var i=0;g=l;l=l+32|0;i=g;e=+h[d>>3]+ +h[b>>3];f=+h[d+8>>3]+ +h[b+8>>3];c[i>>2]=c[b>>2];c[i+4>>2]=c[b+4>>2];c[i+8>>2]=c[b+8>>2];c[i+12>>2]=c[b+12>>2];h[i+16>>3]=e;h[i+24>>3]=f;qS(a,i,2);l=g;return}function UH(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var i=0.0,j=0,k=0,m=0,n=0,o=0.0,p=0.0,q=0,r=0,s=0;n=l;l=l+80|0;j=n+72|0;k=n+8|0;m=n;i=+LH(a,g);i=i*i;h[m>>3]=i;c[f+12>>2]=g;g=f+32|0;a=e+3|0;f=b+(a<<4)|0;c[g>>2]=c[f>>2];c[g+4>>2]=c[f+4>>2];c[g+8>>2]=c[f+8>>2];c[g+12>>2]=c[f+12>>2];if((e|0)>(d|0)?(o=+h[b+(e<<4)>>3]-+h[f>>3],p=+h[b+(e<<4)+8>>3]-+h[b+(a<<4)+8>>3],p*p+o*o>2]=c[r>>2];c[s+4>>2]=c[r+4>>2];c[s+8>>2]=c[r+8>>2];c[s+12>>2]=c[r+12>>2];q=k+32|0;a=b+(e+1<<4)|0;c[q>>2]=c[a>>2];c[q+4>>2]=c[a+4>>2];c[q+8>>2]=c[a+8>>2];c[q+12>>2]=c[a+12>>2];f=k+16|0;d=b+(e+2<<4)|0;c[f>>2]=c[d>>2];c[f+4>>2]=c[d+4>>2];c[f+8>>2]=c[d+8>>2];c[f+12>>2]=c[d+12>>2];c[k>>2]=c[g>>2];c[k+4>>2]=c[g+4>>2];c[k+8>>2]=c[g+8>>2];c[k+12>>2]=c[g+12>>2];c[j>>2]=k;c[j+4>>2]=m;$N(j,92,k,1);c[r>>2]=c[s>>2];c[r+4>>2]=c[s+4>>2];c[r+8>>2]=c[s+8>>2];c[r+12>>2]=c[s+12>>2];c[a>>2]=c[q>>2];c[a+4>>2]=c[q+4>>2];c[a+8>>2]=c[q+8>>2];c[a+12>>2]=c[q+12>>2];c[d>>2]=c[f>>2];c[d+4>>2]=c[f+4>>2];c[d+8>>2]=c[f+8>>2];c[d+12>>2]=c[f+12>>2];m=b+(e+3<<4)|0;c[m>>2]=c[k>>2];c[m+4>>2]=c[k+4>>2];c[m+8>>2]=c[k+8>>2];c[m+12>>2]=c[k+12>>2];l=n;return e|0}function VH(a,b){a=a|0;b=b|0;var d=0.0,e=0.0,f=0;f=c[a>>2]|0;d=+h[b>>3]-+h[f>>3];e=+h[b+8>>3]-+h[f+8>>3];return e*e+d*d<=+h[c[a+4>>2]>>3]|0}function WH(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var i=0,j=0.0,k=0,m=0,n=0,o=0,p=0.0,q=0.0,r=0,s=0;o=l;l=l+80|0;k=o+72|0;m=o+8|0;n=o;j=+LH(a,g);j=j*j;h[n>>3]=j;c[f+8>>2]=g;f=f+16|0;a=b+(d<<4)|0;c[f>>2]=c[a>>2];c[f+4>>2]=c[a+4>>2];c[f+8>>2]=c[a+8>>2];c[f+12>>2]=c[a+12>>2];if(!((e|0)>(d|0)?(i=d+3|0,p=+h[a>>3]-+h[b+(i<<4)>>3],q=+h[b+(d<<4)+8>>3]-+h[b+(i<<4)+8>>3],q*q+p*p>2]=c[e>>2];c[m+4>>2]=c[e+4>>2];c[m+8>>2]=c[e+8>>2];c[m+12>>2]=c[e+12>>2];g=m+16|0;d=b+(i+2<<4)|0;c[g>>2]=c[d>>2];c[g+4>>2]=c[d+4>>2];c[g+8>>2]=c[d+8>>2];c[g+12>>2]=c[d+12>>2];r=m+32|0;a=b+(i+1<<4)|0;c[r>>2]=c[a>>2];c[r+4>>2]=c[a+4>>2];c[r+8>>2]=c[a+8>>2];c[r+12>>2]=c[a+12>>2];s=m+48|0;c[s>>2]=c[f>>2];c[s+4>>2]=c[f+4>>2];c[s+8>>2]=c[f+8>>2];c[s+12>>2]=c[f+12>>2];c[k>>2]=s;c[k+4>>2]=n;$N(k,92,m,0);n=b+(i<<4)|0;c[n>>2]=c[s>>2];c[n+4>>2]=c[s+4>>2];c[n+8>>2]=c[s+8>>2];c[n+12>>2]=c[s+12>>2];c[a>>2]=c[r>>2];c[a+4>>2]=c[r+4>>2];c[a+8>>2]=c[r+8>>2];c[a+12>>2]=c[r+12>>2];c[d>>2]=c[g>>2];c[d+4>>2]=c[g+4>>2];c[d+8>>2]=c[g+8>>2];c[d+12>>2]=c[g+12>>2];c[e>>2]=c[m>>2];c[e+4>>2]=c[m+4>>2];c[e+8>>2]=c[m+8>>2];c[e+12>>2]=c[m+12>>2];l=o;return i|0}function XH(a,b,d,e,f,g,i){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;i=i|0;var j=0.0,k=0.0,l=0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0,s=0.0,t=0.0,u=0,v=0,w=0;u=(g|0)!=0;l=(i|0)!=0;if(!((e|0)==(d|0)&(u&l))){if(l){j=+LH(a,i);k=+h[b+(e<<4)>>3];p=+h[b+(e<<4)+8>>3];l=e+3|0;r=b+(l<<4)|0;n=+h[r>>3];l=b+(l<<4)+8|0;o=+h[l>>3];t=k-n;s=p-o;t=+C(+(s*s+t*t))*.9;j=j>=t?t:j;if(p==o){m=(k>3]=k;h[b+(w<<4)+8>>3]=p;e=b+(e+2<<4)|0;h[r>>3]=m;h[l>>3]=j;c[e>>2]=c[r>>2];c[e+4>>2]=c[r+4>>2];c[e+8>>2]=c[r+8>>2];c[e+12>>2]=c[r+12>>2];c[f+12>>2]=i;h[f+32>>3]=n;h[f+40>>3]=o}if(u){m=+LH(a,g);l=b+(d<<4)|0;k=+h[l>>3];j=+h[b+(d<<4)+8>>3];w=d+3|0;o=+h[b+(w<<4)>>3];p=+h[b+(w<<4)+8>>3];t=k-o;s=j-p;t=+C(+(s*s+t*t))*.9;m=m>=t?t:m;if(j==p){n=(k>3]=n;h[b+(w<<4)+8>>3]=m;c[l>>2]=c[v>>2];c[l+4>>2]=c[v+4>>2];c[l+8>>2]=c[v+8>>2];c[l+12>>2]=c[v+12>>2];v=d+2|0;h[b+(v<<4)>>3]=o;h[b+(v<<4)+8>>3]=p;v=16}}else{r=b+(e<<4)|0;s=+h[r>>3];t=+h[b+(e<<4)+8>>3];l=e+3|0;u=b+(l<<4)|0;k=+h[u>>3];l=b+(l<<4)+8|0;j=+h[l>>3];m=+LH(a,g);q=+LH(a,i);n=s-k;p=t-j;n=+C(+(p*p+n*n));w=!(q+m>=n);n=n*.3333333333333333;m=w?m:n;n=w?q:n;if(t==j){w=s>3]=q;h[b+(w<<4)+8>>3]=o;c[r>>2]=c[v>>2];c[r+4>>2]=c[v+4>>2];c[r+8>>2]=c[v+8>>2];c[r+12>>2]=c[v+12>>2];v=b+(e+2<<4)|0;h[u>>3]=p;h[l>>3]=m;c[v>>2]=c[u>>2];c[v+4>>2]=c[u+4>>2];c[v+8>>2]=c[u+8>>2];c[v+12>>2]=c[u+12>>2];c[f+12>>2]=i;h[f+32>>3]=s;h[f+40>>3]=t;v=16}if((v|0)==16){c[f+8>>2]=g;h[f+16>>3]=k;h[f+24>>3]=j}return}function YH(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;var f=0.0,g=0.0,i=0.0,j=0.0,k=0.0,l=0.0,m=0.0,n=0.0,o=0.0;n=+h[b>>3];k=+h[c>>3]-n;o=+h[b+8>>3];l=+h[c+8>>3]-o;j=d*10.0/(+C(+(k*k+l*l))+.0001);k=j*((k>=0.0?.0001:-.0001)+k);j=((l>=0.0?.0001:-.0001)+l)*j;l=k*.5;m=j*.5;i=n-m;f=o-l;n=m+n;l=o+l;o=i+k;m=f+j;k=n+k;j=l+j;g=o>k?o:k;g=n>g?n:g;d=m>j?m:j;d=l>d?l:d;k=o>3]=i>3]=f>3]=i>g?i:g;h[a+24>>3]=f>d?f:d;return}function ZH(a,b,d,e,f,g,i){a=a|0;b=b|0;d=d|0;e=e|0;f=+f;g=+g;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0.0,s=0.0,t=0.0;q=l;l=l+48|0;m=q+32|0;k=q+16|0;p=q;n=(c[a+16>>2]|0)+12|0;o=c[n>>2]|0;c[n>>2]=b;lS(a,c[(c[a>>2]|0)+336>>2]|0);uS(a,g);t=+h[e>>3]-+h[d>>3];b=e+8|0;s=+h[b>>3]-+h[d+8>>3];r=10.0/(+C(+(t*t+s*s))+.0001);h[e>>3]=r*((t>=0.0?.0001:-.0001)+t);h[b>>3]=((s>=0.0?.0001:-.0001)+s)*r;b=0;while(1){if((b|0)>=4)break;j=i>>(b<<3)&255;if(!j)break;c[k>>2]=c[d>>2];c[k+4>>2]=c[d+4>>2];c[k+8>>2]=c[d+8>>2];c[k+12>>2]=c[d+12>>2];c[m>>2]=c[e>>2];c[m+4>>2]=c[e+4>>2];c[m+8>>2]=c[e+8>>2];c[m+12>>2]=c[e+12>>2];_H(p,a,k,m,f,g,j);c[d>>2]=c[p>>2];c[d+4>>2]=c[p+4>>2];c[d+8>>2]=c[p+8>>2];c[d+12>>2]=c[p+12>>2];b=b+1|0}c[n>>2]=o;l=q;return}function _H(a,b,d,e,f,g,i){a=a|0;b=b|0;d=d|0;e=e|0;f=+f;g=+g;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0.0;q=l;l=l+32|0;m=q+16|0;k=q;n=i&15;j=1400;while(1){o=c[j>>2]|0;if(!o)break;if((n|0)==(o|0)){p=4;break}j=j+24|0}if((p|0)==4){r=+h[j+8>>3]*f;h[e>>3]=r*+h[e>>3];o=e+8|0;h[o>>3]=r*+h[o>>3];p=c[j+16>>2]|0;c[k>>2]=c[d>>2];c[k+4>>2]=c[d+4>>2];c[k+8>>2]=c[d+8>>2];c[k+12>>2]=c[d+12>>2];c[m>>2]=c[e>>2];c[m+4>>2]=c[e+4>>2];c[m+8>>2]=c[e+8>>2];c[m+12>>2]=c[e+12>>2];wb[p&15](b,k,m,f,g,i);h[d>>3]=+h[e>>3]+ +h[d>>3];p=d+8|0;h[p>>3]=+h[o>>3]+ +h[p>>3]};c[a>>2]=c[d>>2];c[a+4>>2]=c[d+4>>2];c[a+8>>2]=c[d+8>>2];c[a+12>>2]=c[d+12>>2];l=q;return}function $H(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=l;l=l+16|0;g=i+8|0;f=i;d=QA(b,99796)|0;if((d|0)!=0?(a[d>>0]|0)!=0:0){e=d;h=5}else{d=QA(b,99808)|0;if((d|0)!=0?(a[d>>0]|0)!=0:0){e=d;h=5}else d=0}if((h|0)==5){d=CH(e,0,120)|0;if(!d){c[f>>2]=KB(b)|0;gA(0,99815,f)|0;c[g>>2]=e;gA(3,99868,g)|0}}l=i;return d|0}function aI(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;g=l;l=l+16|0;f=JK(304)|0;if(!f)gA(1,99876,g)|0;e=a+16|0;a=c[e>>2]|0;c[f>>2]=a;c[e>>2]=f;if(!a){c[f+144>>2]=3;c[f+148>>2]=0;h[f+152>>3]=1.0}else{b=f+16|0;d=a+16|0;e=b+40|0;do{c[b>>2]=c[d>>2];b=b+4|0;d=d+4|0}while((b|0)<(e|0));b=f+56|0;d=a+56|0;e=b+40|0;do{c[b>>2]=c[d>>2];b=b+4|0;d=d+4|0}while((b|0)<(e|0));c[f+144>>2]=c[a+144>>2];c[f+148>>2]=c[a+148>>2];h[f+152>>3]=+h[a+152>>3];c[f+136>>2]=c[a+136>>2];b=f+96|0;d=a+96|0;e=b+40|0;do{c[b>>2]=c[d>>2];b=b+4|0;d=d+4|0}while((b|0)<(e|0))}l=g;return f|0}function bI(a){a=a|0;var b=0;a=a+16|0;b=c[a>>2]|0;if(!b)qa(99902,99906,117,99913);else{U1(c[b+212>>2]|0);U1(c[b+208>>2]|0);U1(c[b+216>>2]|0);U1(c[b+220>>2]|0);U1(c[b+224>>2]|0);U1(c[b+228>>2]|0);U1(c[b+232>>2]|0);U1(c[b+236>>2]|0);U1(c[b+240>>2]|0);U1(c[b+244>>2]|0);U1(c[b+248>>2]|0);U1(c[b+252>>2]|0);U1(c[b+256>>2]|0);U1(c[b+272>>2]|0);U1(c[b+284>>2]|0);U1(c[b+280>>2]|0);c[a>>2]=c[b>>2];U1(b);return}}function cI(d,e,f,g,h,i,j){d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,l=0;l=c[d+16>>2]|0;k=c[d+152>>2]|0;if((e|0)!=0&(k&32768|0)!=0)c[l+192>>2]=e;if(((k&65536|0)!=0?(c[l+212>>2]=EK(i,j)|0,(f|0)!=0):0)?(a[f>>0]|0)!=0:0){c[l+208>>2]=EK(f,j)|0;d=1}else d=0;do if(k&4194304){if(g|0?a[g>>0]|0:0){c[l+228>>2]=EK(g,j)|0;d=l+260|0;b[d>>1]=b[d>>1]|1;d=1;break}e=c[l+192>>2]|0;if(e){c[l+228>>2]=D4(e)|0;d=1}}while(0);if((h|0)!=0&(k&8388608|0)!=0?(a[h>>0]|0)!=0:0){c[l+244>>2]=EK(h,j)|0;d=1}return d|0}function dI(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;j=l;l=l+80|0;i=j;h=j+8|0;g=c[(c[b>>2]|0)+168>>2]|0;f=c[(c[(c[g+16>>2]|0)+8>>2]|0)+92>>2]|0;eI(b,e);b=QA(d,141060)|0;if((b|0)!=0?(a[b>>0]|0)!=0:0){nA(e,b)|0;f=e+4|0;b=c[f>>2]|0;if(b>>>0>=(c[e+8>>2]|0)>>>0){lA(e,1)|0;b=c[f>>2]|0}a[b>>0]=0;b=c[e>>2]|0;c[f>>2]=b}else{if((g|0)!=(d|0)&(f|0)!=0){nA(e,f)|0;f=e+4|0;b=c[f>>2]|0;if(b>>>0>=(c[e+8>>2]|0)>>>0){lA(e,1)|0;b=c[f>>2]|0}c[f>>2]=b+1;a[b>>0]=95}switch(IC(d)|0){case 0:{f=(g|0)==(d|0)?111494:99927;b=(c[d>>2]|0)>>>4;break}case 1:{f=111481;b=(c[d>>2]|0)>>>4;break}case 2:{f=111450;b=(c[d>>2]|0)>>>4;break}default:{f=0;b=0}}nA(e,f)|0;c[i>>2]=b;m4(h,99933,i)|0;nA(e,h)|0;f=e+4|0;b=c[f>>2]|0;if(b>>>0>=(c[e+8>>2]|0)>>>0){lA(e,1)|0;b=c[f>>2]|0}a[b>>0]=0;b=c[e>>2]|0;c[f>>2]=b}l=j;return b|0}function eI(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;i=l;l=l+144|0;h=i;g=i+8|0;e=c[b+160>>2]|0;if((e|0)>1?c[b+152>>2]&64|0:0){nA(d,c[(c[(c[b>>2]|0)+308>>2]|0)+(e<<2)>>2]|0)|0;f=d+4|0;e=c[f>>2]|0;if(e>>>0>=(c[d+8>>2]|0)>>>0){lA(d,1)|0;e=c[f>>2]|0}c[f>>2]=e+1;a[e>>0]=95}f=c[b+196>>2]|0;e=c[b+200>>2]|0;if((f|0)>0|(e|0)>0){c[h>>2]=f;c[h+4>>2]=e;m4(g,99937,h)|0;nA(d,g)|0}l=i;return}function fI(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0,i=0.0,j=0,k=0.0,m=0.0,n=0,o=0,p=0,q=0,r=0.0,s=0;s=l;l=l+48|0;p=s+16|0;f=s+32|0;q=s;r=+h[(c[a+16>>2]|0)+152>>3];o=gI(d,0,f)|0;if((o+-1|0)>>>0>=2){e=+h[b+16>>3];k=(e+ +h[b>>3])*.5;h[q>>3]=k;i=+h[b+24>>3];m=(i+ +h[b+8>>3])*.5;h[q+8>>3]=m;k=e-k;m=i-m;n=r>.5;if(n)uS(a,.5);j=c[f>>2]|0;i=0.0;f=c[j+8>>2]|0;while(1){d=c[f>>2]|0;if(!d)break;b=f+4|0;if(+g[b>>2]==0.0)e=i;else{jS(a,d);if(!(c[f+12>>2]|0))e=6.283185307179586;else e=+g[b>>2]*6.283185307179586+i;c[p>>2]=c[q>>2];c[p+4>>2]=c[q+4>>2];c[p+8>>2]=c[q+8>>2];c[p+12>>2]=c[q+12>>2];b=IT(p,k,m,i,e)|0;pS(a,c[b>>2]|0,c[b+4>>2]|0,0,0,1);EY(b)}i=e;f=f+12|0}if(n)uS(a,r);hI(j)}l=s;return o|0}function gI(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0.0,k=0.0,m=0.0,n=0,o=0,p=0,q=0,r=0;r=l;l=l+16|0;o=r+8|0;n=r;q=JK(12)|0;i=D4(b)|0;a:do if(!d){d=1;f=i;while(1){switch(a[f>>0]|0){case 0:break a;case 58:{d=d+1|0;break}default:{}}f=f+1|0}}while(0);c[q+4>>2]=i;p=JK((d*12|0)+12|0)|0;c[q+8>>2]=p;m=1.0;h=0;d=0;f=i;while(1){f=A4(f,107984)|0;if(!f){f=20;break}j=+iI(f);if(!(j>=0.0)){f=17;break}k=j-m;if(k>0.0)if((c[5156]|0)!=0?!(k<1.0e-05&k>-1.0e-05):0){c[n>>2]=b;gA(0,99948,n)|0;c[5156]=0;j=m;d=3}else j=m;k=m-j;if(j>0.0)a[p+(h*12|0)+8>>0]=1;if(a[f>>0]|0)c[p+(h*12|0)>>2]=f;f=h+1|0;g[p+(h*12|0)+4>>2]=j;if(k<1.0e-05&k>-1.0e-05){h=f;f=30;break}else{m=k;h=f;f=0}}b:do if((f|0)==17){if(!(c[5156]|0))d=1;else{c[o>>2]=b;gA(1,99983,o)|0;c[5156]=0;d=2}hI(q)}else if((f|0)==20)if(m>0.0){f=0;i=0;while(1){if((f|0)>=(h|0))break;o=i+(+g[p+(f*12|0)+4>>2]==0.0&1)|0;f=f+1|0;i=o}if((i|0)<=0){f=p+((h+-1|0)*12|0)+4|0;g[f>>2]=m+ +g[f>>2];f=30;break}j=m/+(i|0);f=0;while(1){if((f|0)>=(h|0)){f=30;break b}i=p+(f*12|0)+4|0;if(+g[i>>2]==0.0)g[i>>2]=j;f=f+1|0}}else f=30;while(0);if((f|0)==30){while(1){f=h+-1|0;if((h|0)<=0)break;if(+g[p+(f*12|0)+4>>2]>0.0)break;else h=f}c[p+(h*12|0)>>2]=0;c[q>>2]=h;c[e>>2]=q}l=r;return d|0}function hI(a){a=a|0;U1(c[a+4>>2]|0);U1(c[a+8>>2]|0);U1(a);return}function iI(b){b=b|0;var d=0.0,e=0,f=0,g=0;f=l;l=l+16|0;e=f;b=R2(b,59)|0;if(!b)d=0.0;else{g=b+1|0;a[b>>0]=0;d=+s5(g,e);d=(d>=0.0?(c[e>>2]|0)!=(g|0):0)?d:-1.0}l=f;return +d}function jI(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,i=0,j=0,k=0,m=0.0,n=0.0,o=0,p=0,q=0,r=0,s=0.0,t=0;t=l;l=l+80|0;i=t+64|0;r=t;s=+h[(c[a+16>>2]|0)+152>>3];q=gI(d,0,i)|0;if((q+-1|0)>>>0>=2){if(!e){c[r>>2]=c[b>>2];c[r+4>>2]=c[b+4>>2];c[r+8>>2]=c[b+8>>2];c[r+12>>2]=c[b+12>>2];p=r+16|0;o=b+16|0;c[p>>2]=c[o>>2];c[p+4>>2]=c[o+4>>2];c[p+8>>2]=c[o+8>>2];c[p+12>>2]=c[o+12>>2];p=r+32|0;o=b+32|0;c[p>>2]=c[o>>2];c[p+4>>2]=c[o+4>>2];c[p+8>>2]=c[o+8>>2];c[p+12>>2]=c[o+12>>2];p=r+48|0;o=b+48|0;c[p>>2]=c[o>>2];c[p+4>>2]=c[o+4>>2];c[p+8>>2]=c[o+8>>2];c[p+12>>2]=c[o+12>>2]}else{p=b+32|0;c[r>>2]=c[p>>2];c[r+4>>2]=c[p+4>>2];c[r+8>>2]=c[p+8>>2];c[r+12>>2]=c[p+12>>2];p=r+16|0;o=b+48|0;c[p>>2]=c[o>>2];c[p+4>>2]=c[o+4>>2];c[p+8>>2]=c[o+8>>2];c[p+12>>2]=c[o+12>>2];p=r+32|0;c[p>>2]=c[b>>2];c[p+4>>2]=c[b+4>>2];c[p+8>>2]=c[b+8>>2];c[p+12>>2]=c[b+12>>2];p=r+48|0;o=b+16|0;c[p>>2]=c[o>>2];c[p+4>>2]=c[o+4>>2];c[p+8>>2]=c[o+8>>2];c[p+12>>2]=c[o+12>>2]}k=r+16|0;m=+h[k>>3];f=+h[r>>3];n=m-f;o=r+32|0;h[o>>3]=f;h[k>>3]=f;p=s>.5;if(p)uS(a,.5);i=c[i>>2]|0;j=r+48|0;e=c[i+8>>2]|0;while(1){d=c[e>>2]|0;if(!d)break;b=e+4|0;if(!(+g[b>>2]==0.0)){jS(a,d);if(!(c[e+12>>2]|0))f=m;else f=n*+g[b>>2]+ +h[r>>3];h[o>>3]=f;h[k>>3]=f;nS(a,r,4,1);f=+h[k>>3];h[j>>3]=f;h[r>>3]=f}e=e+12|0}if(p)uS(a,s);hI(i)}l=t;return q|0}function kI(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;d=c[a+16>>2]|0;e=c[a+152>>2]|0;if(e&4259840|0){f=e&131072;g=f>>>16^2;c[d+264>>2]=g;h=d+268|0;c[h>>2]=g+2;g=d+272|0;U1(c[g>>2]|0);d=JK(c[h>>2]<<4)|0;c[g>>2]=d;c[d>>2]=c[b>>2];c[d+4>>2]=c[b+4>>2];c[d+8>>2]=c[b+8>>2];c[d+12>>2]=c[b+12>>2];g=d+16|0;b=b+16|0;c[g>>2]=c[b>>2];c[g+4>>2]=c[b+4>>2];c[g+8>>2]=c[b+8>>2];c[g+12>>2]=c[b+12>>2];if(!(e&8192))NR(a,d,d,2)|0;if(!f)jK(d)}return}function lI(a,b){a=a|0;b=b|0;var c=0,d=0.0,e=0,f=0,g=0,i=0.0,j=0.0,k=0.0,m=0.0,n=0.0,o=0,p=0,q=0;q=l;l=l+144|0;c=q+80|0;e=q+16|0;f=q;k=+h[b>>3];o=a+16|0;m=+h[o>>3];if(!(((((((((!(k>m)?(n=+h[a>>3],!(k>3],i=+h[a+24>>3],!(d>i)):0)?(j=+h[a+8>>3],!(d>3],!(k>m|k>3],!(k>i|k>3],!(k>m|k>3],!(k>i|k>3],!(k>m|k>3],!(n>i|n>3];if(!(d>+h[o>>3])){if(d<+h[a>>3]){c=a;p=16}}else{c=o;p=16}if((p|0)==16){p=0;h[c>>3]=d}d=+h[b+(e<<4)+8>>3];if(!(d>+h[f>>3])){if(d<+h[g>>3]){c=a;p=19}}else{c=o;p=19}if((p|0)==19){p=0;h[c+8>>3]=d}e=e+1|0}}while(0);l=q;return}function mI(a){a=a|0;var b=0,d=0,e=0,f=0,g=0.0,h=0,i=0;b=l;l=l+48|0;d=b+32|0;e=b+16|0;f=b;i=a+48|0;h=a+16|0;c[f>>2]=c[a>>2];c[f+4>>2]=c[a+4>>2];c[f+8>>2]=c[a+8>>2];c[f+12>>2]=c[a+12>>2];c[e>>2]=c[i>>2];c[e+4>>2]=c[i+4>>2];c[e+8>>2]=c[i+8>>2];c[e+12>>2]=c[i+12>>2];c[d>>2]=c[h>>2];c[d+4>>2]=c[h+4>>2];c[d+8>>2]=c[h+8>>2];c[d+12>>2]=c[h+12>>2];g=+oK(f,e,d);h=a+32|0;c[f>>2]=c[a>>2];c[f+4>>2]=c[a+4>>2];c[f+8>>2]=c[a+8>>2];c[f+12>>2]=c[a+12>>2];c[e>>2]=c[i>>2];c[e+4>>2]=c[i+4>>2];c[e+8>>2]=c[i+8>>2];c[e+12>>2]=c[i+12>>2];c[d>>2]=c[h>>2];c[d+4>>2]=c[h+4>>2];c[d+8>>2]=c[h+8>>2];c[d+12>>2]=c[h+12>>2];a=g<4.0&+oK(f,e,d)<4.0&1;l=b;return a|0}function nI(b,d){b=b|0;d=d|0;var e=0,f=0,g=0.0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0.0,G=0.0,H=0.0,I=0.0,J=0,K=0;D=l;l=l+272|0;u=D+256|0;v=D+224|0;w=D+192|0;x=D+128|0;y=D+64|0;z=D;A=D+160|0;B=D+96|0;C=D+32|0;t=c[d+16>>2]|0;s=c[t+144>>2]|0;r=t+16|0;c[x>>2]=c[r>>2];c[x+4>>2]=c[r+4>>2];c[x+8>>2]=c[r+8>>2];c[x+12>>2]=c[r+12>>2];c[x+16>>2]=c[r+16>>2];c[x+20>>2]=c[r+20>>2];c[x+24>>2]=c[r+24>>2];c[x+28>>2]=c[r+28>>2];t=c[(c[t+8>>2]|0)+88>>2]|0;c[z>>2]=0;c[z+4>>2]=0;c[z+8>>2]=0;c[z+12>>2]=0;c[z+16>>2]=0;c[z+20>>2]=0;c[z+24>>2]=0;c[z+28>>2]=0;if(!t){c[b>>2]=c[x>>2];c[b+4>>2]=c[x+4>>2];c[b+8>>2]=c[x+8>>2];c[b+12>>2]=c[x+12>>2];c[b+16>>2]=c[x+16>>2];c[b+20>>2]=c[x+20>>2];c[b+24>>2]=c[x+24>>2];c[b+28>>2]=c[x+28>>2]}else{d=x+16|0;if(+h[x>>3]==+h[d>>3]?(e=x+8|0,f=x+24|0,+h[e>>3]==+h[f>>3]):0){h[e>>3]=1797693134862315708145274.0e284;h[x>>3]=1797693134862315708145274.0e284;h[f>>3]=-1797693134862315708145274.0e284;h[d>>3]=-1797693134862315708145274.0e284}j=v+8|0;k=v+16|0;m=v+24|0;n=y+16|0;o=y+24|0;p=s+144|0;q=w+16|0;r=t+12|0;d=0;f=c[t+8>>2]|0;e=0;g=0.0;i=0;while(1){if((i|0)>=(c[t>>2]|0))break;c[y>>2]=c[z>>2];c[y+4>>2]=c[z+4>>2];c[y+8>>2]=c[z+8>>2];c[y+12>>2]=c[z+12>>2];c[y+16>>2]=c[z+16>>2];c[y+20>>2]=c[z+20>>2];c[y+24>>2]=c[z+24>>2];c[y+28>>2]=c[z+28>>2];switch(c[f>>2]|0){case 1:case 0:{H=+h[f+8>>3];I=+h[f+24>>3];h[v>>3]=H-I;F=+h[f+16>>3];G=+h[f+32>>3];h[j>>3]=F-G;h[k>>3]=I+H;h[m>>3]=G+F;E=f+80|0;c[E>>2]=c[v>>2];c[E+4>>2]=c[v+4>>2];c[E+8>>2]=c[v+8>>2];c[E+12>>2]=c[v+12>>2];E=f+96|0;c[E>>2]=c[k>>2];c[E+4>>2]=c[k+4>>2];c[E+8>>2]=c[k+8>>2];c[E+12>>2]=c[k+12>>2];c[u>>2]=c[v>>2];c[u+4>>2]=c[v+4>>2];c[u+8>>2]=c[v+8>>2];c[u+12>>2]=c[v+12>>2];oI(x,u);c[u>>2]=c[k>>2];c[u+4>>2]=c[k+4>>2];c[u+8>>2]=c[k+8>>2];c[u+12>>2]=c[k+12>>2];oI(x,u);break}case 3:case 2:{E=f+80|0;J=f+8|0;pI(A,c[J+4>>2]|0,c[J>>2]|0,x);c[E>>2]=c[A>>2];c[E+4>>2]=c[A+4>>2];c[E+8>>2]=c[A+8>>2];c[E+12>>2]=c[A+12>>2];c[E+16>>2]=c[A+16>>2];c[E+20>>2]=c[A+20>>2];c[E+24>>2]=c[A+24>>2];c[E+28>>2]=c[A+28>>2];break}case 5:case 4:{J=f+80|0;E=f+8|0;pI(B,c[E+4>>2]|0,c[E>>2]|0,x);c[J>>2]=c[B>>2];c[J+4>>2]=c[B+4>>2];c[J+8>>2]=c[B+8>>2];c[J+12>>2]=c[B+12>>2];c[J+16>>2]=c[B+16>>2];c[J+20>>2]=c[B+20>>2];c[J+24>>2]=c[B+24>>2];c[J+28>>2]=c[B+28>>2];break}case 6:{J=f+80|0;E=f+8|0;pI(C,c[E+4>>2]|0,c[E>>2]|0,x);c[J>>2]=c[C>>2];c[J+4>>2]=c[C+4>>2];c[J+8>>2]=c[C+8>>2];c[J+12>>2]=c[C+12>>2];c[J+16>>2]=c[C+16>>2];c[J+20>>2]=c[C+20>>2];c[J+24>>2]=c[C+24>>2];c[J+28>>2]=c[C+28>>2];break}case 7:{J=f+112|0;c[J>>2]=JK(56)|0;E=D4(c[f+40>>2]|0)|0;K=c[J>>2]|0;c[K>>2]=E;a[K+48>>0]=a[100029+(c[f+24>>2]|0)>>0]|0;c[y>>2]=e;h[n>>3]=g;c[o>>2]=c[o>>2]&-128|d&127;K=c[p>>2]|0;K=nb[c[K>>2]&63](K,y,1)|0;E=c[J>>2]|0;c[E+4>>2]=K;LO(u,s,E);qI(w,+h[f+8>>3],+h[f+16>>3],c[J>>2]|0);J=f+80|0;c[J>>2]=c[w>>2];c[J+4>>2]=c[w+4>>2];c[J+8>>2]=c[w+8>>2];c[J+12>>2]=c[w+12>>2];c[J+16>>2]=c[w+16>>2];c[J+20>>2]=c[w+20>>2];c[J+24>>2]=c[w+24>>2];c[J+28>>2]=c[w+28>>2];c[u>>2]=c[w>>2];c[u+4>>2]=c[w+4>>2];c[u+8>>2]=c[w+8>>2];c[u+12>>2]=c[w+12>>2];oI(x,u);c[u>>2]=c[q>>2];c[u+4>>2]=c[q+4>>2];c[u+8>>2]=c[q+8>>2];c[u+12>>2]=c[q+12>>2];oI(x,u);if(!(c[r>>2]|0))c[r>>2]=109;break}case 10:{e=c[f+16>>2]|0;g=+h[f+8>>3];break}case 15:{d=c[f+8>>2]|0;break}default:{}}f=f+120|0;i=i+1|0}c[b>>2]=c[x>>2];c[b+4>>2]=c[x+4>>2];c[b+8>>2]=c[x+8>>2];c[b+12>>2]=c[x+12>>2];c[b+16>>2]=c[x+16>>2];c[b+20>>2]=c[x+20>>2];c[b+24>>2]=c[x+24>>2];c[b+28>>2]=c[x+28>>2]}l=D;return}function oI(a,b){a=a|0;b=b|0;var c=0.0,d=0;c=+h[b>>3];d=a+16|0;if(c>+h[d>>3])h[d>>3]=c;if(c<+h[a>>3])h[a>>3]=c;c=+h[b+8>>3];b=a+24|0;if(c>+h[b>>3])h[b>>3]=c;b=a+8|0;if(c<+h[b>>3])h[b>>3]=c;return}function pI(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;r=l;l=l+48|0;k=r+32|0;n=r;f=+h[b>>3];o=n+16|0;h[o>>3]=f;h[n>>3]=f;f=+h[b+8>>3];p=n+24|0;h[p>>3]=f;m=n+8|0;h[m>>3]=f;j=1;while(1){if((j|0)>=(d|0))break;i=b+24|0;f=+h[i>>3];if(!(f<+h[n>>3])){if(f>+h[o>>3]){g=o;q=5}}else{g=n;q=5}if((q|0)==5){q=0;h[g>>3]=f}f=+h[b+32>>3];if(!(f<+h[m>>3])){if(f>+h[p>>3]){b=o;q=8}}else{b=n;q=8}if((q|0)==8){q=0;h[b+8>>3]=f}j=j+1|0;b=i}c[k>>2]=c[n>>2];c[k+4>>2]=c[n+4>>2];c[k+8>>2]=c[n+8>>2];c[k+12>>2]=c[n+12>>2];oI(e,k);c[k>>2]=c[o>>2];c[k+4>>2]=c[o+4>>2];c[k+8>>2]=c[o+8>>2];c[k+12>>2]=c[o+12>>2];oI(e,k);c[a>>2]=c[n>>2];c[a+4>>2]=c[n+4>>2];c[a+8>>2]=c[n+8>>2];c[a+12>>2]=c[n+12>>2];c[a+16>>2]=c[n+16>>2];c[a+20>>2]=c[n+20>>2];c[a+24>>2]=c[n+24>>2];c[a+28>>2]=c[n+28>>2];l=r;return}function qI(b,c,d,e){b=b|0;c=+c;d=+d;e=e|0;var f=0.0,g=0,i=0,j=0,k=0.0,m=0,n=0;n=l;l=l+16|0;i=n+8|0;j=n;f=+h[e+32>>3];k=+h[e+40>>3];switch(a[e+48>>0]|0){case 108:{h[i>>3]=c;f=f+c;g=j;m=5;break}case 110:{f=f*.5;h[i>>3]=c-f;f=f+c;g=j;m=5;break}case 114:{h[j>>3]=c;f=c-f;g=i;m=5;break}default:{c=0.0;f=0.0}}if((m|0)==5){h[g>>3]=f;c=+h[i>>3];f=+h[j>>3]}d=+h[e+16>>3]+d;h[b>>3]=c;h[b+8>>3]=d-k;h[b+16>>3]=f;h[b+24>>3]=d;l=n;return}function rI(a){a=a|0;if((c[a>>2]|0)==7)BK(c[a+112>>2]|0,1);return}function sI(b,d){b=b|0;d=d|0;var e=0,f=0.0,g=0.0,i=0.0,j=0,k=0,m=0,n=0.0;m=l;l=l+16|0;k=m;j=c[b+152>>2]|0;n=+h[b+432>>3];i=+h[b+352>>3]*.013888888888888888;f=i*n;h[b+488>>3]=f;g=+h[b+440>>3];i=i*g;h[b+496>>3]=i;h[b+520>>3]=n*.013888888888888888;e=b+528|0;h[e>>3]=g*.013888888888888888;if(j&4096|0)h[e>>3]=g*-.013888888888888888;e=(c[b+360>>2]|0)==0;n=+((c[b+448>>2]|0)>>>0);g=+((c[b+452>>2]|0)>>>0);h[b+368>>3]=(e?n:g)/f;h[b+376>>3]=(e?g:n)/i;rS(b,aP(d,GA(d,0,101522,0)|0,195059)|0);c[b+160>>2]=0;tI(b,d);if(j&2|0)uI(b,d);e=jC(d)|0;while(1){if(!e)break;a[(c[e+16>>2]|0)+116>>0]=0;e=kC(d,e)|0}vI(b,k);while(1){if(!((wI(b)|0)<<24>>24))break;if((xI(b)|0)>1)SR(b);yI(b);while(1){if(!((zI(b)|0)<<24>>24))break;AI(b,d);BI(b)}if((xI(b)|0)>1)TR(b);CI(b,k)}DI(b);l=m;return}function tI(a,b){a=a|0;b=b|0;var d=0;d=aI(a)|0;c[d+4>>2]=0;c[d+8>>2]=b;c[d+12>>2]=0;CJ(a,c[(c[b+16>>2]|0)+12>>2]|0,b);OR(a,b);return}function uI(b,c){b=b|0;c=c|0;var d=0,e=0,f=0,g=0;jS(b,134800);d=QA(c,140977)|0;if(d|0?a[d>>0]|0:0)jS(b,d);d=QA(c,101446)|0;if(d|0?a[d>>0]|0:0)hS(b,d);OJ(b,c);g=jC(c)|0;while(1){if(!g)break;d=QA(g,140823)|0;if(d|0?a[d>>0]|0:0)hS(b,d);d=QA(g,137729)|0;if(d|0?a[d>>0]|0:0)jS(b,d);d=QA(g,101418)|0;do if(d|0?a[d>>0]|0:0){if(!(R2(d,58)|0)){hS(b,d);break}e=D4(d)|0;d=e;while(1){d=A4(d,107984)|0;if(!d)break;if(!(a[d>>0]|0)){d=0;continue}hS(b,d);d=0}U1(e)}while(0);d=QA(g,101446)|0;if(d|0?a[d>>0]|0:0)hS(b,d);f=XA(c,g)|0;while(1){if(!f)break;d=QA(f,140823)|0;do if(d|0?a[d>>0]|0:0){if(!(R2(d,58)|0)){hS(b,d);break}e=D4(d)|0;d=e;while(1){d=A4(d,107984)|0;if(!d)break;if(!(a[d>>0]|0)){d=0;continue}hS(b,d);d=0}U1(e)}while(0);d=QA(f,101446)|0;if(d|0?a[d>>0]|0:0)hS(b,d);f=ZA(c,f)|0}g=kC(c,g)|0}return}function vI(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=l;l=l+16|0;e=i+8|0;g=i;h=c[a>>2]|0;d=c[h+312>>2]|0;f=a+156|0;c[f>>2]=d;h=c[h+316>>2]|0;if(!h)if((d|0)>1?(c[a+152>>2]&64|0)==0:0){c[e>>2]=c[a+52>>2];gA(0,100567,e)|0;c[f>>2]=1;e=1;d=0}else{e=1;d=0}else{d=h+4|0;if((c[h>>2]|0)>1?(c[a+152>>2]&64|0)==0:0){c[g>>2]=c[a+52>>2];gA(0,100567,g)|0;c[h+8>>2]=(c[f>>2]|0)+1}e=c[d>>2]|0;d=h+8|0}c[a+160>>2]=e;c[b>>2]=d;l=i;return}function wI(a){a=a|0;return (c[a+160>>2]|0)<=(c[a+156>>2]|0)|0}function xI(a){a=a|0;var b=0;b=c[(c[a>>2]|0)+316>>2]|0;return c[((b|0)==0?a+156|0:b)>>2]|0}function yI(a){a=a|0;var b=0,d=0;d=a+172|0;b=c[d+4>>2]|0;a=a+196|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}function zI(a){a=a|0;var b=0,d=0;d=c[a+196>>2]|0;if(((d|0)>-1?(d|0)<(c[a+164>>2]|0):0)?(b=c[a+200>>2]|0,(b|0)>-1):0)a=(b|0)<(c[a+168>>2]|0)&1;else a=0;return a|0}function AI(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;p=l;l=l+176|0;k=p;f=p+48|0;m=p+32|0;n=c[d+16>>2]|0;o=c[d+152>>2]|0;if((c[d+160>>2]|0)<=1?(c[d+196>>2]|0)<=0:0)h=0;else{kA(m,128,f);g=n+212|0;h=c[g>>2]|0;eI(d,m);nA(m,h)|0;i=m+4|0;f=c[i>>2]|0;if(f>>>0>=(c[m+8>>2]|0)>>>0){lA(m,1)|0;f=c[i>>2]|0}a[f>>0]=0;f=c[m>>2]|0;c[i>>2]=f;c[g>>2]=f}HT(QA(e,100032)|0);FI(d);QR(d);hS(d,137314);jS(d,134800);do if(o&4259840|0){if((c[n+208>>2]|0)==0?(b[n+260>>1]&1)==0:0)break;if(o&655360){i=o&131072;c[n+264>>2]=i>>>16^2;f=JK((i>>>12^32)+32|0)|0;g=d+288|0;c[f>>2]=c[g>>2];c[f+4>>2]=c[g+4>>2];c[f+8>>2]=c[g+8>>2];c[f+12>>2]=c[g+12>>2];g=f+16|0;q=d+304|0;c[g>>2]=c[q>>2];c[g+4>>2]=c[q+4>>2];c[g+8>>2]=c[q+8>>2];c[g+12>>2]=c[q+12>>2];if(!i){jK(f);g=4}else g=2}else{f=0;g=0}if(!(o&8192))NR(d,f,f,g)|0;c[n+272>>2]=f;c[n+268>>2]=g}while(0);if(o&32768|0?(j=c[(c[e+16>>2]|0)+12>>2]|0,j|0):0)c[n+192>>2]=c[j>>2];g=(o&4|0)!=0;do if(!g){f=n+208|0;if((c[f>>2]|0)==0?(b[n+260>>1]&1)==0:0)break;q=d+256|0;c[k>>2]=c[q>>2];c[k+4>>2]=c[q+4>>2];c[k+8>>2]=c[q+8>>2];c[k+12>>2]=c[q+12>>2];c[k+16>>2]=c[q+16>>2];c[k+20>>2]=c[q+20>>2];c[k+24>>2]=c[q+24>>2];c[k+28>>2]=c[q+28>>2];kI(d,k);cS(d,c[f>>2]|0,c[n+228>>2]|0,c[n+244>>2]|0,c[n+212>>2]|0)}while(0);GI(d,e);f=c[(c[e+16>>2]|0)+12>>2]|0;if(f|0)DK(d,4,f);do if(!g){if((c[n+208>>2]|0)==0?(b[n+260>>1]&1)==0:0)break;dS(d)}while(0);HI(d,e,o);RR(d);if(h|0){oA(m);c[n+212>>2]=h}l=p;return}function BI(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;h=l;l=l+32|0;d=h+24|0;b=h+16|0;j=h+8|0;f=h;g=a+196|0;i=a+188|0;c[b>>2]=c[g>>2];c[b+4>>2]=c[g+4>>2];c[d>>2]=c[i>>2];c[d+4>>2]=c[i+4>>2];EI(j,b,d);i=c[j+4>>2]|0;e=g;c[e>>2]=c[j>>2];c[e+4>>2]=i;if(!((zI(a)|0)<<24>>24)){e=a+180|0;if(!(c[a+184>>2]|0))c[a+200>>2]=c[a+176>>2];else c[g>>2]=c[a+172>>2];c[b>>2]=c[g>>2];c[b+4>>2]=c[g+4>>2];c[d>>2]=c[e>>2];c[d+4>>2]=c[e+4>>2];EI(f,b,d);i=c[f+4>>2]|0;j=g;c[j>>2]=c[f>>2];c[j+4>>2]=i}l=h;return}function CI(a,b){a=a|0;b=b|0;var d=0;d=c[b>>2]|0;if(!d){d=a+160|0;c[d>>2]=(c[d>>2]|0)+1}else{c[a+160>>2]=c[d>>2];c[b>>2]=d+4}return}function DI(a){a=a|0;PR(a);bI(a);return}function EI(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=(c[d+4>>2]|0)+(c[b+4>>2]|0)|0;c[a>>2]=(c[d>>2]|0)+(c[b>>2]|0);c[a+4>>2]=e;return}function FI(a){a=a|0;var b=0.0,d=0.0,e=0.0,f=0,g=0.0,i=0,j=0,k=0,m=0,n=0,o=0.0,p=0,q=0,r=0,s=0,t=0,u=0.0;t=l;l=l+48|0;n=t+32|0;f=t+24|0;j=t+8|0;k=t+16|0;m=t;r=a+196|0;q=c[r>>2]|0;r=c[r+4>>2]|0;p=f;c[p>>2]=q;c[p+4>>2]=r;p=a+164|0;i=c[p>>2]|0;p=c[p+4>>2]|0;s=j;c[s>>2]=i;c[s+4>>2]=p;s=a+360|0;if(!(c[s>>2]|0)){k=q;j=r}else{c[n>>2]=c[f>>2];c[n+4>>2]=c[f+4>>2];NJ(k,n);r=k;k=c[r>>2]|0;r=c[r+4>>2]|0;p=f;c[p>>2]=k;c[p+4>>2]=r;c[n>>2]=c[j>>2];c[n+4>>2]=c[j+4>>2];NJ(m,n);p=m;i=c[p>>2]|0;p=c[p+4>>2]|0;c[j>>2]=i;c[j+4>>2]=p;j=r}d=+h[a+320>>3];g=d*+(k|0)-+h[a+240>>3];h[a+288>>3]=g;e=+h[a+328>>3];o=e*+(j|0)-+h[a+248>>3];h[a+296>>3]=o;h[a+304>>3]=d+g;h[a+312>>3]=e+o;f=a+472|0;if(!(c[(c[a+12>>2]|0)+28>>2]|0)){r=a+456|0;c[f>>2]=c[r>>2];c[f+4>>2]=c[r+4>>2];c[f+8>>2]=c[r+8>>2];c[f+12>>2]=c[r+12>>2]}else{q=a+456|0;c[f>>2]=c[((c[f>>2]|0)<(c[q>>2]|0)?f:q)>>2];r=a+476|0;c[r>>2]=c[((c[r>>2]|0)<(c[a+460>>2]|0)?f:q)+4>>2];r=a+480|0;c[r>>2]=c[((c[r>>2]|0)>(c[a+464>>2]|0)?f:q)+8>>2];r=a+484|0;c[r>>2]=c[((c[r>>2]|0)>(c[a+468>>2]|0)?f:q)+12>>2]}m=c[a+152>>2]|0;b=+h[a+336>>3];if(!(m&128)){b=(+(k|0)-+(i|0)*.5)*d+b;h[a+256>>3]=b;g=(+(j|0)-+(p|0)*.5)*e+ +h[a+344>>3];o=g;d=d+b;g=g+e}else{d=+h[a+368>>3]*.5;e=b-d;h[a+256>>3]=e;g=+h[a+344>>3];u=+h[a+376>>3]*.5;o=g-u;d=d+b;g=u+g;b=e}h[a+264>>3]=o;h[a+272>>3]=d;h[a+280>>3]=g;if(!(c[s>>2]|0)){e=+h[a+352>>3];h[a+504>>3]=+h[a+384>>3]/e-b;if(!(m&4096)){d=+h[a+392>>3]/e;b=o}else{d=-g;b=+h[a+392>>3]/e}h[a+512>>3]=d-b}else{f=a+384|0;e=+h[a+352>>3];h[a+512>>3]=-g-+h[a+392>>3]/e;if(!(m&4096))d=+h[f>>3]/e;else{d=-d;b=+h[f>>3]/e}h[a+504>>3]=d-b}l=t;return}function GI(b,d){b=b|0;d=d|0;var e=0,f=0.0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=l;l=l+48|0;q=s;o=s+40|0;p=s+36|0;r=s+32|0;e=QA(d,140977)|0;if(!e){j=1;e=137198}else{i=(a[e>>0]|0)==0;j=i&1;e=i?137198:e}h=c[b+152>>2]|0;i=(a[e>>0]|0)==116;if(!(h&256))if(i){m=(s2(e,137379)|0)==0;k=m?137198:e;m=m?1:j;n=8}else{k=e;m=j;n=8}else if(!(i?!(s2(e,137379)|0):0)){k=e;m=j;n=8}if((n|0)==8?!((m|0)!=0&(h&33554432|0)!=0):0)if(!((JJ(k,o,p)|0)<<24>>24)){jS(b,k);hS(b,137379);r=b+256|0;c[q>>2]=c[r>>2];c[q+4>>2]=c[r+4>>2];c[q+8>>2]=c[r+8>>2];c[q+12>>2]=c[r+12>>2];c[q+16>>2]=c[r+16>>2];c[q+20>>2]=c[r+20>>2];c[q+24>>2]=c[r+24>>2];c[q+28>>2]=c[r+28>>2];oS(b,q,1)}else{c[r>>2]=0;i=c[o>>2]|0;jS(b,i);hS(b,137379);IJ(d,r)|0;e=c[o+4>>2]|0;h=ZO(d,c[47143]|0,0,0)|0;f=+g[p>>2];if(!e)kS(b,137314,h,f);else kS(b,e,h,f);r=(c[r>>2]|0)>>>1&1|2;p=b+256|0;c[q>>2]=c[p>>2];c[q+4>>2]=c[p+4>>2];c[q+8>>2]=c[p+8>>2];c[q+12>>2]=c[p+12>>2];c[q+16>>2]=c[p+16>>2];c[q+20>>2]=c[p+20>>2];c[q+24>>2]=c[p+24>>2];c[q+28>>2]=c[p+28>>2];oS(b,q,r);U1(i)}e=c[(c[(c[d+16>>2]|0)+8>>2]|0)+88>>2]|0;if(e|0)LJ(b,e);l=s;return}function HI(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;g=(c[a>>2]|0)+28|0;c[g>>2]=(c[g>>2]|0)+1;g=(d&4|0)!=0;if(!g)II(a,b,d);a:do if(!(d&1)){if(d&16|0){YR(a);f=jC(b)|0;while(1){if(!f)break;e=XA(b,f)|0;while(1){if(!e)break;KI(a,e);e=ZA(b,e)|0}f=kC(b,f)|0}ZR(a);WR(a);e=jC(b)|0;while(1){if(!e)break;JI(a,e);e=kC(b,e)|0}XR(a);break}if(!(d&8)){f=jC(b)|0;while(1){if(!f)break a;JI(a,f);e=XA(b,f)|0;while(1){if(!e)break;JI(a,c[((c[e>>2]&3|0)==2?e:e+-48|0)+40>>2]|0);KI(a,e);e=ZA(b,e)|0}f=kC(b,f)|0}}WR(a);e=jC(b)|0;while(1){if(!e)break;if((LI(b,e)|0)<<24>>24)JI(a,e);e=kC(b,e)|0}XR(a);YR(a);f=jC(b)|0;while(1){if(!f)break;e=XA(b,f)|0;while(1){if(!e)break;if((MI(b,e)|0)<<24>>24)KI(a,e);e=ZA(b,e)|0}f=kC(b,f)|0}ZR(a)}else{WR(a);e=jC(b)|0;while(1){if(!e)break;JI(a,e);e=kC(b,e)|0}XR(a);YR(a);f=jC(b)|0;while(1){if(!f)break;e=XA(b,f)|0;while(1){if(!e)break;KI(a,e);e=ZA(b,e)|0}f=kC(b,f)|0}ZR(a)}while(0);if(g)II(a,b,d);return}function II(e,f,i){e=e|0;f=f|0;i=i|0;var j=0,k=0,m=0,n=0,o=0.0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0;P=l;l=l+128|0;w=P+72|0;N=P+64|0;H=P+112|0;I=P;J=P+104|0;K=f+16|0;L=(i&4|0)!=0;M=e+16|0;x=I+32|0;y=I+16|0;A=I+8|0;B=I+24|0;C=I+48|0;D=I+40|0;E=I+56|0;F=(i&8|0)==0;G=J+4|0;v=1;while(1){j=c[K>>2]|0;if((v|0)>(c[j+180>>2]|0))break;u=c[(c[j+184>>2]|0)+(v<<2)>>2]|0;if((GJ(e,u)|0)<<24>>24){if(L)II(e,u,i);HJ(e,u);r=c[M>>2]|0;s=r+208|0;if(!(c[s>>2]|0))t=(b[r+260>>1]&1)!=0;else t=1;HT(QA(u,100032)|0);if(!(L|t^1)){q=(c[u+16>>2]|0)+16|0;c[w>>2]=c[q>>2];c[w+4>>2]=c[q+4>>2];c[w+8>>2]=c[q+8>>2];c[w+12>>2]=c[q+12>>2];c[w+16>>2]=c[q+16>>2];c[w+20>>2]=c[q+20>>2];c[w+24>>2]=c[q+24>>2];c[w+28>>2]=c[q+28>>2];kI(e,w);cS(e,c[s>>2]|0,c[r+228>>2]|0,c[r+244>>2]|0,c[r+212>>2]|0)}c[H>>2]=0;j=IJ(u,H)|0;if(!j)p=0;else{lS(e,j);p=c[H>>2]&1}q=u+16|0;j=d[(c[q>>2]|0)+112>>0]|0;do if(!(j&1)){if(j&2|0){j=bP(u,0,106256)|0;k=bP(u,0,106264)|0;O=29;break}if(j&8|0){j=bP(u,0,106272)|0;k=bP(u,0,106280)|0;O=29;break}if(j&4|0){j=bP(u,0,106288)|0;k=bP(u,0,106296)|0;O=29;break}j=QA(u,140823)|0;if(!j)k=0;else k=(a[j>>0]|0)==0?0:j;j=QA(u,137729)|0;if(!j)j=k;else j=(a[j>>0]|0)==0?k:j;m=QA(u,101418)|0;if(m)k=(a[m>>0]|0)==0?k:m;if(!((p|0)!=0&(k|0)!=0)){m=QA(u,140977)|0;if(m|0?a[m>>0]|0:0){k=m;O=29;break}j=(j|0)==0?137314:j;n=(k|0)==0?134800:k;c[J>>2]=0;if(!p)k=0;else O=31}else O=29}else{j=bP(u,0,106240)|0;k=bP(u,0,106248)|0;O=29}while(0);if((O|0)==29){c[J>>2]=0;j=(j|0)==0?137314:j;n=(k|0)==0?134800:k;O=31}if((O|0)==31){O=0;if(!((JJ(n,J,w)|0)<<24>>24)){jS(e,n);k=1}else{jS(e,c[J>>2]|0);k=c[G>>2]|0;m=ZO(u,c[47143]|0,0,0)|0;o=+g[w>>2];if(!k)kS(e,137314,m,o);else kS(e,k,m,o);k=(c[H>>2]|0)>>>1&1|2}}m=c[47142]|0;if((m|0?(z=RA(u,m)|0,z|0):0)?a[z>>0]|0:0)uS(e,+_O(u,c[47142]|0,1.0,0.0));p=c[H>>2]|0;do if(p&4){m=ZO(u,c[47141]|0,1,0)|0;if(m|k|0){n=c[q>>2]|0;Q=n+16|0;c[I>>2]=c[Q>>2];c[I+4>>2]=c[Q+4>>2];c[I+8>>2]=c[Q+8>>2];c[I+12>>2]=c[Q+12>>2];n=n+32|0;c[x>>2]=c[n>>2];c[x+4>>2]=c[n+4>>2];c[x+8>>2]=c[n+8>>2];c[x+12>>2]=c[n+12>>2];h[y>>3]=+h[x>>3];h[B>>3]=+h[A>>3];h[C>>3]=+h[I>>3];h[E>>3]=+h[D>>3];if(!m)hS(e,137379);else hS(e,j);TM(e,I,4,p,k)}}else{if(!(p&64)){if(ZO(u,c[47141]|0,1,0)|0){hS(e,j);Q=(c[q>>2]|0)+16|0;c[w>>2]=c[Q>>2];c[w+4>>2]=c[Q+4>>2];c[w+8>>2]=c[Q+8>>2];c[w+12>>2]=c[Q+12>>2];c[w+16>>2]=c[Q+16>>2];c[w+20>>2]=c[Q+20>>2];c[w+24>>2]=c[Q+24>>2];c[w+28>>2]=c[Q+28>>2];oS(e,w,k);break}if(!k)break;hS(e,137379);Q=(c[q>>2]|0)+16|0;c[w>>2]=c[Q>>2];c[w+4>>2]=c[Q+4>>2];c[w+8>>2]=c[Q+8>>2];c[w+12>>2]=c[Q+12>>2];c[w+16>>2]=c[Q+16>>2];c[w+20>>2]=c[Q+20>>2];c[w+24>>2]=c[Q+24>>2];c[w+28>>2]=c[Q+28>>2];oS(e,w,k);break}Q=c[q>>2]|0;p=Q+16|0;c[I>>2]=c[p>>2];c[I+4>>2]=c[p+4>>2];c[I+8>>2]=c[p+8>>2];c[I+12>>2]=c[p+12>>2];Q=Q+32|0;c[x>>2]=c[Q>>2];c[x+4>>2]=c[Q+4>>2];c[x+8>>2]=c[Q+8>>2];c[x+12>>2]=c[Q+12>>2];h[y>>3]=+h[x>>3];h[B>>3]=+h[A>>3];h[C>>3]=+h[I>>3];h[E>>3]=+h[D>>3];if(!(ZO(u,c[47141]|0,1,0)|0))hS(e,137379);else hS(e,j);if((jI(e,I,n,0)|0)>1){c[N>>2]=KB(u)|0;gA(3,100400,N)|0}Q=(c[q>>2]|0)+16|0;c[w>>2]=c[Q>>2];c[w+4>>2]=c[Q+4>>2];c[w+8>>2]=c[Q+8>>2];c[w+12>>2]=c[Q+12>>2];c[w+16>>2]=c[Q+16>>2];c[w+20>>2]=c[Q+20>>2];c[w+24>>2]=c[Q+24>>2];c[w+28>>2]=c[Q+28>>2];oS(e,w,0)}while(0);U1(c[J>>2]|0);j=c[(c[q>>2]|0)+12>>2]|0;if(j|0)DK(e,5,j);if(t){if(L){Q=(c[q>>2]|0)+16|0;c[w>>2]=c[Q>>2];c[w+4>>2]=c[Q+4>>2];c[w+8>>2]=c[Q+8>>2];c[w+12>>2]=c[Q+12>>2];c[w+16>>2]=c[Q+16>>2];c[w+20>>2]=c[Q+20>>2];c[w+24>>2]=c[Q+24>>2];c[w+28>>2]=c[Q+28>>2];kI(e,w);cS(e,c[s>>2]|0,c[r+228>>2]|0,c[r+244>>2]|0,c[r+212>>2]|0)}dS(e)}a:do if(!F){k=jC(u)|0;while(1){if(!k)break a;JI(e,k);j=XA(u,k)|0;while(1){if(!j)break;KI(e,j);j=ZA(u,j)|0}k=kC(u,k)|0}}while(0);KJ(e,f);if(!L)II(e,u,i)}v=v+1|0}l=P;return}function JI(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;j=l;l=l+32|0;e=j;h=c[b>>2]|0;i=d+16|0;a:do if(((c[(c[i>>2]|0)+8>>2]|0?(yJ(b,xC(d)|0,d)|0)<<24>>24:0)?(k=b+256|0,c[e>>2]=c[k>>2],c[e+4>>2]=c[k+4>>2],c[e+8>>2]=c[k+8>>2],c[e+12>>2]=c[k+12>>2],c[e+16>>2]=c[k+16>>2],c[e+20>>2]=c[k+20>>2],c[e+24>>2]=c[k+24>>2],c[e+28>>2]=c[k+28>>2],(zJ(d,e)|0)<<24>>24):0)?(f=(c[i>>2]|0)+116|0,g=c[h+28>>2]|0,(g|0)!=(a[f>>0]|0)):0){a[f>>0]=g;rS(b,KB(d)|0);e=aP(d,c[47169]|0,195059)|0;if(a[e>>0]|0)rS(b,e);e=aP(d,c[47157]|0,195059)|0;b:do if(a[e>>0]|0){PI(e)|0;e=188228;while(1){f=e;e=e+4|0;f=c[f>>2]|0;if(!f)break b;if((a[f>>0]|0)!=105)continue;if(!(s2(f,134335)|0))break a}}while(0);AJ(b,d);ub[c[(c[(c[(c[i>>2]|0)+8>>2]|0)+4>>2]|0)+20>>2]&63](b,d);e=c[(c[i>>2]|0)+108>>2]|0;if(e|0?a[e+81>>0]|0:0)DK(b,10,e);BJ(b)}while(0);l=j;return}function KI(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;h=l;l=l+32|0;g=h;e=b+256|0;c[g>>2]=c[e>>2];c[g+4>>2]=c[e+4>>2];c[g+8>>2]=c[e+8>>2];c[g+12>>2]=c[e+12>>2];c[g+16>>2]=c[e+16>>2];c[g+20>>2]=c[e+20>>2];c[g+24>>2]=c[e+24>>2];c[g+28>>2]=c[e+28>>2];a:do if((NI(d,g)|0)<<24>>24?(f=d+-48|0,(OI(b,d)|0)<<24>>24):0){i=d+48|0;e=l2(KB(c[((c[d>>2]&3|0)==3?d:i)+40>>2]|0)|0)|0;e=T1(e+3+(l2(KB(c[((c[d>>2]&3|0)==2?d:f)+40>>2]|0)|0)|0)|0)|0;r3(e,KB(c[((c[d>>2]&3|0)==3?d:i)+40>>2]|0)|0)|0;i=(xB(xC(c[((c[d>>2]&3|0)==2?d:f)+40>>2]|0)|0)|0)==0;g=e+(l2(e)|0)|0;if(i){a[g>>0]=a[141747]|0;a[g+1>>0]=a[141748]|0;a[g+2>>0]=a[141749]|0}else{a[g>>0]=a[137738]|0;a[g+1>>0]=a[137739]|0;a[g+2>>0]=a[137740]|0}F4(e,KB(c[((c[d>>2]&3|0)==2?d:f)+40>>2]|0)|0)|0;rS(b,e);U1(e);e=aP(d,c[47191]|0,195059)|0;if(a[e>>0]|0)rS(b,e);e=aP(d,c[47185]|0,195059)|0;b:do if(!(a[e>>0]|0))e=0;else{PI(e)|0;e=188228;while(1){f=e;e=e+4|0;f=c[f>>2]|0;if(!f){e=188228;break b}if((a[f>>0]|0)!=105)continue;if(!(s2(f,134335)|0))break a}}while(0);QI(b,d,e);RI(b,d,e);SI(b)}while(0);l=h;return}function LI(a,b){a=a|0;b=b|0;var d=0,e=0;d=a+16|0;a=1;while(1){e=c[d>>2]|0;if((a|0)>(c[e+180>>2]|0)){a=1;break}if(!(HC(c[(c[e+184>>2]|0)+(a<<2)>>2]|0,b)|0))a=a+1|0;else{a=0;break}}return a|0}function MI(a,b){a=a|0;b=b|0;var d=0,e=0;d=a+16|0;a=1;while(1){e=c[d>>2]|0;if((a|0)>(c[e+180>>2]|0)){a=1;break}if(!(HC(c[(c[e+184>>2]|0)+(a<<2)>>2]|0,b)|0))a=a+1|0;else{a=0;break}}return a|0}function NI(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;j=l;l=l+64|0;i=j+32|0;f=j;g=b+16|0;b=c[g>>2]|0;e=c[b+8>>2]|0;if((e|0)!=0?(e=e+8|0,c[f>>2]=c[e>>2],c[f+4>>2]=c[e+4>>2],c[f+8>>2]=c[e+8>>2],c[f+12>>2]=c[e+12>>2],c[f+16>>2]=c[e+16>>2],c[f+20>>2]=c[e+20>>2],c[f+24>>2]=c[e+24>>2],c[f+28>>2]=c[e+28>>2],c[i>>2]=c[d>>2],c[i+4>>2]=c[d+4>>2],c[i+8>>2]=c[d+8>>2],c[i+12>>2]=c[d+12>>2],c[i+16>>2]=c[d+16>>2],c[i+20>>2]=c[d+20>>2],c[i+24>>2]=c[d+24>>2],c[i+28>>2]=c[d+28>>2],(xJ(f,i)|0)!=0):0)b=1;else h=3;do if((h|0)==3){e=c[b+96>>2]|0;if(e){c[i>>2]=c[d>>2];c[i+4>>2]=c[d+4>>2];c[i+8>>2]=c[d+8>>2];c[i+12>>2]=c[d+12>>2];c[i+16>>2]=c[d+16>>2];c[i+20>>2]=c[d+20>>2];c[i+24>>2]=c[d+24>>2];c[i+28>>2]=c[d+28>>2];if((iQ(e,i)|0)<<24>>24){b=1;break}b=c[g>>2]|0}b=c[b+108>>2]|0;if((b|0?a[b+81>>0]|0:0)?(c[i>>2]=c[d>>2],c[i+4>>2]=c[d+4>>2],c[i+8>>2]=c[d+8>>2],c[i+12>>2]=c[d+12>>2],c[i+16>>2]=c[d+16>>2],c[i+20>>2]=c[d+20>>2],c[i+24>>2]=c[d+24>>2],c[i+28>>2]=c[d+28>>2],(iQ(b,i)|0)<<24>>24):0){b=1;break}b=0}while(0);l=j;return b|0}function OI(b,d){b=b|0;d=d|0;var e=0,f=0;a:do if((c[b+156>>2]|0)>=2?(e=aP(d,c[47190]|0,195059)|0,(tJ(b,e)|0)<<24>>24==0):0)if(!(a[e>>0]|0)){e=0;while(1){if((e|0)>=2){e=0;break a}f=(e|0)==1;f=aP(c[((c[d>>2]&3|0)==((f?2:3)|0)?d:d+((f?-1:1)*48|0)|0)+40>>2]|0,c[47167]|0,195059)|0;if(!(a[f>>0]|0)){e=1;break a}if(!((tJ(b,f)|0)<<24>>24))e=e+1|0;else{e=1;break}}}else e=0;else e=1;while(0);return e|0}function PI(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;p=l;l=l+192|0;o=p+24|0;n=p+16|0;m=p+8|0;k=p;g=p+48|0;j=p+32|0;if(a[100282]|0){kA(188492,128,194826);a[100282]=0}kA(j,128,p+56|0);c[g>>2]=b;h=j+4|0;i=j+8|0;d=0;e=0;a:while(1){f=d;b:while(1)switch(rJ(g,j)|0){case 0:{d=21;break a}case 40:if(!(f<<24>>24)){f=1;continue b}else{d=7;break a}case 41:if(!(f<<24>>24)){d=9;break a}else{f=0;continue b}default:break b}if(!(f<<24>>24)){if((e|0)==63){d=12;break}d=c[47124]|0;if(d>>>0>=(c[47125]|0)>>>0){lA(188492,1)|0;d=c[47124]|0}c[47124]=d+1;a[d>>0]=0;c[188228+(e<<2)>>2]=c[47124];e=e+1|0}d=c[h>>2]|0;if(d>>>0>=(c[i>>2]|0)>>>0){lA(j,1)|0;d=c[h>>2]|0}a[d>>0]=0;d=c[j>>2]|0;c[h>>2]=d;nA(188492,d)|0;d=c[47124]|0;if(d>>>0>=(c[47125]|0)>>>0){lA(188492,1)|0;d=c[47124]|0}c[47124]=d+1;a[d>>0]=0;d=f}do if((d|0)==7){c[k>>2]=b;gA(1,100283,k)|0;c[47057]=0;oA(j)}else if((d|0)==9){c[m>>2]=b;gA(1,100317,m)|0;c[47057]=0;oA(j)}else if((d|0)==12){c[n>>2]=b;gA(0,100345,n)|0;c[47120]=0;oA(j)}else if((d|0)==21){if(f<<24>>24){c[o>>2]=b;gA(1,100368,o)|0;c[47057]=0;oA(j);break}c[188228+(e<<2)>>2]=0;oA(j);d=c[47124]|0;if(d>>>0>=(c[47125]|0)>>>0){lA(188492,1)|0;d=c[47124]|0}a[d>>0]=0;c[47124]=c[47123]}while(0);l=p;return 188228} +function Bb(a){a=a|0;var b=0;b=l;l=l+a|0;l=l+15&-16;return b|0}function Cb(){return l|0}function Db(a){a=a|0;l=a}function Eb(a,b){a=a|0;b=b|0;l=a;m=b}function Fb(a,b){a=a|0;b=b|0;if(!o){o=a;p=b}}function Gb(a){a=a|0;z=a}function Hb(){return z|0}function Ib(a){a=a|0;c[46654]=a;return 0}function Jb(){return c[46654]|0}function Kb(a,b){a=a|0;b=b|0;Oa(0,a|0,b|0)|0;return}function Lb(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;i=l;l=l+16|0;f=i+4|0;g=i;c[f>>2]=0;h=mG()|0;rG(h,10976);rG(h,17220);rG(h,17440);fA(1)|0;eA(18)|0;while(1){a=ZB(a)|0;e=c[f>>2]|0;if(!a)break;if(e|0){a=195059;continue}nG(h,a,d)|0;qG(h,a,b,f,g)|0;a=195059}l=i;return e|0}function Mb(a){a=a|0;var d=0,e=0,f=0,g=0;g=l;l=l+16|0;d=g+4|0;e=g;f=c[(c[a+16>>2]|0)+8>>2]|0;a=a+64|0;switch(c[a>>2]|0){case 0:{JL(f);break}case 1:{if(b[(c[f+16>>2]|0)+136>>1]&1)UP(f);break}case 4:case 5:case 6:{GL(f,e,d);Pb(f,c[e>>2]|0,c[d>>2]|0,c[a>>2]|0);break}default:{}}l=g;return}function Nb(a){a=a|0;var b=0,d=0,e=0,f=0;d=c[(c[a+16>>2]|0)+8>>2]|0;if(!(c[46655]|0)){c[46655]=c[4678];c[46656]=57;c[46657]=19}e=d+64|0;f=(c[e>>2]|0)+8|0;b=c[f>>2]|0;c[f>>2]=186620;switch(c[a+64>>2]|0){case 2:{wL(a,d,a,0);break}case 3:{wL(a,d,a,1);break}case 1:case 0:{if(!(c[a+152>>2]&134217728))dE(d,a)|0;break}case 6:case 5:case 4:{Ob(d);if(!(c[a+152>>2]&134217728))dE(d,a)|0;break}default:{}}c[(c[e>>2]|0)+8>>2]=b;return}function Ob(b){b=b|0;var d=0,e=0;d=c[46659]|0;if((d|0)!=(c[46658]|0)){e=c[c[46690]>>2]|0;if(!e){e=_P(b,0,99808,195059)|0;c[c[46690]>>2]=e;d=c[46659]|0}if(d>>>0>=(c[46660]|0)>>>0){lA(186632,1)|0;d=c[46659]|0}a[d>>0]=0;d=c[46658]|0;c[46659]=d;KA(b,e,d)|0}if(c[(c[b+16>>2]|0)+12>>2]|0){e=c[(c[46690]|0)+4>>2]|0;d=c[46675]|0;if(d>>>0>=(c[46676]|0)>>>0){lA(186696,1)|0;d=c[46675]|0}a[d>>0]=0;d=c[46674]|0;c[46675]=d;KA(b,e,d)|0}TA(b,66753,c[(c[46690]|0)+8236>>2]|0,195059)|0;d=0;while(1){if((d|0)==8)break;oA(186632+(d<<4)|0);d=d+1|0}U1(c[46690]|0);h[1]=1.0;h[5]=1.0;c[46691]=0;c[46695]=0;return}function Pb(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0;i=T1(8240)|0;c[46690]=i;a:do switch(g|0){case 6:{b[i+8232>>1]=14;g=66769;break}case 5:{b[i+8232>>1]=12;g=66773;break}default:{g=QA(d,66753)|0;if((g|0?a[g>>0]|0:0)?(h=Qb(g)|0,(h&65535)>10):0){i=c[46690]|0;b[i+8232>>1]=h;break a}g=Qb(66765)|0;i=c[46690]|0;b[i+8232>>1]=g;g=66765}}while(0);c[i+8236>>2]=g;j=d+16|0;g=c[j>>2]|0;if(!(c[g+180>>2]|0))h=0;else{h=_P(d,0,99808,195059)|0;i=c[46690]|0;g=c[j>>2]|0}c[i>>2]=h;if(!(a[g+113>>0]&8))g=0;else g=_P(d,0,66777,195059)|0;c[(c[46690]|0)+4>>2]=g;i=_P(d,1,99808,195059)|0;c[(c[46690]|0)+8>>2]=i;i=_P(d,1,66777,195059)|0;c[(c[46690]|0)+12>>2]=i;i=_P(d,2,99808,195059)|0;g=c[46690]|0;c[g+16>>2]=i;if(!f)h=0;else{h=_P(d,2,66785,195059)|0;g=c[46690]|0}c[g+20>>2]=h;if(!e)h=0;else{h=_P(d,2,66793,195059)|0;g=c[46690]|0}c[g+24>>2]=h;h=a[(c[j>>2]|0)+113>>0]|0;if(!(h&33))i=0;else{i=_P(d,2,66777,195059)|0;g=c[46690]|0;h=a[(c[j>>2]|0)+113>>0]|0}c[g+28>>2]=i;if(!(h&2))i=0;else{i=_P(d,2,66801,195059)|0;g=c[46690]|0;h=a[(c[j>>2]|0)+113>>0]|0}c[g+32>>2]=i;if(!(h&4))h=0;else{h=_P(d,2,66810,195059)|0;g=c[46690]|0}c[g+36>>2]=h;g=0;while(1){if((g|0)==8)break;kA(186632+(g<<4)|0,1024,(c[46690]|0)+40+(g<<10)|0);g=g+1|0}return}function Qb(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;j=l;l=l+1040|0;h=j;g=j+8|0;f=0;d=b;a:while(1){do{e=d;d=d+1|0;e=a[e>>0]|0;if(!(e<<24>>24))break a}while(((e<<24>>24)+-48|0)>>>0>=10);if((f|0)>=1023){i=7;break}a[g+f>>0]=e;f=f+1|0}if((i|0)==7){c[h>>2]=b;gA(0,66819,h)|0}a[g+f>>0]=0;i=(q5(g)|0)&65535;l=j;return i|0}function Rb(b){b=b|0;var d=0,e=0;e=c[(c[b+16>>2]|0)+8>>2]|0;d=c[c[46690]>>2]|0;b=c[46663]|0;if(b>>>0>=(c[46664]|0)>>>0){lA(186648,1)|0;b=c[46663]|0}a[b>>0]=0;b=c[46662]|0;c[46663]=b;KA(e,d,b)|0;if(c[(c[e+16>>2]|0)+12>>2]|0){d=c[(c[46690]|0)+4>>2]|0;b=c[46679]|0;if(b>>>0>=(c[46680]|0)>>>0){lA(186712,1)|0;b=c[46679]|0}a[b>>0]=0;b=c[46678]|0;c[46679]=b;KA(e,d,b)|0}h[2]=1.0;h[6]=1.0;c[46692]=0;c[46696]=0;return}function Sb(b){b=b|0;var d=0,e=0;e=c[(c[b+16>>2]|0)+8>>2]|0;b=c[46663]|0;if((c[46662]|0)!=(b|0)){d=c[(c[46690]|0)+8>>2]|0;if(b>>>0>=(c[46664]|0)>>>0){lA(186648,1)|0;b=c[46663]|0}a[b>>0]=0;b=c[46662]|0;c[46663]=b;KA(e,d,b)|0}b=c[46679]|0;if((c[46678]|0)!=(b|0)){d=c[(c[46690]|0)+12>>2]|0;if(b>>>0>=(c[46680]|0)>>>0){lA(186712,1)|0;b=c[46679]|0}a[b>>0]=0;b=c[46678]|0;c[46679]=b;KA(e,d,b)|0}h[9]=1.0;h[11]=1.0;c[46699]=0;c[46701]=0;return}function Tb(b){b=b|0;var d=0,e=0;e=c[(c[b+16>>2]|0)+8>>2]|0;b=c[46663]|0;if((c[46662]|0)!=(b|0)){d=c[(c[46690]|0)+16>>2]|0;if(b>>>0>=(c[46664]|0)>>>0){lA(186648,1)|0;b=c[46663]|0}a[b>>0]=0;b=c[46662]|0;c[46663]=b;KA(e,d,b)|0}b=c[46667]|0;if((c[46666]|0)!=(b|0)){d=c[(c[46690]|0)+24>>2]|0;if(b>>>0>=(c[46668]|0)>>>0){lA(186664,1)|0;b=c[46667]|0}a[b>>0]=0;b=c[46666]|0;c[46667]=b;KA(e,d,b)|0}b=c[46671]|0;if((c[46670]|0)!=(b|0)){d=c[(c[46690]|0)+20>>2]|0;if(b>>>0>=(c[46672]|0)>>>0){lA(186680,1)|0;b=c[46671]|0}a[b>>0]=0;b=c[46670]|0;c[46671]=b;KA(e,d,b)|0}b=c[46679]|0;if((c[46678]|0)!=(b|0)){d=c[(c[46690]|0)+28>>2]|0;if(b>>>0>=(c[46680]|0)>>>0){lA(186712,1)|0;b=c[46679]|0}a[b>>0]=0;b=c[46678]|0;c[46679]=b;KA(e,d,b)|0}b=c[46683]|0;if((c[46682]|0)!=(b|0)){d=c[(c[46690]|0)+36>>2]|0;if(b>>>0>=(c[46684]|0)>>>0){lA(186728,1)|0;b=c[46683]|0}a[b>>0]=0;b=c[46682]|0;c[46683]=b;KA(e,d,b)|0}b=c[46687]|0;if((c[46686]|0)!=(b|0)){d=c[(c[46690]|0)+32>>2]|0;if(b>>>0>=(c[46688]|0)>>>0){lA(186744,1)|0;b=c[46687]|0}a[b>>0]=0;b=c[46686]|0;c[46687]=b;KA(e,d,b)|0}h[10]=1.0;h[12]=1.0;h[3]=1.0;h[4]=1.0;h[7]=1.0;h[8]=1.0;c[46700]=0;c[46702]=0;c[46693]=0;c[46694]=0;c[46697]=0;c[46698]=0;return}function Ub(d,e,f){d=d|0;e=e|0;f=f|0;var g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;t=l;l=l+1056|0;j=t+16|0;s=t+8|0;r=t;k=t+32|0;o=c[(c[d+16>>2]|0)+12>>2]|0;p=c[11416+(o<<2)>>2]|0;nA(p,66916)|0;g=f+4|0;bc(k,+h[(c[g>>2]|0)+16>>3]);nA(p,k)|0;ec(d,195059,c[c[g>>2]>>2]|0);_b(d);q=a[f+48>>0]|0;q=q<<24>>24==108?-1:q<<24>>24==114&1;g=c[g>>2]|0;if(!g)g=0;else g=c[g+24>>2]&127;i=b[(c[46690]|0)+8232>>1]|0;if((i&65535)>14?(m=c[11464+((i&65535)+-15<<2)>>2]&g,n=186764+(o<<2)|0,(c[n>>2]|0)!=(m|0)):0){c[r>>2]=m;m4(k,66919,r)|0;nA(p,k)|0;c[n>>2]=m}r=e+8|0;h[r>>3]=+h[r>>3]+ +h[f+24>>3];nA(p,66925)|0;c[j>>2]=c[e>>2];c[j+4>>2]=c[e+4>>2];c[j+8>>2]=c[e+8>>2];c[j+12>>2]=c[e+12>>2];ac(p,j);c[s>>2]=q;m4(k,102220,s)|0;nA(p,k)|0;bc(k,+h[f+32>>3]);nA(p,k)|0;ec(d,195059,c[f>>2]|0);l=t;return}function Vb(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,i=0;i=l;l=l+1040|0;f=i;g=i+16|0;e=c[(c[a+16>>2]|0)+12>>2]|0;Zb(a);_b(a);if(!d){a=c[11416+(e<<2)>>2]|0;nA(a,66913)|0}else{if((d|1|0)==3)gc(a,d,b,2);else hc(a);a=c[11416+(e<<2)>>2]|0;nA(a,66910)|0};c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];ac(a,f);bc(g,+h[b+16>>3]-+h[b>>3]);nA(a,g)|0;bc(g,+h[b+24>>3]-+h[b+8>>3]);nA(a,g)|0;l=i;return}function Wb(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;Zb(a);_b(a);if(!d)$b(a,112,b,c);else{if((d|1|0)==3)gc(a,d,b,c);else hc(a);$b(a,80,b,c)}return}function Xb(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;Zb(a);_b(a);if(!f)$b(a,66,b,c);else{if((f|1|0)==3)gc(a,f,b,c);else hc(a);$b(a,98,b,c)}return}function Yb(a,b,c){a=a|0;b=b|0;c=c|0;Zb(a);_b(a);$b(a,76,b,c);return}function Zb(b){b=b|0;var d=0,e=0,f=0,g=0.0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+1184|0;i=n;f=n+24|0;m=n+8|0;kA(m,1024,n+152|0);j=b+16|0;d=c[j>>2]|0;g=+h[d+152>>3];e=8+(c[d+12>>2]<<3)|0;if(g!=+h[e>>3]){h[e>>3]=g;nA(m,66882)|0;h[i>>3]=+h[(c[j>>2]|0)+152>>3];m4(f,66896,i)|0;cc(f,0);nA(m,f)|0;f=m+4|0;d=c[f>>2]|0;e=m+8|0;if(d>>>0>=(c[e>>2]|0)>>>0){lA(m,1)|0;d=c[f>>2]|0}c[f>>2]=d+1;a[d>>0]=41;d=c[f>>2]|0;if(d>>>0>=(c[e>>2]|0)>>>0){lA(m,1)|0;d=c[f>>2]|0}a[d>>0]=0;d=c[m>>2]|0;c[f>>2]=d;ec(b,66901,d);d=c[j>>2]|0}d=c[d+160>>2]|0;if(d|0){j=m+4|0;k=m+8|0;a:while(1){i=d+4|0;d=c[d>>2]|0;if(!d)break;switch(a[d>>0]|0){case 102:{if(!(s2(d,111101)|0)){d=i;continue a}break}case 98:{if(!(s2(d,111083)|0)){d=i;continue a}break}case 115:{if(!(s2(d,111088)|0)){d=i;continue a}break}default:{}}nA(m,d)|0;do{f=d;d=d+1|0}while((a[f>>0]|0)!=0);if(a[d>>0]|0){e=c[j>>2]|0;if(e>>>0>=(c[k>>2]|0)>>>0){lA(m,1)|0;e=c[j>>2]|0}c[j>>2]=e+1;a[e>>0]=40;f=0;while(1){if(!(a[d>>0]|0))break;if(f|0){e=c[j>>2]|0;if(e>>>0>=(c[k>>2]|0)>>>0){lA(m,1)|0;e=c[j>>2]|0}c[j>>2]=e+1;a[e>>0]=44}nA(m,d)|0;do{e=d;d=d+1|0}while((a[e>>0]|0)!=0);f=f+1|0}d=c[j>>2]|0;if(d>>>0>=(c[k>>2]|0)>>>0){lA(m,1)|0;d=c[j>>2]|0}c[j>>2]=d+1;a[d>>0]=41}d=c[j>>2]|0;if(d>>>0>=(c[k>>2]|0)>>>0){lA(m,1)|0;d=c[j>>2]|0}a[d>>0]=0;d=c[m>>2]|0;c[j>>2]=d;ec(b,66901,d);d=i}oA(m)}l=n;return}function _b(a){a=a|0;dc((c[a+16>>2]|0)+16|0);ec(a,75834,193758);return}function $b(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0;k=l;l=l+1040|0;j=k;i=k+16|0;h=c[11416+(c[(c[b+16>>2]|0)+12>>2]<<2)>>2]|0;g=h+4|0;b=c[g>>2]|0;if(b>>>0>=(c[h+8>>2]|0)>>>0){lA(h,1)|0;b=c[g>>2]|0}c[g>>2]=b+1;a[b>>0]=d;c[j>>2]=f;m4(i,66846,j)|0;nA(h,i)|0;b=0;while(1){if((b|0)>=(f|0))break;i=e+(b<<4)|0;c[j>>2]=c[i>>2];c[j+4>>2]=c[i+4>>2];c[j+8>>2]=c[i+8>>2];c[j+12>>2]=c[i+12>>2];ac(h,j);b=b+1|0}l=k;return}function ac(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+1024|0;d=c;bc(d,+h[b>>3]);nA(a,d)|0;bc(d,+vL(+h[b+8>>3]));nA(a,d)|0;l=c;return}function bc(a,b){a=a|0;b=+b;var c=0,d=0;c=l;l=l+16|0;d=c;h[d>>3]=b>-1.0e-08&b<1.0e-08?0.0:b;m4(a,66851,d)|0;cc(a,1);l=c;return}function cc(b,c){b=b|0;c=c|0;var d=0,e=0;d=R2(b,46)|0;if(!d){if(c|0){d=b+(l2(b)|0)|0;e=10}}else{while(1){b=d+1|0;if(!(a[b>>0]|0))break;else d=b}a:while(1){switch(a[d>>0]|0){case 46:{e=5;break a}case 48:break;default:{e=6;break a}}a[d>>0]=0;d=d+-1|0}if((e|0)==5)a[d>>0]=0;else if((e|0)==6)d=d+1|0;if(c|0)e=10}if((e|0)==10){a[d>>0]=32;a[d+1>>0]=0}return}function dc(b){b=b|0;var e=0,f=0,g=0,h=0,i=0,j=0;j=l;l=l+32|0;i=j+16|0;h=j;e=a[b+3>>0]|0;f=d[b>>0]|0;g=d[b+1>>0]|0;b=d[b+2>>0]|0;if(e<<24>>24==-1){c[h>>2]=f;c[h+4>>2]=g;c[h+8>>2]=b;m4(193758,75714,h)|0}else{c[i>>2]=f;c[i+4>>2]=g;c[i+8>>2]=b;c[i+12>>2]=e&255;m4(193758,66864,i)|0}l=j;return}function ec(a,b,d){a=a|0;b=b|0;d=d|0;fc(c[11416+(c[(c[a+16>>2]|0)+12>>2]<<2)>>2]|0,b,d);return}function fc(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;f=l;l=l+1040|0;h=f;g=f+8|0;i=l2(e)|0;c[h>>2]=d;c[h+4>>2]=i;m4(g,66857,h)|0;nA(b,g)|0;nA(b,e)|0;e=b+4|0;d=c[e>>2]|0;if(d>>>0>=(c[b+8>>2]|0)>>>0){lA(b,1)|0;d=c[e>>2]|0}c[e>>2]=d+1;a[d>>0]=32;l=f;return}function gc(b,d,f,i){b=b|0;d=d|0;f=f|0;i=i|0;var j=0.0,k=0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0.0;x=l;l=l+1120|0;t=x+64|0;w=x+80|0;k=x+32|0;r=x+16|0;s=x;u=c[b+16>>2]|0;j=+(c[u+136>>2]|0)*.017453292519943295;if((e[(c[46690]|0)+8232>>1]|0)<14)hc(b);else{kA(w,1024,x+96|0);v=(d|0)==2;if(v){pQ(f,k,i,j,2);f=w+4|0;d=c[f>>2]|0;if(d>>>0>=(c[w+8>>2]|0)>>>0){lA(w,1)|0;d=c[f>>2]|0}c[f>>2]=d+1;a[d>>0]=91;c[t>>2]=c[k>>2];c[t+4>>2]=c[k+4>>2];c[t+8>>2]=c[k+8>>2];c[t+12>>2]=c[k+12>>2];ac(w,t);s=k+16|0;c[t>>2]=c[s>>2];c[t+4>>2]=c[s+4>>2];c[t+8>>2]=c[s+8>>2];c[t+12>>2]=c[s+12>>2];ac(w,t)}else{pQ(f,k,i,0.0,3);q=+h[k+24>>3];o=+h[k>>3];if(j==0.0){n=+h[k+8>>3];p=q*.25;j=n;m=o}else{p=q*.25;y=p;m=+E(+j)*y+o;n=+h[k+8>>3];j=+F(+j)*y+n}h[r>>3]=m;h[r+8>>3]=j;h[s>>3]=o;h[s+8>>3]=n;f=w+4|0;d=c[f>>2]|0;if(d>>>0>=(c[w+8>>2]|0)>>>0){lA(w,1)|0;d=c[f>>2]|0}c[f>>2]=d+1;a[d>>0]=40;c[t>>2]=c[r>>2];c[t+4>>2]=c[r+4>>2];c[t+8>>2]=c[r+8>>2];c[t+12>>2]=c[r+12>>2];ac(w,t);ic(w,p);c[t>>2]=c[s>>2];c[t+4>>2]=c[s+4>>2];c[t+8>>2]=c[s+8>>2];c[t+12>>2]=c[s+12>>2];ac(w,t);ic(w,q)}nA(w,66907)|0;d=u+140|0;j=+g[d>>2];f=u+56|0;if(j>0.0){jc(w,j,f);jc(w,+g[d>>2],u+96|0)}else{jc(w,0.0,f);jc(w,1.0,u+96|0)}pA(w)|0;k=w+4|0;d=c[k>>2]|0;i=w+8|0;f=d>>>0>=(c[i>>2]|0)>>>0;if(v){if(f){lA(w,1)|0;d=c[k>>2]|0}c[k>>2]=d+1;a[d>>0]=93}else{if(f){lA(w,1)|0;d=c[k>>2]|0}c[k>>2]=d+1;a[d>>0]=41}d=c[k>>2]|0;if(d>>>0>=(c[i>>2]|0)>>>0){lA(w,1)|0;d=c[k>>2]|0}a[d>>0]=0;v=c[w>>2]|0;c[k>>2]=v;ec(b,66904,v);oA(w)}l=x;return}function hc(a){a=a|0;dc((c[a+16>>2]|0)+56|0);ec(a,66904,193758);return}function ic(a,b){a=a|0;b=+b;var c=0,d=0;c=l;l=l+1024|0;d=c;bc(d,b);nA(a,d)|0;l=c;return}function jc(a,b,c){a=a|0;b=+b;c=c|0;var d=0,e=0,f=0;d=l;l=l+1040|0;f=d;e=d+8|0;h[f>>3]=b;m4(e,94168,f)|0;cc(e,1);dc(c);fc(a,e,193758);l=d;return}function kc(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0;e=l;l=l+1040|0;i=e;f=e+16|0;g=c[11416+(c[(c[a+16>>2]|0)+12>>2]<<2)>>2]|0;nA(g,67013)|0;c[i>>2]=c[d>>2];c[i+4>>2]=c[d+4>>2];c[i+8>>2]=c[d+8>>2];c[i+12>>2]=c[d+12>>2];ac(g,i);bc(f,+h[d+16>>3]-+h[d>>3]);nA(g,f)|0;bc(f,+h[d+24>>3]-+h[d+8>>3]);nA(g,f)|0;ec(a,195059,c[b+8>>2]|0);l=e;return}function lc(a){a=a|0;var b=0;switch(c[a+64>>2]|0){case 0:{b=AF(c[a>>2]|0)|0;oG(b,c[(c[a+16>>2]|0)+8>>2]|0,67797,0)|0;BF(b);break}case 1:{JL(c[(c[a>>2]|0)+168>>2]|0);break}default:{}}return}function mc(b){b=b|0;var d=0,e=0,f=0,g=0;f=l;l=l+16|0;d=f;e=c[(c[b+16>>2]|0)+8>>2]|0;if(!(c[46703]|0)){c[46703]=c[4678];c[46704]=57;c[46705]=19}c[(c[e+64>>2]|0)+8>>2]=186812;nc(e,1);c[d>>2]=0;a[d+4>>0]=(a[(c[e+16>>2]|0)+115>>0]|0)==1&1;g=c[b+64>>2]|0;a[d+5>>0]=((g|0)==0|(g|0)==3)&1;a[d+6>>0]=0;oc(e,b,1,d);l=f;return}function nc(a,b){a=a|0;b=b|0;var d=0;c[a>>2]=c[a>>2]&-9;d=OD(a)|0;while(1){if(!d)break;nc(d,0);d=PD(d)|0}a:do if(b|0){b=jC(a)|0;while(1){if(!b)break a;c[b>>2]=c[b>>2]&-9;d=XA(a,b)|0;while(1){if(!d)break;c[d>>2]=c[d>>2]&-9;d=ZA(a,d)|0}b=kC(a,b)|0}}while(0);return}function oc(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;q=l;l=l+16|0;p=q+8|0;o=q;n=(d|0)!=0;if(n){m=Vz(11836,c[4581]|0)|0;YC(a,1,141060,12,0);YC(a,2,141060,12,0);YC(a,0,141060,-12,0);f=pc(a,0,m)|0;j=jC(a)|0;i=0;g=0;while(1){if(!j)break;if(!(Q2(KB(j)|0,108006,7)|0)){k=g;g=qc(m,KB(j)|0)|0}else{k=g+1|0;g=g+f|0}c[(RC(j,141060,0)|0)+8>>2]=g;h=XA(a,j)|0;g=i;while(1){if(!h)break;c[(RC(h,141060,0)|0)+8>>2]=g;h=ZA(a,h)|0;g=g+1|0}j=kC(a,j)|0;i=g;g=k}Rz(m)|0}else f=0;m=c[e>>2]|0;c[e>>2]=m+1;rc(b,m);oF(b,97374)|0;sc(a,b,d,e);tc(a,b,e);oF(b,97345)|0;rc(b,c[e>>2]|0);if(n){c[o>>2]=f;uF(b,67016,o)}else{c[p>>2]=c[(RC(a,141060,0)|0)+8>>2];uF(b,67036,p)}vc(a,b,d,uc(a,b,d,e)|0,e);wc(a,b,d,e);oF(b,153599)|0;p=(c[e>>2]|0)+-1|0;c[e>>2]=p;rc(b,p);if(n)oF(b,111008)|0;else oF(b,75357)|0;l=q;return}function pc(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;if((yC(a)|0)!=(a|0)){e=b+1|0;c[(RC(a,141060,0)|0)+8>>2]=b;if(!(Q2(KB(a)|0,108006,7)|0)){b=KB(a)|0;Ic(d,b,c[(RC(a,141060,0)|0)+8>>2]|0);b=e}else b=e}e=OD(a)|0;while(1){if(!e)break;a=pc(e,b,d)|0;e=PD(e)|0;b=a}return b|0}function qc(a,b){a=a|0;b=b|0;a=nb[c[a>>2]&63](a,b,512)|0;if(!a)a=-1;else a=c[a+12>>2]|0;return a|0}function rc(a,b){a=a|0;b=b|0;while(1){if((b|0)<=0)break;oF(a,90574)|0;b=b+-1|0}return}function sc(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;h=l;l=l+32|0;g=h+16|0;f=h+8|0;i=h;j=KB(a)|0;rc(b,c[e>>2]|0);c[i>>2]=zc(j,e)|0;uF(b,67124,i);if(d|0){oF(b,97345)|0;rc(b,c[e>>2]|0);j=(xB(a)|0)!=0;c[f>>2]=j?107652:137308;uF(b,67738,f);rc(b,c[e>>2]|0);j=(zB(a)|0)!=0;c[g>>2]=j?107652:137308;uF(b,67755,g)}l=h;return}function tc(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;o=l;l=l+16|0;n=o+8|0;m=o;i=yC(b)|0;j=c[b>>2]&3;f=LA(i,j,0)|0;a:do if(f|0){k=e+5|0;while(1){if(!f)break a;g=RA(b,f)|0;do if(g|0){h=f+8|0;if(!(a[g>>0]|0)){g=c[h>>2]|0;if((a[g>>0]|0)!=108)break;if(s2(g,108224)|0)break}oF(d,97345)|0;rc(d,c[e>>2]|0);c[m>>2]=zc(c[h>>2]|0,e)|0;uF(d,67174,m);if(a[k>>0]|0?Bc(c[h>>2]|0)|0:0){Cc(RA(b,f)|0,d,e);break}c[n>>2]=zc(RA(b,f)|0,e)|0;uF(d,67181,n)}while(0);f=LA(i,j,f)|0}}while(0);l=o;return}function uc(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;i=l;l=l+16|0;h=i;f=OD(a)|0;if(f){oF(b,97345)|0;g=c[e>>2]|0;c[e>>2]=g+1;rc(b,g);g=(d|0)!=0;if(g){oF(b,67098)|0;a=0;d=f}else{oF(b,67158)|0;rc(b,c[e>>2]|0);a=0;d=f}while(1){if(!d)break;if(!a)a=1;else oF(b,97345)|0;if(g)Ac(d,b,e);else{c[h>>2]=c[(RC(d,141060,0)|0)+8>>2];uF(b,137395,h)}d=PD(d)|0}if(g)a=1;else{c[e>>2]=(c[e>>2]|0)+-1;oF(b,153599)|0;rc(b,c[e>>2]|0);oF(b,97340)|0;a=1}}else a=0;l=i;return a|0}function vc(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;g=jC(a)|0;if(!g){if((d|0)!=0&(e|0)!=0){c[f>>2]=(c[f>>2]|0)+-1;oF(b,153599)|0;rc(b,c[f>>2]|0);oF(b,97340)|0}}else{oF(b,97345)|0;h=(d|0)!=0;if(h)if(!e){e=c[f>>2]|0;c[f>>2]=e+1;rc(b,e);oF(b,67098)|0;e=0}else e=0;else{e=c[f>>2]|0;c[f>>2]=e+1;rc(b,e);oF(b,67112)|0;rc(b,c[f>>2]|0);e=0}while(1){if(!g)break;if(Q2(KB(g)|0,108006,7)|0){do if(e)if(h){oF(b,97345)|0;break}else{oF(b,100999)|0;break}else e=1;while(0);yc(g,b,d,f)}g=kC(a,g)|0}c[f>>2]=(c[f>>2]|0)+-1;oF(b,153599)|0;rc(b,c[f>>2]|0);oF(b,97340)|0}return}function wc(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;f=jC(a)|0;a:do if(f|0){while(1){if(!f)break a;if(XA(a,f)|0)break;f=kC(a,f)|0}oF(b,97345)|0;i=c[e>>2]|0;c[e>>2]=i+1;rc(b,i);oF(b,67048)|0;i=(d|0)!=0;if(i)g=0;else{rc(b,c[e>>2]|0);g=0}while(1){if(!f)break;h=XA(a,f)|0;while(1){if(!h)break;do if(g)if(i){oF(b,97345)|0;break}else{oF(b,100999)|0;break}else g=1;while(0);xc(h,b,d,e);h=ZA(a,h)|0}f=kC(a,f)|0}c[e>>2]=(c[e>>2]|0)+-1;oF(b,153599)|0;rc(b,c[e>>2]|0);oF(b,97340)|0}while(0);return}function xc(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;j=l;l=l+32|0;i=j+24|0;h=j+16|0;g=j+8|0;f=j;if(!d){c[i>>2]=c[(RC(a,141060,0)|0)+8>>2];uF(b,137395,i)}else{i=c[e>>2]|0;c[e>>2]=i+1;rc(b,i);oF(b,97374)|0;rc(b,c[e>>2]|0);c[f>>2]=c[(RC(a,141060,0)|0)+8>>2];uF(b,67060,f);rc(b,c[e>>2]|0);c[g>>2]=c[(RC(c[((c[a>>2]&3|0)==3?a:a+48|0)+40>>2]|0,141060,0)|0)+8>>2];uF(b,67074,g);rc(b,c[e>>2]|0);c[h>>2]=c[(RC(c[((c[a>>2]&3|0)==2?a:a+-48|0)+40>>2]|0,141060,0)|0)+8>>2];uF(b,67087,h);tc(a,b,e);oF(b,153599)|0;i=(c[e>>2]|0)+-1|0;c[e>>2]=i;rc(b,i);oF(b,75357)|0}l=j;return}function yc(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;i=l;l=l+32|0;h=i+16|0;g=i+8|0;f=i;if(!d){c[h>>2]=c[(RC(a,141060,0)|0)+8>>2];uF(b,137395,h)}else{h=c[e>>2]|0;c[e>>2]=h+1;rc(b,h);oF(b,97374)|0;rc(b,c[e>>2]|0);c[f>>2]=c[(RC(a,141060,0)|0)+8>>2];uF(b,67060,f);rc(b,c[e>>2]|0);c[g>>2]=zc(KB(a)|0,e)|0;uF(b,67124,g);tc(a,b,e);oF(b,153599)|0;h=(c[e>>2]|0)+-1|0;c[e>>2]=h;rc(b,h);oF(b,75357)|0}l=i;return}function zc(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;g=d+4|0;if(a[g>>0]|0)b=eQ(b)|0;if(!(c[46706]|0)){kA(186824,1024,0);e=b}else e=b;a:while(1){f=a[e>>0]|0;switch(f<<24>>24){case 0:break a;case 34:{nA(186824,67137)|0;break}case 92:{nA(186824,96616)|0;break}case 47:{nA(186824,67140)|0;break}case 8:{nA(186824,67143)|0;break}case 12:{nA(186824,67146)|0;break}case 10:{nA(186824,67149)|0;break}case 13:{nA(186824,67152)|0;break}case 9:{nA(186824,67155)|0;break}default:{d=c[46707]|0;if(d>>>0>=(c[46708]|0)>>>0){lA(186824,1)|0;d=c[46707]|0}c[46707]=d+1;a[d>>0]=f}}e=e+1|0}d=c[46707]|0;if(d>>>0>=(c[46708]|0)>>>0){lA(186824,1)|0;d=c[46707]|0}a[d>>0]=0;d=c[46706]|0;c[46707]=d;if(a[g>>0]|0)U1(b);return d|0}function Ac(a,b,c){a=a|0;b=b|0;c=c|0;oc(a,b,0,c);a=OD(a)|0;while(1){if(!a)break;oF(b,97345)|0;Ac(a,b,c);a=PD(a)|0}return}function Bc(b){b=b|0;var c=0;c=b+1|0;a:do if((a[b>>0]|0)==95){b=(a[c>>0]|0)+-100<<24>>24;switch(((b&255)>>>2|b<<6&255)<<24>>24){case 0:{if(!(s2(c,67695)|0)){b=1;break a}break}case 2:{if(!(s2(c,67701)|0)){b=1;break a}break}case 1:{if(!(s2(c,67708)|0)){b=1;break a}return (s2(c,67722)|0)==0|0}case 4:{if(!(s2(c,67715)|0)){b=1;break a}b=(s2(c,67730)|0)==0&1;break a}default:{b=0;break a}}b=0}else b=0;while(0);return b|0}function Cc(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;i=l;l=l+16|0;f=i;do if(b|0?a[b>>0]|0:0){h=DH(b)|0;if(!h){c[f>>2]=b;gA(0,67186,f)|0;break}oF(d,153599)|0;g=c[e>>2]|0;c[e>>2]=g+1;rc(d,g);oF(d,67213)|0;g=h+8|0;b=0;f=0;while(1){if((f|0)>=(c[h>>2]|0))break;if(!b)b=1;else oF(d,97345)|0;Dc((c[g>>2]|0)+(f*80|0)|0,d,e);f=f+1|0}c[e>>2]=(c[e>>2]|0)+-1;oF(d,153599)|0;rc(d,c[e>>2]|0);oF(d,97340)|0;EH(h)}while(0);l=i;return}function Dc(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0.0,C=0.0,D=0.0;A=l;l=l+240|0;y=A+224|0;x=A+216|0;w=A+208|0;v=A+200|0;u=A+192|0;t=A+184|0;s=A+176|0;r=A+152|0;q=A+136|0;p=A+128|0;o=A+112|0;n=A+104|0;m=A+96|0;k=A+88|0;j=A+72|0;i=A+48|0;z=A+40|0;g=A+8|0;f=A;e=c[d>>2]|0;c[d>>2]=e+1;rc(b,e);oF(b,97374)|0;rc(b,c[d>>2]|0);e=c[a>>2]|0;a:do switch(e|0){case 1:case 0:{c[f>>2]=(e|0)==0?69:101;uF(b,67216,f);rc(b,c[d>>2]|0);D=+h[a+16>>3];C=+h[a+24>>3];B=+h[a+32>>3];h[g>>3]=+h[a+8>>3];h[g+8>>3]=D;h[g+16>>3]=C;h[g+24>>3]=B;uF(b,67229,g);break}case 3:case 2:{c[z>>2]=(e|0)==2?80:112;uF(b,67216,z);rc(b,c[d>>2]|0);Ec(b,a+8|0);break}case 5:case 4:{c[i>>2]=(e|0)==4?66:98;uF(b,67216,i);rc(b,c[d>>2]|0);Ec(b,a+8|0);break}case 6:{uF(b,67264,A+56|0);rc(b,c[d>>2]|0);Ec(b,a+8|0);break}case 7:{uF(b,67276,A+64|0);rc(b,c[d>>2]|0);D=+h[a+16>>3];h[j>>3]=+h[a+8>>3];h[j+8>>3]=D;uF(b,67288,j);rc(b,c[d>>2]|0);z=c[a+24>>2]|0;c[k>>2]=(z|0)==0?108:(z|0)==1?99:114;uF(b,67310,k);rc(b,c[d>>2]|0);h[m>>3]=+h[a+32>>3];uF(b,67326,m);rc(b,c[d>>2]|0);c[n>>2]=zc(c[a+40>>2]|0,d)|0;uF(b,67343,n);break}case 9:case 8:{c[o>>2]=(e|0)==8?67:99;uF(b,67216,o);rc(b,c[d>>2]|0);uF(b,67357,A+120|0);rc(b,c[d>>2]|0);c[p>>2]=zc(c[a+8>>2]|0,d)|0;uF(b,67374,p);break}case 13:case 14:{c[q>>2]=(e|0)==13?67:99;uF(b,67216,q);rc(b,c[d>>2]|0);switch(c[a+8>>2]|0){case 0:{uF(b,67357,A+144|0);rc(b,c[d>>2]|0);c[r>>2]=zc(c[a+16>>2]|0,d)|0;uF(b,67374,r);break a}case 1:{uF(b,67389,A+160|0);rc(b,c[d>>2]|0);Fc(b,a+16|0,d);break a}default:{uF(b,67408,A+168|0);rc(b,c[d>>2]|0);Gc(b,a+16|0,d);break a}}}case 10:{uF(b,67427,s);rc(b,c[d>>2]|0);h[t>>3]=+h[a+8>>3];uF(b,67439,t);rc(b,c[d>>2]|0);c[u>>2]=zc(c[a+16>>2]|0,d)|0;uF(b,67455,u);break}case 11:{uF(b,67469,v);rc(b,c[d>>2]|0);c[w>>2]=zc(c[a+8>>2]|0,d)|0;uF(b,67481,w);break}case 15:{uF(b,67496,x);rc(b,c[d>>2]|0);c[y>>2]=c[a+8>>2];uF(b,67508,y);break}default:{}}while(0);z=(c[d>>2]|0)+-1|0;c[d>>2]=z;rc(b,z);oF(b,75357)|0;l=A;return}function Ec(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0,k=0.0;j=l;l=l+48|0;i=j+32|0;g=j+16|0;f=j+8|0;e=c[b>>2]|0;d=c[b+4>>2]|0;uF(a,67669,j);b=0;while(1){if((b|0)>=(e|0))break;if((b|0)>0)uF(a,100999,f);k=+h[d+(b*24|0)+8>>3];h[g>>3]=+h[d+(b*24|0)>>3];h[g+8>>3]=k;uF(a,67681,g);b=b+1|0}uF(a,67622,i);l=j;return}function Fc(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0.0,i=0;e=l;l=l+32|0;f=e+16|0;i=e;rc(a,c[d>>2]|0);g=+h[b+8>>3];h[i>>3]=+h[b>>3];h[i+8>>3]=g;uF(a,67625,i);rc(a,c[d>>2]|0);g=+h[b+24>>3];h[f>>3]=+h[b+16>>3];h[f+8>>3]=g;uF(a,67647,f);rc(a,c[d>>2]|0);Hc(a,c[b+32>>2]|0,c[b+36>>2]|0,d);l=e;return}function Gc(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0.0,i=0.0,j=0;e=l;l=l+48|0;f=e+24|0;j=e;rc(a,c[d>>2]|0);g=+h[b+8>>3];i=+h[b+16>>3];h[j>>3]=+h[b>>3];h[j+8>>3]=g;h[j+16>>3]=i;uF(a,67524,j);rc(a,c[d>>2]|0);i=+h[b+32>>3];g=+h[b+40>>3];h[f>>3]=+h[b+24>>3];h[f+8>>3]=i;h[f+16>>3]=g;uF(a,67552,f);rc(a,c[d>>2]|0);Hc(a,c[b+48>>2]|0,c[b+52>>2]|0,d);l=e;return}function Hc(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,i=0,j=0,k=0,m=0,n=0,o=0.0;m=l;l=l+48|0;k=m+32|0;j=m+16|0;i=m+8|0;uF(a,67580,m);f=0;while(1){if((f|0)>=(b|0))break;if((f|0)>0)uF(a,100999,i);o=+g[d+(f<<3)>>2];n=zc(c[d+(f<<3)+4>>2]|0,e)|0;h[j>>3]=o;c[j+8>>2]=n;uF(a,67591,j);f=f+1|0}uF(a,67622,k);l=m;return}function Ic(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;g=l;l=l+16|0;f=g;e=nb[c[a>>2]&63](a,b,512)|0;if(e){if((c[e+12>>2]|0)!=(d|0)){c[f>>2]=b;gA(0,67768,f)|0}}else{f=V1(1,16)|0;c[f+8>>2]=D4(b)|0;c[f+12>>2]=d;nb[c[a>>2]&63](a,f,1)|0}l=g;return}function Jc(a,b,d){a=a|0;b=b|0;d=d|0;U1(c[b+8>>2]|0);U1(b);return}function Kc(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;b=l;l=l+32|0;d=b+24|0;e=b+16|0;g=b;f=c[a+16>>2]|0;oF(a,68623)|0;j=c[c[a+12>>2]>>2]|0;i=c[j+4>>2]|0;h=c[j+8>>2]|0;c[g>>2]=c[j>>2];c[g+4>>2]=i;c[g+8>>2]=h;uF(a,68633,g);c[e>>2]=KB(c[f+8>>2]|0)|0;uF(a,68668,e);c[d>>2]=O(c[a+168>>2]|0,c[a+164>>2]|0)|0;uF(a,68681,d);oF(a,68694)|0;oF(a,68704)|0;oF(a,68712)|0;oF(a,68720)|0;oF(a,68728)|0;oF(a,68736)|0;oF(a,68744)|0;oF(a,68748)|0;oF(a,68753)|0;l=b;return}function Lc(a){a=a|0;oF(a,68604)|0;return}function Mc(a){a=a|0;c[46710]=2;return}function Nc(a){a=a|0;c[46710]=1;return}function Oc(a){a=a|0;c[46710]=2;return}function Pc(a){a=a|0;c[46710]=0;return}function Qc(a){a=a|0;c[46710]=2;return}function Rc(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0.0,i=0.0,j=0,k=0.0,m=0,n=0,o=0,p=0,q=0.0,r=0.0,s=0;p=l;l=l+80|0;o=p;m=c[(c[b+16>>2]|0)+16>>2]|0;n=c[46710]|0;f=c[e+4>>2]|0;g=+h[b+352>>3]*+h[f+16>>3];i=c[b+360>>2]|0?1.5707963267948966:0.0;j=c[e>>2]|0;k=g*.3333333333333333*+((l2(j)|0)>>>0);f=c[f+8>>2]|0;if(!f)f=-1;else f=c[f+20>>2]|0;s=a[e+48>>0]|0;r=+h[d>>3];q=+h[d+8>>3];e=$c(j)|0;c[o>>2]=4;c[o+4>>2]=s<<24>>24==108?0:s<<24>>24==114?2:1;c[o+8>>2]=m;c[o+12>>2]=n;c[o+16>>2]=0;c[o+20>>2]=f;h[o+24>>3]=g;h[o+32>>3]=i;c[o+40>>2]=6;h[o+48>>3]=g;h[o+56>>3]=k;c[o+64>>2]=~~(r+(r>=0.0?.5:-.5));c[o+68>>2]=~~(q+(q+-72.0>=0.0?-71.5:-72.5));c[o+72>>2]=e;uF(b,68549,o);l=p;return}function Sc(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;n=l;l=l+32|0;j=n;i=n+20|0;m=e+32|0;a:do switch(c[m>>2]|0){case 5:{f=0;while(1){g=c[12724+(f<<2)>>2]|0;if((f|0)==8)break a;h=c[e>>2]|0;if((a[g>>0]|0)==(a[h>>0]|0)?(s2(g,h)|0)==0:0){k=10;break a}f=f+1|0}}case 1:{g=e+1|0;h=e+2|0;f=(_c(i,d[e>>0]|0,d[g>>0]|0,d[h>>0]|0)|0)+32|0;if(!(c[i>>2]|0))k=10;else{o=d[e>>0]|0;i=d[g>>0]|0;k=d[h>>0]|0;c[j>>2]=0;c[j+4>>2]=f;c[j+8>>2]=o;c[j+12>>2]=i;c[j+16>>2]=k;uF(b,68492,j);k=10}break}default:qa(138394,67889,163,67920)}while(0);if((k|0)==10)c[e>>2]=f;c[m>>2]=6;l=n;return}function Tc(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0.0,i=0.0,j=0,k=0,m=0.0,n=0.0,o=0.0,p=0,q=0,r=0,s=0,t=0,u=0;e=l;l=l+112|0;f=e+8|0;u=e+104|0;t=e;k=c[a+16>>2]|0;s=~~+h[k+152>>3];r=c[k+16>>2]|0;q=c[k+56>>2]|0;p=c[46710]|0;Yc(k,u,t);n=+h[b>>3];k=~~(n+(n>=0.0?.5:-.5));m=+h[b+8>>3];j=~~(m+(m>=0.0?.5:-.5));i=+h[b+16>>3];n=i-n;g=+h[b+24>>3];m=g-m;b=c[u>>2]|0;o=+h[t>>3];c[f>>2]=1;c[f+4>>2]=1;c[f+8>>2]=b;c[f+12>>2]=s;c[f+16>>2]=r;c[f+20>>2]=q;c[f+24>>2]=p;c[f+28>>2]=0;c[f+32>>2]=d|0?20:-1;h[f+40>>3]=o;c[f+48>>2]=0;h[f+56>>3]=0.0;c[f+64>>2]=k;c[f+68>>2]=j;c[f+72>>2]=~~(n+(n>=0.0?.5:-.5));c[f+76>>2]=~~(m+(m>=0.0?.5:-.5));c[f+80>>2]=k;c[f+84>>2]=j;c[f+88>>2]=~~(i+(i>=0.0?.5:-.5));c[f+92>>2]=~~(g+(g>=0.0?.5:-.5));uF(a,68427,f);l=e;return}function Uc(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0.0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;f=l;l=l+96|0;g=f+8|0;o=f+80|0;p=f;q=c[a+16>>2]|0;n=~~+h[q+152>>3];m=c[q+16>>2]|0;k=c[q+56>>2]|0;j=c[46710]|0;Yc(q,o,p);o=c[o>>2]|0;i=+h[p>>3];c[g>>2]=2;c[g+4>>2]=3;c[g+8>>2]=o;c[g+12>>2]=n;c[g+16>>2]=m;c[g+20>>2]=k;c[g+24>>2]=j;c[g+28>>2]=0;c[g+32>>2]=e|0?20:-1;h[g+40>>3]=i;c[g+48>>2]=0;c[g+52>>2]=0;c[g+56>>2]=0;c[g+60>>2]=0;c[g+64>>2]=0;c[g+68>>2]=d+1;uF(a,68331,g);Zc(a,b,d,1);l=f;return}function Vc(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0.0,E=0.0,F=0;C=l;l=l+192|0;B=C+176|0;z=C+168|0;A=C+104|0;y=C+96|0;i=C+88|0;u=C+180|0;v=C+80|0;w=C+16|0;x=C;f=a+16|0;e=c[f>>2]|0;q=~~+h[e+152>>3];r=c[e+16>>2]|0;s=c[46710]|0;if((d|0)<=3)qa(67882,67889,360,67909);t=T1((d*140|0)+140|0)|0;Yc(e,u,v);if(!g){o=4;j=0;k=-1}else{o=5;j=c[(c[f>>2]|0)+56>>2]|0;k=20}E=+h[b>>3];n=w+48|0;h[n>>3]=E;D=+h[b+8>>3];h[w+56>>3]=D;c[i>>2]=~~(E+(E>=0.0?.5:-.5));c[i+4>>2]=~~(D+(D>=0.0?.5:-.5));m=x+8|0;e=t+(m4(t,81099,i)|0)|0;p=1;g=0;while(1){i=g+3|0;if((i|0)>=(d|0))break;c[w>>2]=c[n>>2];c[w+4>>2]=c[n+4>>2];c[w+8>>2]=c[n+8>>2];c[w+12>>2]=c[n+12>>2];f=1;while(1){if((f|0)==4){f=1;break}F=f+g|0;h[w+(f<<4)>>3]=+h[b+(F<<4)>>3];h[w+(f<<4)+8>>3]=+h[b+(F<<4)+8>>3];f=f+1|0}while(1){if((f|0)==7)break;kP(x,w,3,+(f|0)*.16666666666666666,0,0);D=+h[x>>3];E=+h[m>>3];c[y>>2]=~~(D+(D>=0.0?.5:-.5));c[y+4>>2]=~~(E+(E>=0.0?.5:-.5));f=f+1|0;e=e+(m4(e,81099,y)|0)|0}p=p+6|0;g=i}f=c[u>>2]|0;E=+h[v>>3];c[A>>2]=3;c[A+4>>2]=o;c[A+8>>2]=f;c[A+12>>2]=q;c[A+16>>2]=r;c[A+20>>2]=j;c[A+24>>2]=s;c[A+28>>2]=0;c[A+32>>2]=k;h[A+40>>3]=E;c[A+48>>2]=0;c[A+52>>2]=0;c[A+56>>2]=0;c[A+60>>2]=p;uF(a,68382,A);c[z>>2]=t;uF(a,81106,z);U1(t);f=p+-1|0;e=0;while(1){if((e|0)>=(p|0))break;c[B>>2]=((e|0)%(f|0)|0|0)!=0&1;uF(a,81111,B);e=e+1|0}oF(a,153599)|0;l=C;return}function Wc(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0.0,i=0,j=0,k=0,m=0,n=0,o=0;e=l;l=l+96|0;f=e+8|0;m=e+80|0;n=e;o=c[a+16>>2]|0;k=~~+h[o+152>>3];j=c[o+16>>2]|0;i=c[46710]|0;Yc(o,m,n);m=c[m>>2]|0;g=+h[n>>3];c[f>>2]=2;c[f+4>>2]=1;c[f+8>>2]=m;c[f+12>>2]=k;c[f+16>>2]=j;c[f+20>>2]=0;c[f+24>>2]=i;c[f+28>>2]=0;c[f+32>>2]=0;h[f+40>>3]=g;c[f+48>>2]=0;c[f+52>>2]=0;c[f+56>>2]=0;c[f+60>>2]=0;c[f+64>>2]=0;c[f+68>>2]=d;uF(a,68331,f);Zc(a,b,d,0);l=e;return}function Xc(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;uF(a,68325,e);l=d;return}function Yc(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0;switch(c[a+144>>2]|0){case 1:{e=10.0;a=1;break}case 2:{e=10.0;a=2;break}default:{e=0.0;a=0}}c[b>>2]=a;h[d>>3]=e;return}function Zc(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0,k=0.0,m=0.0;j=l;l=l+16|0;i=j+8|0;g=j;f=0;while(1){if((f|0)>=(d|0))break;m=+h[b+(f<<4)>>3];k=+h[b+(f<<4)+8>>3];c[g>>2]=~~(m+(m>=0.0?.5:-.5));c[g+4>>2]=~~(k+(k>=0.0?.5:-.5));uF(a,81099,g);f=f+1|0}if(e|0){k=+h[b>>3];m=+h[b+8>>3];c[i>>2]=~~(k+(k>=0.0?.5:-.5));c[i+4>>2]=~~(m+(m>=0.0?.5:-.5));uF(a,81099,i)}oF(a,153599)|0;l=j;return}function _c(a,d,e,f){a=a|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;c[a>>2]=0;k=c[46711]|0;h=195075;g=0;i=-1;while(1){if((g|0)>=(k|0)){l=6;break}m=(b[190680+(g<<1)>>1]|0)-d|0;n=(b[191192+(g<<1)>>1]|0)-e|0;j=(b[191704+(g<<1)>>1]|0)-f|0;j=(O(n,n)|0)+(O(m,m)|0)+(O(j,j)|0)|0;if((j|0)<(h|0))if(!j)break;else{h=j;i=g}g=g+1|0}if((l|0)==6){c[46711]=k+1;if((k|0)==256)g=i;else{b[190680+(g<<1)>>1]=d;b[191192+(g<<1)>>1]=e;b[191704+(g<<1)>>1]=f;c[a>>2]=1}}return g|0}function $c(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=l;l=l+16|0;h=i;d=c[46712]|0;if(!d){c[46713]=64;d=T1(64)|0;c[46712]=d;e=0}else e=0;while(1){g=b+1|0;f=a[b>>0]|0;if(!(f<<24>>24))break;b=c[46713]|0;if((e|0)>(b+-8|0)){d=b<<1;c[46713]=d;d=W1(c[46712]|0,d)|0;c[46712]=d;d=d+e|0}if(f<<24>>24<=-1){a[d>>0]=92;c[h>>2]=f&255;m4(d+1|0,81224,h)|0;b=g;d=d+4|0;e=e+4|0;continue}if(f<<24>>24==92){a[d>>0]=92;e=e+1|0;d=d+1|0}a[d>>0]=f;b=g;d=d+1|0;e=e+1|0}a[d>>0]=0;l=i;return c[46712]|0}function ad(b){b=b|0;var d=0,e=0,f=0;e=c[b+16>>2]|0;switch(c[b+64>>2]|0){case 0:{oF(b,68220)|0;d=e+208|0;e=c[d>>2]|0;if(e|0?a[e>>0]|0:0){oF(b,68234)|0;oF(b,FK(c[d>>2]|0)|0)|0;oF(b,153599)|0}break}case 1:{d=e+208|0;f=c[d>>2]|0;if(f|0?a[f>>0]|0:0){oF(b,68234)|0;oF(b,FK(c[d>>2]|0)|0)|0;oF(b,102604)|0;oF(b,FK(KB(c[e+8>>2]|0)|0)|0)|0;oF(b,153599)|0}break}case 3:{f=FK(KB(c[e+8>>2]|0)|0)|0;oF(b,68243)|0;oF(b,f)|0;oF(b,68253)|0;oF(b,f)|0;oF(b,68208)|0;break}default:{}}return}function bd(a){a=a|0;var b=0;b=c[a+16>>2]|0;switch(c[a+64>>2]|0){case 2:{dd(a,c[b+264>>2]|0,c[b+272>>2]|0,c[b+268>>2]|0,c[b+208>>2]|0,c[b+228>>2]|0,c[b+244>>2]|0,c[b+212>>2]|0);break}case 3:{dd(a,c[b+264>>2]|0,c[b+272>>2]|0,c[b+268>>2]|0,c[b+208>>2]|0,c[b+228>>2]|0,c[b+244>>2]|0,c[b+212>>2]|0);oF(a,68212)|0;break}default:{}}return}function cd(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0;g=c[a+16>>2]|0;dd(a,c[g+264>>2]|0,c[g+272>>2]|0,c[g+268>>2]|0,b,d,e,f);return}function dd(b,d,e,f,g,i,j,k){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;i=i|0;j=j|0;k=k|0;var m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0.0;y=l;l=l+128|0;x=y+120|0;u=y+112|0;t=y+96|0;s=y+80|0;r=y+56|0;w=y+48|0;q=y+40|0;v=y+24|0;p=y;a:do if((e|0)!=0&(f|0)!=0){m=f+10|0;if((c[46714]|0)<(f|0)){c[46714]=m;o=W1(c[46715]|0,m<<3)|0;c[46715]=o}else o=c[46715]|0;m=0;while(1){if((m|0)>=(f|0))break;z=+h[e+(m<<4)>>3];c[o+(m<<3)>>2]=~~(z+(z>=0.0?.5:-.5));z=+h[e+(m<<4)+8>>3];c[o+(m<<3)+4>>2]=~~(z+(z>=0.0?.5:-.5));m=m+1|0}n=b+64|0;m=c[n>>2]|0;e=(g|0)!=0;if(e&(m|0)==0){if(!(a[g>>0]|0))break;switch(d|0){case 0:{v=c[o>>2]|0;w=c[o+12>>2]|0;x=c[o+8>>2]|0;f=c[o+4>>2]|0;c[p>>2]=g;c[p+4>>2]=v;c[p+8>>2]=w;c[p+12>>2]=x;c[p+16>>2]=f;uF(b,67954,p);break a}case 1:{w=c[o>>2]|0;x=c[o+4>>2]|0;f=(c[o+8>>2]|0)-w|0;c[v>>2]=g;c[v+4>>2]=w;c[v+8>>2]=x;c[v+12>>2]=f;uF(b,67975,v);break a}case 2:{c[q>>2]=g;uF(b,67995,q);m=0;while(1){if((m|0)>=(f|0))break;v=c[46715]|0;x=c[v+(m<<3)+4>>2]|0;c[w>>2]=c[v+(m<<3)>>2];c[w+4>>2]=x;uF(b,68003,w);m=m+1|0}oF(b,153599)|0;break a}default:qa(138394,68010,63,68030)}}if(e&(m|0)==1){if(!(a[g>>0]|0))break;if(!d){w=c[o+12>>2]|0;x=c[o+8>>2]|0;f=c[o+4>>2]|0;c[r>>2]=c[o>>2];c[r+4>>2]=w;c[r+8>>2]=x;c[r+12>>2]=f;c[r+16>>2]=g;c[r+20>>2]=i;uF(b,68047,r);break}else qa(138394,68010,75,68030)}if((m&-2|0)==2){switch(d|0){case 1:{oF(b,68080)|0;break}case 0:{oF(b,68101)|0;break}case 2:{oF(b,68120)|0;break}default:qa(138394,68010,91,68030)}if(k|0?a[k>>0]|0:0){oF(b,73600)|0;oF(b,IK(k)|0)|0;oF(b,98744)|0}if(e?a[g>>0]|0:0){oF(b,68139)|0;oF(b,IK(g)|0)|0;oF(b,98744)|0}if(j|0?a[j>>0]|0:0){oF(b,74559)|0;oF(b,FK(j)|0)|0;oF(b,98744)|0}if(i|0?a[i>>0]|0:0){oF(b,68147)|0;oF(b,FK(i)|0)|0;oF(b,98744)|0}oF(b,68156)|0;oF(b,68164)|0;b:do switch(d|0){case 1:{f=c[46715]|0;w=c[f>>2]|0;x=c[f+4>>2]|0;f=(c[f+8>>2]|0)-w|0;c[s>>2]=w;c[s+4>>2]=x;c[s+8>>2]=f;uF(b,68174,s);break}case 0:{v=c[46715]|0;w=c[v+12>>2]|0;x=c[v+8>>2]|0;f=c[v+4>>2]|0;c[t>>2]=c[v>>2];c[t+4>>2]=w;c[t+8>>2]=x;c[t+12>>2]=f;uF(b,68183,t);break}case 2:{w=c[46715]|0;m=c[w+4>>2]|0;c[u>>2]=c[w>>2];c[u+4>>2]=m;uF(b,68195,u);m=1;while(1){if((m|0)>=(f|0))break b;v=c[46715]|0;w=c[v+(m<<3)+4>>2]|0;c[x>>2]=c[v+(m<<3)>>2];c[x+4>>2]=w;uF(b,68201,x);m=m+1|0}}default:{}}while(0);if((c[n>>2]|0)==3){oF(b,73424)|0;break}else{oF(b,68208)|0;break}}}while(0);l=y;return}function ed(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;b=l;l=l+32|0;d=b+24|0;e=b+16|0;g=b;f=c[a+16>>2]|0;oF(a,68623)|0;j=c[c[a+12>>2]>>2]|0;i=c[j+4>>2]|0;h=c[j+8>>2]|0;c[g>>2]=c[j>>2];c[g+4>>2]=i;c[g+8>>2]=h;uF(a,68633,g);c[e>>2]=KB(c[f+8>>2]|0)|0;uF(a,68668,e);c[d>>2]=O(c[a+168>>2]|0,c[a+164>>2]|0)|0;uF(a,68681,d);oF(a,68694)|0;oF(a,68704)|0;oF(a,68712)|0;oF(a,68720)|0;oF(a,68728)|0;oF(a,68736)|0;oF(a,68744)|0;oF(a,68748)|0;oF(a,68753)|0;l=b;return}function fd(a){a=a|0;oF(a,68604)|0;return}function gd(a){a=a|0;c[46716]=2;return}function hd(a){a=a|0;c[46716]=1;return}function id(a){a=a|0;c[46716]=2;return}function jd(a){a=a|0;c[46716]=0;return}function kd(a){a=a|0;c[46716]=2;return}function ld(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0.0,i=0.0,j=0,k=0,m=0,n=0,o=0.0,p=0.0,q=0;n=l;l=l+80|0;m=n;j=c[(c[b+16>>2]|0)+16>>2]|0;k=c[46716]|0;f=c[e+4>>2]|0;g=+h[b+352>>3]*+h[f+16>>3];i=c[b+360>>2]|0?1.5707963267948966:0.0;f=c[f+8>>2]|0;if(!f)f=-1;else f=c[f+20>>2]|0;q=a[e+48>>0]|0;p=+h[d>>3];o=+h[d+8>>3];e=vd(c[e>>2]|0)|0;c[m>>2]=4;c[m+4>>2]=q<<24>>24==108?0:q<<24>>24==114?2:1;c[m+8>>2]=j;c[m+12>>2]=k;c[m+16>>2]=0;c[m+20>>2]=f;h[m+24>>3]=g;h[m+32>>3]=i;c[m+40>>2]=4;h[m+48>>3]=0.0;h[m+56>>3]=0.0;c[m+64>>2]=~~(p+(p>=0.0?.5:-.5));c[m+68>>2]=~~(o+(o>=0.0?.5:-.5));c[m+72>>2]=e;uF(b,68549,m);l=n;return}function md(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;n=l;l=l+32|0;j=n;i=n+20|0;m=e+32|0;a:do switch(c[m>>2]|0){case 5:{f=0;while(1){g=c[12724+(f<<2)>>2]|0;if((f|0)==8)break a;h=c[e>>2]|0;if((a[g>>0]|0)==(a[h>>0]|0)?(s2(g,h)|0)==0:0){k=10;break a}f=f+1|0}}case 1:{g=e+1|0;h=e+2|0;f=(ud(i,d[e>>0]|0,d[g>>0]|0,d[h>>0]|0)|0)+32|0;if(!(c[i>>2]|0))k=10;else{o=d[e>>0]|0;i=d[g>>0]|0;k=d[h>>0]|0;c[j>>2]=0;c[j+4>>2]=f;c[j+8>>2]=o;c[j+12>>2]=i;c[j+16>>2]=k;uF(b,68492,j);k=10}break}case 0:{f=0;k=10;break}default:qa(138394,68513,168,68532)}while(0);if((k|0)==10)c[e>>2]=f;c[m>>2]=6;l=n;return}function nd(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0.0,i=0.0,j=0,k=0,m=0.0,n=0.0,o=0.0,p=0,q=0,r=0,s=0,t=0,u=0;e=l;l=l+112|0;f=e+8|0;u=e+104|0;t=e;k=c[a+16>>2]|0;s=~~+h[k+152>>3];r=c[k+16>>2]|0;q=c[k+56>>2]|0;p=c[46716]|0;sd(k,u,t);n=+h[b>>3];k=~~(n+(n>=0.0?.5:-.5));m=+h[b+8>>3];j=~~(m+(m>=0.0?.5:-.5));i=+h[b+16>>3];n=i-n;g=+h[b+24>>3];m=g-m;b=c[u>>2]|0;o=+h[t>>3];c[f>>2]=1;c[f+4>>2]=1;c[f+8>>2]=b;c[f+12>>2]=s;c[f+16>>2]=r;c[f+20>>2]=q;c[f+24>>2]=p;c[f+28>>2]=0;c[f+32>>2]=d|0?20:-1;h[f+40>>3]=o;c[f+48>>2]=0;h[f+56>>3]=0.0;c[f+64>>2]=k;c[f+68>>2]=j;c[f+72>>2]=~~(n+(n>=0.0?.5:-.5));c[f+76>>2]=~~(m+(m>=0.0?.5:-.5));c[f+80>>2]=k;c[f+84>>2]=j;c[f+88>>2]=~~(i+(i>=0.0?.5:-.5));c[f+92>>2]=~~(g+(g>=0.0?.5:-.5));uF(a,68427,f);l=e;return}function od(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0.0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;f=l;l=l+96|0;g=f+8|0;o=f+80|0;p=f;q=c[a+16>>2]|0;n=~~+h[q+152>>3];m=c[q+16>>2]|0;k=c[q+56>>2]|0;j=c[46716]|0;sd(q,o,p);o=c[o>>2]|0;i=+h[p>>3];c[g>>2]=2;c[g+4>>2]=3;c[g+8>>2]=o;c[g+12>>2]=n;c[g+16>>2]=m;c[g+20>>2]=k;c[g+24>>2]=j;c[g+28>>2]=0;c[g+32>>2]=e|0?20:-1;h[g+40>>3]=i;c[g+48>>2]=0;c[g+52>>2]=0;c[g+56>>2]=0;c[g+60>>2]=0;c[g+64>>2]=0;c[g+68>>2]=d+1;uF(a,68331,g);td(a,b,d,1);l=f;return}function pd(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0.0,E=0.0,F=0;C=l;l=l+192|0;B=C+176|0;z=C+168|0;A=C+104|0;y=C+96|0;f=C+88|0;u=C+180|0;v=C+80|0;w=C+16|0;x=C;e=a+16|0;p=c[e>>2]|0;q=~~+h[p+152>>3];r=c[p+16>>2]|0;s=c[46716]|0;t=T1((d*140|0)+140|0)|0;sd(p,u,v);if(!g){o=4;j=0;k=-1}else{o=5;j=c[(c[e>>2]|0)+56>>2]|0;k=20}E=+h[b>>3];n=w+48|0;h[n>>3]=E;D=+h[b+8>>3];h[w+56>>3]=D;c[f>>2]=~~(E+(E>=0.0?.5:-.5));c[f+4>>2]=~~(D+(D>=0.0?.5:-.5));m=x+8|0;e=t+(m4(t,81099,f)|0)|0;p=1;g=0;while(1){i=g+3|0;if((i|0)>=(d|0))break;c[w>>2]=c[n>>2];c[w+4>>2]=c[n+4>>2];c[w+8>>2]=c[n+8>>2];c[w+12>>2]=c[n+12>>2];f=1;while(1){if((f|0)==4){f=1;break}F=f+g|0;h[w+(f<<4)>>3]=+h[b+(F<<4)>>3];h[w+(f<<4)+8>>3]=+h[b+(F<<4)+8>>3];f=f+1|0}while(1){if((f|0)==7)break;kP(x,w,3,+(f|0)*.16666666666666666,0,0);D=+h[x>>3];E=+h[m>>3];c[y>>2]=~~(D+(D>=0.0?.5:-.5));c[y+4>>2]=~~(E+(E>=0.0?.5:-.5));f=f+1|0;e=e+(m4(e,81099,y)|0)|0}p=p+6|0;g=i}f=c[u>>2]|0;E=+h[v>>3];c[A>>2]=3;c[A+4>>2]=o;c[A+8>>2]=f;c[A+12>>2]=q;c[A+16>>2]=r;c[A+20>>2]=j;c[A+24>>2]=s;c[A+28>>2]=0;c[A+32>>2]=k;h[A+40>>3]=E;c[A+48>>2]=0;c[A+52>>2]=0;c[A+56>>2]=0;c[A+60>>2]=p;uF(a,68382,A);c[z>>2]=t;uF(a,81106,z);U1(t);f=p+-1|0;e=0;while(1){if((e|0)>=(p|0))break;c[B>>2]=((e|0)%(f|0)|0|0)!=0&1;uF(a,81111,B);e=e+1|0}oF(a,153599)|0;l=C;return}function qd(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0.0,i=0,j=0,k=0,m=0,n=0,o=0;e=l;l=l+96|0;f=e+8|0;m=e+80|0;n=e;o=c[a+16>>2]|0;k=~~+h[o+152>>3];j=c[o+16>>2]|0;i=c[46716]|0;sd(o,m,n);m=c[m>>2]|0;g=+h[n>>3];c[f>>2]=2;c[f+4>>2]=1;c[f+8>>2]=m;c[f+12>>2]=k;c[f+16>>2]=j;c[f+20>>2]=0;c[f+24>>2]=i;c[f+28>>2]=0;c[f+32>>2]=0;h[f+40>>3]=g;c[f+48>>2]=0;c[f+52>>2]=0;c[f+56>>2]=0;c[f+60>>2]=0;c[f+64>>2]=0;c[f+68>>2]=d;uF(a,68331,f);td(a,b,d,0);l=e;return}function rd(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;uF(a,68325,e);l=d;return}function sd(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0;switch(c[a+144>>2]|0){case 1:{e=10.0;a=1;break}case 2:{e=10.0;a=2;break}default:{e=0.0;a=0}}c[b>>2]=a;h[d>>3]=e;return}function td(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0,k=0.0,m=0.0;j=l;l=l+16|0;i=j+8|0;g=j;f=0;while(1){if((f|0)>=(d|0))break;m=+h[b+(f<<4)>>3];k=+h[b+(f<<4)+8>>3];c[g>>2]=~~(m+(m>=0.0?.5:-.5));c[g+4>>2]=~~(k+(k>=0.0?.5:-.5));uF(a,81099,g);f=f+1|0}if(e|0){k=+h[b>>3];m=+h[b+8>>3];c[i>>2]=~~(k+(k>=0.0?.5:-.5));c[i+4>>2]=~~(m+(m>=0.0?.5:-.5));uF(a,81099,i)}oF(a,153599)|0;l=j;return}function ud(a,d,e,f){a=a|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;c[a>>2]=0;k=c[46717]|0;h=195075;g=0;i=-1;while(1){if((g|0)>=(k|0)){l=6;break}m=(b[192216+(g<<1)>>1]|0)-d|0;n=(b[192728+(g<<1)>>1]|0)-e|0;j=(b[193240+(g<<1)>>1]|0)-f|0;j=(O(n,n)|0)+(O(m,m)|0)+(O(j,j)|0)|0;if((j|0)<(h|0))if(!j)break;else{h=j;i=g}g=g+1|0}if((l|0)==6){c[46717]=k+1;if((k|0)==256)g=i;else{b[192216+(g<<1)>>1]=d;b[192728+(g<<1)>>1]=e;b[193240+(g<<1)>>1]=f;c[a>>2]=1}}return g|0}function vd(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=l;l=l+16|0;h=i;d=c[46718]|0;if(!d){c[46719]=64;d=T1(64)|0;c[46718]=d;e=0}else e=0;while(1){g=b+1|0;f=a[b>>0]|0;if(!(f<<24>>24))break;b=c[46719]|0;if((e|0)>(b+-8|0)){d=b<<1;c[46719]=d;d=W1(c[46718]|0,d)|0;c[46718]=d;d=d+e|0}if(f<<24>>24<=-1){a[d>>0]=92;c[h>>2]=f&255;m4(d+1|0,81224,h)|0;b=g;d=d+4|0;e=e+4|0;continue}if(f<<24>>24==92){a[d>>0]=92;e=e+1|0;d=d+1|0}a[d>>0]=f;b=g;d=d+1|0;e=e+1|0}a[d>>0]=0;l=i;return c[46718]|0}function wd(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;d=l;l=l+16|0;b=d;oF(a,73332)|0;if((c[a+64>>2]|0)==2)oF(a,73347)|0;else oF(a,153599)|0;g=c[c[a+12>>2]>>2]|0;f=c[g+4>>2]|0;e=c[g+8>>2]|0;c[b>>2]=c[g>>2];c[b+4>>2]=f;c[b+8>>2]=e;uF(a,73358,b);l=d;return}function xd(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;g=l;l=l+32|0;f=g+8|0;e=g;oF(a,73286)|0;d=a+64|0;b=a+12|0;if((c[d>>2]|0)!=2){c[e>>2]=c[(c[b>>2]|0)+28>>2];uF(a,73297,e)}if((c[(c[b>>2]|0)+20>>2]|0)==0?(c[d>>2]|0)!=2:0){b=c[a+476>>2]|0;d=c[a+480>>2]|0;e=c[a+484>>2]|0;c[f>>2]=c[a+472>>2];c[f+4>>2]=b;c[f+8>>2]=d;c[f+12>>2]=e;uF(a,69666,f)}oF(a,73312)|0;oF(a,73325)|0;l=g;return}function yd(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;k=l;l=l+32|0;j=k+24|0;f=k+8|0;i=k;g=c[b+16>>2]|0;a[193768]=0;e=b+12|0;h=g+8|0;if(!(c[(c[e>>2]|0)+28>>2]|0)){c[i>>2]=KB(c[h>>2]|0)|0;uF(b,69597,i);d=b+64|0;if((c[d>>2]|0)==2)oF(b,69630)|0;else oF(b,69612)|0;do if(!(c[(c[e>>2]|0)+20>>2]|0))if((c[d>>2]|0)==2){n=c[b+460>>2]|0;m=c[b+464>>2]|0;d=c[b+468>>2]|0;c[f>>2]=c[b+456>>2];c[f+4>>2]=n;c[f+8>>2]=m;c[f+12>>2]=d;uF(b,69666,f);break}else{oF(b,69642)|0;break}while(0);oF(b,69696)|0;yM(b,c[(c[e>>2]|0)+24>>2]|0,13e3);AM(b);d=c[(c[e>>2]|0)+20>>2]|0;if(d|0){c[i>>2]=c[d>>2];c[i+4>>2]=0;yM(b,0,i)}}c[46720]=(a[(c[(c[h>>2]|0)+16>>2]|0)+115>>0]|0)==1?1:-1;if(!(a[193768]|0)){oF(b,69716)|0;a[193768]=1}d=c[g+208>>2]|0;if(d|0){c[j>>2]=BM(d,c[46720]|0)|0;uF(b,69729,j)}l=k;return}function zd(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0;b=l;l=l+16|0;f=b;c[f>>2]=d;c[f+4>>2]=e;uF(a,69581,f);l=b;return}function Ad(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0.0,v=0.0,w=0.0;s=l;l=l+144|0;r=s+128|0;q=s+112|0;p=s+72|0;o=s+56|0;n=s+40|0;m=s+32|0;e=s+24|0;b=s+8|0;d=s;f=c[a+456>>2]|0;j=c[a+460>>2]|0;g=c[a+464>>2]|0;i=c[a+468>>2]|0;k=a+12|0;t=(c[(c[k>>2]|0)+28>>2]|0)+1|0;c[d>>2]=t;c[d+4>>2]=t;uF(a,69208,d);if(!(c[(c[k>>2]|0)+20>>2]|0)){c[b>>2]=f;c[b+4>>2]=j;c[b+8>>2]=g;c[b+12>>2]=i;uF(a,69225,b)}d=a+360|0;c[e>>2]=c[d>>2]|0?69259:69269;uF(a,69278,e);b=a+64|0;if((c[b>>2]|0)==1){c[m>>2]=g;c[m+4>>2]=i;uF(a,69303,m)}m=c[a+200>>2]|0;t=c[a+204>>2]|0;c[n>>2]=c[a+196>>2];c[n+4>>2]=m;c[n+8>>2]=t;uF(a,69342,n);if(!(c[(c[k>>2]|0)+20>>2]|0)){c[o>>2]=f;c[o+4>>2]=j;c[o+8>>2]=g-f;c[o+12>>2]=i-j;uF(a,69362,o)}w=+h[a+496>>3];t=c[d>>2]|0;v=+h[a+504>>3];u=+h[a+512>>3];h[p>>3]=+h[a+488>>3];h[p+8>>3]=w;c[p+16>>2]=t;h[p+24>>3]=v;h[p+32>>3]=u;uF(a,69402,p);if((c[b>>2]|0)==1){if((g|0)>14399|(i|0)>14399){t=c[(c[k>>2]|0)+16>>2]|0;c[q>>2]=g;c[q+4>>2]=i;c[q+8>>2]=14400;ub[t&63](69445,q)}c[r>>2]=f;c[r+4>>2]=j;c[r+8>>2]=g;c[r+12>>2]=i;uF(a,69540,r)}l=s;return}function Bd(a){a=a|0;var b=0,d=0,e=0;e=l;l=l+16|0;d=e;b=a+12|0;if(c[(c[b>>2]|0)+20>>2]|0){oF(a,69132)|0;yM(a,0,(c[(c[b>>2]|0)+20>>2]|0)+4|0)}oF(a,69149)|0;oF(a,69176)|0;c[d>>2]=c[(c[b>>2]|0)+28>>2];uF(a,69191,d);l=e;return}function Cd(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=KB(c[(c[a+16>>2]|0)+8>>2]|0)|0;uF(a,69125,d);oF(a,69118)|0;l=b;return}function Dd(a){a=a|0;oF(a,84552)|0;return}function Ed(a){a=a|0;oF(a,69118)|0;return}function Fd(a){a=a|0;oF(a,84552)|0;return}function Gd(a){a=a|0;oF(a,69118)|0;return}function Hd(a){a=a|0;oF(a,84552)|0;return}function Id(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0;e=l;l=l+16|0;d=e;if(b|0?(g=(c[a+16>>2]|0)+272|0,c[g>>2]|0):0){oF(a,69014)|0;yF(a,c[g>>2]|0,2);oF(a,69025)|0;c[d>>2]=BM(b,c[46720]|0)|0;uF(a,69029,d)}l=e;return}function Jd(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0.0,i=0,j=0,k=0,m=0,n=0;m=l;l=l+32|0;j=m+8|0;k=m;f=c[b+16>>2]|0;if(!(+h[f+40>>3]<.5)){Qd(b,f+16|0);i=e+4|0;vF(b,+h[(c[i>>2]|0)+16>>3]);c[j>>2]=c[c[i>>2]>>2];uF(b,68973,j);i=BM(c[e>>2]|0,c[46720]|0)|0;switch(a[e+48>>0]|0){case 114:{n=e+32|0;f=n;g=+h[n>>3];break}case 108:{f=e+32|0;g=0.0;break}default:{n=e+32|0;f=n;g=+h[n>>3]*.5}}h[d>>3]=+h[d>>3]-g;n=d+8|0;h[n>>3]=+h[n>>3]+ +h[e+24>>3];c[j>>2]=c[d>>2];c[j+4>>2]=c[d+4>>2];c[j+8>>2]=c[d+8>>2];c[j+12>>2]=c[d+12>>2];xF(b,j);oF(b,68988)|0;vF(b,+h[f>>3]);c[k>>2]=i;uF(b,68997,k)}l=m;return}function Kd(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;g=l;l=l+32|0;f=g;c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];h[f+16>>3]=+h[b+16>>3]-+h[b>>3];h[f+24>>3]=+h[b+24>>3]-+h[b+8>>3];b=a+16|0;if(d|0?(e=c[b>>2]|0,+h[e+80>>3]>.5):0){Qd(a,e+56|0);yF(a,f,2);oF(a,68931)|0}if(+h[(c[b>>2]|0)+40>>3]>.5){Rd(a);Qd(a,(c[b>>2]|0)+16|0);yF(a,f,2);oF(a,68951)|0}l=g;return}function Ld(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0;j=l;l=l+16|0;i=j;g=a+16|0;if(e|0?(f=c[g>>2]|0,+h[f+80>>3]>.5):0){Qd(a,f+56|0);oF(a,68852)|0;c[i>>2]=c[b>>2];c[i+4>>2]=c[b+4>>2];c[i+8>>2]=c[b+8>>2];c[i+12>>2]=c[b+12>>2];xF(a,i);oF(a,68861)|0;e=1;while(1){if((e|0)>=(d|0))break;f=b+(e<<4)|0;c[i>>2]=c[f>>2];c[i+4>>2]=c[f+4>>2];c[i+8>>2]=c[f+8>>2];c[i+12>>2]=c[f+12>>2];xF(a,i);oF(a,68870)|0;e=e+1|0}oF(a,68897)|0}if(+h[(c[g>>2]|0)+40>>3]>.5){Rd(a);Qd(a,(c[g>>2]|0)+16|0);oF(a,68852)|0;c[i>>2]=c[b>>2];c[i+4>>2]=c[b+4>>2];c[i+8>>2]=c[b+8>>2];c[i+12>>2]=c[b+12>>2];xF(a,i);oF(a,68861)|0;e=1;while(1){if((e|0)>=(d|0))break;g=b+(e<<4)|0;c[i>>2]=c[g>>2];c[i+4>>2]=c[g+4>>2];c[i+8>>2]=c[g+8>>2];c[i+12>>2]=c[g+12>>2];xF(a,i);oF(a,68870)|0;e=e+1|0}oF(a,68913)|0}l=j;return}function Md(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var i=0,j=0,k=0;k=l;l=l+16|0;f=k;i=a+16|0;if(g|0?(j=c[i>>2]|0,+h[j+80>>3]>.5):0){Qd(a,j+56|0);oF(a,68852)|0;c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];xF(a,f);oF(a,68861)|0;e=1;while(1){if((e|0)>=(d|0))break;yF(a,b+(e<<4)|0,3);oF(a,68887)|0;e=e+3|0}oF(a,68897)|0}if(+h[(c[i>>2]|0)+40>>3]>.5){Rd(a);Qd(a,(c[i>>2]|0)+16|0);oF(a,68852)|0;c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];xF(a,f);oF(a,68861)|0;e=1;while(1){if((e|0)>=(d|0))break;yF(a,b+(e<<4)|0,3);oF(a,68887)|0;e=e+3|0}oF(a,68879)|0}l=k;return}function Nd(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,i=0;g=l;l=l+16|0;f=g;e=a+16|0;if(+h[(c[e>>2]|0)+40>>3]>.5){Rd(a);Qd(a,(c[e>>2]|0)+16|0);oF(a,68852)|0;c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];xF(a,f);oF(a,68861)|0;e=1;while(1){if((e|0)>=(d|0))break;i=b+(e<<4)|0;c[f>>2]=c[i>>2];c[f+4>>2]=c[i+4>>2];c[f+8>>2]=c[i+8>>2];c[f+12>>2]=c[i+12>>2];xF(a,f);oF(a,68870)|0;e=e+1|0}oF(a,68879)|0}l=g;return}function Od(a,b){a=a|0;b=b|0;oF(a,68849)|0;oF(a,b)|0;oF(a,153599)|0;return}function Pd(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+32|0;g=n+16|0;m=n+8|0;k=n;i=a+16|0;if(f|0?(j=c[i>>2]|0,+h[j+80>>3]>.5):0){Qd(a,j+56|0);oF(a,84447)|0;yF(a,d,e);oF(a,102604)|0;c[g>>2]=c[d>>2];c[g+4>>2]=c[d+4>>2];c[g+8>>2]=c[d+8>>2];c[g+12>>2]=c[d+12>>2];xF(a,g);c[k>>2]=e;c[k+4>>2]=b;uF(a,68766,k)}if(+h[(c[i>>2]|0)+40>>3]>.5){Rd(a);Qd(a,(c[i>>2]|0)+16|0);oF(a,84447)|0;yF(a,d,e);oF(a,102604)|0;c[g>>2]=c[d>>2];c[g+4>>2]=c[d+4>>2];c[g+8>>2]=c[d+8>>2];c[g+12>>2]=c[d+12>>2];xF(a,g);c[m>>2]=e;c[m+4>>2]=b;uF(a,68782,m)}l=n;return}function Qd(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0.0,i=0.0;f=l;l=l+32|0;e=f;if(b|0){switch(c[(c[a+16>>2]|0)+4>>2]|0){case 1:case 0:{d=111494;break}case 2:{d=111481;break}case 3:{d=111450;break}default:d=68818}i=+h[b+8>>3];g=+h[b+16>>3];h[e>>3]=+h[b>>3];h[e+8>>3]=i;h[e+16>>3]=g;c[e+24>>2]=d;uF(a,68825,e)}l=f;return}function Rd(b){b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0,k=0,m=0;m=l;l=l+16|0;k=m+8|0;j=m;g=b+16|0;i=c[g>>2]|0;d=c[i+160>>2]|0;vF(b,+h[i+152>>3]);oF(b,68799)|0;while(1){if(!d)break;i=d+4|0;f=c[d>>2]|0;if(!f)break;if(!(s2(f,111088)|0)){d=i;continue}else e=f;while(1){d=e+1|0;if(!(a[e>>0]|0))break;else e=d}a:while(1){if(!(a[d>>0]|0))break;c[j>>2]=d;uF(b,68814,j);while(1){e=d+1|0;if(!(a[d>>0]|0)){d=e;continue a}else d=e}}if(!(s2(f,134335)|0))h[(c[g>>2]|0)+152>>3]=0.0;c[k>>2]=f;uF(b,96670,k);d=i}l=m;return}function Sd(b){b=b|0;var d=0;oF(b,74838)|0;d=QA(c[(c[b>>2]|0)+168>>2]|0,74894)|0;if(d|0?a[d>>0]|0:0){oF(b,74905)|0;oF(b,d)|0;oF(b,74929)|0}oF(b,74950)|0;oF(b,74998)|0;oF(b,75052)|0;d=b+12|0;oF(b,FK(c[c[c[d>>2]>>2]>>2]|0)|0)|0;oF(b,78181)|0;oF(b,FK(c[(c[c[d>>2]>>2]|0)+4>>2]|0)|0)|0;oF(b,78191)|0;oF(b,FK(c[(c[c[d>>2]>>2]|0)+8>>2]|0)|0)|0;oF(b,75434)|0;oF(b,75458)|0;return}function Td(b){b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0.0,k=0.0,m=0.0;i=l;l=l+48|0;g=i+16|0;f=i+8|0;e=i;d=c[b+16>>2]|0;oF(b,74673)|0;d=d+8|0;if(a[(KB(c[d>>2]|0)|0)>>0]|0){oF(b,75397)|0;oF(b,FK(KB(c[d>>2]|0)|0)|0)|0}c[e>>2]=O(c[b+168>>2]|0,c[b+164>>2]|0)|0;uF(b,74678,e);e=c[b+452>>2]|0;c[f>>2]=c[b+448>>2];c[f+4>>2]=e;uF(b,74694,f);m=+h[b+392>>3];k=+h[b+400>>3];j=+h[b+408>>3];h[g>>3]=+h[b+384>>3];h[g+8>>3]=m;h[g+16>>3]=k;h[g+24>>3]=j;uF(b,74727,g);oF(b,74758)|0;oF(b,74794)|0;oF(b,76388)|0;l=i;return}function Ud(a){a=a|0;oF(a,74665)|0;return}function Vd(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;qe(a,b,0,101510,c[(c[a+16>>2]|0)+8>>2]|0);oF(a,76388)|0;return}function Wd(a){a=a|0;oF(a,74513)|0;return}function Xd(b){b=b|0;var d=0,e=0,f=0,g=0;e=l;l=l+16|0;f=e;g=c[b+16>>2]|0;d=g+8|0;qe(b,c[g+212>>2]|0,0,111494,c[d>>2]|0);oF(b,74617)|0;vF(b,+h[b+488>>3]);oF(b,102604)|0;vF(b,+h[b+496>>3]);c[f>>2]=0-(c[b+360>>2]|0);uF(b,74636,f);vF(b,+h[b+504>>3]);oF(b,102604)|0;vF(b,-+h[b+512>>3]);oF(b,74660)|0;if(a[(KB(c[d>>2]|0)|0)>>0]|0){oF(b,74569)|0;oF(b,FK(KB(c[d>>2]|0)|0)|0)|0;oF(b,74577)|0}l=e;return}function Yd(a){a=a|0;oF(a,74513)|0;return}function Zd(a){a=a|0;var b=0,d=0;d=c[a+16>>2]|0;b=d+8|0;qe(a,c[d+212>>2]|0,0,108006,c[b>>2]|0);oF(a,76388)|0;oF(a,74569)|0;oF(a,FK(KB(c[b>>2]|0)|0)|0)|0;oF(a,74577)|0;return}function _d(a){a=a|0;oF(a,74513)|0;return}function $d(a){a=a|0;var b=0,d=0,e=0;d=c[a+16>>2]|0;b=c[a+160>>2]|0;if((b|0)>1)b=c[(c[(c[a>>2]|0)+308>>2]|0)+(b<<2)>>2]|0;else b=0;e=d+8|0;qe(a,c[d+212>>2]|0,b,111481,c[e>>2]|0);oF(a,76388)|0;oF(a,74569)|0;oF(a,FK(KB(c[e>>2]|0)|0)|0)|0;oF(a,74577)|0;return}function ae(a){a=a|0;oF(a,74513)|0;return}function be(a){a=a|0;var b=0,d=0;d=c[a+16>>2]|0;b=d+8|0;qe(a,c[d+212>>2]|0,0,111450,c[b>>2]|0);oF(a,76388)|0;oF(a,74569)|0;b=EK(102095,c[b>>2]|0)|0;oF(a,FK(b)|0)|0;U1(b);oF(a,74577)|0;return}function ce(a){a=a|0;oF(a,74513)|0;return}function de(b,c,d,e,f){b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;oF(b,74519)|0;if(f|0){oF(b,74522)|0;oF(b,FK(f)|0)|0;oF(b,98744)|0}oF(b,74412)|0;oF(b,76349)|0;if(c|0?a[c>>0]|0:0){oF(b,74530)|0;oF(b,c)|0;oF(b,98744)|0}if(d|0?a[d>>0]|0:0){oF(b,74544)|0;oF(b,GK(d,1)|0)|0;oF(b,98744)|0}if(e|0?a[e>>0]|0:0){oF(b,74559)|0;oF(b,FK(e)|0)|0;oF(b,98744)|0}oF(b,76388)|0;return}function ee(a){a=a|0;oF(a,76343)|0;oF(a,74513)|0;return}function fe(e,f,g){e=e|0;f=f|0;g=g|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0.0,H=0,I=0,J=0,K=0,L=0,M=0;M=l;l=l+176|0;L=M+160|0;K=M+152|0;F=M+136|0;J=M+128|0;E=M+120|0;D=M+112|0;C=M+104|0;B=M+96|0;A=M+88|0;y=M+80|0;w=M+72|0;v=M+64|0;u=M+56|0;t=M+48|0;i=M+40|0;q=M+32|0;s=M+24|0;r=M+16|0;p=M+8|0;o=M;I=c[e+16>>2]|0;oF(e,74044)|0;switch(a[g+48>>0]|0){case 108:{oF(e,74050)|0;break}case 114:{oF(e,74071)|0;break}default:oF(e,74090)|0}H=f+8|0;G=+h[H>>3]+ +h[g+24>>3];h[H>>3]=G;H=I+260|0;if(!(b[H>>1]&512)){oF(e,74112)|0;vF(e,+h[f>>3]);oF(e,74117)|0;vF(e,-G);oF(e,98744)|0}x=g+4|0;f=c[x>>2]|0;n=c[f+8>>2]|0;if(n){switch(c[(c[(c[(c[e>>2]|0)+168>>2]|0)+16>>2]|0)+244>>2]|0){case 1:{m=n;f=n+16|0;i=n+8|0;break}case 2:{m=n+24|0;f=n+32|0;i=n+28|0;break}default:{m=n+4|0;f=n+16|0;i=n+8|0}}j=c[f>>2]|0;f=c[i>>2]|0;k=c[n+12>>2]|0;c[o>>2]=c[m>>2];uF(e,74123,o);i=c[n+24>>2]|0;if(i|0){c[p>>2]=i;uF(e,74140,p)}oF(e,98744)|0;if(f|0){c[r>>2]=f;uF(e,74144,r)}if(k|0){c[s>>2]=k;uF(e,74162,s)}if(!j)j=0;else{c[q>>2]=j;uF(e,74181,q)}}else{c[i>>2]=c[f>>2];uF(e,74198,i);j=0;f=0}i=c[x>>2]|0;if(i|0?(z=c[i+24>>2]|0,z&127|0):0){if(!((f|0)!=0|(z&1|0)==0))uF(e,74216,t);if(!((j|0)!=0|(z&2|0)==0))uF(e,74236,u);if(z&100|0){uF(e,74257,v);if(!(z&4))f=0;else{uF(e,105986,w);f=1}if(z&64){c[y>>2]=f|0?100999:195059;uF(e,74276,y);f=1}if(z&32|0){c[A>>2]=f|0?100999:195059;uF(e,74287,A)}uF(e,98744,B)}if(z&8|0)uF(e,74302,C);if(z&16|0)uF(e,74326,D)}h[E>>3]=+h[(c[x>>2]|0)+16>>3];uF(e,74348,E);f=I+16|0;switch(c[I+48>>2]|0){case 5:{f=c[f>>2]|0;if(c3(f,137314)|0){c[J>>2]=f;uF(e,74366,J)}break}case 1:{E=d[f+1>>0]|0;J=d[f+2>>0]|0;c[F>>2]=d[f>>0];c[F+4>>2]=E;c[F+8>>2]=J;uF(e,74377,F);break}default:qa(138394,73558,486,74399)}oF(e,74412)|0;if(b[H>>1]&512){c[K>>2]=FK(c[I+212>>2]|0)|0;uF(e,74414,K);oF(e,74463)|0;vF(e,-G);oF(e,74481)|0}oF(e,GK(c[g>>2]|0,1)|0)|0;if(b[H>>1]&512)uF(e,74484,L);oF(e,74504)|0;l=M;return}function ge(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;switch(c|0){case 2:{d=ne(a,b,2)|0;break}case 3:{d=oe(a)|0;break}default:d=0}oF(a,74008)|0;le(a,c,d);oF(a,74017)|0;vF(a,+h[b>>3]);oF(a,74023)|0;c=b+8|0;vF(a,-+h[c>>3]);oF(a,74030)|0;vF(a,+h[b+16>>3]-+h[b>>3]);oF(a,74037)|0;vF(a,+h[b+24>>3]-+h[c>>3]);oF(a,73424)|0;return}function he(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0;switch(d|0){case 2:{e=ne(a,b,c)|0;break}case 3:{e=oe(a)|0;break}default:e=0}oF(a,73999)|0;le(a,d,e);oF(a,73414)|0;e=0;while(1){if((e|0)>=(c|0))break;vF(a,+h[b+(e<<4)>>3]);oF(a,100999)|0;vF(a,-+h[b+(e<<4)+8>>3]);oF(a,102604)|0;e=e+1|0}vF(a,+h[b>>3]);oF(a,100999)|0;vF(a,-+h[b+8>>3]);oF(a,73424)|0;return}function ie(a,d,e,f,g,h){a=a|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;g=c[a+16>>2]|0;switch(h|0){case 2:{f=ne(a,d,e)|0;break}case 3:{f=oe(a)|0;break}default:f=0}oF(a,73594)|0;if(b[g+260>>1]&512){oF(a,73600)|0;oF(a,FK(c[g+212>>2]|0)|0)|0;oF(a,73606)|0}le(a,h,f);oF(a,73611)|0;pe(a,d,e);oF(a,73424)|0;return}function je(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;oF(a,73404)|0;le(a,0,0);oF(a,73414)|0;d=0;while(1){if((d|0)>=(c|0))break;vF(a,+h[b+(d<<4)>>3]);oF(a,100999)|0;vF(a,-+h[b+(d<<4)+8>>3]);oF(a,102604)|0;d=d+1|0}oF(a,73424)|0;return}function ke(a,b){a=a|0;b=b|0;oF(a,73398)|0;oF(a,FK(b)|0)|0;oF(a,75458)|0;return}function le(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;q=l;l=l+96|0;k=q+48|0;p=q+40|0;n=q+32|0;o=q+24|0;j=q+16|0;g=q+8|0;f=q;m=c[b+16>>2]|0;oF(b,73429)|0;a:do switch(d|0){case 2:{c[f>>2]=e;uF(b,73437,f);break}case 3:{c[g>>2]=e;uF(b,73448,g);break}case 0:{oF(b,135709)|0;break}default:{d=m+56|0;f=k;g=d;i=f+40|0;do{c[f>>2]=c[g>>2];f=f+4|0;g=g+4|0}while((f|0)<(i|0));me(b,k);if((c[m+88>>2]|0)==1){d=a[d+3>>0]|0;switch(d<<24>>24){case -1:case 0:break a;default:{}}h[j>>3]=+(d&255)*.00392156862745098;uF(b,73459,j)}}}while(0);oF(b,73478)|0;e=m+16|0;f=k;g=e;i=f+40|0;do{c[f>>2]=c[g>>2];f=f+4|0;g=g+4|0}while((f|0)<(i|0));me(b,k);d=m+152|0;if(+h[d>>3]!=1.0){oF(b,73489)|0;vF(b,+h[d>>3])}switch(c[m+144>>2]|0){case 1:{c[o>>2]=73529;uF(b,73506,o);break}case 2:{c[n>>2]=73533;uF(b,73506,n);break}default:{}}b:do if((c[m+48>>2]|0)==1){d=a[e+3>>0]|0;switch(d<<24>>24){case -1:case 0:break b;default:{}}h[p>>3]=+(d&255)*.00392156862745098;uF(b,73537,p)}while(0);oF(b,98744)|0;l=q;return}function me(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0;g=l;l=l+16|0;f=g;a:do switch(c[e+32>>2]|0){case 5:{oF(b,c[e>>2]|0)|0;break}case 1:if(!(a[e+3>>0]|0)){oF(b,137379)|0;break a}else{i=d[e+1>>0]|0;h=d[e+2>>0]|0;c[f>>2]=d[e>>0];c[f+4>>2]=i;c[f+8>>2]=h;uF(b,75714,f);break a}default:qa(138394,73558,117,73578)}while(0);l=g;return}function ne(b,d,e){b=b|0;d=d|0;e=e|0;var f=0.0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;t=l;l=l+112|0;o=t+64|0;r=t+56|0;n=t+48|0;m=t+40|0;i=t+32|0;k=t;q=c[46722]|0;c[46722]=q+1;p=c[b+16>>2]|0;f=+(c[p+136>>2]|0)*.017453292519943295;c[k>>2]=0;c[k+4>>2]=0;c[k+8>>2]=0;c[k+12>>2]=0;c[k+16>>2]=0;c[k+20>>2]=0;c[k+24>>2]=0;c[k+28>>2]=0;pQ(d,k,e,f,0);c[o>>2]=q;uF(b,73831,o);oF(b,73896)|0;vF(b,+h[k>>3]);oF(b,73901)|0;vF(b,+h[k+8>>3]);oF(b,73908)|0;vF(b,+h[k+16>>3]);oF(b,73915)|0;vF(b,+h[k+24>>3]);oF(b,73922)|0;k=p+140|0;f=+g[k>>2];if(f>0.0){h[i>>3]=f+-.001;uF(b,73927,i)}else oF(b,73703)|0;d=p+56|0;e=o;i=d;j=e+40|0;do{c[e>>2]=c[i>>2];e=e+4|0;i=i+4|0}while((e|0)<(j|0));me(b,o);oF(b,73739)|0;a:do if((c[p+88>>2]|0)==1){d=a[d+3>>0]|0;switch(d<<24>>24){case -1:case 0:{s=7;break a}default:{}}h[m>>3]=+(d&255)*.00392156862745098;uF(b,99612,m)}else s=7;while(0);if((s|0)==7)oF(b,73754)|0;oF(b,73757)|0;f=+g[k>>2];if(f>0.0){h[n>>3]=f;uF(b,73927,n)}else oF(b,73763)|0;d=p+96|0;e=o;i=d;j=e+40|0;do{c[e>>2]=c[i>>2];e=e+4|0;i=i+4|0}while((e|0)<(j|0));me(b,o);oF(b,73739)|0;b:do if((c[p+128>>2]|0)==1){d=a[d+3>>0]|0;switch(d<<24>>24){case -1:case 0:{s=14;break b}default:{}}h[r>>3]=+(d&255)*.00392156862745098;uF(b,99612,r)}else s=14;while(0);if((s|0)==14)oF(b,73754)|0;oF(b,73967)|0;l=t;return q|0}function oe(b){b=b|0;var d=0,e=0.0,f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0.0;q=l;l=l+64|0;k=q+16|0;o=q+8|0;j=q;n=c[46721]|0;c[46721]=n+1;m=c[b+16>>2]|0;r=+(c[m+136>>2]|0)*.017453292519943295;e=r;if(r==0.0){f=50;d=50}else{f=~~((+E(+e)+1.0)*50.0);d=~~((1.0-+F(+e))*50.0)}c[k>>2]=n;c[k+4>>2]=f;c[k+8>>2]=d;uF(b,73619,k);oF(b,73703)|0;d=m+56|0;f=k;g=d;i=f+40|0;do{c[f>>2]=c[g>>2];f=f+4|0;g=g+4|0}while((f|0)<(i|0));me(b,k);oF(b,73739)|0;a:do if((c[m+88>>2]|0)==1){d=a[d+3>>0]|0;switch(d<<24>>24){case -1:case 0:{p=6;break a}default:{}}h[j>>3]=+(d&255)*.00392156862745098;uF(b,99612,j)}else p=6;while(0);if((p|0)==6)oF(b,73754)|0;oF(b,73757)|0;oF(b,73763)|0;d=m+96|0;f=k;g=d;i=f+40|0;do{c[f>>2]=c[g>>2];f=f+4|0;g=g+4|0}while((f|0)<(i|0));me(b,k);oF(b,73739)|0;b:do if((c[m+128>>2]|0)==1){d=a[d+3>>0]|0;switch(d<<24>>24){case -1:case 0:{p=10;break b}default:{}}h[o>>3]=+(d&255)*.00392156862745098;uF(b,99612,o)}else p=10;while(0);if((p|0)==10)oF(b,73754)|0;oF(b,73799)|0;l=q;return n|0}function pe(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,i=0;i=l;l=l+16|0;g=i;e=77;f=0;while(1){if((f|0)>=(d|0))break;c[g>>2]=e;uF(a,73616,g);vF(a,+h[b+(f<<4)>>3]);oF(a,100999)|0;vF(a,-+h[b+(f<<4)+8>>3]);e=(f|0)==0?67:32;f=f+1|0}l=i;return}function qe(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0;j=l;l=l+16|0;i=j+8|0;h=j;oF(b,74587)|0;oF(b,FK(d)|0)|0;if(e|0){c[h>>2]=FK(e)|0;uF(b,74595,h)}c[i>>2]=f;uF(b,74599,i);d=QA(g,74611)|0;if(d|0?a[d>>0]|0:0){oF(b,102604)|0;oF(b,FK(d)|0)|0}oF(b,98744)|0;l=j;return}function re(a){a=a|0;var b=0;oF(a,75418)|0;b=a+12|0;oF(a,Be(c[c[c[b>>2]>>2]>>2]|0)|0)|0;oF(a,78181)|0;oF(a,Be(c[(c[c[b>>2]>>2]|0)+4>>2]|0)|0)|0;oF(a,78191)|0;oF(a,Be(c[(c[c[b>>2]>>2]|0)+8>>2]|0)|0)|0;oF(a,75434)|0;return}function se(b){b=b|0;var d=0,e=0,f=0;f=l;l=l+16|0;e=f;d=c[b+16>>2]|0;oF(b,75395)|0;d=d+8|0;if(a[(KB(c[d>>2]|0)|0)>>0]|0){oF(b,75397)|0;oF(b,Be(KB(c[d>>2]|0)|0)|0)|0}c[e>>2]=O(c[b+168>>2]|0,c[b+164>>2]|0)|0;uF(b,75406,e);c[46723]=0;l=f;return}function te(a){a=a|0;c[46723]=1;return}function ue(a){a=a|0;c[46723]=-1;return}function ve(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+48|0;i=n+8|0;m=n;f=c[b+16>>2]|0;if(c[f+144>>2]|0?(k=e+4|0,j=~~(+h[b+352>>3]*+h[(c[k>>2]|0)+16>>3]),j|0):0){Ce(b);oF(b,75334)|0;g=d+8|0;h[g>>3]=+h[g>>3]-+(j|0)*.55;c[i>>2]=c[d>>2];c[i+4>>2]=c[d+4>>2];c[i+8>>2]=c[d+8>>2];c[i+12>>2]=c[d+12>>2];xF(b,i);oF(b,75348)|0;oF(b,c[e>>2]|0)|0;oF(b,75357)|0;oF(b,75155)|0;g=i;d=f+16|0;f=g+40|0;do{c[g>>2]=c[d>>2];g=g+4|0;d=d+4|0}while((g|0)<(f|0));De(b,i);oF(b,75359)|0;i=c[k>>2]|0;k=c[i+8>>2]|0;k=c[((k|0)==0?i:k+4|0)>>2]|0;oF(b,98744)|0;oF(b,k)|0;oF(b,98744)|0;c[m>>2]=j;uF(b,75368,m);switch(a[e+48>>0]|0){case 108:{oF(b,75373)|0;break}case 114:{oF(b,75384)|0;break}default:{}}Ee(b);oF(b,153599)|0}l=n;return}function we(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,i=0,j=0,k=0.0,m=0.0,n=0.0;j=l;l=l+48|0;f=j;g=c[a+16>>2]|0;i=g+144|0;if(c[i>>2]|0){n=+h[b>>3];m=+h[b+24>>3];e=b+8|0;k=+h[e>>3];h[b>>3]=n-+h[b+16>>3]+n;h[e>>3]=k-m+k;Ce(a);oF(a,75320)|0;yF(a,b,2);oF(a,75155)|0;do if(!d)if(!(c[46723]|0)){oF(a,97309)|0;break}else{oF(a,137198)|0;break}else{b=f;d=g+56|0;e=b+40|0;do{c[b>>2]=c[d>>2];b=b+4|0;d=d+4|0}while((b|0)<(e|0));De(a,f)}while(0);if((c[46723]|0)==1)c[46723]=0;oF(a,75266)|0;vF(a,+h[g+152>>3]);oF(a,75309)|0;b=f;d=g+16|0;e=b+40|0;do{c[b>>2]=c[d>>2];b=b+4|0;d=d+4|0}while((b|0)<(e|0));De(a,f);b=c[i>>2]|0;if((b|0)==1){oF(a,75163)|0;b=c[i>>2]|0}if((b|0)==2)oF(a,75172)|0;Ee(a);oF(a,153599)|0}l=j;return}function xe(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0;j=l;l=l+48|0;f=j;g=c[a+16>>2]|0;i=g+144|0;if(c[i>>2]|0){Ce(a);oF(a,75292)|0;yF(a,b,d);oF(a,75155)|0;do if(!e)if(!(c[46723]|0)){oF(a,97309)|0;break}else{oF(a,137198)|0;break}else{b=f;d=g+56|0;e=b+40|0;do{c[b>>2]=c[d>>2];b=b+4|0;d=d+4|0}while((b|0)<(e|0));De(a,f)}while(0);if((c[46723]|0)==1)c[46723]=0;oF(a,75266)|0;vF(a,+h[g+152>>3]);oF(a,75309)|0;b=f;d=g+16|0;e=b+40|0;do{c[b>>2]=c[d>>2];b=b+4|0;d=d+4|0}while((b|0)<(e|0));De(a,f);b=c[i>>2]|0;if((b|0)==1){oF(a,75163)|0;b=c[i>>2]|0}if((b|0)==2)oF(a,75172)|0;Ee(a);oF(a,153599)|0}l=j;return}function ye(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var i=0,j=0,k=0,m=0;m=l;l=l+48|0;i=m;j=c[a+16>>2]|0;k=j+144|0;if(c[k>>2]|0){Ce(a);oF(a,75141)|0;yF(a,b,d);oF(a,75155)|0;e=i;f=j+16|0;g=e+40|0;do{c[e>>2]=c[f>>2];e=e+4|0;f=f+4|0}while((e|0)<(g|0));De(a,i);oF(a,75266)|0;vF(a,+h[j+152>>3]);e=c[k>>2]|0;if((e|0)==1){oF(a,75163)|0;e=c[k>>2]|0}if((e|0)==2)oF(a,75172)|0;oF(a,75275)|0;Ee(a);oF(a,153599)|0}l=m;return}function ze(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;i=l;l=l+48|0;g=i;e=c[a+16>>2]|0;h=e+144|0;if(c[h>>2]|0){Ce(a);oF(a,75141)|0;yF(a,b,d);oF(a,75155)|0;f=g;b=e+16|0;d=f+40|0;do{c[f>>2]=c[b>>2];f=f+4|0;b=b+4|0}while((f|0)<(d|0));De(a,g);b=c[h>>2]|0;if((b|0)==1){oF(a,75163)|0;b=c[h>>2]|0}if((b|0)==2)oF(a,75172)|0;Ee(a);oF(a,153599)|0}l=i;return}function Ae(a,b){a=a|0;b=b|0;oF(a,75138)|0;oF(a,Be(b)|0)|0;oF(a,153599)|0;return}function Be(a){a=a|0;return a|0}function Ce(b){b=b|0;if(!(a[b+144>>0]|0))oF(b,75263)|0;else oF(b,c[b+148>>2]|0)|0;return}function De(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0;g=l;l=l+16|0;f=g;a:do switch(c[e+32>>2]|0){case 5:{oF(b,c[e>>2]|0)|0;break}case 1:if(!(a[e+3>>0]|0)){oF(b,97309)|0;break a}else{i=d[e+1>>0]|0;h=d[e+2>>0]|0;c[f>>2]=d[e>>0];c[f+4>>2]=i;c[f+8>>2]=h;uF(b,75714,f);break a}default:qa(138394,75181,49,75245)}while(0);l=g;return}function Ee(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;h=l;l=l+16|0;g=h;f=c[a+16>>2]|0;switch(c[f+12>>2]|0){case 8:{b=1;d=111481;e=f+8|0;break}case 10:{b=0;d=111481;e=f+8|0;break}case 3:case 2:case 9:{b=1;d=111450;e=f+8|0;break}case 7:case 6:case 11:{b=0;d=111450;e=f+8|0;break}case 0:{b=1;d=111494;e=f+8|0;break}case 4:{b=0;d=75217;e=f+8|0;break}case 1:{b=1;d=111494;e=f+8|0;break}case 5:{b=0;d=111494;e=f+8|0;break}default:qa(138394,75181,106,75200)}f=c[(c[e>>2]|0)+8>>2]|0;c[g>>2]=b;c[g+4>>2]=d;c[g+8>>2]=f;uF(a,75229,g);l=h;return}function Fe(a){a=a|0;var b=0;oF(a,78153)|0;oF(a,78161)|0;b=a+12|0;oF(a,Qe(c[c[c[b>>2]>>2]>>2]|0)|0)|0;oF(a,78181)|0;oF(a,Qe(c[(c[c[b>>2]>>2]|0)+4>>2]|0)|0)|0;oF(a,78191)|0;oF(a,Qe(c[(c[c[b>>2]>>2]|0)+8>>2]|0)|0)|0;oF(a,78194)|0;return}function Ge(b){b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0;j=l;l=l+32|0;i=j+24|0;g=j+16|0;f=j+8|0;e=j;d=c[b+16>>2]|0;c[46727]=~~(+h[b+232>>3]-+h[b+216>>3]);c[46726]=~~(+h[b+224>>3]-+h[b+208>>3]);oF(b,76840)|0;oF(b,76847)|0;d=KB(c[d+8>>2]|0)|0;if(a[d>>0]|0){oF(b,76916)|0;oF(b,Qe(d)|0)|0;oF(b,76924)|0}c[e>>2]=O(c[b+168>>2]|0,c[b+164>>2]|0)|0;uF(b,76933,e);oF(b,76953)|0;oF(b,76988)|0;oF(b,77016)|0;oF(b,77022)|0;oF(b,77065)|0;oF(b,77106)|0;oF(b,77125)|0;oF(b,77142)|0;oF(b,77190)|0;oF(b,77243)|0;oF(b,77319)|0;oF(b,77395)|0;oF(b,77404)|0;oF(b,77427)|0;oF(b,77454)|0;oF(b,77507)|0;oF(b,77529)|0;oF(b,77574)|0;oF(b,77586)|0;oF(b,77596)|0;oF(b,77622)|0;oF(b,77507)|0;oF(b,77674)|0;oF(b,77574)|0;oF(b,77586)|0;oF(b,77718)|0;oF(b,77427)|0;oF(b,77454)|0;oF(b,77507)|0;oF(b,77674)|0;oF(b,77574)|0;oF(b,77586)|0;oF(b,77596)|0;oF(b,77622)|0;oF(b,77507)|0;oF(b,77529)|0;oF(b,77574)|0;oF(b,77586)|0;oF(b,77731)|0;oF(b,77739)|0;oF(b,77745)|0;oF(b,77759)|0;oF(b,77767)|0;oF(b,77800)|0;e=(c[46727]|0)+10|0;c[f>>2]=c[46726];c[f+4>>2]=e;uF(b,77877,f);oF(b,77907)|0;oF(b,77916)|0;oF(b,77974)|0;oF(b,77984)|0;oF(b,78049)|0;f=c[46727]|0;c[g>>2]=c[46726];c[g+4>>2]=f;uF(b,78086,g);g=c[46727]|0;c[i>>2]=c[46726];c[i+4>>2]=g;uF(b,78114,i);l=j;return}function He(a){a=a|0;oF(a,76391)|0;oF(a,76403)|0;oF(a,76411)|0;oF(a,76474)|0;oF(a,76403)|0;oF(a,76519)|0;oF(a,76568)|0;oF(a,76622)|0;oF(a,76403)|0;oF(a,76722)|0;oF(a,76771)|0;oF(a,76403)|0;oF(a,76823)|0;return}function Ie(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0;j=l;l=l+32|0;i=j+16|0;h=j+8|0;g=j;oF(b,76349)|0;if(d|0?a[d>>0]|0:0){c[g>>2]=Qe(d)|0;uF(b,76352,g)}if(e|0?a[e>>0]|0:0){c[h>>2]=Qe(e)|0;uF(b,76363,h)}if(f|0?a[f>>0]|0:0){c[i>>2]=Qe(f)|0;uF(b,76375,i)}oF(b,76388)|0;l=j;return}function Je(a){a=a|0;oF(a,76343)|0;return}function Ke(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,i=0.0,j=0.0,k=0.0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0.0;A=l;l=l+112|0;y=A+96|0;z=A+88|0;w=A+80|0;q=A+72|0;v=A+64|0;t=A+56|0;s=A+48|0;r=A+40|0;p=A+24|0;o=A+8|0;n=A;x=c[b+16>>2]|0;switch(a[f+48>>0]|0){case 108:{j=+h[e>>3];m=+h[f+32>>3];break}case 114:{m=+h[f+32>>3];j=+h[e>>3]-m;break}default:{m=+h[f+32>>3];j=+h[e>>3]-m*.5}}g=f+40|0;i=+h[g>>3];u=f+4|0;k=+h[(c[u>>2]|0)+16>>3];if(i>3]=i}B=j+-8.0;k=+((c[46727]|0)>>>0)-+h[e+8>>3]-i+k*.2+(k<12.0?1.4:2.0);uF(b,76005,n);h[o>>3]=B;h[o+8>>3]=k;uF(b,75942,o);h[p>>3]=j+8.0+m-B;h[p+8>>3]=i;uF(b,75966,p);oF(b,76040)|0;oF(b,76074)|0;g=c[u>>2]|0;e=c[g+8>>2]|0;if(e){c[r>>2]=c[e+4>>2];uF(b,76164,r);g=c[e+8>>2]|0;if(g|0){c[s>>2]=g;uF(b,76183,s)}g=c[e+12>>2]|0;if(g|0){c[t>>2]=g;uF(b,76200,t)}g=c[e+16>>2]|0;if(g|0){c[v>>2]=g;uF(b,76218,v)}}else{c[q>>2]=c[g>>2];uF(b,76164,q)}h[w>>3]=+h[(c[u>>2]|0)+16>>3];uF(b,76234,w);g=x+16|0;switch(c[x+48>>2]|0){case 5:{g=c[g>>2]|0;if(c3(g,137314)|0){c[z>>2]=g;uF(b,76254,z)}break}case 1:{x=d[g+1>>0]|0;z=d[g+2>>0]|0;c[y>>2]=d[g>>0];c[y+4>>2]=x;c[y+8>>2]=z;uF(b,76264,y);break}default:qa(138394,75728,438,76285)}oF(b,76298)|0;oF(b,Qe(c[f>>2]|0)|0)|0;oF(b,76309)|0;oF(b,76332)|0;l=A;return}function Le(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0.0,i=0.0,j=0,k=0.0,m=0.0;e=l;l=l+32|0;f=e+16|0;j=e;oF(a,75906)|0;m=+h[b>>3];i=+h[b+16>>3]-m;k=+h[b+24>>3];g=k-+h[b+8>>3];k=+((c[46727]|0)>>>0)-k;h[j>>3]=m-i;h[j+8>>3]=k;uF(a,75942,j);h[f>>3]=i*2.0;h[f+8>>3]=g*2.0;uF(a,75966,f);Ue(a,d);oF(a,75788)|0;Se(a);oF(a,75994)|0;l=e;return}function Me(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,g=0,i=0.0,j=0,k=0,m=0,n=0;m=l;l=l+48|0;k=m+24|0;j=m+8|0;g=m;oF(a,75511)|0;n=c[46727]|0;c[g>>2]=c[46726];c[g+4>>2]=n;uF(a,75764,g);Ue(a,e);oF(a,75788)|0;Se(a);oF(a,75791)|0;g=d+-1|0;e=0;while(1){if((e|0)>=(d|0))break;i=+h[b+(e<<4)>>3];f=+((c[46727]|0)>>>0)-+h[b+(e<<4)+8>>3];if(!e){oF(a,75818)|0;h[j>>3]=i;h[j+8>>3]=f;uF(a,75884,j);oF(a,75895)|0}else{h[k>>3]=i;h[k+8>>3]=f;uF(a,75884,k)}if((e|0)==(g|0))oF(a,75898)|0;e=e+1|0}oF(a,75627)|0;l=m;return}function Ne(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0;f=l;l=l+16|0;e=f;oF(a,75511)|0;h=c[46727]|0;c[e>>2]=c[46726];c[e+4>>2]=h;uF(a,75764,e);Ue(a,g);oF(a,75788)|0;Se(a);oF(a,75791)|0;Ve(a,b,d);oF(a,75804)|0;l=f;return}function Oe(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,i=0,j=0,k=0,m=0.0;k=l;l=l+48|0;j=k+24|0;i=k+8|0;f=k;oF(a,75511)|0;g=c[46727]|0;c[f>>2]=c[46726];c[f+4>>2]=g;uF(a,75548,f);oF(a,75588)|0;f=d+-1|0;g=b+8|0;e=0;while(1){if((e|0)>=(d|0))break;if(!e){oF(a,75600)|0;m=+((c[46727]|0)>>>0)-+h[g>>3];h[i>>3]=+h[b>>3];h[i+8>>3]=m;uF(a,75604,i);oF(a,75615)|0}else{m=+((c[46727]|0)>>>0)-+h[b+(e<<4)+8>>3];h[j>>3]=+h[b+(e<<4)>>3];h[j+8>>3]=m;uF(a,75604,j)}if((e|0)==(f|0))oF(a,75619)|0;e=e+1|0}oF(a,75623)|0;Se(a);oF(a,75627)|0;l=k;return}function Pe(a,b){a=a|0;b=b|0;oF(a,75446)|0;oF(a,Qe(b)|0)|0;oF(a,75458)|0;return}function Qe(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;u=l;l=l+16|0;e=u;d=c[46724]|0;if(!d){c[46725]=64;d=KK(64)|0;c[46724]=d}s=e+15|0;r=e+14|0;g=0;q=0;o=0;e=0;f=0;a:while(1){n=(o|0)!=0;k=g;p=b;j=e;b:while(1){if(!p){t=32;break a}e=a[p>>0]|0;if(!(e<<24>>24)){t=32;break a}b=c[46725]|0;if((q|0)>(b+-8|0)){d=b<<1;c[46725]=d;d=MK(c[46724]|0,d)|0;c[46724]=d;d=d+q|0;e=a[p>>0]|0}switch(e<<24>>24){case 60:{e=4;b=102153;t=26;break b}case 62:{e=4;b=102136;t=27;break b}case 38:{t=10;break b}case 45:{e=5;b=102147;i=j;break b}default:{}}if(n&e<<24>>24==32){t=12;break}switch(e<<24>>24){case 34:{e=6;b=102116;t=26;break b}case 39:{e=5;b=102141;t=27;break b}default:{}}if(e<<24>>24<0){i=127;b=0}else{e=1;b=p;t=26;break}while(1){g=i&255;h=e&255;if(g>>>0>=h>>>0)break;e=i&h&255;i=g>>>1;b=b+1|0}if((b|0)<=1){g=R6(j|0,f|0,6)|0;g=J6(g|0,z|0,e&255|0,0)|0;f=z;m=k+-1|0;if((k|0)>1){b=m;e=g}else{t=21;break}}else{b=b+-1|0;e=e&255;f=0}k=b;p=p+1|0;j=e}if((t|0)==10){t=0;b=(Re(p)|0)==0;e=b?5:1;b=b?102130:p;i=j}else if((t|0)==12){t=0;b=(a[o>>0]|0)==32;e=b?6:1;b=b?102123:p;i=j}else if((t|0)==21){t=0;a[s>>0]=59;e=3;h=r;i=g;j=f;while(1){b=O6(i|0,j|0,10,0)|0;g=h+-1|0;a[h>>0]=b|48;b=i;i=N6(i|0,j|0,10,0)|0;f=j;j=z;o=e;e=e+1|0;if((o|0)>11){t=23;break a}if(!(f>>>0>0|(f|0)==0&b>>>0>9))break;else h=g}b=h+-2|0;a[g>>0]=35;a[b>>0]=38;k=m;f=j}else if((t|0)==26){t=0;i=j}else if((t|0)==27){t=0;i=j}h=d+e|0;g=e;while(1){if(!g)break;a[d>>0]=a[b>>0]|0;g=g+-1|0;b=b+1|0;d=d+1|0}g=k;b=p+1|0;q=e+q|0;o=p;d=h;e=i}if((t|0)==23){U4(75464,46,1,c[15712]|0)|0;Sa(1)}else if((t|0)==32){a[d>>0]=0;l=u;return c[46724]|0}return 0}function Re(b){b=b|0;var c=0,d=0;d=b+1|0;c=a[d>>0]|0;a:do if(c<<24>>24==35){d=b+2|0;c=a[d>>0]|0;switch(c<<24>>24){case 88:case 120:break;default:{b=d;while(1){d=b+1|0;if((c+-48&255)>=10)break a;b=d;c=a[d>>0]|0}}}d=b+3|0;while(1){c=a[d>>0]|0;if((c+-48&255)>=10)switch(c<<24>>24){case 65:case 66:case 67:case 68:case 69:case 70:case 97:case 98:case 99:case 100:case 101:case 102:break;default:break a}d=d+1|0}}else while(1){b=d+1|0;if(((c&-33)+-65&255)>=26)break a;d=b;c=a[b>>0]|0}while(0);return c<<24>>24==59|0}function Se(a){a=a|0;var b=0.0,d=0,e=0,f=0,g=0,i=0,j=0,k=0;k=l;l=l+48|0;d=k+8|0;j=k;i=c[a+16>>2]|0;oF(a,75639)|0;e=d;f=i+16|0;g=e+40|0;do{c[e>>2]=c[f>>2];e=e+4|0;f=f+4|0}while((e|0)<(g|0));Te(a,d);b=+h[i+152>>3];if(b!=1.0){h[j>>3]=b;uF(a,75657,j)}switch(c[i+144>>2]|0){case 1:{oF(a,75674)|0;break}case 2:{oF(a,75692)|0;break}default:{}}oF(a,75709)|0;l=k;return}function Te(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0;g=l;l=l+16|0;f=g;a:do switch(c[e+32>>2]|0){case 5:{oF(b,c[e>>2]|0)|0;break}case 1:if(!(a[e+3>>0]|0)){oF(b,135709)|0;break a}else{i=d[e+1>>0]|0;h=d[e+2>>0]|0;c[f>>2]=d[e>>0];c[f+4>>2]=i;c[f+8>>2]=h;uF(b,75714,f);break a}default:qa(138394,75728,94,75748)}while(0);l=g;return}function Ue(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;g=l;l=l+48|0;f=g;if(!b)oF(a,75867)|0;else{d=c[a+16>>2]|0;oF(a,75837)|0;b=f;d=d+56|0;e=b+40|0;do{c[b>>2]=c[d>>2];b=b+4|0;d=d+4|0}while((b|0)<(e|0));Te(a,f);oF(a,75864)|0}l=g;return}function Ve(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,i=0,j=0.0,k=0.0;i=l;l=l+32|0;g=i;e=75818;f=0;while(1){if((f|0)>=(d|0))break;k=+h[b+(f<<4)>>3];j=+((c[46727]|0)>>>0)-+h[b+(f<<4)+8>>3];c[g>>2]=e;h[g+8>>3]=k;h[g+16>>3]=j;uF(a,75821,g);e=(f|0)==0?75834:195059;f=f+1|0}oF(a,98744)|0;l=i;return}function We(a){a=a|0;var b=0,d=0,e=0;b=l;l=l+16|0;d=b+8|0;e=b;oF(a,80451)|0;oF(a,80466)|0;oF(a,80505)|0;oF(a,80554)|0;c[e>>2]=137314;c[e+4>>2]=80642;uF(a,80623,e);c[d>>2]=137198;c[d+4>>2]=80648;uF(a,80623,d);l=b;return}function Xe(a){a=a|0;var b=0,d=0,e=0.0,f=0.0,g=0.0,i=0.0,j=0;b=l;l=l+64|0;d=b+8|0;j=b;c[j>>2]=KB(c[(c[a+16>>2]|0)+8>>2]|0)|0;uF(a,79404,j);i=+h[a+368>>3]*.5*+h[a+488>>3];g=+h[a+376>>3]*.5*+h[a+496>>3];f=+J(+(i*2.0000000949949026e-03))*180.0*.6366197723675814;e=+J(+(g*2.0000000949949026e-03))*180.0*.6366197723675814;h[d>>3]=i;h[d+8>>3]=g;h[d+16>>3]=-500.0;h[d+24>>3]=i;h[d+32>>3]=g;h[d+40>>3]=0.0;h[d+48>>3]=(f>e?f:e)*1.2;uF(a,79426,d);oF(a,79573)|0;oF(a,80403)|0;l=b;return}function Ye(a){a=a|0;oF(a,79387)|0;return}function Ze(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,h=0;f=l;l=l+16|0;h=f;c[h>>2]=b;c[h+4>>2]=d;c[h+8>>2]=e;uF(a,79357,h);g[46728]=+(O(d,-10)|0);l=f;return}function _e(a){a=a|0;oF(a,79340)|0;return}function $e(a){a=a|0;oF(a,79322)|0;return}function af(a){a=a|0;oF(a,79306)|0;return}function bf(a){a=a|0;oF(a,79285)|0;g[46728]=+g[46728]+-2.0;return}function cf(a){a=a|0;oF(a,79266)|0;return}function df(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=KB(c[(c[a+16>>2]|0)+8>>2]|0)|0;uF(a,79244,d);l=b;return}function ef(a){a=a|0;oF(a,79228)|0;return}function ff(a){a=a|0;oF(a,79210)|0;g[46728]=+g[46728]+-5.0;return}function gf(a){a=a|0;oF(a,79194)|0;g[46728]=+g[46728]+5.0;return}function hf(b,d,e){b=b|0;d=d|0;e=e|0;var f=0.0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0.0,t=0.0,u=0.0;r=l;l=l+144|0;o=r+104|0;q=r+56|0;m=r+32|0;j=r+24|0;n=r;p=e+4|0;i=c[p>>2]|0;f=+h[i+16>>3];i=c[i>>2]|0;c[n>>2]=c[e>>2];h[n+8>>3]=f;c[n+16>>2]=i;uF(b,79040,n);g[46729]=+g[46728]+-9.0;switch(a[e+48>>0]|0){case 108:{f=+h[d>>3];break}case 114:{i=d;f=+h[d>>3]-+h[e+32>>3];k=5;break}default:{i=d;f=+h[d>>3]-+h[e+32>>3]*.5;k=5}}if((k|0)==5)h[i>>3]=f;u=+h[b+488>>3];t=(+h[b+504>>3]+f)*u;s=(+h[b+512>>3]+ +h[d+8>>3])*+h[b+496>>3];h[j>>3]=+h[(c[p>>2]|0)+16>>3]*u;n=of(b,79092,j)|0;f=+(c[b+360>>2]|0);h[m>>3]=0.0;h[m+8>>3]=0.0;h[m+16>>3]=f;i=of(b,78309,m)|0;f=+g[46729];h[o>>3]=t;h[o+8>>3]=s;h[o+16>>3]=f;d=of(b,78341,o)|0;j=o;k=(c[b+16>>2]|0)+16|0;m=j+40|0;do{c[j>>2]=c[k>>2];j=j+4|0;k=k+4|0}while((j|0)<(m|0));o=pf(b,o,0.0)|0;e=c[e>>2]|0;c[q>>2]=c[c[p>>2]>>2];h[q+8>>3]=.25;h[q+16>>3]=0.0;c[q+24>>2]=e;c[q+28>>2]=79179;c[q+32>>2]=n;c[q+36>>2]=i;c[q+40>>2]=d;c[q+44>>2]=o;q=of(b,79104,q)|0;oF(b,q)|0;U1(q);U1(i);U1(o);U1(d);U1(n);l=r;return}function jf(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,i=0.0,j=0.0,k=0.0,m=0,n=0,o=0,p=0.0,q=0.0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0.0;z=l;l=l+240|0;x=z+192|0;y=z+152|0;t=z+128|0;r=z+104|0;o=z+80|0;n=z+48|0;e=z+24|0;m=z;oF(a,78917)|0;g[46729]=+g[46728]+-6.0;i=+h[b>>3];j=+h[a+488>>3];p=(+h[a+504>>3]+i)*j;A=+h[b+8>>3];k=+h[a+496>>3];q=(+h[a+512>>3]+A)*k;j=(+h[b+16>>3]-i)*j;k=(+h[b+24>>3]-A)*k;s=a+16|0;A=k+j;i=+h[(c[s>>2]|0)+152>>3]/A*2.5;h[m>>3]=j;h[m+8>>3]=A*.25;h[m+16>>3]=k;b=of(a,78277,m)|0;m=a+360|0;A=+(c[m>>2]|0);h[e>>3]=90.0;h[e+8>>3]=0.0;h[e+16>>3]=A;e=of(a,78309,e)|0;A=+g[46729];h[x>>3]=p;h[x+8>>3]=q;h[x+16>>3]=A;f=of(a,78341,x)|0;u=x;v=(c[s>>2]|0)+16|0;w=u+40|0;do{c[u>>2]=c[v>>2];u=u+4|0;v=v+4|0}while((u|0)<(w|0));v=pf(a,x,0.0)|0;h[n>>3]=1.0;h[n+8>>3]=i;c[n+16>>2]=b;c[n+20>>2]=e;c[n+24>>2]=f;c[n+28>>2]=v;w=of(a,78932,n)|0;oF(a,w)|0;U1(b);U1(e);U1(f);U1(v);U1(w);if(d|0){h[o>>3]=j;h[o+8>>3]=k;h[o+16>>3]=1.0;f=of(a,78277,o)|0;A=+(c[m>>2]|0);h[r>>3]=0.0;h[r+8>>3]=0.0;h[r+16>>3]=A;e=of(a,78309,r)|0;A=+g[46729];h[t>>3]=p;h[t+8>>3]=q;h[t+16>>3]=A;b=of(a,78341,t)|0;u=x;v=(c[s>>2]|0)+56|0;w=u+40|0;do{c[u>>2]=c[v>>2];u=u+4|0;v=v+4|0}while((u|0)<(w|0));x=pf(a,x,0.0)|0;h[y>>3]=0.0;h[y+8>>3]=0.0;h[y+16>>3]=0.0;c[y+24>>2]=f;c[y+28>>2]=e;c[y+32>>2]=b;c[y+36>>2]=x;y=of(a,78978,y)|0;oF(a,y)|0;U1(f);U1(e);U1(b);U1(x);U1(y)}l=z;return}function kf(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0.0,M=0,N=0.0;K=l;l=l+336|0;B=K+296|0;J=K+288|0;I=K+272|0;H=K+264|0;G=K+240|0;D=K+232|0;A=K+208|0;z=K+184|0;w=K+160|0;v=K+152|0;u=K+136|0;t=K+128|0;s=K+96|0;r=K+88|0;q=K+56|0;f=K+48|0;m=K+24|0;k=K;oF(a,78782)|0;g[46729]=+g[46728]+-2.0;o=a+488|0;p=a+496|0;L=+h[p>>3];h[k>>3]=+h[o>>3];h[k+8>>3]=L;h[k+16>>3]=1.0;k=of(a,78277,k)|0;y=a+360|0;L=+(c[y>>2]|0);h[m>>3]=0.0;h[m+8>>3]=0.0;h[m+16>>3]=L;m=of(a,78309,m)|0;L=+g[46729]+-2.0;h[B>>3]=0.0;h[B+8>>3]=0.0;h[B+16>>3]=L;n=of(a,78341,B)|0;C=a+16|0;i=B;j=(c[C>>2]|0)+16|0;x=i+40|0;do{c[i>>2]=c[j>>2];i=i+4|0;j=j+4|0}while((i|0)<(x|0));j=pf(a,B,0.0)|0;c[f>>2]=78404;c[f+4>>2]=d+1;E=a+504|0;F=a+512|0;i=0;f=of(a,78373,f)|0;while(1){if((i|0)>=(d|0))break;N=+h[F>>3]+ +h[b+(i<<4)+8>>3];L=+h[(c[C>>2]|0)+152>>3];h[q>>3]=+h[E>>3]+ +h[b+(i<<4)>>3];h[q+8>>3]=N;h[q+16>>3]=0.0;h[q+24>>3]=L;M=of(a,78418,q)|0;c[r>>2]=f;c[r+4>>2]=M;x=of(a,78447,r)|0;U1(M);U1(f);i=i+1|0;f=x}L=+h[F>>3]+ +h[b+8>>3];N=+h[(c[C>>2]|0)+152>>3];h[s>>3]=+h[E>>3]+ +h[b>>3];h[s+8>>3]=L;h[s+16>>3]=0.0;h[s+24>>3]=N;x=of(a,78418,s)|0;c[t>>2]=f;c[t+4>>2]=x;M=of(a,78447,t)|0;U1(x);U1(f);c[u>>2]=k;c[u+4>>2]=m;c[u+8>>2]=n;c[u+12>>2]=j;x=of(a,78797,u)|0;c[v>>2]=M;c[v+4>>2]=x;M=of(a,78502,v)|0;U1(x);oF(a,M)|0;U1(k);U1(m);U1(n);U1(j);U1(M);if(e|0){N=+h[p>>3];h[w>>3]=+h[o>>3];h[w+8>>3]=N;h[w+16>>3]=1.0;n=of(a,78277,w)|0;N=+(c[y>>2]|0);h[z>>3]=0.0;h[z+8>>3]=0.0;h[z+16>>3]=N;m=of(a,78309,z)|0;N=+g[46729]+-2.0;h[A>>3]=0.0;h[A+8>>3]=0.0;h[A+16>>3]=N;k=of(a,78341,A)|0;i=B;j=(c[C>>2]|0)+56|0;x=i+40|0;do{c[i>>2]=c[j>>2];i=i+4|0;j=j+4|0}while((i|0)<(x|0));j=pf(a,B,.25)|0;c[D>>2]=d;i=0;f=of(a,78842,D)|0;while(1){if((i|0)>=(d|0))break;N=+h[F>>3]+ +h[b+(i<<4)+8>>3];h[G>>3]=+h[E>>3]+ +h[b+(i<<4)>>3];h[G+8>>3]=N;h[G+16>>3]=0.0;D=of(a,78857,G)|0;c[H>>2]=f;c[H+4>>2]=D;M=of(a,78879,H)|0;U1(D);U1(f);i=i+1|0;f=M}c[I>>2]=n;c[I+4>>2]=m;c[I+8>>2]=k;c[I+12>>2]=j;I=of(a,78889,I)|0;c[J>>2]=f;c[J+4>>2]=I;M=of(a,78502,J)|0;U1(I);oF(a,M)|0;U1(n);U1(m);U1(k);U1(j);U1(M)}l=K;return}function lf(a,b,d,e,f,i){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0.0,D=0.0;B=l;l=l+208|0;e=B+160|0;A=B+152|0;z=B+136|0;y=B+128|0;x=B+96|0;w=B+88|0;v=B+56|0;k=B+48|0;s=B+24|0;r=B;oF(a,78709)|0;g[46729]=+g[46728]+-4.0;C=+h[a+496>>3];h[r>>3]=+h[a+488>>3];h[r+8>>3]=C;h[r+16>>3]=1.0;r=of(a,78277,r)|0;C=+(c[a+360>>2]|0);h[s>>3]=0.0;h[s+8>>3]=0.0;h[s+16>>3]=C;s=of(a,78309,s)|0;C=+g[46729]+-2.0;h[e>>3]=0.0;h[e+8>>3]=0.0;h[e+16>>3]=C;t=of(a,78341,e)|0;u=a+16|0;f=e;i=(c[u>>2]|0)+56|0;j=f+40|0;do{c[f>>2]=c[i>>2];f=f+4|0;i=i+4|0}while((f|0)<(j|0));n=pf(a,e,0.0)|0;c[k>>2]=78723;c[k+4>>2]=d+2;o=a+504|0;p=a+512|0;q=d+-1|0;m=0;e=of(a,78373,k)|0;while(1){if((m|0)>=(d|0))break;f=b+(m<<4)|0;i=b+(m<<4)+8|0;D=+h[p>>3]+ +h[i>>3];C=+h[(c[u>>2]|0)+152>>3];h[v>>3]=+h[o>>3]+ +h[f>>3];h[v+8>>3]=D;h[v+16>>3]=0.0;h[v+24>>3]=C;k=of(a,78418,v)|0;c[w>>2]=e;c[w+4>>2]=k;j=of(a,78447,w)|0;U1(k);U1(e);if((m|0)==0|(m|0)==(q|0)){C=+h[p>>3]+ +h[i>>3];D=+h[(c[u>>2]|0)+152>>3];h[x>>3]=+h[o>>3]+ +h[f>>3];h[x+8>>3]=C;h[x+16>>3]=0.0;h[x+24>>3]=D;k=of(a,78418,x)|0;c[y>>2]=j;c[y+4>>2]=k;e=of(a,78447,y)|0;U1(k);U1(j)}else e=j;m=m+1|0}c[z>>2]=r;c[z+4>>2]=s;c[z+8>>2]=t;c[z+12>>2]=n;b=of(a,78732,z)|0;c[A>>2]=e;c[A+4>>2]=b;d=of(a,78502,A)|0;U1(b);oF(a,d)|0;U1(r);U1(s);U1(t);U1(n);U1(d);l=B;return}function mf(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0.0,x=0,y=0.0;v=l;l=l+160|0;e=v+120|0;u=v+112|0;t=v+96|0;s=v+88|0;r=v+56|0;m=v+48|0;n=v+24|0;q=v;oF(a,78261)|0;g[46729]=+g[46728]+-6.0;w=+h[a+496>>3];h[q>>3]=+h[a+488>>3];h[q+8>>3]=w;h[q+16>>3]=1.0;q=of(a,78277,q)|0;w=+(c[a+360>>2]|0);h[n>>3]=0.0;h[n+8>>3]=0.0;h[n+16>>3]=w;n=of(a,78309,n)|0;w=+g[46729];h[e>>3]=0.0;h[e+8>>3]=0.0;h[e+16>>3]=w;o=of(a,78341,e)|0;p=a+16|0;f=e;i=(c[p>>2]|0)+16|0;j=f+40|0;do{c[f>>2]=c[i>>2];f=f+4|0;i=i+4|0}while((f|0)<(j|0));i=pf(a,e,0.0)|0;c[m>>2]=78404;c[m+4>>2]=d;j=a+504|0;k=a+512|0;f=0;e=of(a,78373,m)|0;while(1){if((f|0)>=(d|0))break;y=+h[k>>3]+ +h[b+(f<<4)+8>>3];w=+h[(c[p>>2]|0)+152>>3];h[r>>3]=+h[j>>3]+ +h[b+(f<<4)>>3];h[r+8>>3]=y;h[r+16>>3]=0.0;h[r+24>>3]=w;x=of(a,78418,r)|0;c[s>>2]=e;c[s+4>>2]=x;m=of(a,78447,s)|0;U1(x);U1(e);f=f+1|0;e=m}c[t>>2]=q;c[t+4>>2]=n;c[t+8>>2]=o;c[t+12>>2]=i;t=of(a,78456,t)|0;c[u>>2]=e;c[u+4>>2]=t;x=of(a,78502,u)|0;U1(t);oF(a,x)|0;U1(q);U1(n);U1(o);U1(i);U1(x);l=v;return}function nf(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;uF(a,78242,e);l=d;return}function of(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;i=l;l=l+1056|0;h=i;e=i+24|0;f=i+8|0;c[f>>2]=d;g=G3(e,1024,b,f)|0;do if((g|0)>=0)if((g|0)>1023){a=T1(g+1|0)|0;c[f>>2]=d;n4(a,b,f)|0;break}else{a=D4(e)|0;break}else{a=c[(c[a+12>>2]|0)+16>>2]|0;c[h>>2]=t2(c[(d2()|0)>>2]|0)|0;ub[a&63](78687,h);a=D4(195059)|0}while(0);l=i;return a|0}function pf(a,b,e){a=a|0;b=b|0;e=+e;var f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0.0,s=0.0;q=l;l=l+112|0;o=q+104|0;j=q+96|0;i=q+64|0;n=q+48|0;p=q+32|0;m=q+16|0;k=q;g=c[b+32>>2]|0;a:do switch(g|0){case 5:{f=c[b>>2]|0;if(!(s2(f,136302)|0)){c[k>>2]=78524;h[k+8>>3]=e;f=of(a,78507,k)|0;break a}if(!(s2(f,133432)|0)){c[m>>2]=78528;h[m+8>>3]=e;f=of(a,78507,m)|0;break a}if(!(s2(f,131431)|0)){c[p>>2]=78534;h[p+8>>3]=e;f=of(a,78507,p)|0;break a}else{c[n>>2]=f;h[n+8>>3]=e;f=of(a,78507,n)|0;break a}}case 1:{s=+(d[b+1>>0]|0)*.00390625;r=+(d[b+2>>0]|0)*.00390625;h[i>>3]=+(d[b>>0]|0)*.00390625;h[i+8>>3]=s;h[i+16>>3]=r;h[i+24>>3]=e;f=of(a,78539,i)|0;break}default:{p=c[15712]|0;n=c[b>>2]|0;c[j>>2]=g;c[j+4>>2]=n;w4(p,78578,j)|0;qa(138394,78628,436,78648)}}while(0);c[o>>2]=f;p=of(a,78665,o)|0;U1(f);l=q;return p|0}function qf(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;b=l;l=l+32|0;d=b+24|0;e=b+16|0;g=b;f=c[a+16>>2]|0;h=c[c[a+12>>2]>>2]|0;j=c[h>>2]|0;i=c[h+4>>2]|0;h=c[h+8>>2]|0;c[g>>2]=81094;c[g+4>>2]=j;c[g+8>>2]=i;c[g+12>>2]=h;uF(a,83704,g);f=KB(c[f+8>>2]|0)|0;c[e>>2]=81094;c[e+4>>2]=f;uF(a,83736,e);c[d>>2]=81094;uF(a,83750,d);l=b;return}function rf(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=81094;uF(a,83652,d);l=b;return}function sf(a){a=a|0;var b=0.0,d=0.0,e=0.0,f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0;W=l;l=l+304|0;V=W+296|0;U=W+288|0;T=W+272|0;R=W+264|0;Q=W+256|0;P=W+248|0;O=W+240|0;N=W+232|0;M=W+224|0;L=W+216|0;K=W+208|0;J=W+200|0;I=W+192|0;H=W+184|0;G=W+176|0;F=W+168|0;E=W+160|0;C=W+152|0;A=W+144|0;z=W+136|0;y=W+128|0;x=W+120|0;w=W+112|0;v=W+104|0;u=W+96|0;t=W+88|0;s=W+80|0;r=W+72|0;q=W+64|0;p=W+56|0;o=W+48|0;S=W+40|0;B=W+24|0;n=W+16|0;m=W;g=c[a+456>>2]|0;i=c[a+460>>2]|0;j=c[a+464>>2]|0;k=c[a+468>>2]|0;f=a+360|0;a:do if(c[4025]|0){switch(c[f>>2]|0){case 90:case 0:break a;default:{}}Ef();c[4025]=0}while(0);e=(+(k|0)-+(i|0))*.013888888888888888;b=(+(j|0)-+(g|0))*.013888888888888888;k=(c[f>>2]|0)==90;d=k?e:b;e=k?b:e;h[m>>3]=d;h[m+8>>3]=e;uF(a,81281,m);c[n>>2]=81094;uF(a,81296,n);if(d>0.0){b=+A2(d);h[19214]=b;b=b+3.0-+(~~b|0)}else b=3.0;b=+D(10.0,+b);h[19214]=b;h[B>>3]=b;h[B+8>>3]=b;uF(a,81465,B);c[S>>2]=81094;uF(a,81500,S);c[o>>2]=81094;uF(a,81558,o);c[p>>2]=81094;uF(a,81618,p);c[q>>2]=81094;uF(a,81667,q);c[r>>2]=81094;uF(a,81706,r);c[s>>2]=81094;uF(a,81757,s);c[t>>2]=81094;uF(a,81819,t);c[u>>2]=81094;uF(a,81929,u);c[v>>2]=81094;uF(a,82020,v);c[w>>2]=81094;uF(a,82074,w);c[x>>2]=81094;uF(a,82143,x);uF(a,82179,y);c[z>>2]=81094;uF(a,82304,z);c[A>>2]=81094;uF(a,82333,A);uF(a,82373,C);c[E>>2]=81094;uF(a,82466,E);c[F>>2]=81094;uF(a,82525,F);c[G>>2]=81094;uF(a,82606,G);uF(a,82676,H);c[I>>2]=81094;uF(a,82765,I);c[J>>2]=81094;uF(a,82870,J);c[K>>2]=81094;uF(a,82946,K);c[L>>2]=81094;uF(a,82985,L);c[M>>2]=81094;uF(a,83084,M);c[N>>2]=81094;uF(a,83130,N);uF(a,83219,O);c[P>>2]=81094;uF(a,83260,P);c[Q>>2]=81094;uF(a,83343,Q);c[R>>2]=81094;uF(a,83444,R);h[T>>3]=e;h[T+8>>3]=d;uF(a,83508,T);uF(a,83536,U);uF(a,83544,V);l=W;return}function tf(a){a=a|0;var b=0;b=l;l=l+16|0;uF(a,81274,b);l=b;return}function uf(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0.0,i=0.0,j=0.0,k=0,m=0,n=0.0,o=0,p=0,q=0,r=0;r=l;l=l+48|0;q=r+24|0;p=r+8|0;o=r;switch(a[e+48>>0]|0){case 108:{k=d;i=+h[e+32>>3];j=+h[d>>3];break}case 114:{i=+h[e+32>>3];g=i;f=5;break}default:{i=+h[e+32>>3];g=i*.5;f=5}}if((f|0)==5){j=+h[d>>3]-g;h[d>>3]=j;k=d}m=e+4|0;f=c[m>>2]|0;g=+h[f+16>>3];d=d+8|0;n=+h[d>>3]+g*.004629629629629629;h[d>>3]=n;i=j+i*.006944444444444444;h[k>>3]=i;f=c[f>>2]|0;do if(f){d=c[46730]|0;if(d|0?(s2(d,f)|0)==0:0)break;c[o>>2]=Cf(f)|0;uF(b,81173,o);o=c[m>>2]|0;c[46730]=c[o>>2];g=+h[o+16>>3]}while(0);f=~~g;f=(f|0)>1?f:1;if((f|0)!=(c[46731]|0)){j=+h[19214];c[p>>2]=f;h[p+8>>3]=j;uF(b,81181,p);c[46731]=f}c[q>>2]=Df(c[e>>2]|0)|0;h[q+8>>3]=i;h[q+16>>3]=n;uF(b,81202,q);l=r;return}function vf(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0.0,i=0.0,j=0.0,k=0.0;e=l;l=l+48|0;f=e;i=+h[b>>3];k=(+h[b+16>>3]-i)*.027777777777777776;g=+h[b+8>>3];j=(+h[b+24>>3]-g)*.027777777777777776;c[f>>2]=1;c[f+4>>2]=d|0?81115:195059;h[f+8>>3]=k;h[f+16>>3]=j;h[f+24>>3]=i*.013888888888888888;h[f+32>>3]=g*.013888888888888888;uF(a,81121,f);l=e;return}function wf(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;e=l;l=l+16|0;Af(c[a+16>>2]|0,e+8|0,e);Bf(a,b,d,1);l=e;return}function xf(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0.0,v=0.0,w=0;t=l;l=l+128|0;s=t+112|0;q=t+104|0;p=t+96|0;e=t+88|0;n=t+16|0;o=t;k=c[a+16>>2]|0;j=T1((d*140|0)+140|0)|0;Af(k,t+116|0,t+80|0);v=+h[b>>3];k=n+48|0;h[k>>3]=v;u=+h[b+8>>3];h[n+56>>3]=u;c[e>>2]=~~(v+(v>=0.0?.5:-.5));c[e+4>>2]=~~(u+(u>=0.0?.5:-.5));i=o+8|0;e=j+(m4(j,81099,e)|0)|0;r=1;g=0;while(1){m=g+3|0;if((m|0)>=(d|0))break;c[n>>2]=c[k>>2];c[n+4>>2]=c[k+4>>2];c[n+8>>2]=c[k+8>>2];c[n+12>>2]=c[k+12>>2];f=1;while(1){if((f|0)==4){f=1;break}w=f+g|0;h[n+(f<<4)>>3]=+h[b+(w<<4)>>3];h[n+(f<<4)+8>>3]=+h[b+(w<<4)+8>>3];f=f+1|0}while(1){if((f|0)==7)break;kP(o,n,3,+(f|0)*.16666666666666666,0,0);u=+h[o>>3];v=+h[i>>3];c[p>>2]=~~(u+(u>=0.0?.5:-.5));c[p+4>>2]=~~(v+(v>=0.0?.5:-.5));f=f+1|0;e=e+(m4(e,81099,p)|0)|0}r=r+6|0;g=m}c[q>>2]=j;uF(a,81106,q);U1(j);f=r+-1|0;e=0;while(1){if((e|0)>=(r|0))break;c[s>>2]=((e|0)%(f|0)|0|0)!=0&1;uF(a,81111,s);e=e+1|0}oF(a,153599)|0;l=t;return}function yf(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=l;l=l+16|0;Af(c[a+16>>2]|0,e+8|0,e);Bf(a,b,d,0);l=e;return}function zf(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=81094;c[e+4>>2]=b;uF(a,81087,e);l=d;return}function Af(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0;switch(c[a+144>>2]|0){case 1:{e=10.0;a=1;break}case 2:{e=10.0;a=2;break}default:{e=0.0;a=0}}c[b>>2]=a;h[d>>3]=e;return}function Bf(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0,k=0.0,m=0.0;j=l;l=l+16|0;i=j+8|0;g=j;f=0;while(1){if((f|0)>=(d|0))break;m=+h[b+(f<<4)>>3];k=+h[b+(f<<4)+8>>3];c[g>>2]=~~(m+(m>=0.0?.5:-.5));c[g+4>>2]=~~(k+(k>=0.0?.5:-.5));uF(a,81099,g);f=f+1|0}if(e|0){k=+h[b>>3];m=+h[b+8>>3];c[i>>2]=~~(k+(k>=0.0?.5:-.5));c[i+4>>2]=~~(m+(m>=0.0?.5:-.5));uF(a,81099,i)}oF(a,153599)|0;l=j;return}function Cf(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;h=l;l=l+16|0;f=h;a:while(1){d=15828;while(1){e=c[d+4>>2]|0;if(!e)break;if(!(s2(e,b)|0)){g=6;break a}d=d+8|0}c[f>>2]=81255;c[f+4>>2]=b;gA(1,81229,f)|0;d=E4(b,45)|0;if(!d){d=81272;break}a[d>>0]=0}l=h;return d|0}function Df(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=l;l=l+16|0;h=i;d=c[46732]|0;if(!d){c[46733]=64;d=T1(64)|0;c[46732]=d;e=0}else e=0;while(1){g=b+1|0;f=a[b>>0]|0;if(!(f<<24>>24))break;b=c[46733]|0;if((e|0)>(b+-8|0)){d=b<<1;c[46733]=d;d=W1(c[46732]|0,d)|0;c[46732]=d;d=d+e|0}if(f<<24>>24<=-1){a[d>>0]=92;c[h>>2]=f&255;m4(d+1|0,81224,h)|0;b=g;d=d+4|0;e=e+4|0;continue}if(f<<24>>24==92){a[d>>0]=92;e=e+1|0;d=d+1|0}a[d>>0]=f;b=g;d=d+1|0;e=e+1|0}a[d>>0]=0;l=i;return c[46732]|0}function Ef(){var a=0,b=0;a=l;l=l+16|0;b=a;c[b>>2]=81255;c[b+4>>2]=91269;gA(0,83634,b)|0;l=a;return}function Ff(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0.0,i=0.0,j=0,k=0;e=l;l=l+32|0;f=e+8|0;j=e;b=b+8|0;k=c[b>>2]|0;c[j>>2]=k;c[j+4>>2]=k;uF(a,84223,j);i=(+h[d>>3]+ +h[d+16>>3])*.5;g=(+h[d+8>>3]+ +h[d+24>>3])*.5;c[f>>2]=c[b>>2];h[f+8>>3]=i;h[f+16>>3]=g;uF(a,84265,f);l=e;return}function Gf(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0.0,i=0.0,j=0.0,k=0.0;e=l;l=l+48|0;f=e;i=+h[d>>3];k=+h[d+16>>3]-i;g=+h[d+24>>3];j=g-+h[d+8>>3];g=+(~~(+h[a+232>>3]-+h[a+216>>3])>>>0)-g;c[f>>2]=c[b+8>>2];h[f+8>>3]=k;h[f+16>>3]=j;h[f+24>>3]=i;h[f+32>>3]=g;uF(a,84310,f);oF(a,84402)|0;l=e;return}function Hf(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return}function If(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,g=0.0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0.0;t=l;l=l+160|0;s=t+152|0;r=t+136|0;q=t+120|0;k=t+112|0;n=t+104|0;m=t+88|0;j=t+72|0;i=t+64|0;o=t;if(!a)qa(111282,84407,212,84426);if(!b)qa(111312,84407,213,84426);p=b+8|0;if(!(c[p>>2]|0))qa(111315,84407,214,84426);if(c[b+52>>2]|0){c[o>>2]=c[d>>2];c[o+4>>2]=c[d+4>>2];c[o+8>>2]=c[d+8>>2];c[o+12>>2]=c[d+12>>2];b=o+32|0;d=d+16|0;c[b>>2]=c[d>>2];c[b+4>>2]=c[d+4>>2];c[b+8>>2]=c[d+8>>2];c[b+12>>2]=c[d+12>>2];f=+h[o>>3];h[o+16>>3]=f;h[o+24>>3]=+h[o+40>>3];h[o+48>>3]=+h[b>>3];g=+h[o+8>>3];h[o+56>>3]=g;if(e<<24>>24){uF(a,84447,i);b=0;while(1){if((b|0)==4)break;u=+h[o+(b<<4)+8>>3];h[j>>3]=+h[o+(b<<4)>>3];h[j+8>>3]=u;uF(a,84450,j);b=b+1|0}h[m>>3]=f;h[m+8>>3]=g;uF(a,84450,m);m=c[p>>2]|0;c[n>>2]=4;c[n+4>>2]=m;uF(a,84457,n)}uF(a,84447,k);b=0;while(1){if((b|0)==4)break;u=+h[o+(b<<4)+8>>3];h[q>>3]=+h[o+(b<<4)>>3];h[q+8>>3]=u;uF(a,84450,q);b=b+1|0}h[r>>3]=f;h[r+8>>3]=g;uF(a,84450,r);r=c[p>>2]|0;c[s>>2]=4;c[s+4>>2]=r;uF(a,84472,s)}l=t;return}function Jf(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0.0;o=l;l=l+112|0;n=o+24|0;m=o+16|0;k=o;i=o+28|0;if(!b)qa(111282,84407,153,84488);if(!d)qa(111312,84407,154,84488);if(!(c[d+8>>2]|0))qa(111315,84407,155,84488);j=d+52|0;if(c[j>>2]|0){f=d+60|0;g=c[f>>2]|0;if((g|0)==100)g=18;else{tb[g&127](d);c[j>>2]=0;c[f>>2]=0;c[d+56>>2]=0;g=10}}else g=10;do if((g|0)==10){if(!((OF(d)|0)<<24>>24))break;f=A6(c[d+20>>2]|0)|0;if((c[d+24>>2]&-2|0)==6){Z4(f,i)|0;i=c[i+36>>2]|0;c[d+56>>2]=i;f=j2(0,i,1,1,f,0)|0;c[j>>2]=f;a[d+16>>0]=1}else f=c[j>>2]|0;if(f|0)c[d+60>>2]=100;PF(d);if(c[j>>2]|0)g=18}while(0);if((g|0)==18){p=+h[e+8>>3]-+(c[d+36>>2]|0);h[k>>3]=+h[e>>3]-+(c[d+32>>2]|0);h[k+8>>3]=p;uF(b,84506,k);if(!(a[d+16>>0]|0)){c[m>>2]=c[d+12>>2];uF(b,84537,m)}else zM(b,d);uF(b,84552,n)}l=o;return}function Kf(a){a=a|0;h2(c[a+52>>2]|0,c[a+56>>2]|0)|0;return}function Lf(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;g=l;l=l+80|0;f=g+48|0;if(!a)qa(111282,84407,121,84562);e=c[a+16>>2]|0;if(!e)qa(99902,84407,123,84562);if(!b)qa(111312,84407,124,84562);d=b+8|0;if(!(c[d>>2]|0))qa(111315,84407,125,84562);if(!(c[e+8>>2]|0))qa(138879,84407,128,84562);else{uF(a,84582,g);uF(a,84591,g+8|0);uF(a,84618,g+16|0);uF(a,84643,g+24|0);uF(a,84672,g+32|0);uF(a,84700,g+40|0);c[f>>2]=c[d>>2];uF(a,84707,f);uF(a,84746,g+56|0);uF(a,111008,g+64|0);l=g;return}}function Mf(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0,k=0,m=0.0;i=l;l=l+128|0;g=i+80|0;f=i;if(!a)qa(111282,84407,97,84751);if(!b)qa(111312,84407,98,84751);e=c[b+8>>2]|0;if(!e)qa(111315,84407,99,84751);else{m=+h[d>>3];j=~~(m+(m>=0.0?.5:-.5));m=+h[d+8>>3];b=~~(m+(m>=0.0?.5:-.5));m=+h[d+16>>3];k=~~(m+(m>=0.0?.5:-.5));m=+h[d+24>>3];d=~~(m+(m>=0.0?.5:-.5));c[f>>2]=2;c[f+4>>2]=5;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;c[f+20>>2]=-1;c[f+24>>2]=1;c[f+28>>2]=-1;c[f+32>>2]=0;h[f+40>>3]=0.0;c[f+48>>2]=0;c[f+52>>2]=0;c[f+56>>2]=0;c[f+60>>2]=0;c[f+64>>2]=0;c[f+68>>2]=5;c[f+72>>2]=0;c[f+76>>2]=e;uF(a,84770,f);c[g>>2]=j;c[g+4>>2]=b;c[g+8>>2]=j;c[g+12>>2]=d;c[g+16>>2]=k;c[g+20>>2]=d;c[g+24>>2]=k;c[g+28>>2]=b;c[g+32>>2]=j;c[g+36>>2]=b;uF(a,84828,g);l=i;return}}function Nf(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,g=0.0,i=0.0,j=0.0,k=0,m=0,n=0,o=0;o=l;l=l+96|0;n=o+56|0;m=o+32|0;k=o;i=+h[d>>3];j=+h[d+16>>3]-i;f=+h[d+24>>3];g=f-+h[d+8>>3];if(!a)qa(111282,84407,53,84860);if(!b)qa(111312,84407,54,84860);e=b+8|0;if(!(c[e>>2]|0))qa(111315,84407,55,84860);oF(a,84879)|0;oF(a,c[e>>2]|0)|0;e=a+360|0;f=-f;if(!(c[e>>2]|0)){h[n>>3]=j;h[n+8>>3]=g;h[n+16>>3]=i;h[n+24>>3]=f;uF(a,85008,n)}else{h[k>>3]=g;h[k+8>>3]=j;h[k+16>>3]=i;h[k+24>>3]=f;uF(a,84899,k);c[m>>2]=c[e>>2];h[m+8>>3]=i;h[m+16>>3]=f;uF(a,84978,m)}oF(a,85087)|0;l=o;return}function Of(a){a=a|0;var b=0,c=0;b=jC(a)|0;while(1){if(!b)break;Pf(b);b=kC(a,b)|0}c=jC(a)|0;while(1){if(!c)break;b=XA(a,c)|0;while(1){if(!b)break;Qf(b);b=ZA(a,b)|0}c=kC(a,c)|0}return}function Pf(a){a=a|0;var b=0,d=0;TC(a,137447,304,1)|0;sP(a);qQ(a,c[(c[(xC(a)|0)+16>>2]|0)+116>>2]&1);a=a+16|0;c[(c[a>>2]|0)+176>>2]=0;b=JK(20)|0;d=c[a>>2]|0;c[d+172>>2]=b;c[d+184>>2]=0;d=JK(20)|0;b=c[a>>2]|0;c[b+180>>2]=d;c[b+200>>2]=0;b=JK(12)|0;d=c[a>>2]|0;c[d+196>>2]=b;c[d+192>>2]=0;d=JK(12)|0;b=c[a>>2]|0;c[b+188>>2]=d;c[b+208>>2]=0;b=JK(12)|0;a=c[a>>2]|0;c[a+204>>2]=b;c[a+216>>2]=1;return}function Qf(d){d=d|0;var e=0,f=0,g=0,h=0,i=0;TC(d,137460,176,1)|0;tP(d)|0;h=ZO(d,c[47174]|0,1,0)|0;g=d+16|0;c[(c[g>>2]|0)+156>>2]=h;h=aP(c[((c[d>>2]&3|0)==3?d:d+48|0)+40>>2]|0,c[47168]|0,195059)|0;i=aP(c[((c[d>>2]&3|0)==2?d:d+-48|0)+40>>2]|0,c[47168]|0,195059)|0;e=c[g>>2]|0;f=e+154|0;b[f>>1]=1;b[e+168>>1]=1;if((h|0)==(i|0)&(a[h>>0]|0)!=0){b[f>>1]=1e3;i=e+156|0;c[i>>2]=(c[i>>2]|0)*100}if(Mk(d)|0){i=c[g>>2]|0;b[i+154>>1]=0;c[i+156>>2]=0}i=(ZO(d,c[47187]|0,0,0)|0)&255;a[(c[g>>2]|0)+152>>0]=i;i=(ZO(d,c[47175]|0,1,0)|0)&65535;b[(c[g>>2]|0)+170>>1]=i;return}function Rf(a){a=a|0;var b=0,d=0;Sf(c[(c[a+16>>2]|0)+192>>2]|0);d=jC(a)|0;while(1){if(!d)break;b=XA(a,d)|0;while(1){if(!b)break;YP(b);b=ZA(a,b)|0}Tf(d);d=kC(a,d)|0}Uf(a);return}function Sf(b){b=b|0;var d=0,e=0,f=0,g=0;while(1){if(!b)break;f=b+16|0;g=c[(c[f>>2]|0)+164>>2]|0;Vf(b);d=c[f>>2]|0;if((a[d+156>>0]|0)!=1){b=g;continue}e=c[d+180>>2]|0;if(e){U1(e);d=c[f>>2]|0}e=c[d+172>>2]|0;if(e){U1(e);d=c[f>>2]|0}U1(d);U1(b);b=g}return}function Tf(a){a=a|0;var b=0,d=0,e=0;e=a+16|0;b=c[e>>2]|0;d=c[b+172>>2]|0;if(d){U1(d);b=c[e>>2]|0}d=c[b+180>>2]|0;if(d){U1(d);b=c[e>>2]|0}d=c[b+188>>2]|0;if(d){U1(d);b=c[e>>2]|0}d=c[b+196>>2]|0;if(d){U1(d);b=c[e>>2]|0}d=c[b+204>>2]|0;if(d){U1(d);b=c[e>>2]|0}CK(c[b+104>>2]|0);CK(c[(c[e>>2]|0)+108>>2]|0);b=c[(c[e>>2]|0)+8>>2]|0;if(b|0)tb[c[(c[b+4>>2]|0)+4>>2]&127](a);VC(a,137447)|0;return}function Uf(a){a=a|0;var d=0,e=0,f=0;d=OD(a)|0;while(1){if(!d)break;Uf(d);d=PD(d)|0}if(TC(a,137483,0,1)|0){f=a+16|0;d=c[f>>2]|0;e=c[d+184>>2]|0;if(e){U1(e);d=c[f>>2]|0}e=c[d+268>>2]|0;if(e){U1(e);d=c[f>>2]|0}e=c[d+216>>2]|0;if(e){U1(e);d=c[f>>2]|0}do if(c[d+196>>2]|0){e=b[d+236>>1]|0;while(1){if((e|0)>(b[d+238>>1]|0))break;U1(c[(c[d+196>>2]|0)+(e<<6)+12>>2]|0);e=e+1|0;d=c[f>>2]|0}e=c[d+196>>2]|0;if((b[d+236>>1]|0)==-1){U1(e+-64|0);break}else{U1(e);break}}while(0);if((yC(a)|0)!=(a|0)){CK(c[(c[f>>2]|0)+12>>2]|0);VC(a,137483)|0}}return}function Vf(a){a=a|0;var b=0,d=0,e=0;e=a+16|0;d=c[e>>2]|0;b=c[d+176>>2]|0;while(1){a=b+-1|0;if((b|0)<=0)break;b=c[(c[d+172>>2]|0)+(a<<2)>>2]|0;ih(b);U1(c[b+16>>2]|0);U1(b);b=a;d=c[e>>2]|0}b=c[d+184>>2]|0;while(1){a=b+-1|0;if((b|0)<=0)break;b=c[(c[(c[e>>2]|0)+180>>2]|0)+(a<<2)>>2]|0;ih(b);U1(c[b+16>>2]|0);U1(b);b=a}return}function Wf(a){a=a|0;if(tB(a)|0)Xf(a);tM(a);return}function Xf(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;h=l;l=l+48|0;g=h+32|0;f=h;b=lH(a,-1,8)|0;d=mH(a,0,f)|0;kH(a,2,8,f)|0;d=(d|0)==0;e=(b|0)<0;if(e&d)Yf(a);else{if(d)c[f+16>>2]=3;else b=e?8:b;c[f+8>>2]=b;c[f+20>>2]=0;e=GG(a,g,0)|0;b=c[g>>2]|0;do if((b|0)==1){Yf(a);b=0}else{if(c[(c[(c[a+16>>2]|0)+8>>2]|0)+84>>2]|0){Yf(a);b=0;break}c[f+12>>2]=1;d=0;while(1){if((d|0)>=(b|0))break;b=c[e+(d<<2)>>2]|0;Zf(b,a);Yf(b);d=d+1|0;b=c[g>>2]|0}_f(a);jH(c[g>>2]|0,e,a,f)|0;$f(a);ag(c[g>>2]|0,e,a);b=0}while(0);while(1){if((b|0)>=(c[g>>2]|0))break;f=e+(b<<2)|0;U1(c[(c[(c[f>>2]|0)+16>>2]|0)+8>>2]|0);Uf(c[f>>2]|0);wC(a,c[f>>2]|0)|0;b=b+1|0}U1(e)}l=h;return}function Yf(a){a=a|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;m=l;l=l+48|0;k=m+40|0;e=m;i=ZO(a,GA(a,0,85102,0)|0,-1,1)|0;oQ(a,10);d=Lk(a,e)|0;cg(a,a);Of(a);f=(i|0)==1;g=e+32|0;h=(i|0)==2;i=(i|0)==3;j=e+28|0;e=e+24|0;while(1){xj(a,d);if(f){d=3;break}if(c[g>>2]|0){gA(0,85108,k)|0;c[e>>2]=0;d=0}Hh(a,(d|0)!=0&1);if(h){d=7;break}Ki(a,d);if(i){d=9;break}n=(c[j>>2]|0)+-1|0;c[j>>2]=n;if(!((n|0)!=0&(c[e>>2]|0)!=0)){d=11;break}}if((d|0)==3)dg(a,1);else if((d|0)==7)dg(a,2);else if((d|0)==9)dg(a,2);else if((d|0)==11){if(b[(c[a+16>>2]|0)+136>>1]&16)eg(a);rk(a);ig(a);if((dP(QA(a,85199)|0)|0)<<24>>24)ll(a)}l=m;return}function Zf(b,d){b=b|0;d=d|0;var e=0,f=0;TC(b,137483,280,1)|0;e=JK(96)|0;b=c[b+16>>2]|0;c[b+8>>2]=e;d=c[d+16>>2]|0;f=c[d+8>>2]|0;h[e>>3]=+h[f>>3];h[e+24>>3]=+h[f+24>>3];c[b+144>>2]=c[d+144>>2];a[b+115>>0]=a[d+115>>0]|0;c[b+116>>2]=c[d+116>>2];c[b+248>>2]=c[d+248>>2];c[b+252>>2]=c[d+252>>2];c[b+244>>2]=c[d+244>>2];return}function _f(a){a=a|0;var b=0,d=0,e=0;b=JK((tB(a)|0)<<4)|0;d=jC(a)|0;while(1){if(!d)break;e=c[d+16>>2]|0;c[e+132>>2]=b;h[b>>3]=+h[e+16>>3]*.013888888888888888;h[b+8>>3]=+h[e+24>>3]*.013888888888888888;b=b+16|0;d=kC(a,d)|0}return}function $f(a){a=a|0;var b=0,d=0,e=0,f=0;e=c[(c[(jC(a)|0)+16>>2]|0)+132>>2]|0;b=e;d=jC(a)|0;while(1){if(!d)break;f=c[d+16>>2]|0;c[f+132>>2]=0;h[f+16>>3]=+h[b>>3]*72.0;h[f+24>>3]=+h[b+8>>3]*72.0;b=b+16|0;d=kC(a,d)|0}U1(e);return}function ag(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;e=0;f=0;while(1){if((e|0)>=(a|0))break;i=(c[(c[(c[b+(e<<2)>>2]|0)+16>>2]|0)+180>>2]|0)+f|0;e=e+1|0;f=i}i=d+16|0;c[(c[i>>2]|0)+180>>2]=f;g=JK((f<<2)+4|0)|0;c[(c[i>>2]|0)+184>>2]=g;g=0;e=1;while(1){if((g|0)>=(a|0))break;h=(c[b+(g<<2)>>2]|0)+16|0;f=1;while(1){d=c[h>>2]|0;if((f|0)>(c[d+180>>2]|0))break;d=FG(c[(c[d+184>>2]|0)+(f<<2)>>2]|0)|0;c[(c[(c[i>>2]|0)+184>>2]|0)+(e<<2)>>2]=d;bg(c[(c[(c[h>>2]|0)+184>>2]|0)+(f<<2)>>2]|0,d);f=f+1|0;e=e+1|0}g=g+1|0}return}function bg(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;TC(d,137483,280,1)|0;g=d+16|0;d=(c[g>>2]|0)+16|0;f=b+16|0;b=(c[f>>2]|0)+16|0;c[d>>2]=c[b>>2];c[d+4>>2]=c[b+4>>2];c[d+8>>2]=c[b+8>>2];c[d+12>>2]=c[b+12>>2];c[d+16>>2]=c[b+16>>2];c[d+20>>2]=c[b+20>>2];c[d+24>>2]=c[b+24>>2];c[d+28>>2]=c[b+28>>2];b=c[f>>2]|0;d=c[g>>2]|0;a[d+275>>0]=a[b+275>>0]|0;d=d+48|0;b=b+48|0;e=d+64|0;do{c[d>>2]=c[b>>2];d=d+4|0;b=b+4|0}while((d|0)<(e|0));b=c[(c[f>>2]|0)+180>>2]|0;c[(c[g>>2]|0)+180>>2]=b;d=JK((b<<2)+4|0)|0;c[(c[g>>2]|0)+184>>2]=d;d=1;while(1){e=c[f>>2]|0;if((d|0)>(b|0))break;e=FG(c[(c[e+184>>2]|0)+(d<<2)>>2]|0)|0;c[(c[(c[g>>2]|0)+184>>2]|0)+(d<<2)>>2]=e;bg(c[(c[(c[f>>2]|0)+184>>2]|0)+(d<<2)>>2]|0,e);d=d+1|0}f=e+12|0;c[(c[g>>2]|0)+12>>2]=c[f>>2];c[f>>2]=0;return}function cg(a,b){a=a|0;b=b|0;if((yC(a)|0)!=(a|0))TC(a,137483,280,1)|0;if((a|0)==(b|0))c[(c[(yC(a)|0)+16>>2]|0)+188>>2]=a;a=OD(a)|0;while(1){if(!a)break;cg(a,b);a=PD(a)|0}return}function dg(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0;m=l;l=l+1040|0;k=m+8|0;j=m;e=m+16|0;f=GA(a,1,87171,195059)|0;g=GA(a,1,85242,195059)|0;h=(b|0)>0;d=(b|0)==1;b=jC(a)|0;while(1){if(!b)break;if(h?(i=b+16|0,c[j>>2]=c[(c[i>>2]|0)+232>>2],m4(e,137395,j)|0,KA(b,f,e)|0,!d):0){c[k>>2]=c[(c[i>>2]|0)+236>>2];m4(e,137395,k)|0;KA(b,g,e)|0}b=kC(a,b)|0}l=m;return}function eg(a){a=a|0;var b=0,c=0,d=0;c=ND(a,86675,0)|0;if(c|0){b=jC(c)|0;while(1){if(!b)break;d=kC(c,b)|0;qh(a,b);fg(a,b);Tf(b);vC(a,b)|0;b=d}RD(a,c)|0}return}function fg(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;j=c[(c[b+16>>2]|0)+232>>2]|0;i=a+16|0;a=c[(c[i>>2]|0)+196>>2]|0;d=c[a+(j<<6)>>2]|0;h=a+(j<<6)+4|0;g=0;e=0;while(1){if((e|0)>=(d|0)){f=7;break}f=c[(c[h>>2]|0)+(e<<2)>>2]|0;e=e+1|0;if((f|0)==(b|0)){f=4;break}else g=f}if((f|0)==4){while(1){if((e|0)>=(d|0))break;f=c[a+(j<<6)+4>>2]|0;c[f+(e+-1<<2)>>2]=c[f+(e<<2)>>2];f=c[(c[i>>2]|0)+196>>2]|0;e=e+1|0;d=c[f+(j<<6)>>2]|0;a=f;f=4}c[a+(j<<6)>>2]=d+-1}else if((f|0)==7?(g|0)!=(b|0):0)qa(85208,85215,248,85225);return}function gg(a){a=a|0;return c[(c[(yC(a)|0)+16>>2]|0)+188>>2]|0}function hg(b,c){b=b|0;c=c|0;var d=0;d=a[b+28>>0]|0;if(a[c+28>>0]|0)if(d<<24>>24){d=~~(+h[b>>3]-+h[c>>3]);if(!d)d=~~(+h[b+8>>3]-+h[c+8>>3])}else d=-1;else d=d<<24>>24!=0&1;return d|0}function ig(a){a=a|0;jg(a,1);return}function jg(d,e){d=d|0;e=e|0;var f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0.0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0.0;Z=l;l=l+656|0;O=Z+592|0;N=Z+552|0;f=Z+544|0;T=Z+96|0;U=Z;Y=Z+632|0;V=d+16|0;X=b[(c[V>>2]|0)+136>>1]&14;P=X&65535;Q=T+16|0;c[Q>>2]=Z+368;R=U+16|0;c[R>>2]=Z+192;do if(X<<16>>16){S=X<<16>>16==4;do if(S){kg(d);if(!(a[(c[(c[d+60>>2]|0)+16>>2]|0)+113>>0]&1))A=9;else{gA(0,85248,f)|0;A=9}}else if(X<<16>>16==8){kg(d);if(!(a[(c[(c[d+60>>2]|0)+16>>2]|0)+113>>0]&1)){rQ(d,0);n=0;m=0;k=0;break}else{lg(d);rQ(d,1);n=0;m=0;k=0;break}}else A=9;while(0);if((A|0)==9){jl(d);if(FM()|0)break;W=JK(96)|0;K=c[(c[V>>2]|0)+248>>2]|0;c[Y+8>>2]=(K|0)/4|0;c[Y+12>>2]=K;k=JK(512)|0;F=Y+4|0;c[F>>2]=0;c[Y>>2]=0;j=c[V>>2]|0;C=b[j+236>>1]|0;D=0;L=0;M=k;E=k;m=k;n=k;o=k;H=0;I=0;a:while(1){if((C|0)>(b[j+238>>1]|0))break;p=c[j+196>>2]|0;i=c[p+(C<<6)>>2]|0;G=i+D|0;g=c[p+(C<<6)+4>>2]|0;f=c[g>>2]|0;if(!f)f=H;else{_=+(H|0);f=c[f+16>>2]|0;y=+h[f+16>>3]-+h[f+88>>3];f=~~(y>_?_:y)}if((i|0)!=0?(J=c[g+(i+-1<<2)>>2]|0,(J|0)!=0):0){y=+(I|0);g=c[J+16>>2]|0;_=+h[g+96>>3]+ +h[g+16>>3];g=~~(_=(i|0))break;k=c[(c[f+(C<<6)+4>>2]|0)+(x<<2)>>2]|0;w=k+16|0;f=c[w>>2]|0;i=c[f+112>>2]|0;if(i){i=i+16|0;j=c[(c[i>>2]|0)+96>>2]|0;if(!j){A=21;break a}s=j+56|0;f=f+16|0;c[s>>2]=c[f>>2];c[s+4>>2]=c[f+4>>2];c[s+8>>2]=c[f+8>>2];c[s+12>>2]=c[f+12>>2];a[(c[(c[i>>2]|0)+96>>2]|0)+81>>0]=1;f=c[w>>2]|0}if((a[f+156>>0]|0)!=0?(kb[c[17300>>2]&63](k)|0)<<24>>24==0:0){q=t;f=r;j=u;k=v;i=o}else{s=0;q=t;j=u;k=v;A=25}b:do if((A|0)==25){while(1){A=0;p=c[w>>2]|0;i=c[(c[p+180>>2]|0)+(s<<2)>>2]|0;if(!i)break;switch(a[(c[i+16>>2]|0)+112>>0]|0){case 6:case 4:{f=q;i=r;break}default:{mg(i,1,16,64);f=q+1|0;c[r+(q<<2)>>2]=i;if(!(f&127)){g=MK(g,(q<<2)+516|0)|0;i=g;j=g;k=g;n=g;o=g}else i=r}}s=s+1|0;q=f;r=i;A=25}f=c[p+188>>2]|0;c:do if(!f)i=o;else{s=0;i=o;while(1){f=c[f+(s<<2)>>2]|0;if(!f)break c;mg(f,2,0,128);o=q+1|0;c[r+(q<<2)>>2]=f;if(!(o&127)){g=MK(i,(q<<2)+516|0)|0;f=g;j=g;k=g;n=g;i=g}else f=r;p=c[w>>2]|0;s=s+1|0;q=o;r=f;f=c[p+188>>2]|0}}while(0);f=c[p+204>>2]|0;if(!f)f=r;else{if(!(a[p+156>>0]|0)){v=p+96|0;_=+h[v>>3];s=p+240|0;h[v>>3]=+h[s>>3];h[s>>3]=_;s=0;p=r}else{s=0;p=r}while(1){f=c[f+(s<<2)>>2]|0;if(!f){f=p;break b}mg(f,0,0,128);o=q+1|0;c[p+(q<<2)>>2]=f;if(!(o&127)){g=MK(n,(q<<2)+516|0)|0;f=g;j=g;k=g;n=g;i=g}else f=p;s=s+1|0;q=o;p=f;f=c[(c[w>>2]|0)+204>>2]|0}}}while(0);u=c[V>>2]|0;w=c[u+196>>2]|0;x=x+1|0;t=q;r=f;q=u;u=j;v=k;o=i;i=c[w+(C<<6)>>2]|0;f=w}C=C+1|0;D=G;L=t;M=r;E=u;j=q;m=v;k=g;H=B;I=z}if((A|0)==21)qa(85316,85329,313,85342);c[Y>>2]=H;c[F>>2]=I;o4(E,L,4,58);c[W+84>>2]=JK((D<<5)+11520|0)|0;c[Y+16>>2]=JK(C<<5)|0;d:do if(X<<16>>16==2){f=(c[V>>2]|0)+192|0;while(1){g=c[f>>2]|0;if(!g)break d;i=g+16|0;f=c[i>>2]|0;if((a[f+156>>0]|0)==1?(c[f+104>>2]|0)!=0:0){og(g);f=c[i>>2]|0}f=f+164|0}}while(0);z=U+48|0;A=U+-48|0;B=T+48|0;C=T+-48|0;y=+(K|0);x=0;e:while(1){if((x|0)>=(L|0))break;v=M+(x<<2)|0;r=c[v>>2]|0;s=pg(r)|0;t=r+16|0;g=c[t>>2]|0;if(!(a[g+44>>0]|0)){g=(a[g+84>>0]|0)==0?s:r;f=g;g=c[g+16>>2]|0}else f=r;i=f+16|0;if(c[g+164>>2]&32){g=c[Q>>2]|0;W6(g|0,c[i>>2]|0,176)|0;n=T;o=f;p=n+48|0;do{c[n>>2]=c[o>>2];n=n+4|0;o=o+4|0}while((n|0)<(p|0));c[Q>>2]=g;o=c[f>>2]&3;n=c[T>>2]&3;c[((n|0)==3?T:B)+40>>2]=c[((o|0)==2?f:f+-48|0)+40>>2];c[((n|0)==2?T:C)+40>>2]=c[((o|0)==3?f:f+48|0)+40>>2];n=g+16|0;o=(c[i>>2]|0)+56|0;p=n+40|0;do{c[n>>2]=c[o>>2];n=n+4|0;o=o+4|0}while((n|0)<(p|0));n=g+56|0;o=(c[i>>2]|0)+16|0;p=n+40|0;do{c[n>>2]=c[o>>2];n=n+4|0;o=o+4|0}while((n|0)<(p|0));a[g+112>>0]=1;c[g+116>>2]=f;f=T}q=f+16|0;w=1;f=x;while(1){u=f+1|0;if((u|0)>=(L|0))break;j=M+(u<<2)|0;f=c[j>>2]|0;if((s|0)!=(pg(f)|0))break;if(!(a[(c[t>>2]|0)+113>>0]|0)){k=f+16|0;g=c[k>>2]|0;if(!(a[g+44>>0]|0)){g=(a[g+84>>0]|0)==0?s:f;f=g;g=c[g+16>>2]|0}i=f+16|0;if(c[g+164>>2]&32){g=c[R>>2]|0;W6(g|0,c[i>>2]|0,176)|0;n=U;o=f;p=n+48|0;do{c[n>>2]=c[o>>2];n=n+4|0;o=o+4|0}while((n|0)<(p|0));c[R>>2]=g;o=c[f>>2]&3;n=c[U>>2]&3;c[((n|0)==3?U:z)+40>>2]=c[((o|0)==2?f:f+-48|0)+40>>2];c[((n|0)==2?U:A)+40>>2]=c[((o|0)==3?f:f+48|0)+40>>2];n=g+16|0;o=(c[i>>2]|0)+56|0;p=n+40|0;do{c[n>>2]=c[o>>2];n=n+4|0;o=o+4|0}while((n|0)<(p|0));n=g+56|0;o=(c[i>>2]|0)+16|0;p=n+40|0;do{c[n>>2]=c[o>>2];n=n+4|0;o=o+4|0}while((n|0)<(p|0));a[g+112>>0]=1;c[g+116>>2]=f}i=c[q>>2]|0;f=g+16|0;n=N;o=i+16|0;p=n+40|0;do{c[n>>2]=c[o>>2];n=n+4|0;o=o+4|0}while((n|0)<(p|0));n=O;o=f;p=n+40|0;do{c[n>>2]=c[o>>2];n=n+4|0;o=o+4|0}while((n|0)<(p|0));if(hg(N,O)|0)break;f=g+56|0;n=N;o=i+56|0;p=n+40|0;do{c[n>>2]=c[o>>2];n=n+4|0;o=o+4|0}while((n|0)<(p|0));n=O;o=f;p=n+40|0;do{c[n>>2]=c[o>>2];n=n+4|0;o=o+4|0}while((n|0)<(p|0));if(hg(N,O)|0)break;K=c[t>>2]|0;if((c[K+164>>2]&15|0)==2?(c[K+96>>2]|0)!=(c[(c[k>>2]|0)+96>>2]|0):0)break;if(c[(c[(c[j>>2]|0)+16>>2]|0)+164>>2]&64|0)break}w=w+1|0;f=u}if(S){if((w|0)==1)f=O;else f=JK(w<<2)|0;c[f>>2]=pg(c[v>>2]|0)|0;g=1;while(1){if((g|0)>=(w|0))break;c[f+(g<<2)>>2]=c[v+(g<<2)>>2];g=g+1|0}PM(d,f,w,P,17296);if((w|0)>1)U1(f);x=u;continue}f=c[r>>2]&3;K=c[((f|0)==3?r:r+48|0)+40>>2]|0;f=c[((f|0)==2?r:r+-48|0)+40>>2]|0;g=c[K+16>>2]|0;i=c[g+232>>2]|0;if((K|0)!=(f|0))if((i|0)==(c[(c[f+16>>2]|0)+232>>2]|0)){qg(d,Y,W,M,x,w,P);x=u;continue}else{rg(d,Y,W,M,x,w,P);x=u;continue}f=c[V>>2]|0;do if((i|0)==(b[f+238>>1]|0))if((i|0)>0){f=~~(+h[(c[(c[c[(c[f+196>>2]|0)+(i+-1<<6)+4>>2]>>2]|0)+16>>2]|0)+24>>3]-+h[g+24>>3]);break}else{f=~~+h[g+80>>3];break}else if((i|0)==(b[f+236>>1]|0)){f=~~(+h[g+24>>3]-+h[(c[(c[c[(c[f+196>>2]|0)+(i+1<<6)+4>>2]>>2]|0)+16>>2]|0)+24>>3]);break}else{f=c[f+196>>2]|0;_=+h[g+24>>3];K=~~(+h[(c[(c[c[f+(i+-1<<6)+4>>2]>>2]|0)+16>>2]|0)+24>>3]-_);f=~~(_-+h[(c[(c[c[f+(i+1<<6)+4>>2]>>2]|0)+16>>2]|0)+24>>3]);f=(K|0)<(f|0)?K:f;break}while(0);lO(W,M,x,w,y,+((f|0)/2|0|0),17296);f=0;while(1){if((f|0)>=(w|0)){x=u;continue e}g=c[(c[(c[M+(f+x<<2)>>2]|0)+16>>2]|0)+96>>2]|0;if(g|0)zP(d,g);f=f+1|0}}f=(c[V>>2]|0)+192|0;while(1){g=c[f>>2]|0;if(!g)break;i=g+16|0;f=c[i>>2]|0;if((a[f+156>>0]|0)==1?(c[f+104>>2]|0)!=0:0){og(g);zP(d,c[(c[i>>2]|0)+104>>2]|0);f=c[i>>2]|0}f=f+164|0}if(!e){n=W;k=W}else{sg(d);n=W;k=W}}f:do if((c[47197]|0)!=0|(c[47198]|0)!=0?(c[47203]|0)!=0|(c[47202]|0)!=0:0){j=jC(d)|0;while(1){if(!j)break f;g:do if(c[47197]|0){f=_A(d,j)|0;while(1){if(!f)break g;g=f+-48|0;i=(c[f>>2]&3|0)==2?f:g;if(c[(c[i+16>>2]|0)+100>>2]|0){tO(i,1)|0;zP(d,c[(c[((c[f>>2]&3|0)==2?f:g)+16>>2]|0)+100>>2]|0)}f=$A(d,f)|0}}while(0);h:do if(c[47198]|0){f=XA(d,j)|0;while(1){if(!f)break h;g=f+16|0;if(c[(c[g>>2]|0)+104>>2]|0?tO(f,0)|0:0)zP(d,c[(c[g>>2]|0)+104>>2]|0);f=ZA(d,f)|0}}while(0);j=kC(d,j)|0}}while(0);switch(X&15){case 4:case 8:break;default:{U1(m);U1(c[n+84>>2]|0);U1(k);U1(c[Y+16>>2]|0);GM()}}c[47138]=1;c[47139]=1}while(0);l=Z;return}function kg(a){a=a|0;var b=0,d=0,e=0.0,f=0;b=jC(a)|0;while(1){if(!b)break;d=c[b+16>>2]|0;if(c[d+204>>2]|0){f=d+96|0;e=+h[f>>3];d=d+240|0;h[f>>3]=+h[d>>3];h[d>>3]=e}b=kC(a,b)|0}return}function lg(b){b=b|0;var d=0,e=0,f=0,g=0;d=(c[b+16>>2]|0)+192|0;a:while(1){f=c[d>>2]|0;if(!f){d=12;break}g=f+16|0;d=c[g>>2]|0;do if((a[d+156>>0]|0)==1){e=c[d+112>>2]|0;if(!e){e=c[d+104>>2]|0;if(!e)break;og(f);d=e}else{e=c[(c[e+16>>2]|0)+96>>2]|0;if(!e){d=6;break a}f=e+56|0;d=d+16|0;c[f>>2]=c[d>>2];c[f+4>>2]=c[d+4>>2];c[f+8>>2]=c[d+8>>2];c[f+12>>2]=c[d+12>>2];a[e+81>>0]=1;d=e}zP(b,d);d=c[g>>2]|0}while(0);d=d+164|0}if((d|0)==6)qa(85516,85329,234,85535);else if((d|0)==12)return}function mg(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0;do if(!d){g=c[b>>2]&3;d=c[((g|0)==3?b:b+48|0)+40>>2]|0;g=c[((g|0)==2?b:b+-48|0)+40>>2]|0;if((d|0)!=(g|0)){d=(c[(c[d+16>>2]|0)+232>>2]|0)==(c[(c[g+16>>2]|0)+232>>2]|0)?2:1;break}d=c[b+16>>2]|0;if(!(a[d+44>>0]|0))d=(a[d+84>>0]|0)==0?8:4;else d=4}while(0);a:do if(!e)switch(d|0){case 1:{e=c[b>>2]&3;e=(c[(c[(c[((e|0)==3?b:b+48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)<(c[(c[(c[((e|0)==2?b:b+-48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)?16:32;break a}case 2:{e=c[b>>2]&3;e=(c[(c[(c[((e|0)==3?b:b+48|0)+40>>2]|0)+16>>2]|0)+236>>2]|0)<(c[(c[(c[((e|0)==2?b:b+-48|0)+40>>2]|0)+16>>2]|0)+236>>2]|0)?16:32;break a}default:{e=16;break a}}while(0);c[(c[b+16>>2]|0)+164>>2]=d|f|e;return}function ng(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0;D=l;l=l+624|0;z=D+584|0;y=D+544|0;s=D+368|0;e=D+192|0;t=D+96|0;v=D;u=t+16|0;c[u>>2]=s;w=v+16|0;c[w>>2]=e;C=c[b>>2]|0;B=c[d>>2]|0;x=C+16|0;q=c[x>>2]|0;d=c[q+164>>2]|0;f=d&15;A=B+16|0;b=c[A>>2]|0;g=c[b+164>>2]&15;do if((g|0)==(f|0)){p=pg(C)|0;r=pg(B)|0;n=c[p>>2]|0;g=n&3;f=c[(c[((g|0)==3?p:p+48|0)+40>>2]|0)+16>>2]|0;g=c[(c[((g|0)==2?p:p+-48|0)+40>>2]|0)+16>>2]|0;i=(c[f+232>>2]|0)-(c[g+232>>2]|0)|0;o=c[r>>2]|0;m=o&3;k=c[(c[((m|0)==3?r:r+48|0)+40>>2]|0)+16>>2]|0;m=c[(c[((m|0)==2?r:r+-48|0)+40>>2]|0)+16>>2]|0;j=(c[k+232>>2]|0)-(c[m+232>>2]|0)|0;i=(i|0)>-1?i:0-i|0;j=(j|0)>-1?j:0-j|0;if((i|0)!=(j|0)){b=i-j|0;break}g=~~(+h[f+16>>3]-+h[g+16>>3]);g=(g|0)>-1?g:0-g|0;f=~~(+h[k+16>>3]-+h[m+16>>3]);f=(f|0)>-1?f:0-f|0;if((g|0)!=(f|0)){b=g-f|0;break}g=n>>>4;f=o>>>4;if((g|0)!=(f|0)){b=g-f|0;break}if(!(a[q+44>>0]|0)){d=(a[q+84>>0]|0)==0?p:C;g=d;d=c[(c[d+16>>2]|0)+164>>2]|0}else g=C;f=g+16|0;if(d&32){W6(s|0,c[f>>2]|0,176)|0;i=t;j=g;k=i+48|0;do{c[i>>2]=c[j>>2];i=i+4|0;j=j+4|0}while((i|0)<(k|0));c[u>>2]=s;j=c[g>>2]&3;i=c[t>>2]&3;c[((i|0)==3?t:t+48|0)+40>>2]=c[((j|0)==2?g:g+-48|0)+40>>2];c[((i|0)==2?t:t+-48|0)+40>>2]=c[((j|0)==3?g:g+48|0)+40>>2];i=s+16|0;j=(c[f>>2]|0)+56|0;k=i+40|0;do{c[i>>2]=c[j>>2];i=i+4|0;j=j+4|0}while((i|0)<(k|0));i=s+56|0;j=(c[f>>2]|0)+16|0;k=i+40|0;do{c[i>>2]=c[j>>2];i=i+4|0;j=j+4|0}while((i|0)<(k|0));a[s+112>>0]=1;c[s+116>>2]=g;g=t;b=c[A>>2]|0}if(!(a[b+44>>0]|0)){b=(a[b+84>>0]|0)==0?r:B;f=b;b=c[b+16>>2]|0}else f=B;d=f+16|0;if(!(c[b+164>>2]&32))e=b;else{W6(e|0,c[d>>2]|0,176)|0;i=v;j=f;k=i+48|0;do{c[i>>2]=c[j>>2];i=i+4|0;j=j+4|0}while((i|0)<(k|0));c[w>>2]=e;j=c[f>>2]&3;i=c[v>>2]&3;c[((i|0)==3?v:v+48|0)+40>>2]=c[((j|0)==2?f:f+-48|0)+40>>2];c[((i|0)==2?v:v+-48|0)+40>>2]=c[((j|0)==3?f:f+48|0)+40>>2];i=e+16|0;j=(c[d>>2]|0)+56|0;k=i+40|0;do{c[i>>2]=c[j>>2];i=i+4|0;j=j+4|0}while((i|0)<(k|0));i=e+56|0;j=(c[d>>2]|0)+16|0;k=i+40|0;do{c[i>>2]=c[j>>2];i=i+4|0;j=j+4|0}while((i|0)<(k|0));a[e+112>>0]=1;c[e+116>>2]=f}d=c[g+16>>2]|0;b=e+16|0;i=y;j=d+16|0;k=i+40|0;do{c[i>>2]=c[j>>2];i=i+4|0;j=j+4|0}while((i|0)<(k|0));i=z;j=b;k=i+40|0;do{c[i>>2]=c[j>>2];i=i+4|0;j=j+4|0}while((i|0)<(k|0));b=hg(y,z)|0;if(!b){b=e+56|0;i=y;j=d+56|0;k=i+40|0;do{c[i>>2]=c[j>>2];i=i+4|0;j=j+4|0}while((i|0)<(k|0));i=z;j=b;k=i+40|0;do{c[i>>2]=c[j>>2];i=i+4|0;j=j+4|0}while((i|0)<(k|0));b=hg(y,z)|0;if(!b){d=c[(c[x>>2]|0)+164>>2]&192;b=c[(c[A>>2]|0)+164>>2]&192;if((d|0)==(b|0)){b=((c[C>>2]|0)>>>4)-((c[B>>2]|0)>>>4)|0;break}else{b=d-b|0;break}}}}else b=g-f|0;while(0);l=D;return b|0}function og(b){b=b|0;var d=0,e=0,f=0,g=0.0,i=0.0;f=b+16|0;d=c[f>>2]|0;if(c[d+176>>2]|0){d=c[d+180>>2]|0;while(1){d=(c[d>>2]|0)+16|0;e=c[d>>2]|0;if(!(a[e+112>>0]|0))break;else d=e+116|0}e=c[e+96>>2]|0;g=+h[e+24>>3];i=+h[e+32>>3];e=(c[(c[(xC(b)|0)+16>>2]|0)+116>>2]&1|0)!=0;b=c[f>>2]|0;f=c[(c[d>>2]|0)+96>>2]|0;h[f+56>>3]=(e?i:g)*.5+ +h[b+16>>3];h[f+64>>3]=+h[b+24>>3];a[f+81>>0]=1}return}function pg(a){a=a|0;var b=0,d=0;while(1){b=c[a+16>>2]|0;d=c[b+172>>2]|0;if(!d)break;else a=d}while(1){b=c[b+116>>2]|0;if(!b)break;a=b;b=c[b+16>>2]|0}return a|0}function qg(b,d,e,f,g,i,j){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;i=i|0;j=j|0;var k=0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0.0,w=0,x=0,y=0,z=0,A=0,B=0,C=0.0,D=0.0,E=0.0,F=0.0,G=0.0;B=l;l=l+1712|0;x=B+1664|0;s=B+1488|0;t=B+1392|0;A=B+1696|0;y=B+696|0;z=B;p=t+16|0;c[p>>2]=s;q=c[f+(g<<2)>>2]|0;r=q+16|0;k=c[r>>2]|0;u=a[k+113>>0]|0;if(c[k+164>>2]&32){W6(s|0,k|0,176)|0;k=t;n=q;o=k+48|0;do{c[k>>2]=c[n>>2];k=k+4|0;n=n+4|0}while((k|0)<(o|0));c[p>>2]=s;k=c[t>>2]&3;c[((k|0)==3?t:t+48|0)+40>>2]=c[((c[q>>2]&3|0)==2?q:q+-48|0)+40>>2];c[((k|0)==2?t:t+-48|0)+40>>2]=c[((c[q>>2]&3|0)==3?q:q+48|0)+40>>2];k=s+16|0;n=(c[r>>2]|0)+56|0;o=k+40|0;do{c[k>>2]=c[n>>2];k=k+4|0;n=n+4|0}while((k|0)<(o|0));k=s+56|0;n=(c[r>>2]|0)+16|0;o=k+40|0;do{c[k>>2]=c[n>>2];k=k+4|0;n=n+4|0}while((k|0)<(o|0));a[s+112>>0]=1;c[s+116>>2]=q;q=t}k=1;while(1){if((k|0)>=(i|0)){w=6;break}if(!(a[(c[(c[f+(k+g<<2)>>2]|0)+16>>2]|0)+113>>0]|0))k=k+1|0;else{w=7;break}}a:do if((w|0)==6)if(!(u<<24>>24)){k=c[q+16>>2]|0;if(c[k+96>>2]|0){Qg(b,d,e,q,j);break}if((j|0)==2){A=c[q>>2]&3;Rg(c[((A|0)==3?q:q+48|0)+40>>2]|0,c[((A|0)==2?q:q+-48|0)+40>>2]|0,f,g,i,2);break}t=a[k+49>>0]|0;u=a[k+89>>0]|0;if(!(t<<24>>24==1&u<<24>>24!=4)?!(t<<24>>24!=4&u<<24>>24==1):0){p=c[q>>2]&3;o=c[((p|0)==3?q:q+48|0)+40>>2]|0;p=c[((p|0)==2?q:q+-48|0)+40>>2]|0;k=c[o+16>>2]|0;n=c[k+232>>2]|0;if((n|0)>0){u=c[(c[b+16>>2]|0)+196>>2]|0;t=n+~(a[(c[(c[b+60>>2]|0)+16>>2]|0)+113>>0]&1)|0;m=+h[(c[(c[c[u+(t<<6)+4>>2]>>2]|0)+16>>2]|0)+24>>3]-+h[u+(t<<6)+16>>3]-+h[k+24>>3]-+h[u+(n<<6)+24>>3]}else m=+(c[(c[b+16>>2]|0)+252>>2]|0);C=+(i+1|0);v=+(c[d+12>>2]|0)/C;m=m/C;Tg(b,d,e,o,q,y,1);Tg(b,d,e,p,q,z,0);s=y+52|0;t=z+52|0;p=(j|0)==10;q=e+80|0;k=0;while(1){if((k|0)>=(i|0))break a;r=c[f+(k+g<<2)>>2]|0;o=c[s>>2]|0;n=o+-1|0;G=+h[y+56+(n<<5)>>3];F=+h[y+56+(n<<5)+16>>3];E=+h[y+56+(n<<5)+24>>3];h[19215]=G;h[19216]=E;k=k+1|0;C=+(k|0);D=v*C;h[19217]=F+D;C=E+m*C;h[19218]=C;h[19219]=G;h[19220]=C;n=(c[t>>2]|0)+-1|0;G=+h[z+56+(n<<5)+16>>3];h[19221]=G;h[19222]=C+m;E=+h[z+56+(n<<5)>>3];F=+h[z+56+(n<<5)+24>>3];h[19225]=G;h[19224]=F;h[19223]=E-D;h[19226]=C;n=0;while(1){if((n|0)>=(o|0)){n=0;break}o=y+56+(n<<5)|0;c[x>>2]=c[o>>2];c[x+4>>2]=c[o+4>>2];c[x+8>>2]=c[o+8>>2];c[x+12>>2]=c[o+12>>2];c[x+16>>2]=c[o+16>>2];c[x+20>>2]=c[o+20>>2];c[x+24>>2]=c[o+24>>2];c[x+28>>2]=c[o+28>>2];fO(e,x);n=n+1|0;o=c[s>>2]|0}while(1){if((n|0)==3)break;j=153720+(n<<5)|0;c[x>>2]=c[j>>2];c[x+4>>2]=c[j+4>>2];c[x+8>>2]=c[j+8>>2];c[x+12>>2]=c[j+12>>2];c[x+16>>2]=c[j+16>>2];c[x+20>>2]=c[j+20>>2];c[x+24>>2]=c[j+24>>2];c[x+28>>2]=c[j+28>>2];fO(e,x);n=n+1|0}o=c[t>>2]|0;while(1){n=o+-1|0;if((o|0)<=0)break;o=z+56+(n<<5)|0;c[x>>2]=c[o>>2];c[x+4>>2]=c[o+4>>2];c[x+8>>2]=c[o+8>>2];c[x+12>>2]=c[o+12>>2];c[x+16>>2]=c[o+16>>2];c[x+20>>2]=c[o+20>>2];c[x+24>>2]=c[o+24>>2];c[x+28>>2]=c[o+28>>2];fO(e,x);o=n}if(p)n=HM(e,A)|0;else n=NM(e,A)|0;o=c[A>>2]|0;if(!o)break a;dO(r,c[((c[r>>2]&3|0)==2?r:r+-48|0)+40>>2]|0,n,o,17296);c[q>>2]=0}}Sg(b,d,e,f,g,i,q,(j|0)==10&1)}else w=7;while(0);if((w|0)==7)Pg(b,f,g,i,q,j);l=B;return}function rg(b,d,e,f,g,i,j){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;i=i|0;j=j|0;var k=0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0;ba=l;l=l+2576|0;S=ba+2528|0;_=ba+2568|0;k=ba+2352|0;n=ba+2176|0;t=ba+1904|0;Y=ba+1808|0;$=ba+1712|0;T=ba+1016|0;U=ba+320|0;V=ba+256|0;X=ba+2564|0;Z=ba+2560|0;z=ba+288|0;A=ba+224|0;L=ba+192|0;M=ba+160|0;N=ba+128|0;P=ba+96|0;Q=ba+64|0;R=ba+32|0;W=ba;s=t+16|0;c[s>>2]=k;o=Y+16|0;c[o>>2]=n;aa=$+16|0;c[aa>>2]=ba+2e3;if(!(c[46734]|0)){c[46734]=KK(32e3)|0;c[46735]=KK(32e3)|0;c[46736]=2e3;c[46737]=2e3}u=c[f+(g<<2)>>2]|0;K=c[u>>2]&3;p=u+48|0;q=u+-48|0;K=(c[(c[(c[((K|0)==3?u:p)+40>>2]|0)+16>>2]|0)+232>>2]|0)-(c[(c[(c[((K|0)==2?u:q)+40>>2]|0)+16>>2]|0)+232>>2]|0)|0;r=u+16|0;if((((K|0)>-1?K:0-K|0)|0)<=1){k=c[r>>2]|0;if(!(c[k+164>>2]&32)){K=u;n=0}else{n=c[s>>2]|0;W6(n|0,k|0,176)|0;w=t;x=u;y=w+48|0;do{c[w>>2]=c[x>>2];w=w+4|0;x=x+4|0}while((w|0)<(y|0));c[s>>2]=n;w=c[t>>2]&3;c[((w|0)==3?t:t+48|0)+40>>2]=c[((c[u>>2]&3|0)==2?u:q)+40>>2];c[((w|0)==2?t:t+-48|0)+40>>2]=c[((c[u>>2]&3|0)==3?u:p)+40>>2];w=n+16|0;x=(c[r>>2]|0)+56|0;y=w+40|0;do{c[w>>2]=c[x>>2];w=w+4|0;x=x+4|0}while((w|0)<(y|0));k=c[s>>2]|0;w=k+56|0;x=(c[r>>2]|0)+16|0;y=w+40|0;do{c[w>>2]=c[x>>2];w=w+4|0;x=x+4|0}while((w|0)<(y|0));a[k+112>>0]=1;n=0;J=12}}else{W6(k|0,c[r>>2]|0,176)|0;w=t;x=u;y=w+48|0;do{c[w>>2]=c[x>>2];w=w+4|0;x=x+4|0}while((w|0)<(y|0));w=t+48|0;x=p;y=w+48|0;do{c[w>>2]=c[x>>2];w=w+4|0;x=x+4|0}while((w|0)<(y|0));c[s>>2]=k;k=c[r>>2]|0;if(!(c[k+164>>2]&32)){W6(n|0,k|0,176)|0;w=Y;x=u;y=w+48|0;do{c[w>>2]=c[x>>2];w=w+4|0;x=x+4|0}while((w|0)<(y|0));c[o>>2]=n;o=c[t>>2]|0;c[((o&3|0)==3?t:t+48|0)+40>>2]=c[((c[u>>2]&3|0)==3?u:p)+40>>2];w=Y+48|0;x=p;y=w+48|0;do{c[w>>2]=c[x>>2];w=w+4|0;x=x+4|0}while((w|0)<(y|0))}else{n=c[o>>2]|0;W6(n|0,k|0,176)|0;w=Y;x=u;y=w+48|0;do{c[w>>2]=c[x>>2];w=w+4|0;x=x+4|0}while((w|0)<(y|0));c[o>>2]=n;w=c[Y>>2]&3;c[((w|0)==3?Y:Y+48|0)+40>>2]=c[((c[u>>2]&3|0)==2?u:q)+40>>2];c[((w|0)==2?Y:Y+-48|0)+40>>2]=c[((c[u>>2]&3|0)==3?u:p)+40>>2];w=n+16|0;x=(c[r>>2]|0)+56|0;y=w+40|0;do{c[w>>2]=c[x>>2];w=w+4|0;x=x+4|0}while((w|0)<(y|0));k=c[o>>2]|0;w=k+56|0;x=(c[r>>2]|0)+16|0;y=w+40|0;do{c[w>>2]=c[x>>2];w=w+4|0;x=x+4|0}while((w|0)<(y|0));a[k+112>>0]=1;c[k+116>>2]=u;o=c[t>>2]|0;c[((o&3|0)==3?t:t+48|0)+40>>2]=c[((c[u>>2]&3|0)==2?u:q)+40>>2];w=(c[s>>2]|0)+16|0;x=(c[r>>2]|0)+56|0;y=w+40|0;do{c[w>>2]=c[x>>2];w=w+4|0;x=x+4|0}while((w|0)<(y|0))}k=pg(u)|0;while(1){n=c[(c[k+16>>2]|0)+172>>2]|0;if(!n)break;else k=n}c[((o&3|0)==2?t:t+-48|0)+40>>2]=c[((c[k>>2]&3|0)==2?k:k+-48|0)+40>>2];k=c[s>>2]|0;a[k+84>>0]=0;a[k+112>>0]=1;n=k+56|0;c[n>>2]=0;c[n+4>>2]=0;c[n+8>>2]=0;c[n+12>>2]=0;n=1;J=12}if((J|0)==12){c[k+116>>2]=u;K=t}H=(j|0)==2;if(H?(v=vg(b,K,c[46734]|0,_)|0,c[Z>>2]=v,(v|0)!=0):0)J=63;else J=15;a:do if((J|0)==15){G=(j|0)==10;c[Z>>2]=0;o=c[K>>2]&3;k=c[((o|0)==3?K:K+48|0)+40>>2]|0;o=c[((o|0)==2?K:K+-48|0)+40>>2]|0;c[_>>2]=o;wg(z,b,d,k,0,K);c[T>>2]=c[z>>2];c[T+4>>2]=c[z+4>>2];c[T+8>>2]=c[z+8>>2];c[T+12>>2]=c[z+12>>2];c[T+16>>2]=c[z+16>>2];c[T+20>>2]=c[z+20>>2];c[T+24>>2]=c[z+24>>2];c[T+28>>2]=c[z+28>>2];c[V>>2]=c[z>>2];c[V+4>>2]=c[z+4>>2];c[V+8>>2]=c[z+8>>2];c[V+12>>2]=c[z+12>>2];c[V+16>>2]=c[z+16>>2];c[V+20>>2]=c[z+20>>2];gO(e,K,1,T,xg(k)|0);B=T+52|0;I=(c[B>>2]|0)+-1|0;D=V+24|0;h[D>>3]=+h[T+56+(I<<5)+24>>3];E=V+8|0;h[E>>3]=+h[T+56+(I<<5)+8>>3];I=c[k+16>>2]|0;F=b+16|0;m=+h[I+24>>3]-+h[(c[(c[F>>2]|0)+196>>2]|0)+(c[I+232>>2]<<6)+16>>3];c[S>>2]=c[V>>2];c[S+4>>2]=c[V+4>>2];c[S+8>>2]=c[V+8>>2];c[S+12>>2]=c[V+12>>2];c[S+16>>2]=c[V+16>>2];c[S+20>>2]=c[V+20>>2];c[S+24>>2]=c[V+24>>2];c[S+28>>2]=c[V+28>>2];yg(A,S,1,m);c[V>>2]=c[A>>2];c[V+4>>2]=c[A+4>>2];c[V+8>>2]=c[A+8>>2];c[V+12>>2]=c[A+12>>2];c[V+16>>2]=c[A+16>>2];c[V+20>>2]=c[A+20>>2];c[V+24>>2]=c[A+24>>2];c[V+28>>2]=c[A+28>>2];A=V+16|0;if(+h[V>>3]<+h[A>>3]?+h[E>>3]<+h[D>>3]:0){I=c[B>>2]|0;c[B>>2]=I+1;I=T+56+(I<<5)|0;c[I>>2]=c[V>>2];c[I+4>>2]=c[V+4>>2];c[I+8>>2]=c[V+8>>2];c[I+12>>2]=c[V+12>>2];c[I+16>>2]=c[V+16>>2];c[I+20>>2]=c[V+20>>2];c[I+24>>2]=c[V+24>>2];c[I+28>>2]=c[V+28>>2]}w=b+60|0;C=U+52|0;x=e+56|0;y=e+69|0;j=e+16|0;z=e+29|0;I=K;q=0;r=-1;b:while(1){s=k;t=0;k=0;u=I;while(1){p=o;v=o;if((a[(c[p+16>>2]|0)+156>>0]|0)!=1)break b;if((kb[c[17300>>2]&63](p)|0)<<24>>24)break b;o=t|1;ca=153720+(t<<5)|0;zg(L,d,b,c[(c[s+16>>2]|0)+232>>2]|0);c[ca>>2]=c[L>>2];c[ca+4>>2]=c[L+4>>2];c[ca+8>>2]=c[L+8>>2];c[ca+12>>2]=c[L+12>>2];c[ca+16>>2]=c[L+16>>2];c[ca+20>>2]=c[L+20>>2];c[ca+24>>2]=c[L+24>>2];c[ca+28>>2]=c[L+28>>2];if(!k){q=Ag(p)|0;k=(q|0)<((a[(c[(c[w>>2]|0)+16>>2]|0)+113>>0]<<1&2)+3&255|0);q=k?q:q+-2|0;r=k?r:1;k=(k^1)&1}if(!((k|0)==0|(r|0)>0))break;ca=153720+(o<<5)|0;wg(M,b,d,p,u,c[c[(c[p+16>>2]|0)+180>>2]>>2]|0);c[ca>>2]=c[M>>2];c[ca+4>>2]=c[M+4>>2];c[ca+8>>2]=c[M+8>>2];c[ca+12>>2]=c[M+12>>2];c[ca+16>>2]=c[M+16>>2];c[ca+20>>2]=c[M+20>>2];c[ca+24>>2]=c[M+24>>2];c[ca+28>>2]=c[M+28>>2];ca=c[c[(c[v+16>>2]|0)+180>>2]>>2]|0;o=c[ca>>2]&3;s=c[((o|0)==3?ca:ca+48|0)+40>>2]|0;o=c[((o|0)==2?ca:ca+-48|0)+40>>2]|0;c[_>>2]=o;t=t+2|0;r=r+-1|0;u=ca}wg(N,b,d,p,u,c[c[(c[p+16>>2]|0)+180>>2]>>2]|0);c[U>>2]=c[N>>2];c[U+4>>2]=c[N+4>>2];c[U+8>>2]=c[N+8>>2];c[U+12>>2]=c[N+12>>2];c[U+16>>2]=c[N+16>>2];c[U+20>>2]=c[N+20>>2];c[U+24>>2]=c[N+24>>2];c[U+28>>2]=c[N+28>>2];jO(e,u,1,U,xg(c[((c[u>>2]&3|0)==2?u:u+-48|0)+40>>2]|0)|0);ca=U+56+((c[C>>2]|0)+-1<<5)|0;t=c[v+16>>2]|0;m=+h[(c[(c[F>>2]|0)+196>>2]|0)+(c[t+232>>2]<<6)+24>>3]+ +h[t+24>>3];c[S>>2]=c[ca>>2];c[S+4>>2]=c[ca+4>>2];c[S+8>>2]=c[ca+8>>2];c[S+12>>2]=c[ca+12>>2];c[S+16>>2]=c[ca+16>>2];c[S+20>>2]=c[ca+20>>2];c[S+24>>2]=c[ca+24>>2];c[S+28>>2]=c[ca+28>>2];yg(V,S,4,m);if(+h[V>>3]<+h[A>>3]?+h[E>>3]<+h[D>>3]:0){ca=c[C>>2]|0;c[C>>2]=ca+1;ca=U+56+(ca<<5)|0;c[ca>>2]=c[V>>2];c[ca+4>>2]=c[V+4>>2];c[ca+8>>2]=c[V+8>>2];c[ca+12>>2]=c[V+12>>2];c[ca+16>>2]=c[V+16>>2];c[ca+20>>2]=c[V+20>>2];c[ca+24>>2]=c[V+24>>2];c[ca+28>>2]=c[V+28>>2]}h[x>>3]=1.5707963267948966;a[y>>0]=1;Bg(e,I,u,T,U,o);if(!G){k=NM(e,X)|0;o=c[X>>2]|0;if(H&(o|0)>4){ca=k+16|0;c[ca>>2]=c[k>>2];c[ca+4>>2]=c[k+4>>2];c[ca+8>>2]=c[k+8>>2];c[ca+12>>2]=c[k+12>>2];ca=k+32|0;o=k+(o+-1<<4)|0;c[ca>>2]=c[o>>2];c[ca+4>>2]=c[o+4>>2];c[ca+8>>2]=c[o+8>>2];c[ca+12>>2]=c[o+12>>2];X6(k+48|0,o|0,16)|0;c[X>>2]=4;o=4}else J=33}else{k=HM(e,X)|0;o=c[X>>2]|0;J=33}if((J|0)==33){J=0;if(!o)break a}u=c[Z>>2]|0;p=u+o|0;if((p|0)>(c[46736]|0)){c[46736]=p<<1;t=MK(c[46734]|0,p<<5)|0;c[46734]=t;o=c[X>>2]|0}else t=c[46734]|0;s=0;p=u;while(1){if((s|0)>=(o|0))break;ca=t+(p<<4)|0;u=k+(s<<4)|0;c[ca>>2]=c[u>>2];c[ca+4>>2]=c[u+4>>2];c[ca+8>>2]=c[u+8>>2];c[ca+12>>2]=c[u+12>>2];s=s+1|0;p=p+1|0}c[Z>>2]=p;o=Cg(c[c[(c[v+16>>2]|0)+180>>2]>>2]|0,q,t,Z)|0;Dg(I,e);p=c[o>>2]&3;k=c[((p|0)==3?o:o+48|0)+40>>2]|0;p=c[((p|0)==2?o:o+-48|0)+40>>2]|0;c[_>>2]=p;I=k+16|0;wg(P,b,d,k,c[c[(c[I>>2]|0)+172>>2]>>2]|0,o);c[T>>2]=c[P>>2];c[T+4>>2]=c[P+4>>2];c[T+8>>2]=c[P+8>>2];c[T+12>>2]=c[P+12>>2];c[T+16>>2]=c[P+16>>2];c[T+20>>2]=c[P+20>>2];c[T+24>>2]=c[P+24>>2];c[T+28>>2]=c[P+28>>2];gO(e,o,1,T,xg(k)|0);ca=T+56+((c[B>>2]|0)+-1<<5)|0;I=c[I>>2]|0;m=+h[I+24>>3]-+h[(c[(c[F>>2]|0)+196>>2]|0)+(c[I+232>>2]<<6)+16>>3];c[S>>2]=c[ca>>2];c[S+4>>2]=c[ca+4>>2];c[S+8>>2]=c[ca+8>>2];c[S+12>>2]=c[ca+12>>2];c[S+16>>2]=c[ca+16>>2];c[S+20>>2]=c[ca+20>>2];c[S+24>>2]=c[ca+24>>2];c[S+28>>2]=c[ca+28>>2];yg(V,S,1,m);if(+h[V>>3]<+h[A>>3]?+h[E>>3]<+h[D>>3]:0){ca=c[B>>2]|0;c[B>>2]=ca+1;ca=T+56+(ca<<5)|0;c[ca>>2]=c[V>>2];c[ca+4>>2]=c[V+4>>2];c[ca+8>>2]=c[V+8>>2];c[ca+12>>2]=c[V+12>>2];c[ca+16>>2]=c[V+16>>2];c[ca+20>>2]=c[V+20>>2];c[ca+24>>2]=c[V+24>>2];c[ca+28>>2]=c[V+28>>2]}h[j>>3]=-1.5707963267948966;a[z>>0]=1;I=o;o=p}k=t|1;r=153720+(t<<5)|0;zg(Q,d,b,c[(c[s+16>>2]|0)+232>>2]|0);c[r>>2]=c[Q>>2];c[r+4>>2]=c[Q+4>>2];c[r+8>>2]=c[Q+8>>2];c[r+12>>2]=c[Q+12>>2];c[r+16>>2]=c[Q+16>>2];c[r+20>>2]=c[Q+20>>2];c[r+24>>2]=c[Q+24>>2];c[r+28>>2]=c[Q+28>>2];wg(R,b,d,p,u,0);c[U>>2]=c[R>>2];c[U+4>>2]=c[R+4>>2];c[U+8>>2]=c[R+8>>2];c[U+12>>2]=c[R+12>>2];c[U+16>>2]=c[R+16>>2];c[U+20>>2]=c[R+20>>2];c[U+24>>2]=c[R+24>>2];c[U+28>>2]=c[R+28>>2];c[V>>2]=c[R>>2];c[V+4>>2]=c[R+4>>2];c[V+8>>2]=c[R+8>>2];c[V+12>>2]=c[R+12>>2];c[V+16>>2]=c[R+16>>2];c[V+20>>2]=c[R+20>>2];c[V+24>>2]=c[R+24>>2];c[V+28>>2]=c[R+28>>2];r=(n|0)!=0;s=u+-48|0;jO(e,r?Y:u,1,U,xg(c[((c[u>>2]&3|0)==2?u:s)+40>>2]|0)|0);ca=(c[C>>2]|0)+-1|0;h[D>>3]=+h[U+56+(ca<<5)+24>>3];h[E>>3]=+h[U+56+(ca<<5)+8>>3];ca=c[v+16>>2]|0;m=+h[(c[(c[F>>2]|0)+196>>2]|0)+(c[ca+232>>2]<<6)+24>>3]+ +h[ca+24>>3];c[S>>2]=c[V>>2];c[S+4>>2]=c[V+4>>2];c[S+8>>2]=c[V+8>>2];c[S+12>>2]=c[V+12>>2];c[S+16>>2]=c[V+16>>2];c[S+20>>2]=c[V+20>>2];c[S+24>>2]=c[V+24>>2];c[S+28>>2]=c[V+28>>2];yg(W,S,4,m);c[V>>2]=c[W>>2];c[V+4>>2]=c[W+4>>2];c[V+8>>2]=c[W+8>>2];c[V+12>>2]=c[W+12>>2];c[V+16>>2]=c[W+16>>2];c[V+20>>2]=c[W+20>>2];c[V+24>>2]=c[W+24>>2];c[V+28>>2]=c[W+28>>2];if(+h[V>>3]<+h[A>>3]?+h[E>>3]<+h[D>>3]:0){ca=c[C>>2]|0;c[C>>2]=ca+1;ca=U+56+(ca<<5)|0;c[ca>>2]=c[V>>2];c[ca+4>>2]=c[V+4>>2];c[ca+8>>2]=c[V+8>>2];c[ca+12>>2]=c[V+12>>2];c[ca+16>>2]=c[V+16>>2];c[ca+20>>2]=c[V+20>>2];c[ca+24>>2]=c[V+24>>2];c[ca+28>>2]=c[V+28>>2]}Bg(e,I,u,T,U,k);if(G)q=HM(e,X)|0;else q=NM(e,X)|0;k=c[X>>2]|0;if(!(H&(k|0)>4)){if(!k)break}else{ca=q+16|0;c[ca>>2]=c[q>>2];c[ca+4>>2]=c[q+4>>2];c[ca+8>>2]=c[q+8>>2];c[ca+12>>2]=c[q+12>>2];ca=q+32|0;k=q+(k+-1<<4)|0;c[ca>>2]=c[k>>2];c[ca+4>>2]=c[k+4>>2];c[ca+8>>2]=c[k+8>>2];c[ca+12>>2]=c[k+12>>2];X6(q+48|0,k|0,16)|0;c[X>>2]=4;k=4}o=c[Z>>2]|0;n=o+k|0;if((n|0)>(c[46736]|0)){c[46736]=n<<1;p=MK(c[46734]|0,n<<5)|0;c[46734]=p;k=c[X>>2]|0}else p=c[46734]|0;n=0;while(1){if((n|0)>=(k|0))break;ca=p+(o<<4)|0;X=q+(n<<4)|0;c[ca>>2]=c[X>>2];c[ca+4>>2]=c[X+4>>2];c[ca+8>>2]=c[X+8>>2];c[ca+12>>2]=c[X+12>>2];n=n+1|0;o=o+1|0}c[Z>>2]=o;Dg(I,e);if(r)k=(c[Y>>2]&3|0)==2?Y:Y+-48|0;else k=(c[u>>2]&3|0)==2?u:s;c[_>>2]=c[k+40>>2];v=o;J=63}while(0);c:do if((J|0)==63){if((i|0)==1){dO(K,c[_>>2]|0,c[46734]|0,v,17296);break}t=d+12|0;u=v+-1|0;m=+((O(c[t>>2]|0,i+-1|0)|0)/2|0|0);n=c[46734]|0;k=1;while(1){if((k|0)>=(u|0))break;ca=n+(k<<4)|0;h[ca>>3]=+h[ca>>3]-m;k=k+1|0}k=c[46736]|0;if((k|0)>(c[46737]|0)){c[46737]=k;o=MK(c[46735]|0,k<<4)|0;c[46735]=o;n=c[46734]|0}else o=c[46735]|0;k=0;while(1){if((k|0)>=(v|0))break;ca=o+(k<<4)|0;d=n+(k<<4)|0;c[ca>>2]=c[d>>2];c[ca+4>>2]=c[d+4>>2];c[ca+8>>2]=c[d+8>>2];c[ca+12>>2]=c[d+12>>2];k=k+1|0}dO(K,c[_>>2]|0,o,v,17296);r=$+48|0;s=$+-48|0;q=1;while(1){if((q|0)>=(i|0))break c;o=c[f+(q+g<<2)>>2]|0;p=o+16|0;k=c[p>>2]|0;if(c[k+164>>2]&32){n=c[aa>>2]|0;W6(n|0,k|0,176)|0;w=$;x=o;y=w+48|0;do{c[w>>2]=c[x>>2];w=w+4|0;x=x+4|0}while((w|0)<(y|0));c[aa>>2]=n;w=c[$>>2]&3;c[((w|0)==3?$:r)+40>>2]=c[((c[o>>2]&3|0)==2?o:o+-48|0)+40>>2];c[((w|0)==2?$:s)+40>>2]=c[((c[o>>2]&3|0)==3?o:o+48|0)+40>>2];w=n+16|0;x=(c[p>>2]|0)+56|0;y=w+40|0;do{c[w>>2]=c[x>>2];w=w+4|0;x=x+4|0}while((w|0)<(y|0));k=c[aa>>2]|0;w=k+56|0;x=(c[p>>2]|0)+16|0;y=w+40|0;do{c[w>>2]=c[x>>2];w=w+4|0;x=x+4|0}while((w|0)<(y|0));a[k+112>>0]=1;c[k+116>>2]=o;o=$}p=c[46734]|0;k=1;while(1){if((k|0)>=(u|0))break;ca=p+(k<<4)|0;h[ca>>3]=+h[ca>>3]+ +(c[t>>2]|0);k=k+1|0}n=c[46735]|0;k=0;while(1){if((k|0)>=(v|0))break;ca=n+(k<<4)|0;_=p+(k<<4)|0;c[ca>>2]=c[_>>2];c[ca+4>>2]=c[_+4>>2];c[ca+8>>2]=c[_+8>>2];c[ca+12>>2]=c[_+12>>2];k=k+1|0}dO(o,c[((c[o>>2]&3|0)==2?o:o+-48|0)+40>>2]|0,n,v,17296);q=q+1|0}}while(0);l=ba;return}function sg(a){a=a|0;var b=0,d=0,e=0;b=jC(a)|0;while(1){if(!b)break;d=XA(a,b)|0;while(1){if(!d)break;if((kb[c[4324]&63](d)|0)<<24>>24?(e=c[(c[d+16>>2]|0)+8>>2]|0,e|0):0)tg(e);d=ZA(a,d)|0}b=kC(a,b)|0}return}function tg(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;f=c[a+4>>2]|0;g=KK(f*48|0)|0;b=g;d=0;e=(c[a>>2]|0)+((f+-1|0)*48|0)|0;while(1){if((d|0)>=(f|0)){b=0;break}ug(e,b);b=b+48|0;d=d+1|0;e=e+-48|0}while(1){d=c[a>>2]|0;if((b|0)>=(f|0))break;U1(c[d+(b*48|0)>>2]|0);b=b+1|0}U1(d);c[a>>2]=g;return}function ug(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;g=c[a+4>>2]|0;h=KK(g<<4)|0;d=h;e=0;f=(c[a>>2]|0)+(g+-1<<4)|0;while(1){if((e|0)>=(g|0))break;c[d>>2]=c[f>>2];c[d+4>>2]=c[f+4>>2];c[d+8>>2]=c[f+8>>2];c[d+12>>2]=c[f+12>>2];d=d+16|0;e=e+1|0;f=f+-16|0}c[b>>2]=h;c[b+4>>2]=g;c[b+8>>2]=c[a+12>>2];c[b+12>>2]=c[a+8>>2];h=b+16|0;g=a+32|0;c[h>>2]=c[g>>2];c[h+4>>2]=c[g+4>>2];c[h+8>>2]=c[g+8>>2];c[h+12>>2]=c[g+12>>2];h=b+32|0;g=a+16|0;c[h>>2]=c[g>>2];c[h+4>>2]=c[g+4>>2];c[h+8>>2]=c[g+8>>2];c[h+12>>2]=c[g+12>>2];return}function vg(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,i=0.0,j=0.0,k=0.0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;x=l;l=l+96|0;q=x+80|0;s=x+64|0;r=x+48|0;u=x+32|0;v=x+16|0;w=x;m=d;while(1){t=m+16|0;g=c[t>>2]|0;if(!(a[g+112>>0]|0))break;m=c[g+116>>2]|0}g=c[m>>2]&3;o=c[((g|0)==2?m:m+-48|0)+40>>2]|0;g=c[((g|0)==3?m:m+48|0)+40>>2]|0;m=o+16|0;n=g+16|0;y=(c[(c[m>>2]|0)+232>>2]|0)-(c[(c[n>>2]|0)+232>>2]|0)|0;switch(((y|0)>-1?y:0-y|0)|0){case 1:{g=0;break}case 2:{if(!(a[(c[(c[b+60>>2]|0)+16>>2]|0)+113>>0]&1))p=6;else g=0;break}default:p=6}do if((p|0)==6){if((c[((c[d>>2]&3|0)==3?d:d+48|0)+40>>2]|0)==(g|0)){c[f>>2]=o;y=(c[n>>2]|0)+16|0;p=(c[t>>2]|0)+16|0;c[s>>2]=c[y>>2];c[s+4>>2]=c[y+4>>2];c[s+8>>2]=c[y+8>>2];c[s+12>>2]=c[y+12>>2];c[q>>2]=c[p>>2];c[q+4>>2]=c[p+4>>2];c[q+8>>2]=c[p+8>>2];c[q+12>>2]=c[p+12>>2];Ng(u,s,q);p=(c[m>>2]|0)+16|0;y=(c[t>>2]|0)+56|0;c[s>>2]=c[p>>2];c[s+4>>2]=c[p+4>>2];c[s+8>>2]=c[p+8>>2];c[s+12>>2]=c[p+12>>2];c[q>>2]=c[y>>2];c[q+4>>2]=c[y+4>>2];c[q+8>>2]=c[y+8>>2];c[q+12>>2]=c[y+12>>2];Ng(v,s,q)}else{c[f>>2]=g;y=(c[m>>2]|0)+16|0;p=(c[t>>2]|0)+56|0;c[s>>2]=c[y>>2];c[s+4>>2]=c[y+4>>2];c[s+8>>2]=c[y+8>>2];c[s+12>>2]=c[y+12>>2];c[q>>2]=c[p>>2];c[q+4>>2]=c[p+4>>2];c[q+8>>2]=c[p+8>>2];c[q+12>>2]=c[p+12>>2];Ng(u,s,q);p=(c[n>>2]|0)+16|0;y=(c[t>>2]|0)+16|0;c[s>>2]=c[p>>2];c[s+4>>2]=c[p+4>>2];c[s+8>>2]=c[p+8>>2];c[s+12>>2]=c[p+12>>2];c[q>>2]=c[y>>2];c[q+4>>2]=c[y+4>>2];c[q+8>>2]=c[y+8>>2];c[q+12>>2]=c[y+12>>2];Ng(v,s,q)}g=c[(c[t>>2]|0)+96>>2]|0;if(!g){g=e+16|0;c[e>>2]=c[u>>2];c[e+4>>2]=c[u+4>>2];c[e+8>>2]=c[u+8>>2];c[e+12>>2]=c[u+12>>2];c[g>>2]=c[u>>2];c[g+4>>2]=c[u+4>>2];c[g+8>>2]=c[u+8>>2];c[g+12>>2]=c[u+12>>2];g=e+48|0;y=e+32|0;c[y>>2]=c[v>>2];c[y+4>>2]=c[v+4>>2];c[y+8>>2]=c[v+8>>2];c[y+12>>2]=c[v+12>>2];c[g>>2]=c[v>>2];c[g+4>>2]=c[v+4>>2];c[g+8>>2]=c[v+8>>2];c[g+12>>2]=c[v+12>>2];g=4;break}j=+h[g+24>>3];i=+h[g+32>>3];p=(c[(c[(xC(o)|0)+16>>2]|0)+116>>2]&1|0)==0;k=p?i:j;y=(c[(c[t>>2]|0)+96>>2]|0)+56|0;c[w>>2]=c[y>>2];c[w+4>>2]=c[y+4>>2];c[w+8>>2]=c[y+8>>2];c[w+12>>2]=c[y+12>>2];c[r>>2]=c[v>>2];c[r+4>>2]=c[v+4>>2];c[r+8>>2]=c[v+8>>2];c[r+12>>2]=c[v+12>>2];c[s>>2]=c[u>>2];c[s+4>>2]=c[u+4>>2];c[s+8>>2]=c[u+8>>2];c[s+12>>2]=c[u+12>>2];c[q>>2]=c[y>>2];c[q+4>>2]=c[y+4>>2];c[q+8>>2]=c[y+8>>2];c[q+12>>2]=c[y+12>>2];y=(Og(r,s,q)|0)==0;i=(p?j:i)*.5;j=+h[w>>3];if(y){h[w>>3]=j-i;y=w+8|0;h[y>>3]=+h[y>>3]+k*.5}else{h[w>>3]=j+i;y=w+8|0;h[y>>3]=+h[y>>3]-k*.5}g=e+16|0;c[e>>2]=c[u>>2];c[e+4>>2]=c[u+4>>2];c[e+8>>2]=c[u+8>>2];c[e+12>>2]=c[u+12>>2];c[g>>2]=c[u>>2];c[g+4>>2]=c[u+4>>2];c[g+8>>2]=c[u+8>>2];c[g+12>>2]=c[u+12>>2];g=e+32|0;y=e+48|0;u=e+64|0;c[u>>2]=c[w>>2];c[u+4>>2]=c[w+4>>2];c[u+8>>2]=c[w+8>>2];c[u+12>>2]=c[w+12>>2];c[y>>2]=c[w>>2];c[y+4>>2]=c[w+4>>2];c[y+8>>2]=c[w+8>>2];c[y+12>>2]=c[w+12>>2];c[g>>2]=c[w>>2];c[g+4>>2]=c[w+4>>2];c[g+8>>2]=c[w+8>>2];c[g+12>>2]=c[w+12>>2];g=e+80|0;y=e+96|0;c[y>>2]=c[v>>2];c[y+4>>2]=c[v+4>>2];c[y+8>>2]=c[v+8>>2];c[y+12>>2]=c[v+12>>2];c[g>>2]=c[v>>2];c[g+4>>2]=c[v+4>>2];c[g+8>>2]=c[v+8>>2];c[g+12>>2]=c[v+12>>2];g=7}while(0);l=x;return g|0}function wg(b,d,e,f,g,i){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;i=i|0;var j=0.0,k=0,l=0,m=0.0,n=0,o=0.0,p=0.0,q=0;q=c[f+16>>2]|0;p=+h[q+16>>3];j=p-+h[q+88>>3];m=j+-4.0;l=Jg(d,f,g,i,-1)|0;if(!l){n=~~(j+(m>=0.0?-3.5:-4.5));k=c[e>>2]|0;k=(k|0)>(n|0)?n:k}else{k=Kg(d,f,l)|0;do if(!k){n=c[l+16>>2]|0;j=+h[n+240>>3]+ +h[n+16>>3];if(!(a[n+156>>0]|0)){j=+(c[(c[d+16>>2]|0)+248>>2]|0)*.5+j;break}else{j=j+ +(c[e+8>>2]|0);break}}else j=+h[(c[k+16>>2]|0)+32>>3]+ +(c[e+8>>2]|0);while(0);o=j=0.0?.5:-.5))}o=+(k|0);n=(a[q+156>>0]|0)==1;if(n?(c[q+104>>2]|0)!=0:0)m=p+10.0;else m=p+4.0+ +h[q+96>>3];l=Jg(d,f,g,i,1)|0;if(!l){f=~~(m+(m>=0.0?.5:-.5));k=c[e+4>>2]|0;k=(k|0)<(f|0)?f:k}else{k=Kg(d,f,l)|0;do if(!k){f=c[l+16>>2]|0;j=+h[f+16>>3]-+h[f+88>>3];if(!(a[f+156>>0]|0)){j=j-+(c[(c[d+16>>2]|0)+248>>2]|0)*.5;break}else{j=j-+(c[e+8>>2]|0);break}}else j=+h[(c[k+16>>2]|0)+16>>3]-+(c[e+8>>2]|0);while(0);m=j>m?j:m;k=~~(m+(m>=0.0?.5:-.5))}j=+(k|0);if(n?(c[q+104>>2]|0)!=0:0){j=j-+h[q+96>>3];if(j>3];d=c[(c[d+16>>2]|0)+196>>2]|0;q=c[q+232>>2]|0;m=p-+h[d+(q<<6)+16>>3];p=+h[d+(q<<6)+24>>3]+p;h[b>>3]=o;h[b+8>>3]=m;h[b+16>>3]=j;h[b+24>>3]=p;return}function xg(b){b=b|0;b=c[b+16>>2]|0;if((a[b+156>>0]|0)==1)if((c[b+176>>2]|0)>1)b=1;else b=(c[b+184>>2]|0)>1&1;else b=0;return b|0}function yg(a,b,d,e){a=a|0;b=b|0;d=d|0;e=+e;var f=0,g=0;g=l;l=l+32|0;f=g;switch(d|0){case 1:{Ig(f,+h[b>>3],e,+h[b+16>>3],+h[b+8>>3]);break}case 4:{Ig(f,+h[b>>3],+h[b+24>>3],+h[b+16>>3],e);break}default:{}}c[a>>2]=c[f>>2];c[a+4>>2]=c[f+4>>2];c[a+8>>2]=c[f+8>>2];c[a+12>>2]=c[f+12>>2];c[a+16>>2]=c[f+16>>2];c[a+20>>2]=c[f+20>>2];c[a+24>>2]=c[f+24>>2];c[a+28>>2]=c[f+28>>2];l=g;return}function zg(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,g=0.0,i=0.0,j=0.0,k=0,l=0,m=0,n=0,o=0;l=c[b+16>>2]|0;k=l+(e<<5)|0;j=+h[k>>3];m=l+(e<<5)+8|0;g=+h[m>>3];n=l+(e<<5)+16|0;f=+h[n>>3];l=l+(e<<5)+24|0;i=+h[l>>3];if(j==f){d=c[(c[d+16>>2]|0)+196>>2]|0;o=e+1|0;j=+(c[b>>2]|0);g=+h[d+(o<<6)+24>>3]+ +h[(c[(c[c[d+(o<<6)+4>>2]>>2]|0)+16>>2]|0)+24>>3];f=+(c[b+4>>2]|0);i=+h[(c[(c[c[d+(e<<6)+4>>2]>>2]|0)+16>>2]|0)+24>>3]-+h[d+(e<<6)+16>>3];h[k>>3]=j;h[m>>3]=g;h[n>>3]=f;h[l>>3]=i}h[a>>3]=j;h[a+8>>3]=g;h[a+16>>3]=f;h[a+24>>3]=i;return}function Ag(b){b=b|0;var d=0,e=0;b=c[b+16>>2]|0;e=b+16|0;d=0;while(1){b=c[c[b+180>>2]>>2]|0;b=c[(c[((c[b>>2]&3|0)==2?b:b+-48|0)+40>>2]|0)+16>>2]|0;if((a[b+156>>0]|0)!=1)break;if((c[b+184>>2]|0)!=1)break;if((c[b+176>>2]|0)!=1)break;if(+h[b+16>>3]!=+h[e>>3])break;d=d+1|0}return d|0}function Bg(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;k=l;l=l+32|0;j=k;h=Fg(b,-1)|0;b=Fg(b,1)|0;if(!((h|0)!=0?!(uO(h)|0):0))i=3;do if((i|0)==3){if(b|0?(uO(b)|0)==0:0)break;h=Gg(d,-1)|0;b=Gg(d,1)|0;if(h|0?(uO(h)|0)==0:0)break;if(b|0?(uO(b)|0)==0:0)break;h=e+52|0;b=0;while(1){if((b|0)>=(c[h>>2]|0))break;d=e+56+(b<<5)|0;c[j>>2]=c[d>>2];c[j+4>>2]=c[d+4>>2];c[j+8>>2]=c[d+8>>2];c[j+12>>2]=c[d+12>>2];c[j+16>>2]=c[d+16>>2];c[j+20>>2]=c[d+20>>2];c[j+24>>2]=c[d+24>>2];c[j+28>>2]=c[d+28>>2];fO(a,j);b=b+1|0}h=c[a+80>>2]|0;i=g+-3|0;b=0;while(1){if((b|0)>=(g|0))break;e=153720+(b<<5)|0;c[j>>2]=c[e>>2];c[j+4>>2]=c[e+4>>2];c[j+8>>2]=c[e+8>>2];c[j+12>>2]=c[e+12>>2];c[j+16>>2]=c[e+16>>2];c[j+20>>2]=c[e+20>>2];c[j+24>>2]=c[e+24>>2];c[j+28>>2]=c[e+28>>2];fO(a,j);b=b+1|0}d=h+1|0;i=i+d|0;h=c[f+52>>2]|0;while(1){b=h+-1|0;if((h|0)<=0)break;h=f+56+(b<<5)|0;c[j>>2]=c[h>>2];c[j+4>>2]=c[h+4>>2];c[j+8>>2]=c[h+8>>2];c[j+12>>2]=c[h+12>>2];c[j+16>>2]=c[h+16>>2];c[j+20>>2]=c[h+20>>2];c[j+24>>2]=c[h+24>>2];c[j+28>>2]=c[h+28>>2];fO(a,j);h=b}Hg(a,d,i)}while(0);l=k;return}function Cg(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;f=c[e>>2]|0;while(1){if(!b)break;a=c[c[(c[(c[((c[a>>2]&3|0)==2?a:a+-48|0)+40>>2]|0)+16>>2]|0)+180>>2]>>2]|0;b=b+-1|0}c[e>>2]=f+1;g=d+(f<<4)|0;b=d+(f+-1<<4)|0;c[g>>2]=c[b>>2];c[g+4>>2]=c[b+4>>2];c[g+8>>2]=c[b+8>>2];c[g+12>>2]=c[b+12>>2];f=c[e>>2]|0;c[e>>2]=f+1;f=d+(f<<4)|0;c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];f=d+(c[e>>2]<<4)|0;e=(c[(c[((c[a>>2]&3|0)==3?a:a+48|0)+40>>2]|0)+16>>2]|0)+16|0;c[f>>2]=c[e>>2];c[f+4>>2]=c[e+4>>2];c[f+8>>2]=c[e+8>>2];c[f+12>>2]=c[e+12>>2];return a|0}function Dg(b,d){b=b|0;d=d|0;var e=0,f=0.0,g=0.0,i=0,j=0,k=0,l=0,m=0;m=d+84|0;l=d+80|0;e=0;d=b;a:while(1){j=c[((c[d>>2]&3|0)==2?d:d+-48|0)+40>>2]|0;k=j+16|0;if((a[(c[k>>2]|0)+156>>0]|0)!=1)break;if((kb[c[17300>>2]&63](j)|0)<<24>>24)break;d=c[l>>2]|0;while(1){if((e|0)>=(d|0))break a;if(!(+h[(c[m>>2]|0)+(e<<5)+8>>3]>+h[(c[k>>2]|0)+24>>3]))break;e=e+1|0}d=c[m>>2]|0;b=c[k>>2]|0;do if(!(+h[d+(e<<5)+24>>3]<+h[b+24>>3])){g=+h[d+(e<<5)>>3];i=~~g;f=+h[d+(e<<5)+16>>3];if(!(c[b+104>>2]|0)){Eg(j,i,~~((f+g)*.5),~~f);break}else{Eg(j,i,~~f,~~(+h[b+96>>3]+f));break}}while(0);d=c[c[(c[k>>2]|0)+180>>2]>>2]|0}return}function Eg(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;a=c[a+16>>2]|0;h[a+16>>3]=+(d|0);h[a+88>>3]=+(d-b|0);h[a+96>>3]=+(e-d|0);return}function Fg(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;h=c[a>>2]&3;i=c[(c[(c[((h|0)==3?a:a+48|0)+40>>2]|0)+16>>2]|0)+180>>2]|0;h=((h|0)==2?a:a+-48|0)+40|0;g=0;a=0;while(1){e=c[i+(g<<2)>>2]|0;if(!e)break;f=c[(c[(c[((c[e>>2]&3|0)==2?e:e+-48|0)+40>>2]|0)+16>>2]|0)+236>>2]|0;do if((O(f-(c[(c[(c[h>>2]|0)+16>>2]|0)+236>>2]|0)|0,b)|0)>=1){d=c[e+16>>2]|0;if(!(c[d+8>>2]|0)){d=c[d+116>>2]|0;if(!d)break;if(!(c[(c[d+16>>2]|0)+8>>2]|0))break}if(a|0?(O((c[(c[(c[((c[a>>2]&3|0)==2?a:a+-48|0)+40>>2]|0)+16>>2]|0)+236>>2]|0)-f|0,b)|0)<=0:0)break;a=e}while(0);g=g+1|0}return a|0}function Gg(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;h=c[a>>2]&3;i=c[(c[(c[((h|0)==2?a:a+-48|0)+40>>2]|0)+16>>2]|0)+172>>2]|0;h=((h|0)==3?a:a+48|0)+40|0;g=0;a=0;while(1){e=c[i+(g<<2)>>2]|0;if(!e)break;f=c[(c[(c[((c[e>>2]&3|0)==3?e:e+48|0)+40>>2]|0)+16>>2]|0)+236>>2]|0;do if((O(f-(c[(c[(c[h>>2]|0)+16>>2]|0)+236>>2]|0)|0,b)|0)>=1){d=c[e+16>>2]|0;if(!(c[d+8>>2]|0)){d=c[d+116>>2]|0;if(!d)break;if(!(c[(c[d+16>>2]|0)+8>>2]|0))break}if(a|0?(O((c[(c[(c[((c[a>>2]&3|0)==3?a:a+48|0)+40>>2]|0)+16>>2]|0)+236>>2]|0)-f|0,b)|0)<=0:0)break;a=e}while(0);g=g+1|0}return a|0}function Hg(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0,g=0,i=0,j=0,k=0,l=0,m=0.0;l=a+84|0;i=b+-1|0;while(1){if((i|0)>(d|0))break;f=c[l>>2]|0;j=f+(i<<5)|0;e=+h[j>>3];if(!(i-b&1)){f=f+(i<<5)+16|0;m=+h[f>>3];g=~~((m+e)*.5);if(e>=m){h[j>>3]=+(g+-8|0);h[f>>3]=+(g+8|0)}}else{f=f+(i<<5)+16|0;m=+h[f>>3];g=~~((m+e)*.5);if(e+16.0>m){h[j>>3]=+(g+-8|0);h[f>>3]=+(g+8|0)}}i=i+1|0}k=(c[a+80>>2]|0)+-1|0;g=0;while(1){if((g|0)>=(k|0))break;i=c[l>>2]|0;f=i+(g<<5)|0;j=g+1|0;a=i+(j<<5)|0;if(!((g|0)<(b|0)|(g|0)>(d|0))?(g-b&1|0)==0:0){e=+h[f>>3]+16.0;f=i+(j<<5)+16|0;if(e>+h[f>>3])h[f>>3]=e;e=+h[i+(g<<5)+16>>3]+-16.0;if(!(e<+h[a>>3])){g=j;continue}h[a>>3]=e;g=j;continue}if(!((g|0)<(d|0)&(j|0)>=(b|0))){g=j;continue}if(j-b&1|0){g=j;continue}e=+h[i+(j<<5)+16>>3];if(+h[f>>3]+16.0>e)h[f>>3]=e+-16.0;f=i+(g<<5)+16|0;e=+h[a>>3];if(!(+h[f>>3]+-16.0>3]=e+16.0;g=j}return}function Ig(a,b,c,d,e){a=a|0;b=+b;c=+c;d=+d;e=+e;h[a>>3]=b;h[a+8>>3]=c;h[a+16>>3]=d;h[a+24>>3]=e;return}function Jg(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;k=c[(c[b+16>>2]|0)+196>>2]|0;h=c[d+16>>2]|0;j=c[h+232>>2]|0;i=k+(j<<6)|0;j=k+(j<<6)+4|0;h=c[h+236>>2]|0;a:do{h=h+g|0;if((h|0)<=-1){b=0;break}if((h|0)>=(c[i>>2]|0)){b=0;break}b=c[(c[j>>2]|0)+(h<<2)>>2]|0;k=c[b+16>>2]|0;switch(a[k+156>>0]|0){case 0:break a;case 1:{if(c[k+104>>2]|0)break a;break}default:{}}}while((Mg(b,d,e,f)|0)<<24>>24!=0);return b|0}function Kg(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;d=c[d+16>>2]|0;if(!(a[d+156>>0]|0)){i=c[d+212>>2]|0;h=i}else{i=c[(c[(c[c[d+180>>2]>>2]|0)+16>>2]|0)+116>>2]|0;g=c[i>>2]&3;h=c[(c[(c[((g|0)==2?i:i+-48|0)+40>>2]|0)+16>>2]|0)+212>>2]|0;i=c[(c[(c[((g|0)==3?i:i+48|0)+40>>2]|0)+16>>2]|0)+212>>2]|0}d=c[e+16>>2]|0;if(!(a[d+156>>0]|0)){e=c[d+212>>2]|0;e=(e|0)==(b|0)?0:e;return ((e|0)==(h|0)|((e|0)==0|(e|0)==(i|0))?0:e)|0}f=c[(c[(c[c[d+180>>2]>>2]|0)+16>>2]|0)+116>>2]|0;g=c[f>>2]&3;d=c[(c[(c[((g|0)==3?f:f+48|0)+40>>2]|0)+16>>2]|0)+212>>2]|0;d=(d|0)==(b|0)?0:d;if(!(!((d|0)==(h|0)|((d|0)==0|(d|0)==(i|0)))?(Lg(d,e)|0)!=0:0)){d=c[(c[(c[((g|0)==2?f:f+-48|0)+40>>2]|0)+16>>2]|0)+212>>2]|0;d=(d|0)==(b|0)?0:d;if((d|0)==(h|0)|((d|0)==0|(d|0)==(i|0)))d=0;else{e=(Lg(d,e)|0)==0;return (e?0:d)|0}}return d|0}function Lg(a,b){a=a|0;b=b|0;var d=0,e=0.0,f=0.0;d=c[a+16>>2]|0;a=c[b+16>>2]|0;f=+h[a+16>>3];if((+h[d+16>>3]<=f?f<=+h[d+32>>3]:0)?(e=+h[a+24>>3],+h[d+24>>3]<=e):0)a=e<=+h[d+40>>3]&1;else a=0;return a|0}function Mg(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0;i=c[b+16>>2]|0;j=(c[i+236>>2]|0)>(c[(c[d+16>>2]|0)+236>>2]|0);a:do if((c[i+184>>2]|0)==1){b:do if(f|0){h=0;b=c[c[i+180>>2]>>2]|0;while(1){if((h|0)>=2)break b;b=c[((c[b>>2]&3|0)==2?b:b+-48|0)+40>>2]|0;d=c[((c[f>>2]&3|0)==2?f:f+-48|0)+40>>2]|0;if((b|0)==(d|0))break b;g=c[b+16>>2]|0;b=c[d+16>>2]|0;if(j^(c[g+236>>2]|0)>(c[b+236>>2]|0)){b=1;break a}if((c[g+184>>2]|0)!=1)break b;if(!(a[g+156>>0]|0))break b;if((c[b+184>>2]|0)!=1)break b;if(!(a[b+156>>0]|0))break b;h=h+1|0;f=c[c[b+180>>2]>>2]|0;b=c[c[g+180>>2]>>2]|0}}while(0);if(e|0?(c[i+176>>2]|0)==1:0){g=0;d=e;b=c[c[i+172>>2]>>2]|0;while(1){if((g|0)>=2){b=0;break a}b=c[((c[b>>2]&3|0)==3?b:b+48|0)+40>>2]|0;d=c[((c[d>>2]&3|0)==3?d:d+48|0)+40>>2]|0;if((b|0)==(d|0)){b=0;break a}f=c[b+16>>2]|0;b=c[d+16>>2]|0;if(j^(c[f+236>>2]|0)>(c[b+236>>2]|0)){b=1;break a}if((c[f+176>>2]|0)!=1){b=0;break a}if(!(a[f+156>>0]|0)){b=0;break a}if((c[b+176>>2]|0)!=1){b=0;break a}if(!(a[b+156>>0]|0)){b=0;break a}g=g+1|0;d=c[c[b+172>>2]>>2]|0;b=c[c[f+172>>2]>>2]|0}}else b=0}else b=0;while(0);return b|0}function Ng(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0;d=+h[c+8>>3]+ +h[b+8>>3];h[a>>3]=+h[c>>3]+ +h[b>>3];h[a+8>>3]=d;return}function Og(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0,e=0.0;d=+h[b+8>>3];e=+h[b>>3];return (~~((+h[c>>3]-e)*(+h[a+8>>3]-d)-(+h[a>>3]-e)*(+h[c+8>>3]-d))|0)>0|0}function Pg(b,d,e,f,g,i){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;i=i|0;var j=0,k=0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0.0,t=0,u=0,v=0.0,w=0.0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0;R=l;l=l+256|0;D=R+232|0;C=R+216|0;P=R+88|0;O=R+80|0;K=R+64|0;L=R+200|0;M=R+184|0;N=R;E=R+168|0;F=R+152|0;G=R+136|0;H=R+120|0;I=R+104|0;B=c[g>>2]&3;J=c[((B|0)==3?g:g+48|0)+40>>2]|0;B=c[((B|0)==2?g:g+-48|0)+40>>2]|0;do if((WM(J)|0)!=2?(WM(B)|0)!=2:0){g=0;j=0;k=0;while(1){if((k|0)>=(f|0))break;A=c[(c[d+(k+e<<2)>>2]|0)+16>>2]|0;g=g+((c[A+96>>2]|0)!=0&1)|0;if(!((a[A+44>>0]|0)==0?(a[A+84>>0]|0)==0:0))j=1;k=k+1|0}if(!j)if(!g){Rg(J,B,d,e,f,i);break}else{Wg(J,B,d,e,f,i,g);break}y=JK(156)|0;z=Xg(b,y)|0;t=ND(z,85478,1)|0;TC(t,137483,280,1)|0;SA(t,87171,87185)|0;m=+h[(c[B+16>>2]|0)+16>>3];s=+h[(c[J+16>>2]|0)+16>>3];A=b+16|0;q=(c[(c[A>>2]|0)+116>>2]&1|0)==0;r=q?B:J;q=q?J:B;t=Yg(t,q)|0;u=Yg(z,r)|0;g=0;p=0;while(1){if((p|0)>=(f|0))break;j=d+(p+e<<2)|0;while(1){o=c[j>>2]|0;n=o+16|0;j=c[n>>2]|0;if(!(a[j+112>>0]|0))break;else j=j+116|0}if((c[((c[o>>2]&3|0)==3?o:o+48|0)+40>>2]|0)==(q|0))k=Zg(z,t,u,o)|0;else k=Zg(z,u,t,o)|0;j=c[n>>2]|0;c[j+120>>2]=k;if(!g)if((a[j+44>>0]|0)==0?(a[j+84>>0]|0)==0:0){c[(c[k+16>>2]|0)+120>>2]=o;g=k}else g=0;p=p+1|0}if(!g)x=iB(z,t,u,0,1)|0;else x=g;KA(x,c[47174]|0,85482)|0;g=z+16|0;n=c[g>>2]|0;c[n+144>>2]=c[(c[A>>2]|0)+144>>2];c[n+188>>2]=z;oQ(z,i);Of(z);xj(z,0);Hh(z,0);Ki(z,0);q=q+16|0;i=c[q>>2]|0;n=c[r+16>>2]|0;r=t+16|0;o=c[r>>2]|0;p=o+16|0;v=+(~~m|0);w=+(~~((+h[(c[u+16>>2]|0)+16>>3]+ +h[p>>3])*.5)|0);m=+(~~s|0);s=+(~~((+h[i+16>>3]-+h[i+96>>3]+ +h[n+16>>3]+ +h[n+88>>3])*.5)|0);n=o+24|0;g=(c[g>>2]|0)+192|0;while(1){j=c[g>>2]|0;if(!j)break;do if((j|0)!=(t|0)){g=c[j+16>>2]|0;k=g+24|0;if((j|0)==(u|0)){h[k>>3]=m;h[g+16>>3]=w;break}else{h[k>>3]=s;break}}else{h[n>>3]=v;h[p>>3]=w;g=o}while(0);g=g+164|0}rk(z);jg(z,0);tM(z);k=c[q>>2]|0;g=c[r>>2]|0;if(!(c[(c[A>>2]|0)+116>>2]&1)){j=g+16|0;m=+h[k+24>>3]-+h[g+24>>3]}else{j=g+24|0;m=+h[g+16>>3]+ +h[k+24>>3]}h[K>>3]=+h[k+16>>3]-+h[j>>3];h[K+8>>3]=m;i=N+16|0;t=N+32|0;u=N+48|0;r=0;while(1){if((r|0)>=(f|0))break;g=d+(r+e<<2)|0;while(1){j=c[g>>2]|0;q=j+16|0;g=c[q>>2]|0;if(!(a[g+112>>0]|0))break;else g=g+116|0}o=c[g+120>>2]|0;p=o+16|0;g=c[p>>2]|0;if(!((o|0)==(x|0)&(c[g+120>>2]|0)==0)){n=c[c[g+8>>2]>>2]|0;o=n+4|0;j=cO(j,c[o>>2]|0)|0;c[j+8>>2]=c[n+8>>2];g=j+16|0;k=n+16|0;S=c[(c[A>>2]|0)+116>>2]&1;c[C>>2]=c[k>>2];c[C+4>>2]=c[k+4>>2];c[C+8>>2]=c[k+8>>2];c[C+12>>2]=c[k+12>>2];c[D>>2]=c[K>>2];c[D+4>>2]=c[K+4>>2];c[D+8>>2]=c[K+8>>2];c[D+12>>2]=c[K+12>>2];_g(L,C,D,S);c[g>>2]=c[L>>2];c[g+4>>2]=c[L+4>>2];c[g+8>>2]=c[L+8>>2];c[g+12>>2]=c[L+12>>2];c[j+12>>2]=c[n+12>>2];g=j+32|0;S=n+32|0;k=c[(c[A>>2]|0)+116>>2]&1;c[C>>2]=c[S>>2];c[C+4>>2]=c[S+4>>2];c[C+8>>2]=c[S+8>>2];c[C+12>>2]=c[S+12>>2];c[D>>2]=c[K>>2];c[D+4>>2]=c[K+4>>2];c[D+8>>2]=c[K+8>>2];c[D+12>>2]=c[K+12>>2];_g(M,C,D,k);c[g>>2]=c[M>>2];c[g+4>>2]=c[M+4>>2];c[g+8>>2]=c[M+8>>2];c[g+12>>2]=c[M+12>>2];g=0;while(1){if((g|0)>=(c[o>>2]|0))break;k=(c[j>>2]|0)+(g<<4)|0;T=(c[n>>2]|0)+(g<<4)|0;S=c[(c[A>>2]|0)+116>>2]&1;c[C>>2]=c[T>>2];c[C+4>>2]=c[T+4>>2];c[C+8>>2]=c[T+8>>2];c[C+12>>2]=c[T+12>>2];c[D>>2]=c[K>>2];c[D+4>>2]=c[K+4>>2];c[D+8>>2]=c[K+8>>2];c[D+12>>2]=c[K+12>>2];_g(E,C,D,S);c[k>>2]=c[E>>2];c[k+4>>2]=c[E+4>>2];c[k+8>>2]=c[E+8>>2];c[k+12>>2]=c[E+12>>2];c[N>>2]=c[E>>2];c[N+4>>2]=c[E+4>>2];c[N+8>>2]=c[E+8>>2];c[N+12>>2]=c[E+12>>2];k=g+1|0;if((k|0)>=(c[o>>2]|0)){Q=48;break}S=(c[j>>2]|0)+(k<<4)|0;k=(c[n>>2]|0)+(k<<4)|0;T=c[(c[A>>2]|0)+116>>2]&1;c[C>>2]=c[k>>2];c[C+4>>2]=c[k+4>>2];c[C+8>>2]=c[k+8>>2];c[C+12>>2]=c[k+12>>2];c[D>>2]=c[K>>2];c[D+4>>2]=c[K+4>>2];c[D+8>>2]=c[K+8>>2];c[D+12>>2]=c[K+12>>2];_g(F,C,D,T);c[S>>2]=c[F>>2];c[S+4>>2]=c[F+4>>2];c[S+8>>2]=c[F+8>>2];c[S+12>>2]=c[F+12>>2];c[i>>2]=c[F>>2];c[i+4>>2]=c[F+4>>2];c[i+8>>2]=c[F+8>>2];c[i+12>>2]=c[F+12>>2];S=g+2|0;T=(c[j>>2]|0)+(S<<4)|0;S=(c[n>>2]|0)+(S<<4)|0;k=c[(c[A>>2]|0)+116>>2]&1;c[C>>2]=c[S>>2];c[C+4>>2]=c[S+4>>2];c[C+8>>2]=c[S+8>>2];c[C+12>>2]=c[S+12>>2];c[D>>2]=c[K>>2];c[D+4>>2]=c[K+4>>2];c[D+8>>2]=c[K+8>>2];c[D+12>>2]=c[K+12>>2];_g(G,C,D,k);c[T>>2]=c[G>>2];c[T+4>>2]=c[G+4>>2];c[T+8>>2]=c[G+8>>2];c[T+12>>2]=c[G+12>>2];c[t>>2]=c[G>>2];c[t+4>>2]=c[G+4>>2];c[t+8>>2]=c[G+8>>2];c[t+12>>2]=c[G+12>>2];T=g+3|0;k=(c[n>>2]|0)+(T<<4)|0;S=c[(c[A>>2]|0)+116>>2]&1;c[C>>2]=c[k>>2];c[C+4>>2]=c[k+4>>2];c[C+8>>2]=c[k+8>>2];c[C+12>>2]=c[k+12>>2];c[D>>2]=c[K>>2];c[D+4>>2]=c[K+4>>2];c[D+8>>2]=c[K+8>>2];c[D+12>>2]=c[K+12>>2];_g(H,C,D,S);c[u>>2]=c[H>>2];c[u+4>>2]=c[H+4>>2];c[u+8>>2]=c[H+8>>2];c[u+12>>2]=c[H+12>>2];lI((c[A>>2]|0)+16|0,N);g=T}if((Q|0)==48)Q=0;g=c[(c[q>>2]|0)+96>>2]|0;if(g|0){T=g+56|0;p=(c[(c[p>>2]|0)+96>>2]|0)+56|0;S=c[(c[A>>2]|0)+116>>2]&1;c[C>>2]=c[p>>2];c[C+4>>2]=c[p+4>>2];c[C+8>>2]=c[p+8>>2];c[C+12>>2]=c[p+12>>2];c[D>>2]=c[K>>2];c[D+4>>2]=c[K+4>>2];c[D+8>>2]=c[K+8>>2];c[D+12>>2]=c[K+12>>2];_g(I,C,D,S);c[T>>2]=c[I>>2];c[T+4>>2]=c[I+4>>2];c[T+8>>2]=c[I+8>>2];c[T+12>>2]=c[I+12>>2];T=c[(c[q>>2]|0)+96>>2]|0;a[T+81>>0]=1;zP(b,T)}}r=r+1|0}$g(z,y)}else Q=3;while(0);if((Q|0)==3?(c[46738]|0)==0:0){c[46738]=1;gA(0,85355,O)|0;Q=KB(J)|0;S=(xB(b)|0)!=0;T=KB(B)|0;c[P>>2]=Q;c[P+4>>2]=S?137738:141747;c[P+8>>2]=T;gA(3,85461,P)|0}l=R;return}function Qg(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0.0,B=0.0,C=0.0,D=0.0,E=0.0;z=l;l=l+1600|0;u=z+1552|0;n=z+1536|0;t=z+840|0;v=z+144|0;w=z+1584|0;j=z+32|0;s=z+16|0;o=z;q=c[f>>2]&3;p=c[((q|0)==3?f:f+48|0)+40>>2]|0;x=f+-48|0;q=c[((q|0)==2?f:x)+40>>2]|0;r=f+16|0;k=c[r>>2]|0;i=c[k+172>>2]|0;while(1){m=c[(c[i+16>>2]|0)+172>>2]|0;if(!m)break;else i=m}k=(c[k+96>>2]|0)+56|0;i=(c[((c[i>>2]&3|0)==3?i:i+48|0)+40>>2]|0)+16|0;m=(c[i>>2]|0)+16|0;c[k>>2]=c[m>>2];c[k+4>>2]=c[m+4>>2];c[k+8>>2]=c[m+8>>2];c[k+12>>2]=c[m+12>>2];k=c[r>>2]|0;a[(c[k+96>>2]|0)+81>>0]=1;if((g|0)!=2){k=c[i>>2]|0;C=+h[k+16>>3];E=C-+h[k+88>>3];C=+h[k+96>>3]+C;B=+h[k+24>>3];D=+h[k+80>>3]*.5+B;k=c[(c[b+16>>2]|0)+196>>2]|0;m=c[p+16>>2]|0;j=c[m+232>>2]|0;B=+(~~(+(~~(B-+h[k+(j<<6)+16>>3]-+h[m+24>>3]+ +h[k+(j<<6)+24>>3])|0)*.16666666666666666)|0);B=D-(B<5.0?5.0:B);Tg(b,d,e,p,f,t,1);Tg(b,d,e,q,f,v,0);j=t+52|0;k=c[j>>2]|0;m=k+-1|0;A=+h[t+56+(m<<5)>>3];h[19215]=A;h[19216]=+h[t+56+(m<<5)+24>>3];h[19217]=E;h[19218]=B;h[19219]=A;h[19220]=B;m=v+52|0;i=(c[m>>2]|0)+-1|0;A=+h[v+56+(i<<5)+16>>3];h[19221]=A;h[19222]=D;h[19223]=C;h[19226]=B;h[19224]=+h[v+56+(i<<5)+24>>3];h[19225]=A;i=0;while(1){if((i|0)>=(k|0)){i=0;break}k=t+56+(i<<5)|0;c[u>>2]=c[k>>2];c[u+4>>2]=c[k+4>>2];c[u+8>>2]=c[k+8>>2];c[u+12>>2]=c[k+12>>2];c[u+16>>2]=c[k+16>>2];c[u+20>>2]=c[k+20>>2];c[u+24>>2]=c[k+24>>2];c[u+28>>2]=c[k+28>>2];fO(e,u);i=i+1|0;k=c[j>>2]|0}while(1){if((i|0)==3)break;t=153720+(i<<5)|0;c[u>>2]=c[t>>2];c[u+4>>2]=c[t+4>>2];c[u+8>>2]=c[t+8>>2];c[u+12>>2]=c[t+12>>2];c[u+16>>2]=c[t+16>>2];c[u+20>>2]=c[t+20>>2];c[u+24>>2]=c[t+24>>2];c[u+28>>2]=c[t+28>>2];fO(e,u);i=i+1|0}j=c[m>>2]|0;while(1){i=j+-1|0;if((j|0)<=0)break;j=v+56+(i<<5)|0;c[u>>2]=c[j>>2];c[u+4>>2]=c[j+4>>2];c[u+8>>2]=c[j+8>>2];c[u+12>>2]=c[j+12>>2];c[u+16>>2]=c[j+16>>2];c[u+20>>2]=c[j+20>>2];c[u+24>>2]=c[j+24>>2];c[u+28>>2]=c[j+28>>2];fO(e,u);j=i}if((g|0)==10)j=HM(e,w)|0;else j=NM(e,w)|0;i=c[w>>2]|0;if(i|0)y=17}else{i=(c[p+16>>2]|0)+16|0;v=k+16|0;c[n>>2]=c[i>>2];c[n+4>>2]=c[i+4>>2];c[n+8>>2]=c[i+8>>2];c[n+12>>2]=c[i+12>>2];c[u>>2]=c[v>>2];c[u+4>>2]=c[v+4>>2];c[u+8>>2]=c[v+8>>2];c[u+12>>2]=c[v+12>>2];Ng(s,n,u);v=(c[q+16>>2]|0)+16|0;i=(c[r>>2]|0)+56|0;c[n>>2]=c[v>>2];c[n+4>>2]=c[v+4>>2];c[n+8>>2]=c[v+8>>2];c[n+12>>2]=c[v+12>>2];c[u>>2]=c[i>>2];c[u+4>>2]=c[i+4>>2];c[u+8>>2]=c[i+8>>2];c[u+12>>2]=c[i+12>>2];Ng(o,n,u);i=c[(c[r>>2]|0)+96>>2]|0;D=+h[i+56>>3];E=+h[i+64>>3]-+h[i+32>>3]*.5;i=j+16|0;c[j>>2]=c[s>>2];c[j+4>>2]=c[s+4>>2];c[j+8>>2]=c[s+8>>2];c[j+12>>2]=c[s+12>>2];c[i>>2]=c[s>>2];c[i+4>>2]=c[s+4>>2];c[i+8>>2]=c[s+8>>2];c[i+12>>2]=c[s+12>>2];i=j+32|0;v=j+48|0;y=j+64|0;h[j+64>>3]=D;h[j+72>>3]=E;c[v>>2]=c[y>>2];c[v+4>>2]=c[y+4>>2];c[v+8>>2]=c[y+8>>2];c[v+12>>2]=c[y+12>>2];c[i>>2]=c[y>>2];c[i+4>>2]=c[y+4>>2];c[i+8>>2]=c[y+8>>2];c[i+12>>2]=c[y+12>>2];i=j+80|0;y=j+96|0;c[y>>2]=c[o>>2];c[y+4>>2]=c[o+4>>2];c[y+8>>2]=c[o+8>>2];c[y+12>>2]=c[o+12>>2];c[i>>2]=c[o>>2];c[i+4>>2]=c[o+4>>2];c[i+8>>2]=c[o+8>>2];c[i+12>>2]=c[o+12>>2];c[w>>2]=7;i=7;y=17}if((y|0)==17)dO(f,c[((c[f>>2]&3|0)==2?f:x)+40>>2]|0,j,i,17296);l=z;return}function Rg(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var i=0.0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0.0,s=0,t=0.0,u=0,v=0,w=0,x=0,y=0,z=0.0,A=0.0,B=0.0,C=0.0,D=0.0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0;N=l;l=l+352|0;x=N+336|0;w=N+320|0;L=N+128|0;u=N+304|0;y=N+288|0;M=N+112|0;E=N+96|0;F=N+80|0;G=N+64|0;H=N+48|0;I=N+32|0;J=N+16|0;K=N;a=a+16|0;q=(c[a>>2]|0)+16|0;v=(c[d+(e<<2)>>2]|0)+16|0;s=(c[v>>2]|0)+16|0;c[w>>2]=c[q>>2];c[w+4>>2]=c[q+4>>2];c[w+8>>2]=c[q+8>>2];c[w+12>>2]=c[q+12>>2];c[x>>2]=c[s>>2];c[x+4>>2]=c[s+4>>2];c[x+8>>2]=c[s+8>>2];c[x+12>>2]=c[s+12>>2];Ng(u,w,x);C=+h[u>>3];D=+h[u+8>>3];u=(c[b+16>>2]|0)+16|0;v=(c[v>>2]|0)+56|0;c[w>>2]=c[u>>2];c[w+4>>2]=c[u+4>>2];c[w+8>>2]=c[u+8>>2];c[w+12>>2]=c[u+12>>2];c[x>>2]=c[v>>2];c[x+4>>2]=c[v+4>>2];c[x+8>>2]=c[v+8>>2];c[x+12>>2]=c[v+12>>2];Ng(y,w,x);A=+h[y>>3];B=+h[y+8>>3];if((f|0)>1){z=+h[(c[a>>2]|0)+80>>3];i=z*.5;z=z/+(f+-1|0)}else{i=0.0;z=0.0}p=(g|8|0)==10;m=L+8|0;q=L+16|0;r=(A+C*2.0)*.3333333333333333;s=L+32|0;t=(A*2.0+C)*.3333333333333333;n=L+24|0;u=L+48|0;v=L+64|0;w=L+80|0;x=L+96|0;y=L+112|0;k=L+128|0;o=L+136|0;i=D-i;b=0;while(1){if((b|0)>=(f|0))break;j=c[d+(b+e<<2)>>2]|0;h[L>>3]=C;h[m>>3]=D;if(p){Vg(M,r,i);c[q>>2]=c[M>>2];c[q+4>>2]=c[M+4>>2];c[q+8>>2]=c[M+8>>2];c[q+12>>2]=c[M+12>>2];Vg(E,t,i);c[s>>2]=c[E>>2];c[s+4>>2]=c[E+4>>2];c[s+8>>2]=c[E+8>>2];c[s+12>>2]=c[E+12>>2];a=4;g=3}else{h[q>>3]=C;h[n>>3]=D;Vg(F,r,i);c[s>>2]=c[F>>2];c[s+4>>2]=c[F+4>>2];c[s+8>>2]=c[F+8>>2];c[s+12>>2]=c[F+12>>2];Vg(G,r,i);c[u>>2]=c[G>>2];c[u+4>>2]=c[G+4>>2];c[u+8>>2]=c[G+8>>2];c[u+12>>2]=c[G+12>>2];Vg(H,r,i);c[v>>2]=c[H>>2];c[v+4>>2]=c[H+4>>2];c[v+8>>2]=c[H+8>>2];c[v+12>>2]=c[H+12>>2];Vg(I,t,i);c[w>>2]=c[I>>2];c[w+4>>2]=c[I+4>>2];c[w+8>>2]=c[I+8>>2];c[w+12>>2]=c[I+12>>2];Vg(J,t,i);c[x>>2]=c[J>>2];c[x+4>>2]=c[J+4>>2];c[x+8>>2]=c[J+8>>2];c[x+12>>2]=c[J+12>>2];Vg(K,t,i);c[y>>2]=c[K>>2];c[y+4>>2]=c[K+4>>2];c[y+8>>2]=c[K+8>>2];c[y+12>>2]=c[K+12>>2];h[k>>3]=A;h[o>>3]=B;a=10;g=9}h[L+(g<<4)>>3]=A;h[L+(g<<4)+8>>3]=B;dO(j,c[((c[j>>2]&3|0)==2?j:j+-48|0)+40>>2]|0,L,a,17296);i=i+z;b=b+1|0}l=N;return}function Sg(a,d,e,f,g,i,j,k){a=a|0;d=d|0;e=e|0;f=f|0;g=g|0;i=i|0;j=j|0;k=k|0;var m=0,n=0.0,o=0,p=0,q=0,r=0,s=0.0,t=0,u=0,v=0,w=0,x=0,y=0,z=0.0,A=0.0,B=0.0,C=0.0,D=0.0;x=l;l=l+1440|0;t=x+1392|0;v=x+1424|0;w=x+696|0;u=x;r=c[j>>2]&3;q=c[((r|0)==3?j:j+48|0)+40>>2]|0;r=c[((r|0)==2?j:j+-48|0)+40>>2]|0;m=c[q+16>>2]|0;o=c[m+232>>2]|0;p=c[a+16>>2]|0;if((o|0)<(b[p+238>>1]|0)){y=c[p+196>>2]|0;p=o+1|0;n=+h[m+24>>3]-+h[y+(o<<6)+32>>3]-+h[(c[(c[c[y+(p<<6)+4>>2]>>2]|0)+16>>2]|0)+24>>3]-+h[y+(p<<6)+40>>3]}else n=+(c[p+252>>2]|0);z=+(i+1|0);s=+(c[d+12>>2]|0)/z;n=n/z;Ug(a,d,e,q,j,w,1);Ug(a,d,e,r,j,u,0);r=w+52|0;j=u+52|0;a=(k|0)==0;d=e+80|0;m=0;while(1){if((m|0)>=(i|0))break;q=c[f+(m+g<<2)>>2]|0;p=c[r>>2]|0;o=p+-1|0;D=+h[w+56+(o<<5)>>3];B=+h[w+56+(o<<5)+8>>3];C=+h[w+56+(o<<5)+16>>3];h[19215]=D;h[19218]=B;m=m+1|0;z=+(m|0);A=s*z;h[19217]=C+A;z=B-n*z;h[19216]=z;h[19219]=D;h[19222]=z;o=(c[j>>2]|0)+-1|0;D=+h[u+56+(o<<5)+16>>3];h[19221]=D;h[19220]=z-n;B=+h[u+56+(o<<5)>>3];C=+h[u+56+(o<<5)+8>>3];h[19225]=D;h[19226]=C;h[19223]=B-A;h[19224]=z;o=0;while(1){if((o|0)>=(p|0)){o=0;break}p=w+56+(o<<5)|0;c[t>>2]=c[p>>2];c[t+4>>2]=c[p+4>>2];c[t+8>>2]=c[p+8>>2];c[t+12>>2]=c[p+12>>2];c[t+16>>2]=c[p+16>>2];c[t+20>>2]=c[p+20>>2];c[t+24>>2]=c[p+24>>2];c[t+28>>2]=c[p+28>>2];fO(e,t);o=o+1|0;p=c[r>>2]|0}while(1){if((o|0)==3)break;y=153720+(o<<5)|0;c[t>>2]=c[y>>2];c[t+4>>2]=c[y+4>>2];c[t+8>>2]=c[y+8>>2];c[t+12>>2]=c[y+12>>2];c[t+16>>2]=c[y+16>>2];c[t+20>>2]=c[y+20>>2];c[t+24>>2]=c[y+24>>2];c[t+28>>2]=c[y+28>>2];fO(e,t);o=o+1|0}p=c[j>>2]|0;while(1){o=p+-1|0;if((p|0)<=0)break;p=u+56+(o<<5)|0;c[t>>2]=c[p>>2];c[t+4>>2]=c[p+4>>2];c[t+8>>2]=c[p+8>>2];c[t+12>>2]=c[p+12>>2];c[t+16>>2]=c[p+16>>2];c[t+20>>2]=c[p+20>>2];c[t+24>>2]=c[p+24>>2];c[t+28>>2]=c[p+28>>2];fO(e,t);p=o}if(a)o=NM(e,v)|0;else o=HM(e,v)|0;p=c[v>>2]|0;if(!p)break;dO(q,c[((c[q>>2]&3|0)==2?q:q+-48|0)+40>>2]|0,o,p,17296);c[d>>2]=0}l=x;return}function Tg(a,b,d,e,f,g,i){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0.0;n=l;l=l+128|0;j=n+96|0;k=n+64|0;o=n+32|0;m=n;wg(o,a,b,e,0,f);c[g>>2]=c[o>>2];c[g+4>>2]=c[o+4>>2];c[g+8>>2]=c[o+8>>2];c[g+12>>2]=c[o+12>>2];c[g+16>>2]=c[o+16>>2];c[g+20>>2]=c[o+20>>2];c[g+24>>2]=c[o+24>>2];c[g+28>>2]=c[o+28>>2];c[k>>2]=c[o>>2];c[k+4>>2]=c[o+4>>2];c[k+8>>2]=c[o+8>>2];c[k+12>>2]=c[o+12>>2];c[k+16>>2]=c[o+16>>2];c[k+20>>2]=c[o+20>>2];c[k+24>>2]=c[o+24>>2];c[k+28>>2]=c[o+28>>2];c[g+48>>2]=4;if(!(i<<24>>24))jO(d,f,2,g,0);else gO(d,f,2,g,0);b=g+52|0;f=(c[b>>2]|0)+-1|0;o=k+24|0;h[o>>3]=+h[g+56+(f<<5)+24>>3];i=k+8|0;h[i>>3]=+h[g+56+(f<<5)+8>>3];e=c[e+16>>2]|0;p=+h[(c[(c[a+16>>2]|0)+196>>2]|0)+(c[e+232>>2]<<6)+24>>3]+ +h[e+24>>3];c[j>>2]=c[k>>2];c[j+4>>2]=c[k+4>>2];c[j+8>>2]=c[k+8>>2];c[j+12>>2]=c[k+12>>2];c[j+16>>2]=c[k+16>>2];c[j+20>>2]=c[k+20>>2];c[j+24>>2]=c[k+24>>2];c[j+28>>2]=c[k+28>>2];yg(m,j,4,p);c[k>>2]=c[m>>2];c[k+4>>2]=c[m+4>>2];c[k+8>>2]=c[m+8>>2];c[k+12>>2]=c[m+12>>2];c[k+16>>2]=c[m+16>>2];c[k+20>>2]=c[m+20>>2];c[k+24>>2]=c[m+24>>2];c[k+28>>2]=c[m+28>>2];if(+h[k>>3]<+h[k+16>>3]?+h[i>>3]<+h[o>>3]:0){o=c[b>>2]|0;c[b>>2]=o+1;o=g+56+(o<<5)|0;c[o>>2]=c[k>>2];c[o+4>>2]=c[k+4>>2];c[o+8>>2]=c[k+8>>2];c[o+12>>2]=c[k+12>>2];c[o+16>>2]=c[k+16>>2];c[o+20>>2]=c[k+20>>2];c[o+24>>2]=c[k+24>>2];c[o+28>>2]=c[k+28>>2]}l=n;return}function Ug(a,b,d,e,f,g,i){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0.0;n=l;l=l+128|0;j=n+96|0;k=n+64|0;o=n+32|0;m=n;wg(o,a,b,e,0,f);c[g>>2]=c[o>>2];c[g+4>>2]=c[o+4>>2];c[g+8>>2]=c[o+8>>2];c[g+12>>2]=c[o+12>>2];c[g+16>>2]=c[o+16>>2];c[g+20>>2]=c[o+20>>2];c[g+24>>2]=c[o+24>>2];c[g+28>>2]=c[o+28>>2];c[k>>2]=c[o>>2];c[k+4>>2]=c[o+4>>2];c[k+8>>2]=c[o+8>>2];c[k+12>>2]=c[o+12>>2];c[k+16>>2]=c[o+16>>2];c[k+20>>2]=c[o+20>>2];c[k+24>>2]=c[o+24>>2];c[k+28>>2]=c[o+28>>2];c[g+48>>2]=1;if(!(i<<24>>24))jO(d,f,2,g,0);else gO(d,f,2,g,0);b=g+52|0;f=(c[b>>2]|0)+-1|0;o=k+24|0;h[o>>3]=+h[g+56+(f<<5)+24>>3];i=k+8|0;h[i>>3]=+h[g+56+(f<<5)+8>>3];e=c[e+16>>2]|0;p=+h[e+24>>3]-+h[(c[(c[a+16>>2]|0)+196>>2]|0)+(c[e+232>>2]<<6)+24>>3];c[j>>2]=c[k>>2];c[j+4>>2]=c[k+4>>2];c[j+8>>2]=c[k+8>>2];c[j+12>>2]=c[k+12>>2];c[j+16>>2]=c[k+16>>2];c[j+20>>2]=c[k+20>>2];c[j+24>>2]=c[k+24>>2];c[j+28>>2]=c[k+28>>2];yg(m,j,1,p);c[k>>2]=c[m>>2];c[k+4>>2]=c[m+4>>2];c[k+8>>2]=c[m+8>>2];c[k+12>>2]=c[m+12>>2];c[k+16>>2]=c[m+16>>2];c[k+20>>2]=c[m+20>>2];c[k+24>>2]=c[m+24>>2];c[k+28>>2]=c[m+28>>2];if(+h[k>>3]<+h[k+16>>3]?+h[i>>3]<+h[o>>3]:0){o=c[b>>2]|0;c[b>>2]=o+1;o=g+56+(o<<5)|0;c[o>>2]=c[k>>2];c[o+4>>2]=c[k+4>>2];c[o+8>>2]=c[k+8>>2];c[o+12>>2]=c[k+12>>2];c[o+16>>2]=c[k+16>>2];c[o+20>>2]=c[k+20>>2];c[o+24>>2]=c[k+24>>2];c[o+28>>2]=c[k+28>>2]}l=n;return}function Vg(a,b,c){a=a|0;b=+b;c=+c;h[a>>3]=b;h[a+8>>3]=c;return}function Wg(b,d,e,f,g,i,j){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;i=i|0;j=j|0;var k=0,m=0,n=0,o=0,p=0.0,q=0.0,r=0.0,s=0.0,t=0.0,u=0.0,v=0.0,w=0.0,x=0.0,y=0,z=0,A=0.0,B=0.0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0.0;Y=l;l=l+288|0;R=Y+256|0;Q=Y+240|0;P=Y+224|0;V=Y+280|0;W=Y+272|0;X=Y+32|0;S=Y+16|0;T=Y;m=Y+208|0;n=Y+192|0;o=c[e+(f<<2)>>2]|0;U=JK(g<<2)|0;k=0;while(1){if((k|0)>=(g|0))break;c[U+(k<<2)>>2]=c[e+(k+f<<2)>>2];k=k+1|0}o4(U,g,4,59);e=b+16|0;f=(c[e>>2]|0)+16|0;o=o+16|0;C=(c[o>>2]|0)+16|0;c[Q>>2]=c[f>>2];c[Q+4>>2]=c[f+4>>2];c[Q+8>>2]=c[f+8>>2];c[Q+12>>2]=c[f+12>>2];c[R>>2]=c[C>>2];c[R+4>>2]=c[C+4>>2];c[R+8>>2]=c[C+8>>2];c[R+12>>2]=c[C+12>>2];Ng(m,Q,R);c[S>>2]=c[m>>2];c[S+4>>2]=c[m+4>>2];c[S+8>>2]=c[m+8>>2];c[S+12>>2]=c[m+12>>2];C=d+16|0;f=(c[C>>2]|0)+16|0;o=(c[o>>2]|0)+56|0;c[Q>>2]=c[f>>2];c[Q+4>>2]=c[f+4>>2];c[Q+8>>2]=c[f+8>>2];c[Q+12>>2]=c[f+12>>2];c[R>>2]=c[o>>2];c[R+4>>2]=c[o+4>>2];c[R+8>>2]=c[o+8>>2];c[R+12>>2]=c[o+12>>2];Ng(n,Q,R);c[T>>2]=c[n>>2];c[T+4>>2]=c[n+4>>2];c[T+8>>2]=c[n+8>>2];c[T+12>>2]=c[n+12>>2];w=+h[(c[e>>2]|0)+96>>3]+ +h[S>>3];x=+h[T>>3]-+h[(c[C>>2]|0)+88>>3];u=x+w;v=u*.5;C=c[U>>2]|0;c[X>>2]=c[S>>2];c[X+4>>2]=c[S+4>>2];c[X+8>>2]=c[S+8>>2];c[X+12>>2]=c[S+12>>2];o=X+16|0;c[o>>2]=c[S>>2];c[o+4>>2]=c[S+4>>2];c[o+8>>2]=c[S+8>>2];c[o+12>>2]=c[S+12>>2];e=X+32|0;c[e>>2]=c[T>>2];c[e+4>>2]=c[T+4>>2];c[e+8>>2]=c[T+8>>2];c[e+12>>2]=c[T+12>>2];f=X+48|0;c[f>>2]=c[T>>2];c[f+4>>2]=c[T+4>>2];c[f+8>>2]=c[T+8>>2];c[f+12>>2]=c[T+12>>2];dO(C,c[((c[C>>2]&3|0)==2?C:C+-48|0)+40>>2]|0,X,4,17296);C=c[(c[C+16>>2]|0)+96>>2]|0;h[C+56>>3]=v;z=S+8|0;r=+h[z>>3];s=+h[C+32>>3];h[C+64>>3]=(s+6.0)*.5+r;a[C+81>>0]=1;r=r+3.0;B=+h[C+24>>3];A=(u-B)*.5;B=(B+u)*.5;C=X+24|0;D=X+40|0;E=X+56|0;F=X+64|0;G=T+8|0;H=X+72|0;I=X+80|0;J=X+88|0;K=X+96|0;L=X+104|0;M=X+112|0;N=X+120|0;O=V+4|0;n=(i|0)==6&1;q=0.0;p=0.0;s=s+r;m=1;while(1){if((m|0)>=(j|0)){y=6;break}d=c[U+(m<<2)>>2]|0;if(!(m&1)){c[X>>2]=c[S>>2];c[X+4>>2]=c[S+4>>2];c[X+8>>2]=c[S+8>>2];c[X+12>>2]=c[S+12>>2];h[o>>3]=A;h[C>>3]=+h[z>>3];h[e>>3]=A;h[D>>3]=s;h[f>>3]=B;h[E>>3]=s;h[F>>3]=B;t=+h[G>>3];h[H>>3]=t;Z=+h[T>>3];h[I>>3]=Z;h[J>>3]=t;h[K>>3]=Z;Z=s+6.0;h[L>>3]=Z;h[M>>3]=+h[S>>3];h[N>>3]=Z;s=+h[(c[(c[d+16>>2]|0)+96>>2]|0)+32>>3];t=Z+s*.5;s=Z+s}else{k=d+16|0;b=c[(c[k>>2]|0)+96>>2]|0;if((m|0)==1){p=+h[b+24>>3];q=(p+u)*.5;p=(u-p)*.5}r=r+-6.0-+h[b+32>>3];c[X>>2]=c[S>>2];c[X+4>>2]=c[S+4>>2];c[X+8>>2]=c[S+8>>2];c[X+12>>2]=c[S+12>>2];h[o>>3]=+h[S>>3];t=r+-6.0;h[C>>3]=t;h[e>>3]=+h[T>>3];h[D>>3]=t;c[f>>2]=c[T>>2];c[f+4>>2]=c[T+4>>2];c[f+8>>2]=c[T+8>>2];c[f+12>>2]=c[T+12>>2];h[F>>3]=q;h[H>>3]=+h[G>>3];h[I>>3]=q;h[J>>3]=r;h[K>>3]=p;h[L>>3]=r;h[M>>3]=p;h[N>>3]=+h[z>>3];t=+h[(c[(c[k>>2]|0)+96>>2]|0)+32>>3]*.5+r}c[O>>2]=8;c[V>>2]=X;c[P>>2]=c[S>>2];c[P+4>>2]=c[S+4>>2];c[P+8>>2]=c[S+8>>2];c[P+12>>2]=c[S+12>>2];c[Q>>2]=c[T>>2];c[Q+4>>2]=c[T+4>>2];c[Q+8>>2]=c[T+8>>2];c[Q+12>>2]=c[T+12>>2];c[R>>2]=c[V>>2];c[R+4>>2]=c[V+4>>2];k=DM(P,Q,R,W,n)|0;b=c[W>>2]|0;if(!b)break;i=c[(c[d+16>>2]|0)+96>>2]|0;h[i+56>>3]=v;h[i+64>>3]=t;a[i+81>>0]=1;dO(d,c[((c[d>>2]&3|0)==2?d:d+-48|0)+40>>2]|0,k,b,17296);m=m+1|0}a:do if((y|0)==6){v=(x+w*2.0)*.3333333333333333;u=(x*2.0+w)*.3333333333333333;while(1){if((m|0)>=(g|0))break;d=c[U+(m<<2)>>2]|0;if(!(m&1)){c[X>>2]=c[S>>2];c[X+4>>2]=c[S+4>>2];c[X+8>>2]=c[S+8>>2];c[X+12>>2]=c[S+12>>2];h[o>>3]=A;h[C>>3]=+h[z>>3];h[e>>3]=A;h[D>>3]=s;h[f>>3]=B;h[E>>3]=s;h[F>>3]=B;t=+h[G>>3];h[H>>3]=t;Z=+h[T>>3];h[I>>3]=Z;h[J>>3]=t;h[K>>3]=Z;Z=s+6.0;h[L>>3]=Z;h[M>>3]=+h[S>>3];s=Z;t=p;p=Z}else{y=(m|0)==1;t=y?v:p;q=y?u:q;p=r+-6.0;c[X>>2]=c[S>>2];c[X+4>>2]=c[S+4>>2];c[X+8>>2]=c[S+8>>2];c[X+12>>2]=c[S+12>>2];h[o>>3]=+h[S>>3];r=r+-12.0;h[C>>3]=r;h[e>>3]=+h[T>>3];h[D>>3]=r;c[f>>2]=c[T>>2];c[f+4>>2]=c[T+4>>2];c[f+8>>2]=c[T+8>>2];c[f+12>>2]=c[T+12>>2];h[F>>3]=q;h[H>>3]=+h[G>>3];h[I>>3]=q;h[J>>3]=p;h[K>>3]=t;h[L>>3]=p;h[M>>3]=t;r=p;p=+h[z>>3]}h[N>>3]=p;c[O>>2]=8;c[V>>2]=X;c[P>>2]=c[S>>2];c[P+4>>2]=c[S+4>>2];c[P+8>>2]=c[S+8>>2];c[P+12>>2]=c[S+12>>2];c[Q>>2]=c[T>>2];c[Q+4>>2]=c[T+4>>2];c[Q+8>>2]=c[T+8>>2];c[Q+12>>2]=c[T+12>>2];c[R>>2]=c[V>>2];c[R+4>>2]=c[V+4>>2];k=DM(P,Q,R,W,n)|0;b=c[W>>2]|0;if(!b)break a;dO(d,c[((c[d>>2]&3|0)==2?d:d+-48|0)+40>>2]|0,k,b,17296);m=m+1|0;p=t}U1(U)}while(0);l=Y;return}function Xg(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,i=0,j=0,k=0;g=l;l=l+16|0;f=g;j=(xB(b)|0)==0;j=j?18592:18584;a[f>>0]=a[j>>0]|0;a[f+1>>0]=a[j+1>>0]|0;a[f+2>>0]=a[j+2>>0]|0;a[f+3>>0]=a[j+3>>0]|0;f=oB(85493,f,0)|0;TC(f,137483,280,1)|0;GA(f,0,87171,195059)|0;j=JK(96)|0;e=c[f+16>>2]|0;c[e+8>>2]=j;i=c[b+16>>2]|0;k=c[i+8>>2]|0;h[j>>3]=+h[k>>3];h[j+24>>3]=+h[k+24>>3];a[e+115>>0]=a[i+115>>0]|0;c[e+116>>2]=c[i+116>>2]&1^1;c[e+248>>2]=c[i+248>>2];c[e+252>>2]=c[i+252>>2];e=LA(yC(b)|0,1,0)|0;while(1){if(!e)break;GA(f,1,c[e+8>>2]|0,c[e+12>>2]|0)|0;e=LA(yC(b)|0,1,e)|0}e=LA(yC(b)|0,2,0)|0;while(1){if(!e)break;GA(f,2,c[e+8>>2]|0,c[e+12>>2]|0)|0;e=LA(yC(b)|0,2,e)|0}if(!(GA(f,2,111464,0)|0))GA(f,2,111464,195059)|0;if(!(GA(f,2,111455,0)|0))GA(f,2,111455,195059)|0;ah(f,d);l=g;return f|0}function Yg(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;e=l;l=l+16|0;d=e;a=tC(a,KB(b)|0,1)|0;TC(a,137447,304,1)|0;UA(b,a)|0;if((WM(b)|0)==2){f=b+16|0;b=KK((l2(c[c[(c[f>>2]|0)+104>>2]>>2]|0)|0)+3|0)|0;c[d>>2]=c[c[(c[f>>2]|0)+104>>2]>>2];m4(b,85488,d)|0;SA(a,108224,b)|0}l=e;return a|0}function Zg(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;c=iB(a,b,c,0,1)|0;TC(c,137460,176,1)|0;UA(d,c)|0;return c|0}function _g(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0.0;i=l;l=l+32|0;g=i+16|0;f=i;if(e|0){j=+h[b>>3];e=b+8|0;h[b>>3]=+h[e>>3];h[e>>3]=-j};c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];c[g>>2]=c[d>>2];c[g+4>>2]=c[d+4>>2];c[g+8>>2]=c[d+8>>2];c[g+12>>2]=c[d+12>>2];Ng(a,f,g);l=i;return}function $g(a,b){a=a|0;b=b|0;c[47189]=c[b>>2];c[47193]=c[b+4>>2];c[47194]=c[b+8>>2];c[47174]=c[b+12>>2];c[47175]=c[b+16>>2];c[47181]=c[b+20>>2];c[47180]=c[b+24>>2];c[47179]=c[b+28>>2];c[47205]=c[b+32>>2];c[47197]=c[b+36>>2];c[47182]=c[b+40>>2];c[47192]=c[b+44>>2];c[47201]=c[b+48>>2];c[47200]=c[b+52>>2];c[47199]=c[b+56>>2];c[47204]=c[b+60>>2];c[47198]=c[b+64>>2];c[47183]=c[b+68>>2];c[47145]=c[b+72>>2];c[47146]=c[b+76>>2];c[47147]=c[b+80>>2];c[47157]=c[b+84>>2];c[47150]=c[b+88>>2];c[47151]=c[b+92>>2];c[47152]=c[b+96>>2];c[47154]=c[b+100>>2];c[47155]=c[b+104>>2];c[47158]=c[b+108>>2];c[47161]=c[b+112>>2];c[47159]=c[b+116>>2];c[47160]=c[b+120>>2];c[47163]=c[b+124>>2];c[47162]=c[b+128>>2];c[47164]=c[b+132>>2];c[47165]=c[b+136>>2];c[47156]=c[b+140>>2];c[47168]=c[b+144>>2];c[47140]=c[b+148>>2];c[47138]=c[b+152>>2];U1(b);Rf(a);sB(a)|0;return}function ah(a,b){a=a|0;b=b|0;c[b>>2]=c[47189];c[b+4>>2]=c[47193];c[b+8>>2]=c[47194];c[b+12>>2]=c[47174];c[b+16>>2]=c[47175];c[b+20>>2]=c[47181];c[b+24>>2]=c[47180];c[b+28>>2]=c[47179];c[b+32>>2]=c[47205];c[b+36>>2]=c[47197];c[b+40>>2]=c[47182];c[b+44>>2]=c[47192];c[b+48>>2]=c[47201];c[b+52>>2]=c[47200];c[b+56>>2]=c[47199];c[b+60>>2]=c[47204];c[b+64>>2]=c[47198];c[b+68>>2]=c[47183];c[b+72>>2]=c[47145];c[b+76>>2]=c[47146];c[b+80>>2]=c[47147];c[b+84>>2]=c[47157];c[b+88>>2]=c[47150];c[b+92>>2]=c[47151];c[b+96>>2]=c[47152];c[b+100>>2]=c[47154];c[b+104>>2]=c[47155];c[b+108>>2]=c[47158];c[b+112>>2]=c[47161];c[b+116>>2]=c[47159];c[b+120>>2]=c[47160];c[b+124>>2]=c[47163];c[b+128>>2]=c[47162];c[b+132>>2]=c[47164];c[b+136>>2]=c[47165];c[b+140>>2]=c[47156];c[b+144>>2]=c[47168];c[b+152>>2]=c[47138];c[b+148>>2]=c[47140];c[47189]=0;c[47193]=GA(a,2,87412,0)|0;c[47194]=GA(a,2,87421,0)|0;b=GA(a,2,101541,0)|0;c[47174]=b;if(!b)c[47174]=GA(a,2,101541,195059)|0;c[47175]=0;c[47181]=0;c[47180]=GA(a,2,101437,0)|0;c[47179]=GA(a,2,101428,0)|0;c[47205]=GA(a,2,101717,0)|0;c[47197]=0;c[47182]=GA(a,2,108224,0)|0;c[47192]=GA(a,2,85498,0)|0;c[47201]=0;c[47200]=GA(a,2,101617,0)|0;c[47199]=GA(a,2,101603,0)|0;c[47204]=GA(a,2,101708,0)|0;c[47198]=0;c[47183]=0;c[47145]=GA(a,1,141048,0)|0;c[47146]=GA(a,1,141116,0)|0;c[47147]=GA(a,1,108230,0)|0;c[47157]=0;c[47150]=GA(a,1,101428,0)|0;c[47151]=GA(a,1,101437,0)|0;c[47152]=0;c[47154]=GA(a,1,108224,0)|0;c[47155]=0;c[47158]=0;c[47161]=GA(a,1,101409,0)|0;c[47159]=GA(a,1,141076,0)|0;c[47160]=GA(a,1,101472,0)|0;c[47163]=GA(a,1,101484,0)|0;c[47162]=GA(a,1,101348,0)|0;c[47164]=GA(a,1,101489,0)|0;c[47165]=GA(a,1,85510,0)|0;c[47156]=0;c[47168]=0;c[47140]=GA(a,0,101409,0)|0;return}function bh(a,b){a=a|0;b=b|0;var d=0,e=0.0,f=0.0,g=0.0,i=0.0;d=c[(c[(c[a>>2]|0)+16>>2]|0)+96>>2]|0;a=c[(c[(c[b>>2]|0)+16>>2]|0)+96>>2]|0;b=(a|0)!=0;if(d)if(b?(f=+h[d+24>>3],i=+h[d+32>>3],e=+h[a+24>>3],g=+h[a+32>>3],!(f>e)):0)if(!(fg)a=-1;else a=i>2]|0)+116>>2]|0;if(!b)break;else a=b}b=c[a>>2]&3;d=c[(c[((b|0)==2?a:a+-48|0)+40>>2]|0)+16>>2]|0;e=c[d+232>>2]|0;a=c[(c[((b|0)==3?a:a+48|0)+40>>2]|0)+16>>2]|0;b=c[a+232>>2]|0;if((e|0)<=(b|0))if((e|0)<(b|0))a=1;else a=(c[d+236>>2]|0)<(c[a+236>>2]|0)&1;else a=0;return a|0}function dh(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;d=l;l=l+16|0;e=d+8|0;f=d;h=(c[a+16>>2]|0)+180|0;g=(c[b+16>>2]|0)+172|0;c[f>>2]=c[h>>2];c[f+4>>2]=c[h+4>>2];c[e>>2]=c[g>>2];c[e+4>>2]=c[g+4>>2];b=eh(a,f,b,e)|0;l=d;return b|0}function eh(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;f=c[b+4>>2]|0;a:do if((f|0)>0?(g=c[e+4>>2]|0,(g|0)>0):0)if((f|0)<(g|0)){f=c[b>>2]|0;e=0;while(1){b=c[f+(e<<2)>>2]|0;if(!b){b=0;break a}if((c[((c[b>>2]&3|0)==2?b:b+-48|0)+40>>2]|0)==(d|0))break;else e=e+1|0}}else{f=c[e>>2]|0;e=0;while(1){b=c[f+(e<<2)>>2]|0;if(!b){b=0;break a}if((c[((c[b>>2]&3|0)==3?b:b+48|0)+40>>2]|0)==(a|0))break;else e=e+1|0}}else b=0;while(0);return b|0}function fh(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;d=l;l=l+16|0;e=d+8|0;f=d;h=(c[a+16>>2]|0)+188|0;g=(c[b+16>>2]|0)+196|0;c[f>>2]=c[h>>2];c[f+4>>2]=c[h+4>>2];c[e>>2]=c[g>>2];c[e+4>>2]=c[g+4>>2];b=eh(a,f,b,e)|0;l=d;return b|0}function gh(a){a=a|0;var b=0,d=0,e=0,f=0;e=a+48|0;d=c[(c[((c[a>>2]&3|0)==3?a:e)+40>>2]|0)+16>>2]|0;b=c[d+180>>2]|0;if(!b)b=KK((c[d+184>>2]<<2)+8|0)|0;else b=MK(b,(c[d+184>>2]<<2)+8|0)|0;c[(c[(c[((c[a>>2]&3|0)==3?a:e)+40>>2]|0)+16>>2]|0)+180>>2]=b;f=c[(c[((c[a>>2]&3|0)==3?a:e)+40>>2]|0)+16>>2]|0;d=c[f+180>>2]|0;f=f+184|0;b=c[f>>2]|0;c[f>>2]=b+1;c[d+(b<<2)>>2]=a;e=c[(c[((c[a>>2]&3|0)==3?a:e)+40>>2]|0)+16>>2]|0;c[(c[e+180>>2]|0)+(c[e+184>>2]<<2)>>2]=0;e=a+-48|0;b=c[(c[((c[a>>2]&3|0)==2?a:e)+40>>2]|0)+16>>2]|0;d=c[b+172>>2]|0;if(!d)b=KK((c[b+176>>2]<<2)+8|0)|0;else b=MK(d,(c[b+176>>2]<<2)+8|0)|0;c[(c[(c[((c[a>>2]&3|0)==2?a:e)+40>>2]|0)+16>>2]|0)+172>>2]=b;b=c[(c[((c[a>>2]&3|0)==2?a:e)+40>>2]|0)+16>>2]|0;d=c[b+172>>2]|0;b=b+176|0;f=c[b>>2]|0;c[b>>2]=f+1;c[d+(f<<2)>>2]=a;f=c[(c[((c[a>>2]&3|0)==2?a:e)+40>>2]|0)+16>>2]|0;c[(c[f+172>>2]|0)+(c[f+176>>2]<<2)>>2]=0;return a|0}function hh(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;e=a+4|0;f=c[e>>2]|0;d=0;while(1){if((d|0)>=(f|0))break;g=c[a>>2]|0;h=g+(d<<2)|0;if((c[h>>2]|0)==(b|0)){i=4;break}else d=d+1|0}if((i|0)==4){i=f+-1|0;c[e>>2]=i;c[h>>2]=c[g+(i<<2)>>2];c[(c[a>>2]|0)+(i<<2)>>2]=0}return}function ih(a){a=a|0;if(!a)qa(85551,85561,117,85570);else{hh((c[(c[((c[a>>2]&3|0)==3?a:a+48|0)+40>>2]|0)+16>>2]|0)+180|0,a);hh((c[(c[((c[a>>2]&3|0)==2?a:a+-48|0)+40>>2]|0)+16>>2]|0)+172|0,a);return}}function jh(a){a=a|0;var b=0,d=0,e=0,f=0;e=a+48|0;d=c[(c[((c[a>>2]&3|0)==3?a:e)+40>>2]|0)+16>>2]|0;b=c[d+204>>2]|0;if(!b)b=KK((c[d+208>>2]<<2)+8|0)|0;else b=MK(b,(c[d+208>>2]<<2)+8|0)|0;c[(c[(c[((c[a>>2]&3|0)==3?a:e)+40>>2]|0)+16>>2]|0)+204>>2]=b;f=c[(c[((c[a>>2]&3|0)==3?a:e)+40>>2]|0)+16>>2]|0;b=c[f+204>>2]|0;f=f+208|0;d=c[f>>2]|0;c[f>>2]=d+1;c[b+(d<<2)>>2]=a;e=c[(c[((c[a>>2]&3|0)==3?a:e)+40>>2]|0)+16>>2]|0;c[(c[e+204>>2]|0)+(c[e+208>>2]<<2)>>2]=0;return}function kh(a){a=a|0;lh(a,(c[(c[((c[a>>2]&3|0)==3?a:a+48|0)+40>>2]|0)+16>>2]|0)+204|0);return}function lh(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;h=b+4|0;e=c[h>>2]|0;f=c[b>>2]|0;d=0;while(1){if((d|0)>=(e|0)){g=4;break}if((c[f+(d<<2)>>2]|0)==(a|0))break;else d=d+1|0}if((g|0)==4){if(!f)d=KK((e<<2)+8|0)|0;else d=MK(f,(e<<2)+8|0)|0;c[b>>2]=d;f=c[h>>2]|0;g=f+1|0;c[h>>2]=g;c[d+(f<<2)>>2]=a;c[(c[b>>2]|0)+(g<<2)>>2]=0}return}function mh(d,e,f){d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;n=JK(96)|0;g=n+48|0;c[g>>2]=c[g>>2]|3;c[n>>2]=c[n>>2]&-4|2;h=JK(176)|0;m=n+16|0;c[m>>2]=h;c[((c[n>>2]&3|0)==3?n:g)+40>>2]=d;j=n+-48|0;c[((c[n>>2]&3|0)==2?n:j)+40>>2]=e;a[h+112>>0]=1;if(!f){c[h+156>>2]=1;b[h+154>>1]=1;b[h+168>>1]=1;b[h+170>>1]=1}else{c[n>>2]=c[n>>2]&15|c[f>>2]&-16;c[g>>2]=c[g>>2]&15|c[f>>2]&-16;l=f+16|0;i=c[l>>2]|0;b[h+168>>1]=b[i+168>>1]|0;b[h+154>>1]=b[i+154>>1]|0;c[h+156>>2]=c[i+156>>2];b[h+170>>1]=b[i+170>>1]|0;d=c[((c[n>>2]&3|0)==3?n:g)+40>>2]|0;e=c[f>>2]&3;k=f+48|0;if((d|0)!=(c[((e|0)==3?f:k)+40>>2]|0)){g=f+-48|0;if((d|0)==(c[((e|0)==2?f:g)+40>>2]|0)){h=h+16|0;d=i+56|0;e=h+40|0;do{c[h>>2]=c[d>>2];h=h+4|0;d=d+4|0}while((h|0)<(e|0))}}else{h=h+16|0;d=i+16|0;e=h+40|0;do{c[h>>2]=c[d>>2];h=h+4|0;d=d+4|0}while((h|0)<(e|0));g=f+-48|0}d=c[((c[n>>2]&3|0)==2?n:j)+40>>2]|0;e=c[f>>2]&3;if((d|0)!=(c[((e|0)==2?f:g)+40>>2]|0)){if((d|0)==(c[((e|0)==3?f:k)+40>>2]|0)){h=(c[m>>2]|0)+56|0;d=(c[l>>2]|0)+16|0;e=h+40|0;do{c[h>>2]=c[d>>2];h=h+4|0;d=d+4|0}while((h|0)<(e|0))}}else{h=(c[m>>2]|0)+56|0;d=(c[l>>2]|0)+56|0;e=h+40|0;do{c[h>>2]=c[d>>2];h=h+4|0;d=d+4|0}while((h|0)<(e|0))}d=(c[l>>2]|0)+172|0;if(!(c[d>>2]|0))c[d>>2]=n;c[(c[m>>2]|0)+116>>2]=f}return n|0}function nh(a,b,c){a=a|0;b=b|0;c=c|0;return gh(mh(a,b,c)|0)|0}function oh(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;a=(c[a+16>>2]|0)+192|0;f=c[a>>2]|0;d=c[b+16>>2]|0;c[d+164>>2]=f;e=f;if(f|0)c[(c[e+16>>2]|0)+168>>2]=b;c[a>>2]=b;c[d+168>>2]=0;if((e|0)==(b|0))qa(85587,85561,215,85603);else return}function ph(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;if((a|0)==(b|0))qa(85613,85561,220,85620);f=c[b+16>>2]|0;d=f+164|0;if(c[d>>2]|0)qa(85633,85561,221,85620);e=(c[a+16>>2]|0)+164|0;c[d>>2]=c[e>>2];d=c[e>>2]|0;if(d|0)c[(c[d+16>>2]|0)+168>>2]=b;c[f+168>>2]=a;c[e>>2]=b;return}function qh(a,b){a=a|0;b=b|0;var d=0,e=0;if(!(rh(a,b)|0))qa(85652,85561,231,85673);b=c[b+16>>2]|0;d=c[b+164>>2]|0;e=d;b=b+168|0;if(d|0)c[(c[d+16>>2]|0)+168>>2]=c[b>>2];b=c[b>>2]|0;if(!b)c[(c[a+16>>2]|0)+192>>2]=e;else c[(c[b+16>>2]|0)+164>>2]=e;return}function rh(a,b){a=a|0;b=b|0;a=(c[a+16>>2]|0)+192|0;while(1){a=c[a>>2]|0;if((a|0)==0|(a|0)==(b|0))break;a=(c[a+16>>2]|0)+164|0}return a|0}function sh(b){b=b|0;var d=0,e=0,f=0,g=0;d=JK(64)|0;c[d>>2]=c[d>>2]&-4|1;e=d+16|0;c[e>>2]=JK(304)|0;c[d+24>>2]=yC(b)|0;g=c[e>>2]|0;a[g+156>>0]=1;h[g+96>>3]=1.0;h[g+88>>3]=1.0;h[g+80>>3]=1.0;c[g+216>>2]=1;c[g+176>>2]=0;g=JK(20)|0;f=c[e>>2]|0;c[f+172>>2]=g;c[f+184>>2]=0;f=JK(20)|0;c[(c[e>>2]|0)+180>>2]=f;oh(b,d);b=(c[b+16>>2]|0)+232|0;c[b>>2]=(c[b>>2]|0)+1;return d|0}function th(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;g=d+48|0;e=c[(c[((c[d>>2]&3|0)==3?d:g)+40>>2]|0)+16>>2]|0;f=c[e+188>>2]|0;if(!f)e=KK((c[e+192>>2]<<2)+8|0)|0;else e=MK(f,(c[e+192>>2]<<2)+8|0)|0;c[(c[(c[((c[d>>2]&3|0)==3?d:g)+40>>2]|0)+16>>2]|0)+188>>2]=e;h=c[(c[((c[d>>2]&3|0)==3?d:g)+40>>2]|0)+16>>2]|0;f=c[h+188>>2]|0;h=h+192|0;e=c[h>>2]|0;c[h>>2]=e+1;c[f+(e<<2)>>2]=d;g=c[(c[((c[d>>2]&3|0)==3?d:g)+40>>2]|0)+16>>2]|0;c[(c[g+188>>2]|0)+(c[g+192>>2]<<2)>>2]=0;g=d+-48|0;e=c[(c[((c[d>>2]&3|0)==2?d:g)+40>>2]|0)+16>>2]|0;f=c[e+196>>2]|0;if(!f)e=KK((c[e+200>>2]<<2)+8|0)|0;else e=MK(f,(c[e+200>>2]<<2)+8|0)|0;c[(c[(c[((c[d>>2]&3|0)==2?d:g)+40>>2]|0)+16>>2]|0)+196>>2]=e;e=c[(c[((c[d>>2]&3|0)==2?d:g)+40>>2]|0)+16>>2]|0;f=c[e+196>>2]|0;e=e+200|0;h=c[e>>2]|0;c[e>>2]=h+1;c[f+(h<<2)>>2]=d;h=c[(c[((c[d>>2]&3|0)==2?d:g)+40>>2]|0)+16>>2]|0;c[(c[h+196>>2]|0)+(c[h+200>>2]<<2)>>2]=0;a[(c[b+16>>2]|0)+240>>0]=1;a[(c[(gg(b)|0)+16>>2]|0)+240>>0]=1;return}function uh(a){a=a|0;var b=0,d=0;if(!a)qa(85551,85561,269,85690);b=c[(c[a+16>>2]|0)+116>>2]|0;if(b|0?(d=(c[b+16>>2]|0)+172|0,(c[d>>2]|0)==(a|0)):0)c[d>>2]=0;hh((c[(c[((c[a>>2]&3|0)==3?a:a+48|0)+40>>2]|0)+16>>2]|0)+188|0,a);hh((c[(c[((c[a>>2]&3|0)==2?a:a+-48|0)+40>>2]|0)+16>>2]|0)+196|0,a);return}function vh(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=l;l=l+16|0;d=(c[a+16>>2]|0)+172|0;e=c[d>>2]|0;do if((e|0)!=(b|0))if(!e){c[d>>2]=b;wh(a,b);break}else qa(87593,85561,340,85728);else gA(0,85707,f)|0;while(0);l=f;return}function wh(a,d){a=a|0;d=d|0;var f=0,g=0,h=0,i=0;f=(c[d+16>>2]|0)+170|0;i=c[a+16>>2]|0;a=b[i+170>>1]|0;if((e[f>>1]|0)<(a&65535))b[f>>1]=a;g=i+168|0;h=i+154|0;f=i+156|0;a=d;while(1){if(!a)break;d=c[a+16>>2]|0;i=d+168|0;b[i>>1]=(e[i>>1]|0)+(e[g>>1]|0);i=d+154|0;b[i>>1]=(e[i>>1]|0)+(e[h>>1]|0);i=d+156|0;c[i>>2]=(c[i>>2]|0)+(c[f>>2]|0);a=c[d+172>>2]|0}return}function xh(d){d=d|0;var e=0,f=0,g=0,h=0;f=d+16|0;e=c[(c[f>>2]|0)+172>>2]|0;a:while(1){if(!e)break;yh(e,d);h=c[e+16>>2]|0;g=c[h+172>>2]|0;if(!(b[h+168>>1]|0))zh(e);while(1){if((a[(c[e+16>>2]|0)+112>>0]|0)!=1){e=g;continue a}e=c[(c[((c[e>>2]&3|0)==2?e:e+-48|0)+40>>2]|0)+16>>2]|0;if((a[e+156>>0]|0)!=1){e=g;continue a}if((c[e+184>>2]|0)!=1){e=g;continue a}e=c[c[e+180>>2]>>2]|0;yh(e,d)}}c[(c[f>>2]|0)+172>>2]=0;return}function yh(a,d){a=a|0;d=d|0;var f=0;f=c[d+16>>2]|0;d=c[a+16>>2]|0;a=d+168|0;b[a>>1]=(e[a>>1]|0)-(e[f+168>>1]|0);a=d+154|0;b[a>>1]=(e[a>>1]|0)-(e[f+154>>1]|0);d=d+156|0;c[d>>2]=(c[d>>2]|0)-(c[f+156>>2]|0);return}function zh(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;if(!a)qa(85551,85561,128,85741);g=a+48|0;d=0;while(1){b=c[a>>2]|0;e=(c[(c[((b&3|0)==3?a:g)+40>>2]|0)+16>>2]|0)+180|0;f=c[(c[e>>2]|0)+(d<<2)>>2]|0;if(!f)break;if((f|0)==(a|0))hh(e,a);d=d+1|0}g=a+-48|0;f=0;while(1){d=(c[(c[((b&3|0)==2?a:g)+40>>2]|0)+16>>2]|0)+172|0;e=c[(c[d>>2]|0)+(f<<2)>>2]|0;if(!e)break;if((e|0)==(a|0)){hh(d,a);b=c[a>>2]|0}f=f+1|0}return}function Ah(d){d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;p=l;l=l+1040|0;n=p+1032|0;o=p;m=p+8|0;k=d+16|0;d=c[k>>2]|0;j=b[d+236>>1]|0;while(1){if((j|0)>(b[d+238>>1]|0))break;i=c[d+196>>2]|0;h=i+(j<<6)|0;i=i+(j<<6)+4|0;g=0;d=0;while(1){if((g|0)>=(c[h>>2]|0))break;e=c[(c[i>>2]|0)+(g<<2)>>2]|0;f=e+16|0;if(c[(c[f>>2]|0)+112>>2]|0){if(!d){a[n>>0]=a[18588]|0;a[n+1>>0]=a[18589]|0;a[n+2>>0]=a[18590]|0;a[n+3>>0]=a[18591]|0;d=oB(85763,n,0)|0}c[o>>2]=g;m4(m,137395,o)|0;t=tC(d,m,1)|0;TC(t,91164,24,1)|0;q=c[(c[f>>2]|0)+180>>2]|0;r=c[q>>2]|0;r=c[(c[(c[((c[r>>2]&3|0)==2?r:r+-48|0)+40>>2]|0)+16>>2]|0)+236>>2]|0;q=c[q+4>>2]|0;q=c[(c[(c[((c[q>>2]&3|0)==2?q:q+-48|0)+40>>2]|0)+16>>2]|0)+236>>2]|0;s=(r|0)>(q|0);f=c[t+16>>2]|0;c[f+12>>2]=s?q:r;c[f+16>>2]=s?r:q;c[f+20>>2]=e}g=g+1|0}if(d|0){if((tB(d)|0)>1)Bh(d,h);sB(d)|0}j=j+1|0;d=c[k>>2]|0}l=p;return}function Bh(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;d=0;h=jC(a)|0;a:while(1){if(!h)break;i=kC(a,h)|0;j=h+16|0;g=i;while(1){if(!g){h=i;continue a}f=c[g+16>>2]|0;e=c[j>>2]|0;if((c[f+16>>2]|0)>(c[e+12>>2]|0)){if((c[e+16>>2]|0)<=(c[f+12>>2]|0))iB(a,h,g,0,1)|0}else{iB(a,g,h,0,1)|0;d=1}g=kC(a,g)|0}}do if(d|0){h=ND(a,85766,1)|0;j=JK((tB(a)|0)<<2)|0;i=JK((tB(a)|0)<<2)|0;f=b+4|0;e=jC(a)|0;b:while(1){if(!e){d=23;break}if((c[(c[e+16>>2]|0)+8>>2]|0)==0?vB(a,e,1,1)|0:0){c:do if(Ch(a,e,h,i)|0){g=tB(h)|0;if((Dh(a,h,j)|0)!=(g|0)){d=17;break b}o4(i,g,4,60);d=0;while(1){if((d|0)>=(g|0))break c;b=i+(d<<2)|0;k=c[j+(d<<2)>>2]|0;c[(c[k+16>>2]|0)+236>>2]=c[b>>2];c[(c[f>>2]|0)+(c[b>>2]<<2)>>2]=k;d=d+1|0}}while(0);Fh(h)}e=kC(a,e)|0}if((d|0)==17)qa(85771,85781,265,85792);else if((d|0)==23){U1(j);break}}while(0);return}function Ch(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;h=c[b+16>>2]|0;c[h+8>>2]=1;h=c[(c[(c[h+20>>2]|0)+16>>2]|0)+236>>2]|0;c[e+((tB(d)|0)<<2)>>2]=h;oC(d,b,1)|0;h=XA(a,b)|0;f=0;while(1){if(!h)break;j=c[h>>2]&3;g=c[((j|0)==2?h:h+-48|0)+40>>2]|0;i=c[g+16>>2]|0;f=f+((c[(c[(c[i+20>>2]|0)+16>>2]|0)+236>>2]|0)>(c[(c[(c[(c[(c[((j|0)==3?h:h+48|0)+40>>2]|0)+16>>2]|0)+20>>2]|0)+16>>2]|0)+236>>2]|0)&1)|0;if(!(c[i+8>>2]|0))f=(Ch(a,g,d,e)|0)+f|0;h=ZA(a,h)|0}h=_A(a,b)|0;while(1){if(!h)break;i=c[h>>2]&3;g=c[((i|0)==3?h:h+48|0)+40>>2]|0;j=c[g+16>>2]|0;f=f+((c[(c[(c[(c[(c[((i|0)==2?h:h+-48|0)+40>>2]|0)+16>>2]|0)+20>>2]|0)+16>>2]|0)+236>>2]|0)>(c[(c[(c[j+20>>2]|0)+16>>2]|0)+236>>2]|0)&1)|0;if(!(c[j+8>>2]|0))f=(Ch(a,g,d,e)|0)+f|0;h=$A(a,h)|0}return f|0}function Dh(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;f=0;while(1){e=Gh(a,b)|0;if(!e)break;c[d+(f<<2)>>2]=c[(c[e+16>>2]|0)+20>>2];vC(b,e)|0;e=XA(a,e)|0;while(1){if(!e)break;g=ZA(a,e)|0;lB(a,e)|0;e=g}f=f+1|0}return f|0}function Eh(a,b){a=a|0;b=b|0;return (c[a>>2]|0)-(c[b>>2]|0)|0}function Fh(a){a=a|0;var b=0,c=0;b=jC(a)|0;while(1){if(!b)break;c=kC(a,b)|0;vC(a,b)|0;b=c}return}function Gh(a,b){a=a|0;b=b|0;var c=0;c=jC(b)|0;while(1){if(!c){c=0;break}if(!(vB(a,c,1,0)|0))break;c=kC(b,c)|0}return c|0}function Hh(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;Ih(b);i=b+16|0;f=0;e=0;while(1){if((f|0)>=(c[(c[i>>2]|0)+220>>2]|0))break;Jh(b,f);f=f+1|0;e=(Kh(b,0,d)|0)+e|0}Lh(b);h=1;while(1){f=c[i>>2]|0;g=c[f+180>>2]|0;if((h|0)>(g|0))break;g=(Mh(c[(c[f+184>>2]|0)+(h<<2)>>2]|0,d)|0)+e|0;h=h+1|0;e=g}do if((g|0)>0){f=QA(b,85806)|0;if(f|0?(dP(f)|0)<<24>>24==0:0)break;jl(b);a[193769]=1;e=Kh(b,2,d)|0}while(0);Nh(b,e);return}function Ih(d){d=d|0;var e=0;if(0)TO();a[193769]=0;c[46741]=d;e=((uB(gg(d)|0)|0)<<2)+4|0;c[46740]=JK(e)|0;c[46739]=JK(e)|0;Di(d);e=d+16|0;if(b[(c[e>>2]|0)+136>>1]&16)Ei(d);Sk(d);Gl(d,1);Fi(d);Uh(d);e=c[e>>2]|0;c[46742]=b[e+236>>1];c[46743]=b[e+238>>1];return}function Jh(a,d){a=a|0;d=d|0;var e=0,f=0,g=0;a=c[a+16>>2]|0;c[a+192>>2]=c[(c[a+216>>2]|0)+(d<<2)>>2];a:do if((d|0)>0){d=b[a+238>>1]|0;e=a+196|0;a=b[a+236>>1]|0;while(1){if((a|0)>(d|0))break a;f=c[e>>2]|0;g=f+(a<<6)+4|0;f=f+(a<<6)|0;c[g>>2]=(c[g>>2]|0)+(c[f>>2]<<2);c[f>>2]=0;a=a+1|0}}while(0);return}function Kh(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0;o=l;l=l+32|0;n=o;if((b|0)>1){e=ii(0)|0;ji(a)}else e=2147483647;m=c[15712]|0;k=b;f=0;b=e;while(1){if((k|0)>=3)break;f=c[47136]|0;if((k|0)==2)if((e|0)>(b|0)){li(a);e=b}else e=b;else{e=(f|0)<4?f:4;if((gg(a)|0)==(a|0))ki(a,k);if(!k)Vh(a);Wh(a);g=ii(0)|0;if((g|0)>(b|0)){f=e;e=g}else{ji(a);f=e;e=g;b=g}}g=0;j=0;while(1){if((j|0)>=(f|0))break;if(0){c[n>>2]=k;c[n+4>>2]=j;c[n+8>>2]=g;c[n+12>>2]=e;c[n+16>>2]=b;w4(m,86199,n)|0}i=g+1|0;if((e|0)==0|(g|0)>=(c[46744]|0))break;mi(a,j);e=ii(0)|0;if((e|0)>(b|0))g=i;else{ji(a);g=+h[23215]*+(b|0)>+(e|0)?0:i;b=e}j=j+1|0}if(!e){e=0;break}else k=k+1|0}if((e|0)>(b|0))li(a);if((b|0)>0){ni(a,0);e=ii(0)|0}else e=b;a:do if(d|0){b=0;while(1){if((b|0)>=(f|0))break a;oi(a);b=b+1|0}}while(0);l=o;return e|0}function Lh(a){a=a|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;p=l;l=l+16|0;n=p;hi(a);k=a+16|0;d=c[k>>2]|0;m=c[15712]|0;j=b[d+236>>1]|0;while(1){if((j|0)>(b[d+238>>1]|0))break;e=c[d+196>>2]|0;f=c[e+(j<<6)+8>>2]|0;c[e+(j<<6)>>2]=f;g=c[e+(j<<6)+12>>2]|0;c[e+(j<<6)+4>>2]=g;i=0;while(1){if((i|0)>=(f|0))break;h=c[g+(i<<2)>>2]|0;if(!h){o=6;break}c[(c[h+16>>2]|0)+236>>2]=i;i=i+1|0}if((o|0)==6){o=0;if(0){e=KB(a)|0;d=c[(c[(c[k>>2]|0)+196>>2]|0)+(j<<6)>>2]|0;c[n>>2]=e;c[n+4>>2]=j;c[n+8>>2]=i;c[n+12>>2]=d;w4(m,86149,n)|0;d=c[k>>2]|0;e=c[d+196>>2]|0}c[e+(j<<6)>>2]=i}j=j+1|0}l=p;return}function Mh(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;dl(a);Uh(a);Vh(a);Wh(a);f=a+16|0;d=Kh(a,2,b)|0;e=1;while(1){g=c[f>>2]|0;if((e|0)>(c[g+180>>2]|0))break;d=(Mh(c[(c[g+184>>2]|0)+(e<<2)>>2]|0,b)|0)+d|0;e=e+1|0}Xh(a);return d|0}function Nh(d,e){d=d|0;e=e|0;var f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0.0;q=l;l=l+16|0;p=q;f=c[46739]|0;if(f|0){U1(f);c[46739]=0}f=c[46740]|0;if(f|0){U1(f);c[46740]=0}o=d+16|0;f=1;while(1){g=c[o>>2]|0;if((f|0)>(c[g+180>>2]|0))break;Oh(c[(c[g+184>>2]|0)+(f<<2)>>2]|0);f=f+1|0}n=b[g+236>>1]|0;f=g;while(1){if((n|0)>(b[f+238>>1]|0))break;else m=0;while(1){f=c[f+196>>2]|0;if((m|0)>=(c[f+(n<<6)>>2]|0))break;k=(c[(c[f+(n<<6)+4>>2]|0)+(m<<2)>>2]|0)+16|0;f=c[k>>2]|0;c[f+236>>2]=m;f=c[f+188>>2]|0;a:do if(f|0){g=0;while(1){i=c[f+(g<<2)>>2]|0;if(!i)break a;j=i+16|0;if((a[(c[j>>2]|0)+112>>0]|0)==4){uh(i);U1(c[j>>2]|0);U1(i);g=g+-1|0;f=c[(c[k>>2]|0)+188>>2]|0}g=g+1|0}}while(0);m=m+1|0;f=c[o>>2]|0}Ph(c[f+(n<<6)+56>>2]|0);n=n+1|0;f=c[o>>2]|0}if(0){o=c[15712]|0;d=KB(d)|0;r=+UO();c[p>>2]=d;c[p+4>>2]=e;h[p+8>>3]=r;w4(o,85817,p)|0}l=q;return}function Oh(a){a=a|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;g=a+16|0;d=1;while(1){f=c[g>>2]|0;if((d|0)>(c[f+180>>2]|0))break;Oh(c[(c[f+184>>2]|0)+(d<<2)>>2]|0);d=d+1|0}a:do if(c[f+268>>2]|0){e=b[f+236>>1]|0;d=f;while(1){if((e|0)>(b[d+238>>1]|0))break a;j=c[(c[d+268>>2]|0)+(e<<2)>>2]|0;i=Qh(a,j,-1)|0;j=Qh(a,j,1)|0;c[(c[(c[g>>2]|0)+268>>2]|0)+(e<<2)>>2]=i;k=c[(c[(c[(gg(a)|0)+16>>2]|0)+196>>2]|0)+(e<<6)+4>>2]|0;i=c[(c[i+16>>2]|0)+236>>2]|0;f=c[g>>2]|0;h=c[f+196>>2]|0;c[h+(e<<6)+4>>2]=k+(i<<2);c[h+(e<<6)>>2]=(c[(c[j+16>>2]|0)+236>>2]|0)+1-i;e=e+1|0;d=f}}while(0);return}function Ph(a){a=a|0;if(a|0){U1(c[a+8>>2]|0);U1(a)}return}function Qh(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=b;while(1){b=Rh(b,c)|0;if(!b)break;if(Sh(a,b)|0){d=b;continue}e=(Th(a,b)|0)==0;d=e?d:b}return d|0}function Rh(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;if(!a)qa(85856,85781,1023,85858);if((b|0)<0){a=c[a+16>>2]|0;e=c[a+236>>2]|0;if((e|0)>0){a=(c[(c[(c[46741]|0)+16>>2]|0)+196>>2]|0)+(c[a+232>>2]<<6)+4|0;d=e+-1|0;f=7}else g=0}else{a=c[a+16>>2]|0;e=c[a+236>>2]|0;a=(c[(c[(c[46741]|0)+16>>2]|0)+196>>2]|0)+(c[a+232>>2]<<6)+4|0;d=e+1|0;f=7}if((f|0)==7){a=c[(c[a>>2]|0)+(d<<2)>>2]|0;if(a)if((O((c[(c[a+16>>2]|0)+236>>2]|0)-e|0,b)|0)>0)g=a;else qa(85867,85781,1029,85858);else g=0}return g|0}function Sh(b,d){b=b|0;d=d|0;if(!(a[(c[d+16>>2]|0)+156>>0]|0))b=(HC(b,d)|0)!=0&1;else b=0;return b|0}function Th(b,d){b=b|0;d=d|0;var e=0,f=0;d=c[d+16>>2]|0;if(((a[d+156>>0]|0)==1?(c[d+176>>2]|0)==1:0)?(c[d+184>>2]|0)==1:0){d=c[d+180>>2]|0;while(1){d=c[d>>2]|0;e=c[d+16>>2]|0;if(!(a[e+112>>0]|0))break;else d=e+116|0}if(HC(b,d)|0)d=1;else f=7}else f=7;if((f|0)==7)d=0;return d|0}function Uh(b){b=b|0;var d=0,e=0,f=0;f=l;l=l+16|0;e=f;d=c[47140]|0;a:do if((d|0)!=0|(c[47161]|0)!=0){d=aP(b,d,0)|0;if(d|0){switch(a[d>>0]|0){case 0:break a;case 111:{if(!(s2(d,86069)|0)){ci(b,1);break a}break}case 105:{if(!(s2(d,98735)|0)){ci(b,0);break a}break}default:{}}c[e>>2]=d;gA(1,86073,e)|0;break}d=OD(b)|0;while(1){if(!d)break;if(!(Pj(d)|0))Uh(d);d=PD(d)|0}if(c[47161]|0)di(b)}while(0);l=f;return}function Vh(d){d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;k=d+16|0;e=c[k>>2]|0;j=b[e+236>>1]|0;while(1){if((j|0)>(b[e+238>>1]|0))break;else{f=0;i=0}while(1){g=c[e+196>>2]|0;h=c[g+(j<<6)>>2]|0;if((i|0)>=(h|0))break;g=c[(c[(c[g+(j<<6)+4>>2]|0)+(i<<2)>>2]|0)+16>>2]|0;a[g+158>>0]=0;a[g+157>>0]=0;c[g+284>>2]=i;if((f|0)==0&(c[g+192>>2]|0)>0){f=ai(h,h)|0;e=c[k>>2]|0;c[(c[e+196>>2]|0)+(j<<6)+56>>2]=f;f=1}i=i+1|0}a:do if(f){i=0;f=h;while(1){if((i|0)>=(f|0))break a;h=c[(c[g+(j<<6)+4>>2]|0)+(i<<2)>>2]|0;if(!(a[(c[h+16>>2]|0)+157>>0]|0)){bi(d,h);e=c[k>>2]|0;f=c[e+196>>2]|0;g=f;f=c[f+(j<<6)>>2]|0}i=i+1|0}}while(0);j=j+1|0}return}function Wh(d){d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;s=d+16|0;e=c[s>>2]|0;if(a[e+240>>0]|0){h=0;r=b[e+236>>1]|0;q=0;i=0;a:while(1){if((r|0)>(b[e+238>>1]|0))break;f=c[e+196>>2]|0;g=c[f+(r<<6)>>2]|0;if(!g){g=q;f=i}else{f=c[f+(r<<6)+4>>2]|0;o=c[(c[(c[f>>2]|0)+16>>2]|0)+236>>2]|0;e=0;while(1){if((e|0)>=(g|0))break;a[(c[(c[f+(e<<2)>>2]|0)+16>>2]|0)+157>>0]=0;e=e+1|0}e=(e<<2)+4|0;if(!h)p=KK(e)|0;else p=MK(i,e)|0;m=0;n=0;while(1){e=c[s>>2]|0;f=c[e+196>>2]|0;g=c[f+(r<<6)>>2]|0;if((g|0)<=(n|0))break;j=c[(c[f+(r<<6)+4>>2]|0)+(((c[e+116>>2]&1|0)==0?g+~n|0:n)<<2)>>2]|0;l=j+16|0;e=0;k=0;while(1){i=c[l>>2]|0;if((e|0)>=(c[i+200>>2]|0)){f=0;g=0;e=i;break}i=k+((Yh(d,c[(c[i+196>>2]|0)+(e<<2)>>2]|0)|0)!=0&1)|0;e=e+1|0;k=i}while(1){if((g|0)>=(c[e+192>>2]|0))break;i=f+((Yh(d,c[(c[e+188>>2]|0)+(g<<2)>>2]|0)|0)!=0&1)|0;f=i;g=g+1|0;e=c[l>>2]|0}if(f|k)if((k|0)==0&(a[e+157>>0]|0)==0)e=(Zh(d,j,p+(m<<2)|0,r)|0)+m|0;else e=m;else{c[p+(m<<2)>>2]=j;e=m+1|0}m=e;n=n+1|0}b:do if(m){c:do if(!(c[e+116>>2]&1)){f=p;e=p+(m<<2)|0;while(1){e=e+-4|0;if(f>>>0>=e>>>0){g=0;break c}n=c[f>>2]|0;c[f>>2]=c[e>>2];c[e>>2]=n;f=f+4|0}}else g=0;while(0);while(1){e=c[s>>2]|0;i=c[e+196>>2]|0;f=c[i+(r<<6)>>2]|0;if((g|0)>=(f|0)){m=0;g=i;break}n=c[p+(g<<2)>>2]|0;c[(c[i+(r<<6)+4>>2]|0)+(g<<2)>>2]=n;c[(c[n+16>>2]|0)+236>>2]=g+o;g=g+1|0}while(1){if((m|0)>=(f|0))break b;l=(c[(c[g+(r<<6)+4>>2]|0)+(m<<2)>>2]|0)+16|0;i=c[(c[l>>2]|0)+188>>2]|0;if(i){k=0;f=i;while(1){g=c[f+(k<<2)>>2]|0;e=c[s>>2]|0;if(!g)break;j=c[g>>2]&3;i=c[(c[(c[((j|0)==2?g:g+-48|0)+40>>2]|0)+16>>2]|0)+236>>2]|0;j=c[(c[(c[((j|0)==3?g:g+48|0)+40>>2]|0)+16>>2]|0)+236>>2]|0;if(!(c[e+116>>2]&1))if((i|0)<(j|0))t=36;else e=k;else if((i|0)>(j|0))t=36;else e=k;if((t|0)==36){t=0;if(Yh(d,g)|0){t=37;break a}uh(g);_h(d,g);e=k+-1|0;f=c[(c[l>>2]|0)+188>>2]|0}k=e+1|0}f=c[e+196>>2]|0;g=f;f=c[f+(r<<6)>>2]|0}m=m+1|0}}while(0);a[(c[(c[(c[46741]|0)+16>>2]|0)+196>>2]|0)+(r<<6)+49>>0]=0;h=p;g=p;f=p}r=r+1|0;q=g;i=f}if((t|0)==37)qa(85915,85781,1561,85954);if(h|0)U1(q)}return}function Xh(a){a=a|0;var d=0,e=0;e=a+16|0;a=c[e>>2]|0;a:do if(c[a+268>>2]|0){d=b[a+236>>1]|0;while(1){if((d|0)>(b[a+238>>1]|0))break a;c[(c[a+268>>2]|0)+(d<<2)>>2]=c[c[(c[a+196>>2]|0)+(d<<6)+4>>2]>>2];d=d+1|0;a=c[e>>2]|0}}while(0);return}function Yh(a,b){a=a|0;b=b|0;if((c[(c[b+16>>2]|0)+156>>2]|0)!=0?($h(a,c[((c[b>>2]&3|0)==3?b:b+48|0)+40>>2]|0)|0)!=0:0)a=($h(a,c[((c[b>>2]&3|0)==2?b:b+-48|0)+40>>2]|0)|0)!=0&1;else a=0;return a|0}function Zh(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0;l=d+16|0;g=c[l>>2]|0;a[g+157>>0]=1;a:do if((c[g+192>>2]|0)>0){h=0;j=0;while(1){i=c[(c[g+188>>2]|0)+(j<<2)>>2]|0;if(!i)break a;if((Yh(b,i)|0)!=0?(k=c[((c[i>>2]&3|0)==2?i:i+-48|0)+40>>2]|0,(a[(c[k+16>>2]|0)+157>>0]|0)==0):0)h=(Zh(b,k,e+(h<<2)|0,f)|0)+h|0;j=j+1|0;g=c[l>>2]|0}}else h=0;while(0);if((c[g+232>>2]|0)==(f|0)){c[e+(h<<2)>>2]=d;return h+1|0}else qa(85967,85781,1490,85983);return 0}function _h(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;i=c[d>>2]&3;j=c[((i|0)==2?d:d+-48|0)+40>>2]|0;f=c[(c[j+16>>2]|0)+188>>2]|0;a:do if(!f){e=d+48|0;m=15}else{l=d+48|0;g=((i|0)==3?d:l)+40|0;e=0;while(1){h=c[f+(e<<2)>>2]|0;if(!h){e=l;m=15;break a}if((c[((c[h>>2]&3|0)==2?h:h+-48|0)+40>>2]|0)==(c[g>>2]|0))break;else e=e+1|0}vh(d,h);e=(c[d+16>>2]|0)+172|0;if(!(c[e>>2]|0))c[e>>2]=h;e=c[h+16>>2]|0;if((a[e+112>>0]|0)==4?(k=e+116|0,(c[k>>2]|0)==0):0)c[k>>2]=d;e=c[(c[((c[d>>2]&3|0)==3?d:l)+40>>2]|0)+16>>2]|0;f=c[e+204>>2]|0;if(!f)e=KK((c[e+208>>2]<<2)+8|0)|0;else e=MK(f,(c[e+208>>2]<<2)+8|0)|0;c[(c[(c[((c[d>>2]&3|0)==3?d:l)+40>>2]|0)+16>>2]|0)+204>>2]=e;i=c[(c[((c[d>>2]&3|0)==3?d:l)+40>>2]|0)+16>>2]|0;j=c[i+204>>2]|0;i=i+208|0;k=c[i>>2]|0;c[i>>2]=k+1;c[j+(k<<2)>>2]=d;d=c[(c[((c[d>>2]&3|0)==3?d:l)+40>>2]|0)+16>>2]|0;c[(c[d+204>>2]|0)+(c[d+208>>2]<<2)>>2]=0}while(0);if((m|0)==15){m=mh(j,c[((i|0)==3?d:e)+40>>2]|0,d)|0;l=c[d+16>>2]|0;d=c[m+16>>2]|0;a[d+112>>0]=(a[l+112>>0]|0)==4?4:3;c[d+96>>2]=c[l+96>>2];th(b,m)}return}function $h(a,b){a=a|0;b=b|0;var c=0;c=Sh(a,b)|0;return Th(a,b)|0|c|0}function ai(a,b){a=a|0;b=b|0;var d=0;d=JK(12)|0;c[d>>2]=a;c[d+4>>2]=b;c[d+8>>2]=JK(O(b,a)|0)|0;return d|0}function bi(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;o=d+16|0;l=c[o>>2]|0;k=c[(c[(c[b+16>>2]|0)+196>>2]|0)+(c[l+232>>2]<<6)+56>>2]|0;a[l+157>>0]=1;a[l+158>>0]=1;l=(c[(c[(gg(b)|0)+16>>2]|0)+180>>2]|0)>0;e=c[o>>2]|0;f=c[e+188>>2]|0;a:do if(f){m=k+4|0;n=k+8|0;d=0;b:while(1){j=c[f+(d<<2)>>2]|0;if(!j){p=e;break a}if(l){if((HC(b,c[((c[j>>2]&3|0)==3?j:j+48|0)+40>>2]|0)|0)!=0?(HC(b,c[((c[j>>2]&3|0)==2?j:j+-48|0)+40>>2]|0)|0)!=0:0)q=7}else q=7;do if((q|0)==7){q=0;h=j+16|0;if(c[(c[h>>2]|0)+156>>2]|0){e=c[j>>2]&3;g=j+-48|0;r=c[(c[((e|0)==2?j:g)+40>>2]|0)+16>>2]|0;i=c[r+284>>2]|0;f=(i|0)<(c[k>>2]|0);if((a[r+158>>0]|0)==1){if(!f){q=10;break b}e=c[(c[(c[((e|0)==3?j:j+48|0)+40>>2]|0)+16>>2]|0)+284>>2]|0;f=c[m>>2]|0;if((e|0)>=(f|0)){q=12;break b}a[(c[n>>2]|0)+((O(f,i)|0)+e)>>0]=1;uh(j);d=d+-1|0;if((a[(c[h>>2]|0)+112>>0]|0)==4)break;_h(b,j);break}else{if(!f){q=16;break b}e=c[(c[(c[((e|0)==3?j:j+48|0)+40>>2]|0)+16>>2]|0)+284>>2]|0;f=c[m>>2]|0;if((e|0)>=(f|0)){q=18;break b}a[(c[n>>2]|0)+((O(f,e)|0)+i)>>0]=1;e=c[((c[j>>2]&3|0)==2?j:g)+40>>2]|0;if(a[(c[e+16>>2]|0)+157>>0]|0)break;bi(b,e);break}}}while(0);f=c[o>>2]|0;d=d+1|0;e=f;f=c[f+188>>2]|0}if((q|0)==10)qa(85993,85781,1251,86025);else if((q|0)==12)qa(86037,85781,1252,86025);else if((q|0)==16)qa(85993,85781,1260,86025);else if((q|0)==18)qa(86037,85781,1261,86025)}else p=e;while(0);a[p+158>>0]=0;return}function ci(a,b){a=a|0;b=b|0;var c=0;c=jC(a)|0;while(1){if(!c)break;ei(a,c,b);c=kC(a,c)|0}return}function di(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;g=l;l=l+16|0;f=g;d=jC(b)|0;while(1){if(!d)break;e=aP(d,c[47161]|0,0)|0;a:do if(e|0){switch(a[e>>0]|0){case 0:break a;case 111:{if(!(s2(e,86069)|0)){ei(b,d,1);break a}break}case 105:{if(!(s2(e,98735)|0)){ei(b,d,0);break a}break}default:{}}h=KB(d)|0;c[f>>2]=e;c[f+4>>2]=h;gA(1,86104,f)|0}while(0);d=kC(b,d)|0}l=g;return}function ei(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;j=c[46740]|0;h=d+16|0;f=c[h>>2]|0;a:do if(!(c[f+212>>2]|0)){i=(e|0)!=0;b:do if(i){g=0;d=0;e=f;while(1){f=c[(c[e+180>>2]|0)+(g<<2)>>2]|0;if(!f)break b;if(!(fi(f)|0)){c[j+(d<<2)>>2]=f;d=d+1|0;e=c[h>>2]|0}g=g+1|0}}else{g=0;d=0;e=f;while(1){f=c[(c[e+172>>2]|0)+(g<<2)>>2]|0;if(!f)break b;if(!(fi(f)|0)){c[j+(d<<2)>>2]=f;d=d+1|0;e=c[h>>2]|0}g=g+1|0}}while(0);if((d|0)>=2){c[j+(d<<2)>>2]=0;o4(j,d,4,61);h=i?2:3;g=i?-1:1;f=1;while(1){d=c[j+(f<<2)>>2]|0;if(!d)break a;e=c[j+(f+-1<<2)>>2]|0;e=c[((c[e>>2]&3|0)==(h|0)?e:e+(g*48|0)|0)+40>>2]|0;d=c[((c[d>>2]&3|0)==(h|0)?d:d+(g*48|0)|0)+40>>2]|0;if(fh(e,d)|0)break a;i=mh(e,d,0)|0;a[(c[i+16>>2]|0)+112>>0]=4;th(b,i);f=f+1|0}}}while(0);return}function fi(a){a=a|0;var b=0;while(1){b=c[(c[a+16>>2]|0)+116>>2]|0;if(!b)break;else a=b}b=c[a>>2]&3;return (c[(c[(c[((b|0)==3?a:a+48|0)+40>>2]|0)+16>>2]|0)+212>>2]|0)!=(c[(c[(c[((b|0)==2?a:a+-48|0)+40>>2]|0)+16>>2]|0)+212>>2]|0)|0}function gi(a,b){a=a|0;b=b|0;return ((c[c[a>>2]>>2]|0)>>>4)-((c[c[b>>2]>>2]|0)>>>4)|0}function hi(a){a=a|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;f=c[a+16>>2]|0;g=f+220|0;h=c[g>>2]|0;if((h|0)>=2){i=f+216|0;a=0;e=0;while(1){if((e|0)>=(h|0))break;d=c[(c[i>>2]|0)+(e<<2)>>2]|0;if(a|0)c[(c[a+16>>2]|0)+164>>2]=d;j=c[d+16>>2]|0;c[j+168>>2]=a;a=d;d=j;while(1){d=c[d+164>>2]|0;if(!d)break;a=d;d=c[d+16>>2]|0}e=e+1|0}c[g>>2]=1;c[f+192>>2]=c[c[f+216>>2]>>2];b[f+236>>1]=c[46742];b[f+238>>1]=c[46743]}return}function ii(d){d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;i=c[46741]|0;j=i+16|0;f=c[j>>2]|0;g=0;h=b[f+236>>1]|0;while(1){if((h|0)>=(b[f+238>>1]|0))break;d=c[f+196>>2]|0;if(!(a[d+(h<<6)+49>>0]|0)){e=Bi(i,h)|0;d=c[j>>2]|0;f=c[d+196>>2]|0;c[f+(h<<6)+52>>2]=e;a[f+(h<<6)+49>>0]=1}else{e=c[d+(h<<6)+52>>2]|0;d=f}g=e+g|0;h=h+1|0;f=d}return g|0}function ji(a){a=a|0;var d=0,e=0,f=0,g=0,i=0,j=0;a=c[a+16>>2]|0;g=b[a+238>>1]|0;i=a+196|0;a=b[a+236>>1]|0;while(1){if((a|0)>(g|0))break;f=c[i>>2]|0;e=c[f+(a<<6)>>2]|0;f=f+(a<<6)+4|0;d=0;while(1){if((d|0)>=(e|0))break;j=c[(c[(c[f>>2]|0)+(d<<2)>>2]|0)+16>>2]|0;h[j+16>>3]=+(c[j+236>>2]|0);d=d+1|0}a=a+1|0}return}function ki(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;r=l;l=l+16|0;m=r;n=d+16|0;o=VO(c[(c[n>>2]|0)+232>>2]|0)|0;j=c[n>>2]|0;f=j+192|0;g=f;while(1){g=c[g>>2]|0;if(!g)break;g=c[g+16>>2]|0;a[g+157>>0]=0;g=g+164|0}h=b[j+238>>1]|0;i=j+196|0;g=b[j+236>>1]|0;while(1){if((g|0)>(h|0))break;c[(c[i>>2]|0)+(g<<6)>>2]=0;g=g+1|0}i=(e|0)==0;while(1){g=c[f>>2]|0;if(!g)break;h=g+16|0;f=c[h>>2]|0;if((c[c[(i?f+172|0:f+180|0)>>2]>>2]|0)==0?(k=f+157|0,(a[k>>0]|0)==0):0){a[k>>0]=1;XO(o,g);while(1){f=YO(o)|0;if(!f)break;if((a[(c[f+16>>2]|0)+159>>0]|0)==7){il(d,f,e,o);continue}else{zi(d,f);Ai(o,f,e);continue}}f=c[h>>2]|0}f=f+164|0}if(YO(o)|0)gA(1,86312,m)|0;f=c[n>>2]|0;j=b[f+236>>1]|0;while(1){if((j|0)>(b[f+238>>1]|0))break;a[(c[(c[(c[46741]|0)+16>>2]|0)+196>>2]|0)+(j<<6)+49>>0]=0;if((c[f+116>>2]&1|0)!=0?(p=c[f+196>>2]|0,q=c[p+(j<<6)>>2]|0,(q|0)>0):0){g=c[p+(j<<6)+4>>2]|0;h=q+-1|0;i=(h|0)/2|0;f=0;while(1){if((f|0)>(i|0))break;ti(c[g+(f<<2)>>2]|0,c[g+(h-f<<2)>>2]|0);f=f+1|0}f=c[n>>2]|0}j=j+1|0}if((gg(d)|0)==(d|0)?(ii(0)|0)>0:0)ni(d,0);WO(o);l=r;return}function li(d){d=d|0;var e=0,f=0,g=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;n=d+16|0;d=c[n>>2]|0;f=b[d+236>>1]|0;e=b[d+238>>1]|0;l=e<<16>>16;m=d+196|0;g=f;while(1){if((g|0)>(l|0))break;k=c[m>>2]|0;j=c[k+(g<<6)>>2]|0;k=k+(g<<6)+4|0;i=0;while(1){if((i|0)>=(j|0))break;o=c[(c[(c[k>>2]|0)+(i<<2)>>2]|0)+16>>2]|0;c[o+236>>2]=~~+h[o+16>>3];i=i+1|0}g=g+1|0}while(1){if((f|0)>(e<<16>>16|0))break;a[(c[(c[(c[46741]|0)+16>>2]|0)+196>>2]|0)+(f<<6)+49>>0]=0;o=c[d+196>>2]|0;o4(c[o+(f<<6)+4>>2]|0,c[o+(f<<6)>>2]|0,4,62);o=c[n>>2]|0;f=f+1|0;e=b[o+238>>1]|0;d=o}return}function mi(a,d){a=a|0;d=d|0;var e=0,f=0,g=0;g=((d|0)%4|0|0)<2&1;e=c[a+16>>2]|0;if(!(d&1)){d=b[e+236>>1]|0;f=1;e=b[e+238>>1]|0;d=(d<<16>>16<=(b[(c[(c[46741]|0)+16>>2]|0)+236>>1]|0)&1)+(d<<16>>16)|0}else{d=b[e+238>>1]|0;f=-1;e=b[e+236>>1]|0;d=((d<<16>>16>=(b[(c[(c[46741]|0)+16>>2]|0)+238>>1]|0))<<31>>31)+(d<<16>>16)|0}e=f+e|0;while(1){if((d|0)==(e|0))break;wi(a,d,g,(vi(a,d,d-f|0)|0)&255);d=d+f|0}ni(a,g^1);return}function ni(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;k=d+16|0;g=c[k>>2]|0;i=b[g+236>>1]|0;j=b[g+238>>1]|0;h=g+196|0;f=i<<16>>16;while(1){if((f|0)>(j|0)){h=i;break}a[(c[h>>2]|0)+(f<<6)+48>>0]=1;f=f+1|0}while(1){f=0;h=h<<16>>16;while(1){if((h|0)>(b[g+238>>1]|0))break;if(a[(c[g+196>>2]|0)+(h<<6)+48>>0]|0){f=(ui(d,h,e)|0)+f|0;g=c[k>>2]|0}h=h+1|0}if((f|0)<=0)break;h=b[g+236>>1]|0}return}function oi(d){d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;o=d+16|0;e=c[o>>2]|0;n=b[e+238>>1]|0;a:while(1){if((n|0)<(b[e+236>>1]|0)){e=16;break}f=c[e+196>>2]|0;a[f+(n<<6)+48>>0]=0;p=(n|0)>0;q=n+1|0;g=0;b:while(1){l=(c[f+(n<<6)>>2]|0)+-1|0;m=f+(n<<6)+4|0;k=f+(q<<6)|0;while(1){if((g|0)>=(l|0))break b;j=c[m>>2]|0;i=c[j+(g<<2)>>2]|0;g=g+1|0;j=c[j+(g<<2)>>2]|0;if((c[(c[i+16>>2]|0)+236>>2]|0)>=(c[(c[j+16>>2]|0)+236>>2]|0)){e=7;break a}if(pi(d,i,j)|0)continue;if(p){f=qi(i,j)|0;h=qi(j,i)|0}else{f=0;h=0}if((c[k>>2]|0)>0){f=(ri(i,j)|0)+f|0;h=(ri(j,i)|0)+h|0}if((h|0)<=(f|0))break}si(d,n,i,j);e=c[o>>2]|0;f=c[e+196>>2]|0}n=n+-1|0}if((e|0)==7)qa(86263,85781,721,86289);else if((e|0)==16)return}function pi(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;j=c[d+16>>2]|0;i=c[j+212>>2]|0;f=c[e+16>>2]|0;g=c[f+212>>2]|0;h=(i|0)!=(g|0);do if(!(a[193769]|0))if((g|0)==0|((i|0)==0|h^1))k=9;else{if((a[j+159>>0]|0)==7?(a[j+156>>0]|0)==1:0){b=0;break}if((a[f+159>>0]|0)==7?(a[f+156>>0]|0)==1:0){b=0;break}b=1}else if(h)b=1;else k=9;while(0);if((k|0)==9){f=c[b+16>>2]|0;b=c[(c[f+196>>2]|0)+(c[j+232>>2]<<6)+56>>2]|0;if(!b)b=0;else{j=(c[f+116>>2]&1|0)==0;k=O(c[b+4>>2]|0,c[(c[(j?d:e)+16>>2]|0)+284>>2]|0)|0;b=a[(c[b+8>>2]|0)+((c[(c[(j?e:d)+16>>2]|0)+284>>2]|0)+k)>>0]|0}}return b|0}function qi(a,d){a=a|0;d=d|0;var e=0,f=0,g=0,i=0,j=0,k=0,l=0,m=0,n=0;l=a+16|0;j=c[(c[d+16>>2]|0)+172>>2]|0;d=0;while(1){a=c[j>>2]|0;if(!a)break;i=c[a+16>>2]|0;k=b[i+154>>1]|0;g=c[(c[(c[((c[a>>2]&3|0)==3?a:a+48|0)+40>>2]|0)+16>>2]|0)+236>>2]|0;i=i+16|0;f=c[(c[l>>2]|0)+172>>2]|0;a=d;while(1){d=c[f>>2]|0;if(!d)break;e=(c[(c[(c[((c[d>>2]&3|0)==3?d:d+48|0)+40>>2]|0)+16>>2]|0)+236>>2]|0)-g|0;if((e|0)<=0){if((e|0)==0?(m=c[d+16>>2]|0,+h[m+16>>3]>+h[i>>3]):0){d=m;n=9}}else{d=c[d+16>>2]|0;n=9}if((n|0)==9){n=0;a=(O(b[d+154>>1]|0,k)|0)+a|0}f=f+4|0}j=j+4|0;d=a}return d|0}function ri(a,d){a=a|0;d=d|0;var e=0,f=0,g=0,i=0,j=0,k=0,l=0,m=0,n=0;l=a+16|0;j=c[(c[d+16>>2]|0)+180>>2]|0;d=0;while(1){a=c[j>>2]|0;if(!a)break;i=c[a+16>>2]|0;k=b[i+154>>1]|0;g=c[(c[(c[((c[a>>2]&3|0)==2?a:a+-48|0)+40>>2]|0)+16>>2]|0)+236>>2]|0;i=i+56|0;f=c[(c[l>>2]|0)+180>>2]|0;a=d;while(1){d=c[f>>2]|0;if(!d)break;e=(c[(c[(c[((c[d>>2]&3|0)==2?d:d+-48|0)+40>>2]|0)+16>>2]|0)+236>>2]|0)-g|0;if((e|0)<=0){if((e|0)==0?(m=c[d+16>>2]|0,+h[m+56>>3]>+h[i>>3]):0){d=m;n=9}}else{d=c[d+16>>2]|0;n=9}if((n|0)==9){n=0;a=(O(b[d+154>>1]|0,k)|0)+a|0}f=f+4|0}j=j+4|0;d=a}return d|0}function si(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;i=a[(c[e+16>>2]|0)+156>>0]|0;if(i<<24>>24!=(a[(c[f+16>>2]|0)+156>>0]|0)){j=b+16|0;l=c[(c[j>>2]|0)+196>>2]|0;k=c[l+(d<<6)>>2]|0;l=l+(d<<6)+4|0;b=0;g=0;h=0;while(1){if((b|0)>=(k|0))break;o=(a[(c[(c[(c[l>>2]|0)+(b<<2)>>2]|0)+16>>2]|0)+156>>0]|0)==0;b=b+1|0;g=g+(o&1)|0;h=h+((o^1)&1)|0}i=i<<24>>24==0;h=(g|0)<(h|0)?(i?e:f):i?f:e;i=0;b=0;while(1){if((b|0)>=(k|0))break;i=(c[(c[l>>2]|0)+(b<<2)>>2]|0)==(h|0)?b:i;b=b+1|0}o=(a[(c[h+16>>2]|0)+156>>0]|0)==0&1;n=0;g=i;while(1){b=g+-1|0;if((g|0)<=0){m=0;b=i;break}if((a[(c[(c[(c[l>>2]|0)+(b<<2)>>2]|0)+16>>2]|0)+156>>0]|0)!=(o|0)){m=0;b=i;break}n=n+1|0;g=b}while(1){b=b+1|0;if((b|0)>=(k|0))break;if((a[(c[(c[(c[l>>2]|0)+(b<<2)>>2]|0)+16>>2]|0)+156>>0]|0)!=(o|0))break;m=m+1|0}ti(e,f);j=c[(c[j>>2]|0)+196>>2]|0;k=c[j+(d<<6)>>2]|0;j=j+(d<<6)+4|0;b=0;while(1){if((b|0)>=(k|0)){h=0;g=i;break}i=(c[(c[j>>2]|0)+(b<<2)>>2]|0)==(h|0)?b:i;b=b+1|0}while(1){b=g+-1|0;if((g|0)<=0){g=0;b=i;break}if((a[(c[(c[(c[j>>2]|0)+(b<<2)>>2]|0)+16>>2]|0)+156>>0]|0)!=(o|0)){g=0;b=i;break}h=h+1|0;g=b}while(1){b=b+1|0;if((b|0)>=(k|0))break;if((a[(c[(c[(c[j>>2]|0)+(b<<2)>>2]|0)+16>>2]|0)+156>>0]|0)!=(o|0))break;g=g+1|0}d=h-g|0;o=n-m|0;if((((d|0)>-1?d:0-d|0)|0)>(((o|0)>-1?o:0-o|0)|0))ti(e,f)}return}function ti(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;f=c[a+16>>2]|0;e=c[f+232>>2]|0;f=f+236|0;d=c[f>>2]|0;g=b+16|0;h=c[(c[g>>2]|0)+236>>2]|0;c[f>>2]=h;f=(c[46741]|0)+16|0;c[(c[(c[(c[f>>2]|0)+196>>2]|0)+(e<<6)+4>>2]|0)+(h<<2)>>2]=a;c[(c[g>>2]|0)+236>>2]=d;c[(c[(c[(c[f>>2]|0)+196>>2]|0)+(e<<6)+4>>2]|0)+(d<<2)>>2]=b;return}function ui(d,e,f){d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;q=d+16|0;n=c[(c[q>>2]|0)+196>>2]|0;a[n+(e<<6)+48>>0]=0;r=(e|0)>0;s=e+1|0;o=(f|0)!=0;p=e+-1|0;g=0;i=0;f=n;a:while(1){l=(c[f+(e<<6)>>2]|0)+-1|0;m=f+(e<<6)+4|0;h=f+(s<<6)|0;n=g;while(1){if((n|0)>=(l|0)){f=17;break a}k=c[m>>2]|0;j=c[k+(n<<2)>>2]|0;n=n+1|0;k=c[k+(n<<2)>>2]|0;if((c[(c[j+16>>2]|0)+236>>2]|0)>=(c[(c[k+16>>2]|0)+236>>2]|0)){f=5;break a}if(pi(d,j,k)|0)continue;if(r){f=qi(j,k)|0;g=qi(k,j)|0}else{f=0;g=0}if((c[h>>2]|0)>0){f=(ri(j,k)|0)+f|0;g=(ri(k,j)|0)+g|0}if((f|0)>(g|0))break;if((f|0)==(g|0)&(o&(f|0)>0)){f=g;break}}ti(j,k);i=f-g+i|0;g=c[(c[(c[46741]|0)+16>>2]|0)+196>>2]|0;a[g+(e<<6)+49>>0]=0;h=c[q>>2]|0;f=c[h+196>>2]|0;a[f+(e<<6)+48>>0]=1;if((b[h+236>>1]|0)<(e|0)){a[g+(p<<6)+49>>0]=0;a[f+(p<<6)+48>>0]=1}if((b[h+238>>1]|0)<=(e|0)){g=n;continue}a[g+(s<<6)+49>>0]=0;a[f+(s<<6)+48>>0]=1;g=n}if((f|0)==5)qa(86263,85781,770,86297);else if((f|0)==17)return i|0;return 0}function vi(a,e,f){a=a|0;e=e|0;f=f|0;var g=0,i=0.0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;p=c[46739]|0;q=a+16|0;a=c[(c[q>>2]|0)+196>>2]|0;r=c[a+(e<<6)+4>>2]|0;n=(f|0)>(e|0);o=p+4|0;m=0;while(1){f=c[a+(e<<6)>>2]|0;if((m|0)>=(f|0)){a=0;j=0;break}l=(c[r+(m<<2)>>2]|0)+16|0;a=c[l>>2]|0;a:do if(n){k=c[a+180>>2]|0;a=0;j=0;while(1){f=c[k+(j<<2)>>2]|0;if(!f)break a;g=c[f+16>>2]|0;if((b[g+154>>1]|0)>0){c[p+(a<<2)>>2]=c[(c[(c[((c[f>>2]&3|0)==2?f:f+-48|0)+40>>2]|0)+16>>2]|0)+236>>2]<<8|d[g+88>>0];a=a+1|0}j=j+1|0}}else{k=c[a+172>>2]|0;j=0;a=0;while(1){f=c[k+(j<<2)>>2]|0;if(!f)break a;g=c[f+16>>2]|0;if((b[g+154>>1]|0)>0){c[p+(a<<2)>>2]=c[(c[(c[((c[f>>2]&3|0)==3?f:f+48|0)+40>>2]|0)+16>>2]|0)+236>>2]<<8|d[g+48>>0];a=a+1|0}j=j+1|0}}while(0);b:do switch(a|0){case 0:{i=-1.0;break}case 1:{i=+(c[p>>2]|0);break}case 2:{i=+(((c[o>>2]|0)+(c[p>>2]|0)|0)/2|0|0);break}default:{o4(p,a,4,60);f=(a|0)/2|0;if(a&1|0){i=+(c[p+(f<<2)>>2]|0);break b}j=c[p+(f<<2)>>2]|0;g=(c[p+(a+-1<<2)>>2]|0)-j|0;a=c[p+(f+-1<<2)>>2]|0;f=a-(c[p>>2]|0)|0;if((f|0)==(g|0)){i=+((a+j|0)/2|0|0);break b}else{i=+(((O(f,j)|0)+(O(a,g)|0)|0)/(f+g|0)|0|0);break b}}}while(0);h[(c[l>>2]|0)+240>>3]=i;m=m+1|0;a=c[(c[q>>2]|0)+196>>2]|0}while(1){if((j|0)>=(f|0))break;g=c[r+(j<<2)>>2]|0;p=c[g+16>>2]|0;if((c[p+184>>2]|0)==0?(c[p+176>>2]|0)==0:0){a=(xi(g)|0|a&255)&255;f=c[(c[(c[q>>2]|0)+196>>2]|0)+(e<<6)>>2]|0}j=j+1|0}return a|0}function wi(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,i=0,j=0,k=0,l=0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0;o=c[(c[b+16>>2]|0)+196>>2]|0;s=c[o+(d<<6)+4>>2]|0;o=c[o+(d<<6)>>2]|0;q=(e|0)!=0;p=(f|e|0)==0;f=0;e=o;o=s+(o<<2)|0;while(1){n=e+-1|0;if((e|0)>0)e=s;else break;a:while(1){b:while(1){if(e>>>0>=o>>>0)break a;while(1){if(e>>>0>=o>>>0)break a;l=c[e>>2]|0;m=+h[(c[l+16>>2]|0)+240>>3];if(!(m<0.0))break;e=e+4|0}k=0;while(1){g=k<<24>>24==0;while(1){e=e+4|0;if(e>>>0>=o>>>0)break a;if(g){g=11;break}i=c[e>>2]|0;if(!(c[(c[i+16>>2]|0)+212>>2]|0)){g=13;break}}if((g|0)==11){i=c[e>>2]|0;j=i}else if((g|0)==13)j=i;if(pi(b,l,j)|0)continue b;g=c[i+16>>2]|0;if(+h[g+240>>3]>=0.0)break;k=(c[g+212>>2]|0)==0?k:1}g=~~m;k=~~+h[(c[i+16>>2]|0)+240>>3];if((g|0)>(k|0)|q&(g|0)==(k|0))break}ti(l,j);f=f+1|0}e=n;o=p?o+-4|0:o}if(f|0?(r=c[(c[(c[46741]|0)+16>>2]|0)+196>>2]|0,a[r+(d<<6)+49>>0]=0,(d|0)>0):0)a[r+(d+-1<<6)+49>>0]=0;return}function xi(a){a=a|0;var b=0.0,d=0,e=0,f=0,g=0;g=c[a+16>>2]|0;if((c[g+200>>2]|0)>0){f=c[g+196>>2]|0;a=c[f>>2]|0;a=c[((c[a>>2]&3|0)==3?a:a+48|0)+40>>2]|0;d=1;while(1){e=c[f+(d<<2)>>2]|0;if(!e)break;e=c[((c[e>>2]&3|0)==3?e:e+48|0)+40>>2]|0;a=(c[(c[e+16>>2]|0)+236>>2]|0)>(c[(c[a+16>>2]|0)+236>>2]|0)?e:a;d=d+1|0}b=+h[(c[a+16>>2]|0)+240>>3];if(!(b>=0.0))a=1;else{h[g+240>>3]=b+1.0;a=0}}else if((c[g+192>>2]|0)>0){e=c[g+188>>2]|0;d=c[e>>2]|0;a=1;d=c[((c[d>>2]&3|0)==2?d:d+-48|0)+40>>2]|0;while(1){f=c[e+(a<<2)>>2]|0;if(!f)break;f=c[((c[f>>2]&3|0)==2?f:f+-48|0)+40>>2]|0;a=a+1|0;d=(c[(c[f+16>>2]|0)+236>>2]|0)<(c[(c[d+16>>2]|0)+236>>2]|0)?f:d}b=+h[(c[d+16>>2]|0)+240>>3];if(b>0.0){h[g+240>>3]=b+-1.0;a=0}else a=1}else a=1;return a|0}function yi(a,b){a=a|0;b=b|0;return (c[(c[(c[a>>2]|0)+16>>2]|0)+236>>2]|0)-(c[(c[(c[b>>2]|0)+16>>2]|0)+236>>2]|0)|0}function zi(a,d){a=a|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;p=l;l=l+96|0;o=p+64|0;n=p+48|0;h=p+24|0;f=p;j=d+16|0;k=c[(c[j>>2]|0)+232>>2]|0;m=a+16|0;e=c[(c[m>>2]|0)+196>>2]|0;i=c[e+(k<<6)>>2]|0;do if((c[e+(k<<6)+8>>2]|0)>=1){c[(c[e+(k<<6)+4>>2]|0)+(i<<2)>>2]=d;c[(c[j>>2]|0)+236>>2]=i;a=c[m>>2]|0;f=c[a+196>>2]|0;e=f+(k<<6)|0;g=c[e>>2]|0;c[e>>2]=g+1;if((g|0)>=(c[f+(k<<6)+8>>2]|0))qa(86377,85781,1346,86413);g=c[(c[(c[(c[46741]|0)+16>>2]|0)+196>>2]|0)+(k<<6)+8>>2]|0;if((i|0)>(g|0)){m=KB(d)|0;n=c[(c[j>>2]|0)+236>>2]|0;o=c[(c[(c[(c[46741]|0)+16>>2]|0)+196>>2]|0)+(k<<6)+8>>2]|0;c[h>>2]=1359;c[h+4>>2]=m;c[h+8>>2]=n;c[h+12>>2]=k;c[h+16>>2]=o;gA(1,86429,h)|0;break}e=b[a+236>>1]|0;a=b[a+238>>1]|0;if((k|0)<(e|0)|(k|0)>(a<<16>>16|0)){c[n>>2]=1364;c[n+4>>2]=k;c[n+8>>2]=e;c[n+12>>2]=a<<16>>16;gA(1,86502,n)|0;break}if(((c[f+(k<<6)+4>>2]|0)+(i<<2)|0)>>>0>((c[f+(k<<6)+12>>2]|0)+(g<<2)|0)>>>0){i=KB(d)|0;n=c[(c[m>>2]|0)+196>>2]|0;m=(c[n+(k<<6)+4>>2]|0)+(c[(c[j>>2]|0)+236>>2]<<2)|0;n=(c[n+(k<<6)+12>>2]|0)+(c[(c[(c[(c[46741]|0)+16>>2]|0)+196>>2]|0)+(k<<6)+8>>2]<<2)|0;c[o>>2]=1370;c[o+4>>2]=k;c[o+8>>2]=i;c[o+12>>2]=m;c[o+16>>2]=k;c[o+20>>2]=k;c[o+24>>2]=n;gA(1,86563,o)|0}}else{n=KB(a)|0;o=KB(d)|0;c[f>>2]=1339;c[f+4>>2]=n;c[f+8>>2]=o;c[f+12>>2]=k;c[f+16>>2]=i;gA(1,86322,f)|0}while(0);l=p;return}function Ai(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;h=d+16|0;a:do if(!e){g=0;while(1){d=c[h>>2]|0;if((g|0)>=(c[d+184>>2]|0))break a;d=c[(c[d+180>>2]|0)+(g<<2)>>2]|0;e=d+-48|0;f=(c[(c[((c[d>>2]&3|0)==2?d:e)+40>>2]|0)+16>>2]|0)+157|0;if(!(a[f>>0]|0)){a[f>>0]=1;XO(b,c[((c[d>>2]&3|0)==2?d:e)+40>>2]|0)}g=g+1|0}}else{g=0;while(1){d=c[h>>2]|0;if((g|0)>=(c[d+176>>2]|0))break a;d=c[(c[d+172>>2]|0)+(g<<2)>>2]|0;e=d+48|0;f=(c[(c[((c[d>>2]&3|0)==3?d:e)+40>>2]|0)+16>>2]|0)+157|0;if(!(a[f>>0]|0)){a[f>>0]=1;XO(b,c[((c[d>>2]&3|0)==3?d:e)+40>>2]|0)}g=g+1|0}}while(0);return}function Bi(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;v=l;l=l+16|0;u=v;g=d+16|0;f=c[(c[g>>2]|0)+196>>2]|0;s=c[f+(e<<6)+4>>2]|0;t=e+1|0;d=c[(c[(c[(c[46741]|0)+16>>2]|0)+196>>2]|0)+(t<<6)>>2]|0;if((c[46745]|0)>(d|0))q=c[46746]|0;else{d=d+1|0;c[46745]=d;f=c[46746]|0;if(!f)d=KK(d<<2)|0;else d=MK(f,d<<2)|0;c[46746]=d;f=c[(c[g>>2]|0)+196>>2]|0;q=d}r=f+(t<<6)|0;d=0;while(1){if((d|0)>=(c[r>>2]|0))break;c[q+(d<<2)>>2]=0;d=d+1|0}p=f+(e<<6)|0;o=0;h=0;d=0;j=q;while(1){k=c[p>>2]|0;if((o|0)>=(k|0))break;n=c[(c[(c[s+(o<<2)>>2]|0)+16>>2]|0)+180>>2]|0;a:do if((h|0)>0){m=0;while(1){g=c[n+(m<<2)>>2]|0;if(!g)break a;k=g+16|0;i=c[(c[(c[((c[g>>2]&3|0)==2?g:g+-48|0)+40>>2]|0)+16>>2]|0)+236>>2]|0;while(1){g=i+1|0;if((i|0)>=(h|0))break;i=g;d=(O(c[j+(g<<2)>>2]|0,b[(c[k>>2]|0)+154>>1]|0)|0)+d|0}m=m+1|0}}while(0);i=0;while(1){g=c[n+(i<<2)>>2]|0;if(!g)break;j=c[(c[(c[((c[g>>2]&3|0)==2?g:g+-48|0)+40>>2]|0)+16>>2]|0)+236>>2]|0;m=q+(j<<2)|0;c[m>>2]=(c[m>>2]|0)+(b[(c[g+16>>2]|0)+154>>1]|0);h=(j|0)>(h|0)?j:h;i=i+1|0;j=q}o=o+1|0}i=f+(e<<6)+4|0;h=0;while(1){if((h|0)>=(k|0))break;g=c[(c[(c[i>>2]|0)+(h<<2)>>2]|0)+16>>2]|0;if(a[g+145>>0]|0){e=g+180|0;c[u>>2]=c[e>>2];c[u+4>>2]=c[e+4>>2];d=(Ci(u,1)|0)+d|0}h=h+1|0}i=c[r>>2]|0;h=f+(t<<6)+4|0;g=0;while(1){if((g|0)>=(i|0))break;f=c[(c[(c[h>>2]|0)+(g<<2)>>2]|0)+16>>2]|0;if(a[f+145>>0]|0){t=f+172|0;c[u>>2]=c[t>>2];c[u+4>>2]=c[t+4>>2];d=(Ci(u,-1)|0)+d|0}g=g+1|0}l=v;return d|0}function Ci(a,d){a=a|0;d=d|0;var e=0,f=0,g=0,i=0,j=0,k=0,l=0,m=0,n=0;n=(d|0)<1;l=c[a>>2]|0;d=0;a=0;a:while(1){m=c[l+(d<<2)>>2]|0;if(!m)break;d=d+1|0;if(n){j=m+48|0;k=m+16|0;i=d;while(1){e=c[l+(i<<2)>>2]|0;if(!e)continue a;f=c[e+16>>2]|0;g=c[k>>2]|0;if((+h[f+56>>3]-+h[g+56>>3])*+((c[(c[(c[((c[e>>2]&3|0)==3?e:e+48|0)+40>>2]|0)+16>>2]|0)+236>>2]|0)-(c[(c[(c[((c[m>>2]&3|0)==3?m:j)+40>>2]|0)+16>>2]|0)+236>>2]|0)|0)<0.0)a=(O(b[f+154>>1]|0,b[g+154>>1]|0)|0)+a|0;i=i+1|0}}else{j=m+-48|0;k=m+16|0;i=d;while(1){e=c[l+(i<<2)>>2]|0;if(!e)continue a;f=c[e+16>>2]|0;g=c[k>>2]|0;if((+h[f+16>>3]-+h[g+16>>3])*+((c[(c[(c[((c[e>>2]&3|0)==2?e:e+-48|0)+40>>2]|0)+16>>2]|0)+236>>2]|0)-(c[(c[(c[((c[m>>2]&3|0)==2?m:j)+40>>2]|0)+16>>2]|0)+236>>2]|0)|0)<0.0)a=(O(b[f+154>>1]|0,b[g+154>>1]|0)|0)+a|0;i=i+1|0}}}return a|0}function Di(a){a=a|0;var b=0.0,d=0.0;c[46744]=8;c[47136]=24;h[23215]=.995;a=QA(a,86685)|0;if(a|0?(b=+r5(a),b>0.0):0){d=b*+(c[46744]|0);c[46744]=~~(d>1.0?d:1.0);b=b*+(c[47136]|0);c[47136]=~~(b>1.0?b:1.0)}return}function Ei(a){a=a|0;var d=0,e=0;e=(b[(c[a+16>>2]|0)+238>>1]|0)+2|0;d=JK(e<<2)|0;Gi(a,d,e,0)|0;U1(d);return}function Fi(a){a=a|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;h=a+16|0;i=JK((b[(c[h>>2]|0)+238>>1]<<2)+8|0)|0;g=jC(a)|0;while(1){if(!g)break;f=i+(c[(c[g+16>>2]|0)+232>>2]<<2)|0;c[f>>2]=(c[f>>2]|0)+1;f=XA(a,g)|0;while(1){if(!f)break;j=c[f>>2]&3;d=c[(c[(c[((j|0)==3?f:f+48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0;j=c[(c[(c[((j|0)==2?f:f+-48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0;k=(d|0)>(j|0);e=k?d:j;d=k?j:d;while(1){d=d+1|0;if((d|0)>=(e|0))break;k=i+(d<<2)|0;c[k>>2]=(c[k>>2]|0)+1}f=ZA(a,f)|0}g=kC(a,g)|0}f=JK((b[(c[h>>2]|0)+238>>1]<<6)+128|0)|0;e=c[h>>2]|0;c[e+196>>2]=f;d=b[e+236>>1]|0;while(1){if((d|0)>(b[e+238>>1]|0))break;j=i+(d<<2)|0;e=c[j>>2]|0;c[f+(d<<6)>>2]=e;c[f+(d<<6)+8>>2]=e;j=JK((c[j>>2]<<2)+4|0)|0;e=c[h>>2]|0;k=c[e+196>>2]|0;c[k+(d<<6)+4>>2]=j;c[k+(d<<6)+12>>2]=j;d=d+1|0;f=k}U1(i);return}function Gi(a,d,e,f){a=a|0;d=d|0;e=e|0;f=f|0;var g=0,i=0,j=0,k=0,l=0,m=0;m=a+16|0;i=1;while(1){g=c[m>>2]|0;if((i|0)>(c[g+180>>2]|0))break;l=Gi(c[(c[g+184>>2]|0)+(i<<2)>>2]|0,d,e,f)|0;i=i+1|0;f=l}a:do if((gg(a)|0)!=(a|0)){Y6(d|0,0,e<<2|0)|0;g=jC(a)|0;while(1){if(!g)break;k=g+16|0;c[d+(c[(c[k>>2]|0)+232>>2]<<2)>>2]=1;i=XA(a,g)|0;while(1){if(!i)break;l=i+-48|0;j=c[(c[k>>2]|0)+232>>2]|0;while(1){e=j+1|0;if((j|0)>=(c[(c[(c[((c[i>>2]&3|0)==2?i:l)+40>>2]|0)+16>>2]|0)+232>>2]|0))break;c[d+(e<<2)>>2]=1;j=e}i=ZA(a,i)|0}g=kC(a,g)|0}g=c[m>>2]|0;i=b[g+236>>1]|0;while(1){if((i|0)>(b[g+238>>1]|0))break a;if(!(c[d+(i<<2)>>2]|0)){if(!f)f=ND(gg(a)|0,86675,1)|0;g=tC(f,0,1)|0;TC(g,137447,304,1)|0;l=g+16|0;j=c[l>>2]|0;c[j+232>>2]=i;h[j+96>>3]=.5;h[j+88>>3]=.5;h[j+80>>3]=1.0;c[j+216>>2]=1;c[j+176>>2]=0;j=JK(20)|0;k=c[l>>2]|0;c[k+172>>2]=j;c[k+184>>2]=0;k=JK(20)|0;c[(c[l>>2]|0)+180>>2]=k;oC(a,g,1)|0;g=c[m>>2]|0}i=i+1|0}}while(0);return f|0}function Hi(a){a=a|0;var b=0,d=0;Xh(a);b=a+16|0;a=1;while(1){d=c[b>>2]|0;if((a|0)>(c[d+180>>2]|0))break;Hi(c[(c[d+184>>2]|0)+(a<<2)>>2]|0);a=a+1|0}return}function Ii(a){a=a|0;var b=0,d=0;b=c[a>>2]&3;d=Ji(c[((b|0)==3?a:a+48|0)+40>>2]|0)|0;b=c[17308+(d*12|0)+((Ji(c[((b|0)==2?a:a+-48|0)+40>>2]|0)|0)<<2)>>2]|0;a=(c[a+16>>2]|0)+156|0;c[a>>2]=O(c[a>>2]|0,b)|0;return}function Ji(b){b=b|0;b=c[b+16>>2]|0;if((a[b+156>>0]|0)==1)b=2;else b=(a[b+160>>0]|0)<2&1;return b|0}function Ki(b,d){b=b|0;d=d|0;if(c[(c[b+16>>2]|0)+192>>2]|0){jl(b);Li(b);if(a[194954]|0)xl(b);Mi(b);if(Pl(b)|0)Li(b);Ni(b);if(uL(b,2,Oi(b)|0)|0?(Pi(b),uL(b,2,Oi(b)|0)|0):0)qa(86693,86721,134,86732);Qi(b);Ri(b,d);Si(b)}return}function Li(d){d=d|0;var e=0,f=0,g=0,i=0,j=0.0,k=0.0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0.0,z=0.0;v=d+16|0;e=c[v>>2]|0;w=c[e+196>>2]|0;t=b[e+236>>1]|0;while(1){if((t|0)>(b[e+238>>1]|0))break;n=w+(t<<6)|0;o=w+(t<<6)+4|0;p=w+(t<<6)+40|0;q=w+(t<<6)+24|0;r=w+(t<<6)+32|0;s=w+(t<<6)+16|0;m=0;while(1){if((m|0)>=(c[n>>2]|0))break;l=(c[(c[o>>2]|0)+(m<<2)>>2]|0)+16|0;e=c[l>>2]|0;j=+h[e+80>>3]*.5;i=c[e+204>>2]|0;a:do if(i){g=0;while(1){f=c[i+(g<<2)>>2]|0;if(!f)break a;x=c[f>>2]&3;if((c[((x|0)==3?f:f+48|0)+40>>2]|0)==(c[((x|0)==2?f:f+-48|0)+40>>2]|0)?(u=c[(c[f+16>>2]|0)+96>>2]|0,(u|0)!=0):0){k=+h[u+32>>3]*.5;j=j>k?j:k}g=g+1|0}}while(0);if(+h[p>>3]>3]=j;h[p>>3]=j}if(+h[r>>3]>3]=j;h[r>>3]=j}f=c[e+212>>2]|0;if(f|0){if((f|0)==(d|0))g=0;else{g=ZO(f,c[47144]|0,8,0)|0;e=c[l>>2]|0}i=c[e+232>>2]|0;f=c[f+16>>2]|0;e=f+128|0;j=j+ +(g|0);if((i|0)==(b[f+236>>1]|0)){k=+h[e>>3];h[e>>3]=k>j?k:j}e=f+120|0;if((i|0)==(b[f+238>>1]|0)){k=+h[e>>3];h[e>>3]=k>j?k:j}}m=m+1|0}t=t+1|0;e=c[v>>2]|0}m=rj(d)|0;g=c[v>>2]|0;e=b[g+238>>1]|0;h[(c[(c[c[w+(e<<6)+4>>2]>>2]|0)+16>>2]|0)+24>>3]=+h[w+(e<<6)+16>>3];f=b[g+236>>1]|0;i=g+252|0;k=0.0;while(1){l=e+-1|0;if((e|0)<=(f|0))break;y=+h[w+(l<<6)+32>>3]+ +h[w+(e<<6)+40>>3]+ +(c[i>>2]|0);j=+h[w+(e<<6)+24>>3]+8.0+ +h[w+(l<<6)+16>>3];j=y>j?y:j;if((c[w+(l<<6)>>2]|0)>0)h[(c[(c[c[w+(l<<6)+4>>2]>>2]|0)+16>>2]|0)+24>>3]=+h[(c[(c[c[w+(e<<6)+4>>2]>>2]|0)+16>>2]|0)+24>>3]+j;k=k>j?k:j;e=l}b:do if((m|0)!=0?(c[g+116>>2]&1|0)!=0:0){sj(d,0);g=c[v>>2]|0;if(a[g+276>>0]|0){e=b[g+238>>1]|0;f=b[g+236>>1]|0;j=+h[(c[(c[c[w+(e<<6)+4>>2]>>2]|0)+16>>2]|0)+24>>3];k=0.0;while(1){i=e+-1|0;if((e|0)<=(f|0))break b;z=+h[(c[(c[c[w+(i<<6)+4>>2]>>2]|0)+16>>2]|0)+24>>3];y=z-j;j=z;k=k>y?k:y;e=i}}}while(0);c:do if(a[g+276>>0]|0){i=b[g+236>>1]|0;f=b[g+238>>1]|0;while(1){e=f+-1|0;if((f|0)<=(i|0))break c;if((c[w+(e<<6)>>2]|0)<=0){f=e;continue}h[(c[(c[c[w+(e<<6)+4>>2]>>2]|0)+16>>2]|0)+24>>3]=+h[(c[(c[c[w+(f<<6)+4>>2]>>2]|0)+16>>2]|0)+24>>3]+k;f=e}}while(0);e=g+192|0;while(1){e=c[e>>2]|0;if(!e)break;e=c[e+16>>2]|0;h[e+24>>3]=+h[(c[(c[c[w+(c[e+232>>2]<<6)+4>>2]>>2]|0)+16>>2]|0)+24>>3];e=e+164|0}return}function Mi(a){a=a|0;var b=0,d=0,e=0;nj(a);b=(c[a+16>>2]|0)+192|0;while(1){b=c[b>>2]|0;if(!b)break;e=b+16|0;b=c[e>>2]|0;d=c[b+224>>2]|0;if(d){oj(a,d);b=c[e>>2]|0}d=c[b+228>>2]|0;if(!d)d=b;else{oj(a,d);d=c[e>>2]|0}e=c[d+204>>2]|0;if(e|0){b=0;while(1)if(!(c[e+(b<<2)>>2]|0))break;else b=b+1|0}b=d+164|0}return}function Ni(a){a=a|0;$i(a);aj(a);bj(a);cj(a);dj(a);return}function Oi(a){a=a|0;var b=0,c=0.0;b=QA(a,86921)|0;if(!b)a=2147483647;else{c=+r5(b);a=~~(c*+(tB(a)|0))}return a|0}function Pi(d){d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;r=d+16|0;e=c[r>>2]|0;q=b[e+236>>1]|0;while(1){p=b[e+238>>1]|0;if((q|0)>(p|0)){s=19;break}n=c[e+196>>2]|0;o=n+(q<<6)|0;m=c[o>>2]|0;n=n+(q<<6)+4|0;l=0;f=0;a:while(1){if((l|0)>=(m|0)){s=14;break}f=c[(c[n>>2]|0)+(l<<2)>>2]|0;h=c[f+16>>2]|0;i=c[h+256>>2]|0;b:do if(i|0){g=0;while(1){j=c[i+(g<<2)>>2]|0;if(!j)break b;k=c[j>>2]&3;if((c[(c[(c[((k|0)==2?j:j+-48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)>(q|0))break a;if((c[(c[(c[((k|0)==3?j:j+48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)>(q|0))break a;else g=g+1|0}}while(0);h=c[h+248>>2]|0;c:do if(h|0){g=0;while(1){i=c[h+(g<<2)>>2]|0;if(!i)break c;j=c[i>>2]&3;if((c[(c[(c[((j|0)==3?i:i+48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)>(q|0))break a;if((c[(c[(c[((j|0)==2?i:i+-48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)>(q|0))break a;else g=g+1|0}}while(0);l=l+1|0}if((s|0)==14){s=0;if(f){f=c[c[n>>2]>>2]|0;e=c[c[o+(((q|0)<(p|0)?1:-1)<<6)+4>>2]>>2]|0;if(!e){s=16;break}o=sh(d)|0;p=o+16|0;a[(c[p>>2]|0)+156>>0]=2;Zi(o,f,0.0,0)|0;Zi(o,e,0.0,0)|0;c[(c[p>>2]|0)+232>>2]=c[(c[((c[(c[f+16>>2]|0)+232>>2]|0)<(c[(c[e+16>>2]|0)+232>>2]|0)?f:e)+16>>2]|0)+232>>2];e=c[r>>2]|0}}q=q+1|0}if((s|0)==16)qa(86829,86721,111,86832);else if((s|0)==19)return}function Qi(a){a=a|0;var d=0,e=0,f=0,g=0,i=0,j=0,k=0;a=c[a+16>>2]|0;i=c[a+196>>2]|0;e=b[a+238>>1]|0;a=b[a+236>>1]|0;while(1){if((a|0)>(e|0))break;f=c[i+(a<<6)>>2]|0;g=i+(a<<6)+4|0;d=0;while(1){if((d|0)>=(f|0))break;k=c[(c[(c[g>>2]|0)+(d<<2)>>2]|0)+16>>2]|0;j=k+232|0;h[k+16>>3]=+(c[j>>2]|0);c[j>>2]=a;d=d+1|0}a=a+1|0}return}function Ri(a,d){a=a|0;d=d|0;var e=0,f=0.0,g=0,i=0.0,j=0,k=0,l=0.0,m=0,n=0,o=0,p=0;Ti(a,a);g=a+16|0;k=c[g>>2]|0;a:do if((b[k+238>>1]|0)>0?(j=c[k+8>>2]|0,e=c[j+84>>2]|0,e|0):0){o=~~(+h[k+32>>3]-+h[k+16>>3]);m=~~(+h[k+40>>3]-+h[k+24>>3]);p=(c[k+116>>2]&1|0)==0;n=p?m:o;m=p?o:m;if((e|0)==4){e=Ui(a)|0;k=c[g>>2]|0;j=c[k+8>>2]|0}else e=(e|0)==2&1;b:do if(!(e<<24>>24)){switch(c[j+84>>2]|0){case 5:{f=+h[j+64>>3];if(f<=0.0)break a;i=f/+h[k+32>>3];l=+h[j+72>>3]/+h[k+40>>3];f=i1.0&l>1.0){l=f;break b}else break a}case 1:break;default:break a}i=+h[j+16>>3];f=+(n|0)/+(m|0);if(f>3];if(f<=0.0)break a;i=f/+(m|0);f=+h[j+72>>3]/+(n|0);if(i<1.0|f<1.0)if(i>2]&1|0)==0;i=e?f:l;f=e?l:f;e=k+192|0;while(1){e=c[e>>2]|0;if(!e)break;e=c[e+16>>2]|0;p=e+16|0;l=+h[p>>3]*f;h[p>>3]=+(~~(l+(l>=0.0?.5:-.5))|0);p=e+24|0;l=+h[p>>3]*i;h[p>>3]=+(~~(l+(l>=0.0?.5:-.5))|0);e=e+164|0}Vi(a,f,i)}while(0);if(d|0)Wi(a,d);return}function Si(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;h=b+16|0;b=(c[h>>2]|0)+192|0;while(1){b=c[b>>2]|0;if(!b)break;g=b+16|0;d=0;while(1){b=c[g>>2]|0;f=c[b+180>>2]|0;e=c[f+(d<<2)>>2]|0;if(!e)break;U1(c[e+16>>2]|0);U1(e);d=d+1|0}if(f){U1(f);b=c[g>>2]|0}d=c[b+172>>2]|0;if(d){U1(d);b=c[g>>2]|0}f=b+256|0;e=c[f+4>>2]|0;b=b+180|0;c[b>>2]=c[f>>2];c[b+4>>2]=e;b=c[g>>2]|0;e=b+248|0;f=c[e+4>>2]|0;b=b+172|0;c[b>>2]=c[e>>2];c[b+4>>2]=f;b=(c[g>>2]|0)+164|0}b=0;d=c[(c[h>>2]|0)+192>>2]|0;a:while(1){g=(b|0)==0;f=b+16|0;b=d;while(1){if(!b)break a;e=c[b+16>>2]|0;d=c[e+164>>2]|0;if((a[e+156>>0]|0)!=2)continue a;if(g)c[(c[h>>2]|0)+192>>2]=d;else c[(c[f>>2]|0)+164>>2]=d;U1(e);U1(b);b=d}}c[(c[(c[(c[h>>2]|0)+192>>2]|0)+16>>2]|0)+168>>2]=0;return}function Ti(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;e=a+16|0;d=1;while(1){f=c[e>>2]|0;if((d|0)>(c[f+180>>2]|0))break;Ti(c[(c[f+184>>2]|0)+(d<<2)>>2]|0,b);d=d+1|0}Yi(a,b);return}function Ui(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,i=0,j=0.0,k=0.0,m=0,n=0.0,o=0.0,p=0.0,q=0.0,r=0,s=0,t=0;s=l;l=l+80|0;e=s+64|0;d=s+48|0;f=s+16|0;m=s;r=s+32|0;a=a+16|0;b=c[(c[a>>2]|0)+8>>2]|0;t=b+48|0;c[f>>2]=c[t>>2];c[f+4>>2]=c[t+4>>2];c[f+8>>2]=c[t+8>>2];c[f+12>>2]=c[t+12>>2];if((!(+h[f>>3]<.001)?(g=f+8|0,!(+h[g>>3]<.001)):0)?(i=b+32|0,c[m>>2]=c[i>>2],c[m+4>>2]=c[i+4>>2],c[m+8>>2]=c[i+8>>2],c[m+12>>2]=c[i+12>>2],c[d>>2]=c[f>>2],c[d+4>>2]=c[f+4>>2],c[d+8>>2]=c[f+8>>2],c[d+12>>2]=c[f+12>>2],c[e>>2]=c[i>>2],c[e+4>>2]=c[i+4>>2],c[e+8>>2]=c[i+8>>2],c[e+12>>2]=c[i+12>>2],Xi(r,d,e),c[f>>2]=c[r>>2],c[f+4>>2]=c[r+4>>2],c[f+8>>2]=c[r+8>>2],c[f+12>>2]=c[r+12>>2],c[d>>2]=c[r>>2],c[d+4>>2]=c[r+4>>2],c[d+8>>2]=c[r+8>>2],c[d+12>>2]=c[r+12>>2],c[e>>2]=c[m>>2],c[e+4>>2]=c[m+4>>2],c[e+8>>2]=c[m+8>>2],c[e+12>>2]=c[m+12>>2],Xi(f,d,e),i=c[a>>2]|0,j=+h[i+32>>3],k=+h[i+40>>3],n=+h[f>>3],o=n/j,p=+h[g>>3],q=p/k,!(o>=1.0&q>=1.0)):0){o=o.5?o:.5;q=+N(+(o*k/p))*p/k;p=+N(+(o*j/n))*n/j*j;a=c[i+8>>2]|0;h[a+64>>3]=p;h[a+72>>3]=q*k;a=1}else a=0;l=s;return a|0}function Vi(a,b,d){a=a|0;b=+b;d=+d;var e=0,f=0;e=a+16|0;a=1;while(1){f=c[e>>2]|0;if((a|0)>(c[f+180>>2]|0))break;Vi(c[(c[f+184>>2]|0)+(a<<2)>>2]|0,b,d);a=a+1|0}e=f+16|0;h[e>>3]=+h[e>>3]*b;e=f+24|0;h[e>>3]=+h[e>>3]*d;e=f+32|0;h[e>>3]=+h[e>>3]*b;f=f+40|0;h[f>>3]=+h[f>>3]*d;return}function Wi(a,b){a=a|0;b=b|0;var d=0.0,e=0.0,f=0,g=0,i=0.0,j=0,k=0,m=0,n=0;m=l;l=l+32|0;j=m+24|0;g=m+16|0;f=m;n=c[a+16>>2]|0;e=+h[n+32>>3]-+h[n+16>>3];d=+h[n+40>>3]-+h[n+24>>3];i=e/d;if(0){n=c[15712]|0;h[f>>3]=i;h[f+8>>3]=e*.0001*d;w4(n,86745,f)|0;c[g>>2]=xk(a)|0;w4(n,86770,g)|0}d=+h[b>>3];do if(!(i>d*1.1)){a=b+24|0;if(!(i<=d*.8)){c[a>>2]=0;k=9;break}c[a>>2]=-1;if(0){U4(86780,34,1,c[15712]|0)|0;k=9}}else{c[b+24>>2]=~~(d*+((c[b+20>>2]|0)-(c[b+16>>2]|0)|0)/i);k=9}while(0);if((k|0)==9?0:0){n=c[15712]|0;c[j>>2]=c[b+24>>2];w4(n,86815,j)|0}l=m;return}function Xi(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0;d=+h[b+8>>3]-+h[c+8>>3];h[a>>3]=+h[b>>3]-+h[c>>3];h[a+8>>3]=d;return}function Yi(d,e){d=d|0;e=e|0;var f=0,g=0.0,i=0.0,j=0,k=0,l=0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0.0;s=(gg(d)|0)==(d|0);v=d+16|0;w=c[v>>2]|0;a:do if(s){f=b[w+236>>1]|0;d=b[w+238>>1]|0;q=d<<16>>16;r=w+196|0;s=w+196|0;p=f<<16>>16;i=-2147483647.0;g=2147483647.0;while(1){if((p|0)>(q|0))break;j=c[r>>2]|0;o=c[j+(p<<6)>>2]|0;if((o|0)!=0?(t=c[j+(p<<6)+4>>2]|0,u=c[t>>2]|0,(u|0)!=0):0){l=1;j=u;while(1){j=c[j+16>>2]|0;k=a[j+156>>0]|0;if(!((l|0)<(o|0)&k<<24>>24!=0))break;j=c[t+(l<<2)>>2]|0;l=l+1|0}if(!(k<<24>>24)){m=+h[j+16>>3]-+h[j+88>>3];n=g>2]|0)+(p<<6)+4>>2]|0;k=o+-2|0;j=o+-1|0;while(1){j=c[(c[l+(j<<2)>>2]|0)+16>>2]|0;if(!(a[j+156>>0]|0))break;else{j=k;k=k+-1|0}}x=+h[j+96>>3]+ +h[j+16>>3];i=i>x?i:x;g=n?g:m}}p=p+1|0}k=c[w+180>>2]|0;l=w+184|0;j=1;while(1){if((j|0)>(k|0))break a;u=c[(c[(c[l>>2]|0)+(j<<2)>>2]|0)+16>>2]|0;x=+h[u+16>>3]+-8.0;m=+h[u+32>>3]+8.0;j=j+1|0;i=i>m?i:m;g=g>2]|0)+16>>2]|0)+232>>2]|0);g=+(c[(c[(c[w+256>>2]|0)+16>>2]|0)+232>>2]|0);f=b[w+236>>1]|0;d=b[w+238>>1]|0}while(0);e=c[(c[e+16>>2]|0)+196>>2]|0;m=+h[(c[(c[c[e+(d<<16>>16<<6)+4>>2]>>2]|0)+16>>2]|0)+24>>3]-+h[w+120>>3];x=+h[w+128>>3]+ +h[(c[(c[c[e+(f<<16>>16<<6)+4>>2]>>2]|0)+16>>2]|0)+24>>3];h[w+16>>3]=g;h[w+24>>3]=m;e=c[v>>2]|0;h[e+32>>3]=i;h[e+40>>3]=x;return}function Zi(a,d,e,f){a=a|0;d=d|0;e=+e;f=f|0;var g=0,h=0,i=0,j=0;i=JK(96)|0;j=i+48|0;c[j>>2]=c[j>>2]|3;c[i>>2]=c[i>>2]&-4|2;g=JK(176)|0;h=i+16|0;c[h>>2]=g;c[((c[i>>2]&3|0)==3?i:j)+40>>2]=a;c[((c[i>>2]&3|0)==2?i:i+-48|0)+40>>2]=d;if(e>65535.0){_i(e);e=65535.0;g=c[h>>2]|0}b[g+170>>1]=~~(e+(e>=0.0?.5:-.5));c[g+156>>2]=f;gh(i)|0;return i|0}function _i(a){a=+a;var b=0,d=0;b=l;l=l+16|0;d=b;h[d>>3]=a;c[d+8>>2]=65535;gA(1,86845,d)|0;l=b;return}function $i(a){a=a|0;var b=0,d=0,e=0,f=0;a=(c[a+16>>2]|0)+192|0;while(1){a=c[a>>2]|0;if(!a)break;f=a+16|0;e=c[f>>2]|0;a=e+172|0;d=c[a+4>>2]|0;e=e+248|0;c[e>>2]=c[a>>2];c[e+4>>2]=d;e=c[f>>2]|0;d=e+180|0;a=c[d+4>>2]|0;e=e+256|0;c[e>>2]=c[d>>2];c[e+4>>2]=a;e=c[f>>2]|0;a=c[e+180>>2]|0;d=0;while(1)if(!(c[a+(d<<2)>>2]|0))break;else d=d+1|0;b=c[e+172>>2]|0;a=0;while(1)if(!(c[b+(a<<2)>>2]|0))break;else a=a+1|0;c[e+176>>2]=0;a=JK((a+d<<2)+16|0)|0;e=c[f>>2]|0;c[e+172>>2]=a;c[e+184>>2]=0;e=JK(16)|0;a=c[f>>2]|0;c[a+180>>2]=e;a=a+164|0}return}function aj(d){d=d|0;var f=0,g=0,i=0.0,j=0,k=0,m=0,n=0,o=0,p=0.0,q=0,r=0,s=0,t=0.0,u=0,v=0,w=0,x=0,y=0,z=0,A=0.0,B=0.0;z=l;l=l+16|0;w=z;x=d+16|0;u=c[x>>2]|0;y=c[u+196>>2]|0;d=(a[(c[(c[d+60>>2]|0)+16>>2]|0)+113>>0]&1)!=0;v=c[u+248>>2]|0;c[w>>2]=v;c[w+4>>2]=d?5:v;v=b[u+236>>1]|0;d=u;while(1){if((v|0)>(b[d+238>>1]|0))break;r=y+(v<<6)+4|0;c[(c[(c[c[r>>2]>>2]|0)+16>>2]|0)+232>>2]=0;s=y+(v<<6)|0;t=+(c[w+((v&1)<<2)>>2]|0);p=0.0;k=0;a:while(1){if((k|0)>=(c[s>>2]|0))break;f=c[r>>2]|0;m=c[f+(k<<2)>>2]|0;u=m+16|0;d=c[u>>2]|0;i=+h[d+96>>3];h[d+240>>3]=i;if((c[d+208>>2]|0)>0){j=0;f=0;while(1){g=c[(c[d+204>>2]|0)+(j<<2)>>2]|0;if(!g)break;q=c[g>>2]&3;if((c[((q|0)==3?g:g+48|0)+40>>2]|0)==(c[((q|0)==2?g:g+-48|0)+40>>2]|0)){f=(kO(g)|0)+f|0;d=c[u>>2]|0}j=j+1|0}q=d+96|0;i=+h[q>>3]+ +(f|0);h[q>>3]=i;f=c[r>>2]|0}q=k+1|0;f=c[f+(q<<2)>>2]|0;if(f){o=f+16|0;i=i+t+ +h[(c[o>>2]|0)+88>>3];Zi(m,f,i,0)|0;d=~~(i+p);c[(c[o>>2]|0)+232>>2]=d;p=+(d|0);d=c[u>>2]|0}f=c[d+112>>2]|0;if(f){j=c[d+256>>2]|0;k=c[j>>2]|0;j=c[j+4>>2]|0;d=(c[(c[(c[((c[k>>2]&3|0)==2?k:k+-48|0)+40>>2]|0)+16>>2]|0)+236>>2]|0)>(c[(c[(c[((c[j>>2]&3|0)==2?j:j+-48|0)+40>>2]|0)+16>>2]|0)+236>>2]|0);g=d?j:k;j=d?k:j;k=f+16|0;d=c[k>>2]|0;i=+((O(c[(c[x>>2]|0)+248>>2]|0,e[d+170>>1]|0)|0)/2|0|0);o=c[g>>2]&3;f=c[((o|0)==2?g:g+-48|0)+40>>2]|0;g=c[((o|0)==3?g:g+48|0)+40>>2]|0;if(!(lj(g,f)|0))Zi(f,g,+(~~(+h[(c[f+16>>2]|0)+96>>3]+i+ +h[(c[g+16>>2]|0)+88>>3])|0),c[d+156>>2]|0)|0;d=c[j>>2]&3;f=c[((d|0)==3?j:j+48|0)+40>>2]|0;d=c[((d|0)==2?j:j+-48|0)+40>>2]|0;if(!(lj(d,f)|0)){Zi(f,d,+(~~(+h[(c[f+16>>2]|0)+96>>3]+i+ +h[(c[d+16>>2]|0)+88>>3])|0),c[(c[k>>2]|0)+156>>2]|0)|0;o=0}else o=0}else o=0;while(1){d=c[u>>2]|0;if((o|0)>=(c[d+192>>2]|0)){k=q;continue a}m=c[(c[d+188>>2]|0)+(o<<2)>>2]|0;k=c[m>>2]&3;g=c[((k|0)==3?m:m+48|0)+40>>2]|0;k=c[((k|0)==2?m:m+-48|0)+40>>2]|0;j=(c[(c[g+16>>2]|0)+236>>2]|0)<(c[(c[k+16>>2]|0)+236>>2]|0);f=j?g:k;g=j?k:g;i=+h[(c[g+16>>2]|0)+88>>3]+ +h[(c[f+16>>2]|0)+96>>3];k=m+16|0;j=~~(i+ +(O(c[(c[x>>2]|0)+248>>2]|0,e[(c[k>>2]|0)+170>>1]|0)|0));n=dh(f,g)|0;if(!n){d=c[k>>2]|0;if(!(c[d+96>>2]|0))Zi(f,g,+(j|0),c[d+156>>2]|0)|0}else{A=+(j|0);d=c[k>>2]|0;B=+h[d+136>>3];i=i+ +(c[(c[x>>2]|0)+248>>2]|0)+ +(~~(B+(B>=0.0?.5:-.5))|0);f=~~(i65535){_i(+(f|0));f=65535;d=c[k>>2]|0}k=c[n+16>>2]|0;j=k+170|0;g=e[j>>1]|0;b[j>>1]=(f|0)<(g|0)?g:f;k=k+156|0;c[k>>2]=c[(c[((c[k>>2]|0)>(c[d+156>>2]|0)?n:m)+16>>2]|0)+156>>2]}o=o+1|0}}v=v+1|0;d=c[x>>2]|0}l=z;return}function bj(b){b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0,k=0,l=0,m=0,n=0;d=(c[b+16>>2]|0)+192|0;while(1){d=c[d>>2]|0;if(!d)break;g=d+16|0;d=c[g>>2]|0;e=c[d+256>>2]|0;a:do if(e){f=0;while(1){e=c[e+(f<<2)>>2]|0;if(!e)break a;n=sh(b)|0;d=n+16|0;a[(c[d>>2]|0)+156>>0]=2;l=e+16|0;k=c[l>>2]|0;i=~~(+h[k+56>>3]-+h[k+16>>3]);m=(i|0)>0;j=m?0:0-i|0;i=m?i:0;m=e+48|0;Zi(n,c[((c[e>>2]&3|0)==3?e:m)+40>>2]|0,+(i+1|0),c[k+156>>2]|0)|0;k=e+-48|0;Zi(n,c[((c[e>>2]&3|0)==2?e:k)+40>>2]|0,+(j+1|0),c[(c[l>>2]|0)+156>>2]|0)|0;l=c[e>>2]&3;i=(c[(c[(c[((l|0)==3?e:m)+40>>2]|0)+16>>2]|0)+232>>2]|0)-i|0;e=(c[(c[(c[((l|0)==2?e:k)+40>>2]|0)+16>>2]|0)+232>>2]|0)-j|0;c[(c[d>>2]|0)+232>>2]=((i|0)<(e|0)?i:e)+-1;d=c[g>>2]|0;f=f+1|0;e=c[d+256>>2]|0}}while(0);d=d+164|0}return}function cj(a){a=a|0;if((c[(c[a+16>>2]|0)+180>>2]|0)>0){gj(a);hj(a);ij(a);jj(a)}return}function dj(a){a=a|0;var b=0.0,d=0.0,e=0,f=0;e=a+16|0;f=c[(c[e>>2]|0)+8>>2]|0;if((c[f+84>>2]|0)==3?(b=+h[f+64>>3],d=+h[f+72>>3],!(d*b<=1.0)):0){ej(a);f=c[e>>2]|0;d=(c[f+116>>2]&1|0)==0?b:d;Zi(c[f+256>>2]|0,c[f+260>>2]|0,d<65535.0?d:65535.0,1e3)|0}return}function ej(a){a=a|0;var d=0,e=0,f=0.0,g=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+16|0;m=n;e=ZO(a,c[47144]|0,8,0)|0;fj(a);i=a+16|0;g=c[i>>2]|0;j=c[g+256>>2]|0;k=c[g+260>>2]|0;f=+(e|0);e=b[g+236>>1]|0;while(1){if((e|0)>(b[g+238>>1]|0))break;d=c[g+196>>2]|0;do if(c[d+(e<<6)>>2]|0){d=c[c[d+(e<<6)+4>>2]>>2]|0;if(!d){c[m>>2]=KB(a)|0;c[m+4>>2]=e;gA(1,86929,m)|0;break}else{Zi(j,d,+h[(c[d+16>>2]|0)+88>>3]+f+ +h[g+96>>3],0)|0;g=c[i>>2]|0;d=c[g+196>>2]|0;d=c[(c[d+(e<<6)+4>>2]|0)+((c[d+(e<<6)>>2]|0)+-1<<2)>>2]|0;Zi(d,k,+h[(c[d+16>>2]|0)+96>>3]+f+ +h[g+64>>3],0)|0;break}}while(0);e=e+1|0;g=c[i>>2]|0}l=n;return}function fj(b){b=b|0;var d=0,e=0,f=0;d=b+16|0;if(!(c[(c[d>>2]|0)+256>>2]|0)){f=sh(gg(b)|0)|0;a[(c[f+16>>2]|0)+156>>0]=2;e=sh(gg(b)|0)|0;a[(c[e+16>>2]|0)+156>>0]=2;if((c[(c[d>>2]|0)+12>>2]|0?(gg(b)|0)!=(b|0):0)?(c[(c[(yC(b)|0)+16>>2]|0)+116>>2]&1|0)==0:0){b=c[d>>2]|0;Zi(f,e,+(~~+h[b+48+((+h[b+48>>3]>+h[b+80>>3]?0:2)<<4)>>3]|0),0)|0}d=c[d>>2]|0;c[d+256>>2]=f;c[d+260>>2]=e}return}function gj(a){a=a|0;var b=0,d=0;do if((gg(a)|0)!=(a|0)){ej(a);a=a+16|0;b=c[a>>2]|0;b=dh(c[b+256>>2]|0,c[b+260>>2]|0)|0;if(!b){d=c[a>>2]|0;Zi(c[d+256>>2]|0,c[d+260>>2]|0,1.0,128)|0;break}else{d=(c[b+16>>2]|0)+156|0;c[d>>2]=(c[d>>2]|0)+128;break}}else a=a+16|0;while(0);b=1;while(1){d=c[a>>2]|0;if((b|0)>(c[d+180>>2]|0))break;gj(c[(c[d+184>>2]|0)+(b<<2)>>2]|0);b=b+1|0}return}function hj(d){d=d|0;var e=0,f=0,g=0,i=0,j=0,k=0,l=0,m=0.0,n=0,o=0;k=ZO(d,c[47144]|0,8,0)|0;o=d+16|0;e=c[o>>2]|0;m=+(k|0);k=b[e+236>>1]|0;while(1){if((k|0)>(b[e+238>>1]|0)){f=1;break}e=c[e+196>>2]|0;a:do if(c[e+(k<<6)>>2]|0?(l=c[c[e+(k<<6)+4>>2]>>2]|0,l|0):0){i=l+16|0;f=c[(c[i>>2]|0)+236>>2]|0;while(1){if((f|0)<=0)break;f=f+-1|0;j=c[(c[(c[(c[(gg(d)|0)+16>>2]|0)+196>>2]|0)+(k<<6)+4>>2]|0)+(f<<2)>>2]|0;g=j+16|0;e=c[g>>2]|0;if(!(a[e+156>>0]|0)){n=10;break}if(kj(d,j)|0){n=9;break}}if((n|0)==9){e=c[g>>2]|0;n=10}if((n|0)==10){n=0;Zi(j,c[(c[o>>2]|0)+256>>2]|0,+h[e+96>>3]+m,0)|0}f=(c[(c[(c[o>>2]|0)+196>>2]|0)+(k<<6)>>2]|0)+(c[(c[i>>2]|0)+236>>2]|0)|0;while(1){if((f|0)>=(c[(c[(c[(gg(d)|0)+16>>2]|0)+196>>2]|0)+(k<<6)>>2]|0))break a;i=c[(c[(c[(c[(gg(d)|0)+16>>2]|0)+196>>2]|0)+(k<<6)+4>>2]|0)+(f<<2)>>2]|0;g=i+16|0;e=c[g>>2]|0;if(!(a[e+156>>0]|0))break;if(!(kj(d,i)|0))f=f+1|0;else{n=15;break}}if((n|0)==15){n=0;e=c[g>>2]|0}Zi(c[(c[o>>2]|0)+260>>2]|0,i,+h[e+88>>3]+m,0)|0}while(0);k=k+1|0;e=c[o>>2]|0}while(1){if((f|0)>(c[e+180>>2]|0))break;hj(c[(c[e+184>>2]|0)+(f<<2)>>2]|0);f=f+1|0;e=c[o>>2]|0}return}function ij(a){a=a|0;var b=0,d=0.0,e=0,f=0,g=0;e=ZO(a,c[47144]|0,8,0)|0;fj(a);b=a+16|0;d=+(e|0);a=1;while(1){e=c[b>>2]|0;if((a|0)>(c[e+180>>2]|0))break;e=c[(c[e+184>>2]|0)+(a<<2)>>2]|0;fj(e);f=c[b>>2]|0;g=e+16|0;Zi(c[f+256>>2]|0,c[(c[g>>2]|0)+256>>2]|0,+h[f+96>>3]+d,0)|0;f=c[b>>2]|0;Zi(c[(c[g>>2]|0)+260>>2]|0,c[f+260>>2]|0,+h[f+64>>3]+d,0)|0;ij(e);a=a+1|0}return}function jj(a){a=a|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0.0,n=0,o=0;d=ZO(a,c[47144]|0,8,0)|0;n=a+16|0;a=1;while(1){f=c[n>>2]|0;e=c[f+180>>2]|0;if((a|0)>(e|0))break;fj(c[(c[f+184>>2]|0)+(a<<2)>>2]|0);a=a+1|0}m=+(d|0);l=1;a=e;d=f;while(1){if((l|0)>(a|0))break;k=l+1|0;j=k;while(1){e=c[d+184>>2]|0;f=c[e+(l<<2)>>2]|0;if((j|0)>(a|0))break;e=c[e+(j<<2)>>2]|0;g=(b[(c[f+16>>2]|0)+236>>1]|0)>(b[(c[e+16>>2]|0)+236>>1]|0);i=g?e:f;e=g?f:e;f=c[i+16>>2]|0;g=c[e+16>>2]|0;o=b[g+236>>1]|0;h=o<<16>>16;if((b[f+238>>1]|0)>=o<<16>>16){a=(c[(c[(c[c[(c[f+196>>2]|0)+(h<<6)+4>>2]>>2]|0)+16>>2]|0)+236>>2]|0)<(c[(c[(c[c[(c[g+196>>2]|0)+(h<<6)+4>>2]>>2]|0)+16>>2]|0)+236>>2]|0);Zi(c[(c[(a?i:e)+16>>2]|0)+260>>2]|0,c[(c[(a?e:i)+16>>2]|0)+256>>2]|0,m,0)|0;a=c[n>>2]|0;d=a;a=c[a+180>>2]|0}j=j+1|0}jj(f);d=c[n>>2]|0;l=k;a=c[d+180>>2]|0}return}function kj(b,d){b=b|0;d=d|0;var e=0;d=c[d+16>>2]|0;if((a[d+156>>0]|0)==1){d=c[c[d+256>>2]>>2]|0;while(1){e=c[(c[d+16>>2]|0)+116>>2]|0;if(!e)break;else d=e}if(!(HC(b,c[((c[d>>2]&3|0)==3?d:d+48|0)+40>>2]|0)|0))d=(HC(b,c[((c[d>>2]&3|0)==2?d:d+-48|0)+40>>2]|0)|0)==0&1;else d=0}else d=0;return d|0}function lj(a,b){a=a|0;b=b|0;return mj(a,b)|0}function mj(a,b){a=a|0;b=b|0;var d=0,e=0;a:do if((a|0)==(b|0))a=1;else{d=c[(c[a+16>>2]|0)+180>>2]|0;a=0;while(1){e=c[d+(a<<2)>>2]|0;if(!e){a=0;break a}if(!(mj(c[((c[e>>2]&3|0)==2?e:e+-48|0)+40>>2]|0,b)|0))a=a+1|0;else{a=1;break}}}while(0);return a|0}function nj(d){d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;k=d+16|0;d=c[k>>2]|0;j=b[d+236>>1]|0;while(1){if((j|0)>(b[d+238>>1]|0))break;h=c[d+196>>2]|0;g=c[h+(j<<6)>>2]|0;h=h+(j<<6)+4|0;i=0;f=0;while(1){if((f|0)>=(g|0))break;e=c[(c[(c[h>>2]|0)+(f<<2)>>2]|0)+16>>2]|0;c[e+236>>2]=i;if((a[e+159>>0]|0)==6)e=c[e+216>>2]|0;else e=1;i=e+i|0;f=f+1|0}if((i|0)>(g|0)){d=c[h>>2]|0;if(!d)d=KK((i<<2)+4|0)|0;else d=MK(d,(i<<2)+4|0)|0;f=c[(c[k>>2]|0)+196>>2]|0;c[f+(j<<6)+4>>2]=d;e=c[f+(j<<6)>>2]|0;while(1){d=e+-1|0;if((e|0)<=0)break;h=c[f+(j<<6)+4>>2]|0;e=c[h+(d<<2)>>2]|0;c[h+(c[(c[e+16>>2]|0)+236>>2]<<2)>>2]=e;e=d;f=c[(c[k>>2]|0)+196>>2]|0}c[f+(j<<6)>>2]=i;c[(c[f+(j<<6)+4>>2]|0)+(i<<2)>>2]=0;d=c[k>>2]|0}j=j+1|0}return}function oj(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;o=l;l=l+48|0;n=o+32|0;m=o+8|0;d=o+24|0;k=o+16|0;j=o;e=b+16|0;f=c[e>>2]|0;a:do if((c[f+216>>2]|0)>=2){c[m>>2]=~~(+h[f+16>>3]-+h[f+88>>3]);c[m+4>>2]=~~+h[f+24>>3];c[n>>2]=c[m>>2];c[n+4>>2]=c[m+4>>2];pj(d,b,n);g=d;i=c[g+4>>2]|0;d=m;c[d>>2]=c[g>>2];c[d+4>>2]=i;d=c[e>>2]|0;if((c[d+184>>2]|0)>0){j=c[c[d+180>>2]>>2]|0;d=(c[d+236>>2]|0)+1|0;j=_A(a,c[((c[j>>2]&3|0)==2?j:j+-48|0)+40>>2]|0)|0;while(1){if(!j)break a;i=(c[j>>2]&3|0)==2?j:j+-48|0;e=i+48|0;f=c[((c[i>>2]&3|0)==3?i:e)+40>>2]|0;if((f|0)!=(b|0)?(fP(f)|0)==(b|0):0){f=c[((c[i>>2]&3|0)==3?i:e)+40>>2]|0;c[n>>2]=c[m>>2];c[n+4>>2]=c[m+4>>2];qj(k,a,f,n,d);f=k;e=c[f+4>>2]|0;g=m;c[g>>2]=c[f>>2];c[g+4>>2]=e;xh(i);g=i+-48|0;e=c[(c[((c[i>>2]&3|0)==2?i:g)+40>>2]|0)+16>>2]|0;f=c[e+172>>2]|0;if(!f)e=KK((c[e+176>>2]<<2)+8|0)|0;else e=MK(f,(c[e+176>>2]<<2)+8|0)|0;c[(c[(c[((c[i>>2]&3|0)==2?i:g)+40>>2]|0)+16>>2]|0)+172>>2]=e;p=c[(c[((c[i>>2]&3|0)==2?i:g)+40>>2]|0)+16>>2]|0;e=c[p+172>>2]|0;p=p+176|0;f=c[p>>2]|0;c[p>>2]=f+1;c[e+(f<<2)>>2]=i;i=c[(c[((c[i>>2]&3|0)==2?i:g)+40>>2]|0)+16>>2]|0;c[(c[i+172>>2]|0)+(c[i+176>>2]<<2)>>2]=0;d=d+1|0}j=$A(a,j)|0}}else{i=c[c[d+172>>2]>>2]|0;d=(c[d+236>>2]|0)+1|0;i=XA(a,c[((c[i>>2]&3|0)==3?i:i+48|0)+40>>2]|0)|0;while(1){if(!i)break a;e=i+-48|0;f=c[((c[i>>2]&3|0)==2?i:e)+40>>2]|0;if((f|0)!=(b|0)?(fP(f)|0)==(b|0):0){f=c[((c[i>>2]&3|0)==2?i:e)+40>>2]|0;c[n>>2]=c[m>>2];c[n+4>>2]=c[m+4>>2];qj(j,a,f,n,d);f=j;e=c[f+4>>2]|0;g=m;c[g>>2]=c[f>>2];c[g+4>>2]=e;xh(i);g=i+48|0;e=c[(c[((c[i>>2]&3|0)==3?i:g)+40>>2]|0)+16>>2]|0;f=c[e+180>>2]|0;if(!f)e=KK((c[e+184>>2]<<2)+8|0)|0;else e=MK(f,(c[e+184>>2]<<2)+8|0)|0;c[(c[(c[((c[i>>2]&3|0)==3?i:g)+40>>2]|0)+16>>2]|0)+180>>2]=e;f=c[(c[((c[i>>2]&3|0)==3?i:g)+40>>2]|0)+16>>2]|0;k=c[f+180>>2]|0;f=f+184|0;p=c[f>>2]|0;c[f>>2]=p+1;c[k+(p<<2)>>2]=i;p=c[(c[((c[i>>2]&3|0)==3?i:g)+40>>2]|0)+16>>2]|0;c[(c[p+180>>2]|0)+(c[p+184>>2]<<2)>>2]=0;d=d+1|0}i=ZA(a,i)|0}}}while(0);l=o;return}function pj(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0.0;qQ(b,c[(c[(xC(b)|0)+16>>2]|0)+116>>2]&1);e=c[b+16>>2]|0;h[e+24>>3]=+(c[d+4>>2]|0);f=+h[e+88>>3]+ +(c[d>>2]|0);h[e+16>>3]=f;f=f+ +h[e+96>>3];c[d>>2]=~~(f+ +(c[(c[(xC(b)|0)+16>>2]|0)+248>>2]|0));e=d;b=c[e+4>>2]|0;d=a;c[d>>2]=c[e>>2];c[d+4>>2]=b;return}function qj(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0;i=l;l=l+16|0;h=i;b=gg(b)|0;g=fP(d)|0;if((g|0)!=(d|0))ph(g,d);j=c[d+16>>2]|0;c[j+236>>2]=f;g=c[(c[g+16>>2]|0)+232>>2]|0;c[j+232>>2]=g;c[(c[(c[(c[b+16>>2]|0)+196>>2]|0)+(g<<6)+4>>2]|0)+(f<<2)>>2]=d;c[h>>2]=c[e>>2];c[h+4>>2]=c[e+4>>2];pj(a,d,h);l=i;return}function rj(a){a=a|0;var d=0.0,e=0.0,f=0,g=0,i=0,j=0.0,k=0,l=0,m=0,n=0.0;m=c[(c[(gg(a)|0)+16>>2]|0)+196>>2]|0;if((gg(a)|0)==(a|0))j=8.0;else j=+(ZO(a,c[47144]|0,8,0)|0);l=a+16|0;g=c[l>>2]|0;f=0;k=1;e=+h[g+120>>3];d=+h[g+128>>3];while(1){if((k|0)>(c[g+180>>2]|0))break;i=c[(c[g+184>>2]|0)+(k<<2)>>2]|0;f=rj(i)|0|f;i=c[i+16>>2]|0;g=c[l>>2]|0;if((b[i+238>>1]|0)==(b[g+238>>1]|0)){n=+h[i+120>>3]+j;e=e>n?e:n}if((b[i+236>>1]|0)==(b[g+236>>1]|0)){n=+h[i+128>>3]+j;d=d>n?d:n}k=k+1|0}if((gg(a)|0)!=(a|0)?(c[(c[l>>2]|0)+12>>2]|0)!=0:0)if(!(c[(c[(yC(a)|0)+16>>2]|0)+116>>2]&1)){k=c[l>>2]|0;f=1;e=+h[k+56>>3]+e;d=+h[k+88>>3]+d}else f=1;k=c[l>>2]|0;h[k+120>>3]=e;h[k+128>>3]=d;if((gg(a)|0)!=(a|0)){l=c[l>>2]|0;a=m+(b[l+236>>1]<<6)+24|0;n=+h[a>>3];h[a>>3]=n>d?n:d;m=m+(b[l+238>>1]<<6)+16|0;n=+h[m>>3];h[m>>3]=n>e?n:e}return f|0}function sj(a,d){a=a|0;d=d|0;var e=0,f=0.0,g=0.0,i=0,j=0,k=0.0,l=0,m=0,n=0,o=0,p=0.0,q=0.0;o=c[(c[(gg(a)|0)+16>>2]|0)+196>>2]|0;if((gg(a)|0)==(a|0))e=0;else e=ZO(a,c[47144]|0,8,0)|0;l=a+16|0;i=c[l>>2]|0;m=e+d|0;k=+(e|0);j=1;f=+h[i+128>>3];g=+h[i+120>>3];e=i;while(1){if((j|0)>(c[e+180>>2]|0))break;i=c[(c[e+184>>2]|0)+(j<<2)>>2]|0;sj(i,m);i=c[i+16>>2]|0;e=c[l>>2]|0;if((b[i+238>>1]|0)==(b[e+238>>1]|0)){q=+h[i+120>>3]+k;g=g>q?g:q}if((b[i+236>>1]|0)==(b[e+236>>1]|0)){q=+h[i+128>>3]+k;f=f>q?f:q}j=j+1|0}h[e+120>>3]=g;h[e+128>>3]=f;if(((gg(a)|0)!=(a|0)?(n=c[l>>2]|0,c[n+12>>2]|0):0)?(p=-g-f+ +h[n+48+((+h[n+104>>3]>+h[n+72>>3]?3:1)<<4)+8>>3]-+h[(c[(c[c[o+(b[n+236>>1]<<6)+4>>2]>>2]|0)+16>>2]|0)+24>>3]+ +h[(c[(c[c[o+(b[n+238>>1]<<6)+4>>2]>>2]|0)+16>>2]|0)+24>>3],p>0.0):0)tj(a,~~p,d);if((gg(a)|0)!=(a|0)){n=c[l>>2]|0;m=o+(b[n+236>>1]<<6)+24|0;q=+h[m>>3];p=+h[n+128>>3];h[m>>3]=q>p?q:p;o=o+(b[n+238>>1]<<6)+16|0;p=+h[o>>3];q=+h[n+120>>3];h[o>>3]=p>q?p:q}return}function tj(a,d,e){a=a|0;d=d|0;e=e|0;var f=0,g=0.0,i=0.0,j=0.0,k=0,l=0,m=0,n=0.0,o=0.0,p=0,q=0,r=0;k=c[(gg(a)|0)+16>>2]|0;q=c[k+196>>2]|0;p=c[a+16>>2]|0;a=b[p+238>>1]|0;f=b[p+236>>1]|0;l=(d+1|0)/2|0;m=p+120|0;n=+h[m>>3];o=+(l|0);i=+(e|0);e=~~(o+i+n-+h[q+(a<<6)+16>>3]);if((e|0)>0){g=+(e|0);while(1){if((a|0)<(f|0))break;if((c[q+(a<<6)>>2]|0)>0){r=(c[(c[c[q+(a<<6)+4>>2]>>2]|0)+16>>2]|0)+24|0;h[r>>3]=+h[r>>3]+g}a=a+-1|0}j=+h[p+128>>3];a=e;g=j+ +(d-l|0)}else{j=+h[p+128>>3];a=d-l|0;g=j}a=~~(+(a|0)+i+g-+h[q+(f<<6)+24>>3]);a:do if((a|0)>0){e=b[k+236>>1]|0;g=+(a|0);while(1){a=f+-1|0;if((f|0)<=(e|0))break a;if((c[q+(a<<6)>>2]|0)<=0){f=a;continue}f=(c[(c[c[q+(a<<6)+4>>2]>>2]|0)+16>>2]|0)+24|0;h[f>>3]=+h[f>>3]+g;f=a}}while(0);h[p+128>>3]=j+ +(d-l|0);h[m>>3]=n+o;return}function uj(b,d){b=b|0;d=d|0;var e=0,f=0;e=c[b+16>>2]|0;f=a[e+84>>0]|0;b=c[d+16>>2]|0;do if(f<<24>>24==(a[b+84>>0]|0)){if(+h[e+56>>3]==+h[b+56>>3]){if(!(f<<24>>24==0?1:+h[e+64>>3]==+h[b+64>>3])){b=0;break}}else if(f<<24>>24){b=0;break}if(+h[e+16>>3]==+h[b+16>>3]?+h[e+24>>3]==+h[b+24>>3]:0){b=1;break}b=(a[e+44>>0]|0)==0&1}else b=0;while(0);return b|0}function vj(a){a=a|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=a+16|0;d=c[i>>2]|0;b[d+236>>1]=32767;b[d+238>>1]=-1;d=0;h=jC(a)|0;while(1){e=c[i>>2]|0;if(!h)break;f=e+238|0;g=c[(c[h+16>>2]|0)+232>>2]|0;if((g|0)>(b[f>>1]|0))b[f>>1]=g;e=e+236|0;if((g|0)<(b[e>>1]|0))b[e>>1]=g;if(!d)d=h;else d=(g|0)<(c[(c[d+16>>2]|0)+232>>2]|0)?h:d;h=kC(a,h)|0}c[e+264>>2]=d;return}function wj(a){a=a|0;var b=0,d=0,e=0,f=0,g=0.0;b=QA(a,86974)|0;if(!b)b=2147483647;else{g=+r5(b);b=~~(g*+(tB(a)|0))}e=a+16|0;d=0;while(1){f=c[e>>2]|0;if((d|0)>=(c[f+220>>2]|0))break;c[f+192>>2]=c[(c[f+216>>2]|0)+(d<<2)>>2];uL(a,(c[f+180>>2]|0)==0&1,b)|0;d=d+1|0}return}function xj(a,d){a=a|0;d=d|0;var e=0,f=0,g=0;f=l;l=l+16|0;e=f;if(!(QA(a,86983)|0))zj(a,d);else{g=(c[a+16>>2]|0)+136|0;b[g>>1]=b[g>>1]|16;yj(a,d)}if(0){g=c[15712]|0;a=c[a+16>>2]|0;d=b[a+236>>1]|0;c[e>>2]=b[a+238>>1];c[e+4>>2]=d;w4(g,86991,e)|0}l=f;return}function yj(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0.0;i=l;l=l+16|0;h=i;c[46747]=0;a[h>>0]=a[18588]|0;a[h+1>>0]=a[18589]|0;a[h+2>>0]=a[18590]|0;a[h+3>>0]=a[18591]|0;h=oB(87201,h,0)|0;TC(h,87230,280,1)|0;FC(h,17404,17344);Aj(b);e=QA(b,86974)|0;if(!e)f=2147483647;else{j=+r5(e);f=~~(j*+(tB(b)|0))}Qj(b,0);Rj(b,h);Sj(b,h);Tj(b,h,0,0);Uj(h);g=Vj(h)|0;Wj(h);if(d|0){Kk(h);yk(h)}e=QA(b,102586)|0;if(!e)e=-1;else e=q5(e)|0;NK(h,1,f,e)|0;Xj(b,h,g);sB(h)|0;l=i;return}function zj(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;g=l;l=l+32|0;f=g+16|0;e=g+8|0;d=g;Aj(a);do if(!b){Bj(a,a);Nk(a);Cj(d,a);h=d;d=c[h+4>>2]|0;b=e;c[b>>2]=c[h>>2];c[b+4>>2]=d;Gl(a,0);b=0}else{Kk(a);yk(a);Bj(a,a);Nk(a);Cj(d,a);i=d;d=c[i+4>>2]|0;h=e;c[h>>2]=c[i>>2];c[h+4>>2]=d;Gl(a,0);h=c[a+16>>2]|0;if((c[h+220>>2]|0)<=1?(c[h+180>>2]|0)<=0:0)break;c[b+32>>2]=1;b=0}while(0);vk(a);c[f>>2]=c[e>>2];c[f+4>>2]=c[e+4>>2];if(Dj(a,f)|0)Gl(a,0);if(!b)wj(a);else zk(a,b);Ej(a,b);Fj(a);l=g;return}function Aj(d){d=d|0;var f=0,g=0,h=0;if(a[(c[(c[d+60>>2]|0)+16>>2]|0)+113>>0]&1){g=jC(d)|0;while(1){if(!g)break;f=XA(d,g)|0;while(1){if(!f)break;h=(c[f+16>>2]|0)+170|0;b[h>>1]=(e[h>>1]|0)<<1;f=ZA(d,f)|0}g=kC(d,g)|0}h=(c[d+16>>2]|0)+252|0;c[h>>2]=((c[h>>2]|0)+1|0)/2|0}return}function Bj(a,b){a=a|0;b=b|0;var d=0;b=OD(b)|0;while(1){if(!b)break;d=Nj(b)|0;do if(d)if((d|0)==7&(c[47135]|0)==100){Jj(a,b);break}else{Oj(a,b,d);break}else Bj(a,b);while(0);b=PD(b)|0}return}function Cj(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;i=d+16|0;e=c[i>>2]|0;d=c[e+228>>2]|0;e=c[e+224>>2]|0;f=(e|0)==0;if(!d)if(f){j=0;k=0}else g=4;else if(f)g=5;else g=4;if((g|0)==4){d=fP(e)|0;e=c[i>>2]|0;c[e+224>>2]=d;d=c[e+228>>2]|0;if(!d){h=0;d=e;g=12}else g=5}do if((g|0)==5){d=fP(d)|0;e=c[i>>2]|0;c[e+228>>2]=d;if(d){e=d+16|0;d=c[e>>2]|0;f=(a[d+159>>0]|0)==5&1;while(1){d=c[c[d+180>>2]>>2]|0;if(!d){g=11;break}h=c[((c[d>>2]&3|0)==2?d:d+-48|0)+40>>2]|0;if((h|0)!=(fP(h)|0)){g=9;break}uk(d);d=c[e>>2]|0}if((g|0)==9)qa(87094,87034,346,87126);else if((g|0)==11){h=f;d=c[i>>2]|0;g=12;break}}else{h=0;d=e;g=12}}while(0);a:do if((g|0)==12){d=c[d+224>>2]|0;if(!d){j=0;k=h}else{e=d+16|0;d=c[e>>2]|0;f=(a[d+159>>0]|0)==3&1;while(1){d=c[c[d+172>>2]>>2]|0;if(!d){j=f;k=h;break a}i=c[((c[d>>2]&3|0)==3?d:d+48|0)+40>>2]|0;if((i|0)!=(fP(i)|0))break;uk(d);d=c[e>>2]|0}qa(87139,87034,353,87126)}}while(0);c[b>>2]=j;c[b+4>>2]=k;return}function Dj(a,d){a=a|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;j=a+16|0;i=c[j>>2]|0;if((c[i+228>>2]|0)==0?(c[i+224>>2]|0)==0:0)d=0;else e=3;a:do if((e|0)==3){g=jC(a)|0;i=d+4|0;h=c[d>>2]&65535;d=0;while(1){if(!g)break a;if((g|0)==(fP(g)|0)){f=g+16|0;e=c[f>>2]|0;if((c[e+184>>2]|0)==0?(k=c[(c[j>>2]|0)+228>>2]|0,!((k|0)==0|(g|0)==(k|0))):0){d=nh(g,k,0)|0;e=c[d+16>>2]|0;b[e+170>>1]=c[i>>2];c[e+156>>2]=0;e=c[f>>2]|0}if((c[e+176>>2]|0)==0?(l=c[(c[j>>2]|0)+224>>2]|0,!((l|0)==0|(g|0)==(l|0))):0){d=nh(l,g,0)|0;f=c[d+16>>2]|0;b[f+170>>1]=h;c[f+156>>2]=0}}g=kC(a,g)|0}}while(0);return (d|0)!=0|0}function Ej(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;g=jC(d)|0;k=d+16|0;f=c[k>>2]|0;a:do if(g){b[f+236>>1]=32767;b[f+238>>1]=-1;j=(e|0)==0;while(1){if(!g)break;f=fP(g)|0;i=c[g+16>>2]|0;e=c[i+232>>2]|0;do if((f|0)!=(g|0)){if(!j)if(!e)e=0;else break;e=e+(c[(c[f+16>>2]|0)+232>>2]|0)|0;c[i+232>>2]=e}while(0);f=c[k>>2]|0;h=f+238|0;if((e|0)>(b[h>>1]|0))b[h>>1]=e;f=f+236|0;if((e|0)<(b[f>>1]|0))b[f>>1]=e;switch(a[i+159>>0]|0){case 6:case 0:break;default:hP(g)}g=kC(d,g)|0}if((gg(d)|0)==(d|0)){if((c[47135]|0)==100)e=1;else{Ij(d);break}while(1){f=c[k>>2]|0;if((e|0)>(c[f+180>>2]|0))break a;Hj(c[(c[f+184>>2]|0)+(e<<2)>>2]|0);e=e+1|0}}}else{b[f+238>>1]=0;b[f+236>>1]=0}while(0);return}function Fj(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;j=b+16|0;e=0;while(1){d=c[j>>2]|0;if((e|0)>=(c[d+220>>2]|0))break;i=c[(c[d+216>>2]|0)+(e<<2)>>2]|0;c[d+192>>2]=i;d=i;while(1){if(!d)break;i=d+16|0;Gj((c[i>>2]|0)+172|0);Gj((c[i>>2]|0)+180|0);i=c[i>>2]|0;a[i+157>>0]=0;d=c[i+164>>2]|0}e=e+1|0}i=jC(b)|0;while(1){if(!i)break;h=XA(b,i)|0;while(1){if(!h)break;f=h+16|0;d=c[f>>2]|0;g=c[d+172>>2]|0;if((g|0)!=0?(k=g+16|0,(h|0)==(c[(c[k>>2]|0)+116>>2]|0)):0){d=jC(b)|0;while(1){if(!d)break;e=XA(b,d)|0;while(1){if(!e)break;if((h|0)!=(e|0)?(l=(c[e+16>>2]|0)+172|0,m=c[l>>2]|0,(m|0)!=0&(g|0)==(m|0)):0)c[l>>2]=0;e=ZA(b,e)|0}d=kC(b,d)|0}U1(c[k>>2]|0);U1(g);d=c[f>>2]|0}c[d+172>>2]=0;h=ZA(b,h)|0}i=kC(b,i)|0}U1(c[(c[j>>2]|0)+216>>2]|0);m=c[j>>2]|0;c[m+216>>2]=0;c[m+220>>2]=0;return}function Gj(a){a=a|0;var b=0,d=0;d=a+4|0;b=c[d>>2]|0;while(1){if((b|0)<=-1)break;c[(c[a>>2]|0)+(b<<2)>>2]=0;b=b+-1|0}c[d>>2]=0;return}function Hj(a){a=a|0;var d=0,f=0,g=0;d=a+16|0;f=c[d>>2]|0;g=c[(c[(c[f+264>>2]|0)+16>>2]|0)+232>>2]|0;a=f+236|0;b[a>>1]=g+(e[a>>1]|0);a=f+238|0;b[a>>1]=g+(e[a>>1]|0);a=1;while(1){if((a|0)>(c[f+180>>2]|0))break;Hj(c[(c[f+184>>2]|0)+(a<<2)>>2]|0);a=a+1|0;f=c[d>>2]|0}return}function Ij(b){b=b|0;var d=0;d=OD(gg(b)|0)|0;while(1){if(!d)break;if((a[(c[d+16>>2]|0)+274>>0]|0)==7)Jj(b,d);d=PD(d)|0}return}function Jj(a,b){a=a|0;b=b|0;var d=0;d=(c[b+16>>2]|0)+200|0;do if((c[d>>2]|0)==0?(c[d>>2]=a,Kj(a,b),jC(b)|0):0){Lj(a,b);if((c[47135]|0)==100){zj(b,0);Mj(b);break}else{vj(b);break}}while(0);return}function Kj(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;h=b+16|0;g=jC(d)|0;while(1){if(!g)break;i=kC(d,g)|0;j=g+16|0;if(!(a[(c[j>>2]|0)+159>>0]|0))f=1;else{wC(d,g)|0;g=i;continue}while(1){e=c[h>>2]|0;b=c[e+180>>2]|0;if((f|0)>=(b|0))break;if(HC(c[(c[e+184>>2]|0)+(f<<2)>>2]|0,g)|0){k=7;break}f=f+1|0}if((k|0)==7){k=0;b=c[(c[h>>2]|0)+180>>2]|0}if((f|0)<(b|0))wC(d,g)|0;c[(c[j>>2]|0)+212>>2]=0;g=i}e=jC(d)|0;while(1){if(!e)break;b=XA(gg(d)|0,e)|0;while(1){if(!b)break;if(HC(d,c[((c[b>>2]&3|0)==2?b:b+-48|0)+40>>2]|0)|0)mB(d,b,1)|0;b=ZA(gg(d)|0,b)|0}e=kC(d,e)|0}return}function Lj(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;e=a+16|0;d=c[e>>2]|0;g=d+180|0;a=c[g>>2]|0;f=a+1|0;c[g>>2]=f;d=c[d+184>>2]|0;if(!d)a=JK((a<<2)+8|0)|0;else a=LK(d,a+2|0,4,f)|0;c[(c[e>>2]|0)+184>>2]=a;c[a+(f<<2)>>2]=b;uK(b);return}function Mj(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;g=c[b+16>>2]|0;d=g+192|0;h=0;while(1){d=c[d>>2]|0;if(!d)break;f=c[d+16>>2]|0;if(!(c[f+232>>2]|0))e=(a[f+156>>0]|0)==0?d:h;else e=h;d=f+164|0;h=e}if(!h)qa(87019,87034,238,87041);c[g+264>>2]=h;d=jC(b)|0;while(1){if(!d){d=13;break}e=d+16|0;if(!((d|0)==(h|0)?1:(c[(c[e>>2]|0)+216>>2]|0)<2)){d=11;break}gP(d,h)|0;a[(c[e>>2]|0)+159>>0]=7;d=kC(b,d)|0}if((d|0)==11)qa(87056,87034,242,87041);else if((d|0)==13)return}function Nj(b){b=b|0;var d=0;if(!(Pj(b)|0)){d=pP(QA(b,87171)|0,17356,17380)|0;a[(c[b+16>>2]|0)+274>>0]=d;b=d}else b=7;return b|0}function Oj(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;g=jC(d)|0;a:do if(g|0){j=e&255;i=g+16|0;f=g;h=j;while(1){a[(c[f+16>>2]|0)+159>>0]=h;f=kC(d,f)|0;if(!f)break;gP(g,f)|0;h=a[(c[i>>2]|0)+159>>0]|0}switch(e|0){case 3:case 2:{b=b+16|0;f=c[b>>2]|0;h=c[f+224>>2]|0;if(h){g=gP(h,g)|0;f=c[b>>2]|0}c[f+224>>2]=g;break}case 5:case 4:{b=b+16|0;f=c[b>>2]|0;h=c[f+228>>2]|0;if(h){g=gP(h,g)|0;f=c[b>>2]|0}c[f+228>>2]=g;break}default:break a}switch(e|0){case 3:{f=f+224|0;break}case 5:{f=f+228|0;break}default:break a}a[(c[(c[f>>2]|0)+16>>2]|0)+159>>0]=j}while(0);return}function Pj(a){a=a|0;return (Q2(KB(a)|0,108006,7)|0)==0|0}function Qj(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0;m=l;l=l+16|0;g=m;if(!(jk(b)|0)){do if(FP(b)|0)if(!d){c[(c[b+16>>2]|0)+204>>2]=0;d=b;break}else{c[(c[b+16>>2]|0)+204>>2]=(c[(c[d+16>>2]|0)+204>>2]|0)+1;kk(b,d);d=b;break}while(0);e=OD(b)|0;while(1){if(!e)break;Qj(e,d);e=PD(e)|0}a:do if(FP(b)|0){e=jC(b)|0;while(1){if(!e)break a;f=(c[e+16>>2]|0)+212|0;if(!(c[f>>2]|0))c[f>>2]=b;e=kC(b,e)|0}}while(0);switch(lk(b)|0){case 3:{d=d+16|0;a[(c[d>>2]|0)+241>>0]=1;k=19;break}case 2:{d=d+16|0;k=19;break}case 5:{d=d+16|0;a[(c[d>>2]|0)+242>>0]=1;k=21;break}case 4:{d=d+16|0;k=21;break}case 1:{mk(b)|0;break}case 6:break;default:{e=KB(b)|0;f=QA(b,87171)|0;c[g>>2]=e;c[g+4>>2]=f;gA(0,87354,g)|0}}if((k|0)==19){k=mk(b)|0;k=nk(k,c[(c[d>>2]|0)+208>>2]|0)|0;c[(c[d>>2]|0)+208>>2]=k}else if((k|0)==21){k=mk(b)|0;k=nk(k,c[(c[d>>2]|0)+212>>2]|0)|0;c[(c[d>>2]|0)+212>>2]=k}if((FP(b)|0?(h=b+16|0,i=c[h>>2]|0,j=c[i+208>>2]|0,j|0):0)?(j|0)==(c[i+212>>2]|0):0){j=mk(b)|0;k=c[h>>2]|0;c[k+208>>2]=j;c[k+212>>2]=j}}l=m;return}function Rj(a,b){a=a|0;b=b|0;var d=0,e=0;c[46747]=0;d=jC(a)|0;while(1){if(!d)break;if((Yj(d)|0)==(d|0)){e=$j(b,KB(d)|0)|0;c[(c[d+16>>2]|0)+148>>2]=e}d=kC(a,d)|0}d=jC(a)|0;while(1){if(!d)break;b=d+16|0;if(!(c[(c[b>>2]|0)+148>>2]|0)){e=c[(c[(Yj(d)|0)+16>>2]|0)+148>>2]|0;c[(c[b>>2]|0)+148>>2]=e}d=kC(a,d)|0}return}function Sj(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;h=jC(a)|0;while(1){if(!h)break;d=c[(c[h+16>>2]|0)+148>>2]|0;i=XA(a,h)|0;while(1){if(!i)break;do if((ek(i)|0)==0?(j=i+-48|0,k=c[(c[(Yj(c[((c[i>>2]&3|0)==2?i:j)+40>>2]|0)|0)+16>>2]|0)+148>>2]|0,(d|0)!=(k|0)):0){f=c[i>>2]&3;g=i+48|0;e=((f|0)==3?i:g)+40|0;f=c[(c[(c[((f|0)==2?i:j)+40>>2]|0)+16>>2]|0)+212>>2]|0;if(!(fk(i)|0)){if((dk(c[(c[(c[e>>2]|0)+16>>2]|0)+212>>2]|0)|0)==0?(dk(f)|0)==0:0){gk(b,d,k,i);break}hk(b,d,k,i);break}else{f=Yj(c[e>>2]|0)|0;e=c[i>>2]&3;if((f|0)!=(c[(c[(c[(c[(c[((e|0)==3?i:g)+40>>2]|0)+16>>2]|0)+212>>2]|0)+16>>2]|0)+212>>2]|0)?(g=Yj(c[((e|0)==2?i:j)+40>>2]|0)|0,(g|0)!=(c[(c[(c[(c[(c[((c[i>>2]&3|0)==2?i:j)+40>>2]|0)+16>>2]|0)+212>>2]|0)+16>>2]|0)+208>>2]|0)):0)e=k;else{e=d;d=k}gk(b,d,e,i);break}}while(0);i=ZA(a,i)|0}h=kC(a,h)|0}return}function Tj(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;if((FP(a)|0)!=0?(dk(a)|0)!=0:0){g=jC(a)|0;while(1){if(!g)break;if(!(_A(a,g)|0)){f=c[(c[(Yj(g)|0)+16>>2]|0)+148>>2]|0;if(!d)d=$j(b,87252)|0;iB(b,d,f,0,1)|0}if(!(XA(a,g)|0)){f=c[(c[(Yj(g)|0)+16>>2]|0)+148>>2]|0;if(!e)e=$j(b,87257)|0;iB(b,f,e,0,1)|0}g=kC(a,g)|0}if((e|0)!=0&(d|0)!=0){ck(iB(b,d,e,0,1)|0,0,1e3);f=d}else f=d}else f=d;d=OD(a)|0;while(1){if(!d)break;Tj(d,b,f,e);d=PD(d)|0}return}function Uj(b){b=b|0;var d=0,e=0;d=jC(b)|0;while(1){if(!d)break;e=c[d+16>>2]|0;a[e+158>>0]=0;a[e+157>>0]=0;d=kC(b,d)|0}d=jC(b)|0;while(1){if(!d)break;ak(b,d);d=kC(b,d)|0}return}function Vj(a){a=a|0;var b=0,d=0,e=0,f=0;b=jC(a)|0;while(1){if(!b)break;c[(c[b+16>>2]|0)+128>>2]=0;b=kC(a,b)|0}b=0;e=jC(a)|0;while(1){if(!e)break;d=b+1|0;if(!(c[(c[e+16>>2]|0)+128>>2]|0)){_j(a,e,d);b=d}e=kC(a,e)|0}a:do if((b|0)>1){f=$j(a,87246)|0;d=1;e=jC(a)|0;while(1){if(!e)break a;if((c[(c[e+16>>2]|0)+128>>2]|0)==(d|0)){iB(a,f,e,0,1)|0;d=d+1|0}e=kC(a,e)|0}}while(0);return b|0}function Wj(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0;g=jC(a)|0;while(1){if(!g)break;h=g+16|0;f=XA(a,g)|0;while(1){if(!f)break;b=c[h>>2]|0;d=c[b+180>>2]|0;if(!d)b=KK((c[b+184>>2]<<2)+8|0)|0;else b=MK(d,(c[b+184>>2]<<2)+8|0)|0;d=c[h>>2]|0;c[d+180>>2]=b;d=d+184|0;e=c[d>>2]|0;c[d>>2]=e+1;c[b+(e<<2)>>2]=f;e=c[h>>2]|0;c[(c[e+180>>2]|0)+(c[e+184>>2]<<2)>>2]=0;e=f+-48|0;b=c[(c[((c[f>>2]&3|0)==2?f:e)+40>>2]|0)+16>>2]|0;d=c[b+172>>2]|0;if(!d)b=KK((c[b+176>>2]<<2)+8|0)|0;else b=MK(d,(c[b+176>>2]<<2)+8|0)|0;c[(c[(c[((c[f>>2]&3|0)==2?f:e)+40>>2]|0)+16>>2]|0)+172>>2]=b;i=c[(c[((c[f>>2]&3|0)==2?f:e)+40>>2]|0)+16>>2]|0;b=c[i+172>>2]|0;i=i+176|0;d=c[i>>2]|0;c[i>>2]=d+1;c[b+(d<<2)>>2]=f;e=c[(c[((c[f>>2]&3|0)==2?f:e)+40>>2]|0)+16>>2]|0;c[(c[e+172>>2]|0)+(c[e+176>>2]<<2)>>2]=0;f=ZA(a,f)|0}g=kC(a,g)|0}return}function Xj(a,d,f){a=a|0;d=d|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;n=a+16|0;o=c[n>>2]|0;b[o+236>>1]=32767;b[o+238>>1]=-1;a:do if((f|0)>1){h=JK((f<<2)+4|0)|0;g=f+1|0;f=1;while(1){if((f|0)==(g|0)){m=h;o=h;break a}c[h+(f<<2)>>2]=32767;f=f+1|0}}else{m=0;o=0}while(0);i=(m|0)==0;h=jC(a)|0;while(1){if(!h)break;j=c[(c[(c[(Yj(h)|0)+16>>2]|0)+148>>2]|0)+16>>2]|0;k=c[j+232>>2]|0;l=c[h+16>>2]|0;c[l+232>>2]=k;f=c[n>>2]|0;g=f+238|0;if((k|0)>(b[g>>1]|0))b[g>>1]=k;f=f+236|0;if((k|0)<(b[f>>1]|0))b[f>>1]=k;if(!i){j=c[j+128>>2]|0;c[l+128>>2]=j;l=m+(j<<2)|0;j=c[l>>2]|0;c[l>>2]=(j|0)<(k|0)?j:k}h=kC(a,h)|0}j=(m|0)!=0;b:do if(!j){m=b[(c[n>>2]|0)+236>>1]|0;g=m<<16>>16;if(m<<16>>16>0){f=jC(a)|0;while(1){if(!f)break;m=(c[f+16>>2]|0)+232|0;c[m>>2]=(c[m>>2]|0)-g;f=kC(a,f)|0}f=c[n>>2]|0;n=f+236|0;b[n>>1]=(e[n>>1]|0)-g;f=f+238|0;b[f>>1]=(e[f>>1]|0)-g;f=0}else f=0}else{f=jC(a)|0;while(1){if(!f){f=1;break b}l=c[f+16>>2]|0;n=l+232|0;c[n>>2]=(c[n>>2]|0)-(c[m+(c[l+128>>2]<<2)>>2]|0);f=kC(a,f)|0}}while(0);Zj(a,f);i=jC(d)|0;while(1){if(!i)break;g=i+16|0;f=c[g>>2]|0;h=c[f+172>>2]|0;if(h){U1(h);f=c[g>>2]|0}f=c[f+180>>2]|0;if(f|0)U1(f);i=kC(d,i)|0}U1(c[(c[(jC(a)|0)+16>>2]|0)+112>>2]|0);f=jC(a)|0;while(1){if(!f)break;c[(c[f+16>>2]|0)+112>>2]=0;f=kC(a,f)|0}if(j)U1(o);return}function Yj(a){a=a|0;var b=0,d=0,e=0;b=a+16|0;d=(c[b>>2]|0)+152|0;e=c[d>>2]|0;if(e){if((e|0)!=(a|0)){e=Yj(e)|0;c[(c[b>>2]|0)+152>>2]=e;return e|0}}else c[d>>2]=a;return a|0}function Zj(a,d){a=a|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;i=a+16|0;e=1;while(1){f=c[i>>2]|0;if((e|0)>(c[f+180>>2]|0))break;Zj(c[(c[f+184>>2]|0)+(e<<2)>>2]|0,0);e=e+1|0}if((d|0)!=0|(c[f+200>>2]|0)!=0){b[f+236>>1]=32767;b[f+238>>1]=-1;e=0;h=jC(a)|0;while(1){if(!h)break;g=c[(c[h+16>>2]|0)+232>>2]|0;d=c[i>>2]|0;f=d+238|0;if((g|0)>(b[f>>1]|0))b[f>>1]=g;d=d+236|0;if((g|0)<(b[d>>1]|0)){b[d>>1]=g;e=h}h=kC(a,h)|0}c[(c[i>>2]|0)+264>>2]=e}return}function _j(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=(c[b+16>>2]|0)+128|0;a:do if(!(c[e>>2]|0)){c[e>>2]=d;e=XA(a,b)|0;while(1){if(!e)break;_j(a,c[((c[e>>2]&3|0)==2?e:e+-48|0)+40>>2]|0,d);e=ZA(a,e)|0}e=_A(a,b)|0;while(1){if(!e)break a;_j(a,c[((c[e>>2]&3|0)==3?e:e+48|0)+40>>2]|0,d);e=$A(a,e)|0}}while(0);return}function $j(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=tC(a,b,1)|0;b=f+16|0;c[(c[b>>2]|0)+176>>2]=0;e=JK(20)|0;d=c[b>>2]|0;c[d+172>>2]=e;c[d+184>>2]=0;d=JK(20)|0;b=c[b>>2]|0;c[b+180>>2]=d;d=c[46747]|0;e=b+168|0;if(!d){c[e>>2]=0;c[(c[a+16>>2]|0)+192>>2]=f}else{c[e>>2]=d;c[(c[d+16>>2]|0)+164>>2]=f}c[46747]=f;c[b+164>>2]=0;return f|0}function ak(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=d+16|0;e=c[h>>2]|0;f=e+157|0;if(!(a[f>>0]|0)){a[f>>0]=1;a[e+158>>0]=1;d=XA(b,d)|0;while(1){if(!d)break;e=ZA(b,d)|0;f=c[((c[d>>2]&3|0)==2?d:d+-48|0)+40>>2]|0;g=c[f+16>>2]|0;if(a[g+158>>0]|0){bk(b,d);d=e;continue}if(a[g+157>>0]|0){d=e;continue}ak(b,f);d=e}a[(c[h>>2]|0)+158>>0]=0}return}function bk(a,b){a=a|0;b=b|0;var d=0,f=0,g=0;d=c[b>>2]&3;g=b+-48|0;f=b+48|0;d=iB(a,c[((d|0)==2?b:g)+40>>2]|0,c[((d|0)==3?b:f)+40>>2]|0,0,0)|0;if(!d){d=c[b>>2]&3;d=iB(a,c[((d|0)==2?b:g)+40>>2]|0,c[((d|0)==3?b:f)+40>>2]|0,0,1)|0}g=c[b+16>>2]|0;ck(d,e[g+170>>1]|0,c[g+156>>2]|0);wC(a,b)|0;return}function ck(a,d,f){a=a|0;d=d|0;f=f|0;var g=0,h=0;a=c[a+16>>2]|0;g=a+170|0;h=e[g>>1]|0;b[g>>1]=(h|0)>(d|0)?h:d;d=a+156|0;c[d>>2]=(c[d>>2]|0)+f;return}function dk(a){a=a|0;return (eP(QA(a,87262)|0,0)|0)&255|0}function ek(b){b=b|0;var d=0,e=0;d=c[47189]|0;if((((d|0)!=0?(e=RA(b,d)|0,(e|0)!=0):0)?(a[e>>0]|0)!=0:0)?(dP(e)|0)<<24>>24==0:0)b=1;else b=0;return b|0}function fk(a){a=a|0;var b=0,d=0;d=c[a>>2]&3;b=c[(c[(c[((d|0)==3?a:a+48|0)+40>>2]|0)+16>>2]|0)+212>>2]|0;a=c[(c[(c[((d|0)==2?a:a+-48|0)+40>>2]|0)+16>>2]|0)+212>>2]|0;if((b|0)==(a|0))return 1;else{d=ik(b,a)|0;return ((d|0)==(b|0)|(d|0)==(a|0))&1|0}return 0}function gk(a,b,d,f){a=a|0;b=b|0;d=d|0;f=f|0;var g=0,h=0,i=0,j=0;j=l;l=l+16|0;h=j;g=iB(a,b,d,0,0)|0;if(!g){g=iB(a,d,b,0,0)|0;if(!g){g=iB(a,b,d,0,1)|0;if(!g){b=KB(b)|0;f=KB(d)|0;c[h>>2]=b;c[h+4>>2]=f;gA(1,87279,h)|0}else i=4}else i=4}else i=4;if((i|0)==4){i=c[f+16>>2]|0;ck(g,e[i+170>>1]|0,c[i+156>>2]|0)}l=j;return}function hk(a,d,f,g){a=a|0;d=d|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0;m=l;l=l+112|0;j=m;i=m+4|0;h=_A(a,d)|0;while(1){if(!h){k=6;break}n=XA(a,c[((c[h>>2]&3|0)==3?h:h+48|0)+40>>2]|0)|0;if(n|0?(c[((c[n>>2]&3|0)==2?n:n+-48|0)+40>>2]|0)==(f|0):0)break;h=$A(a,h)|0}if((k|0)==6){n=c[46748]|0;c[46748]=n+1;c[j>>2]=n;m4(i,87270,j)|0;i=$j(a,i)|0;n=iB(a,i,d,0,1)|0;i=iB(a,i,f,0,1)|0;f=c[g+16>>2]|0;k=f+156|0;n=(c[n+16>>2]|0)+156|0;c[n>>2]=(c[n>>2]|0)+((c[k>>2]|0)*1e3|0);n=c[i+16>>2]|0;j=n+170|0;b[j>>1]=b[(c[((e[j>>1]|0)>(e[f+170>>1]|0)?i:g)+16>>2]|0)+170>>1]|0;n=n+156|0;c[n>>2]=(c[n>>2]|0)+(c[k>>2]|0)}l=m;return}function ik(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;a:while(1){e=a+16|0;while(1){if((a|0)==(b|0))break a;f=c[e>>2]|0;d=c[b+16>>2]|0;if((c[f+204>>2]|0)>=(c[d+204>>2]|0))break;b=c[d+200>>2]|0}a=c[f+200>>2]|0}return a|0}function jk(a){a=a|0;return (jC(a)|0)==0|0}function kk(a,b){a=a|0;b=b|0;c[(c[a+16>>2]|0)+200>>2]=b;Lj(b,a);Kj(b,a);return}function lk(b){b=b|0;var c=0;b=QA(b,87171)|0;if((b|0)!=0?(a[b>>0]|0)!=0:0)if(s2(b,87181)|0)if(s2(b,87185)|0)if(s2(b,87192)|0)if(s2(b,87196)|0)if(!(s2(b,87176)|0))b=1;else c=8;else b=5;else b=4;else b=3;else b=2;else c=8;if((c|0)==8)b=6;return b|0}function mk(a){a=a|0;var b=0,c=0;c=jC(a)|0;a:do if(!c)b=0;else{b=Yj(c)|0;while(1){c=kC(a,c)|0;if(!c)break a;nk(b,c)|0}}while(0);return b|0}function nk(a,b){a=a|0;b=b|0;if(b){a=Yj(a)|0;c[(c[(Yj(b)|0)+16>>2]|0)+152>>2]=a}return a|0}function ok(a,b,d){a=a|0;b=b|0;d=d|0;TC(b,87230,c[d>>2]|0,1)|0;return}function pk(a,b,d){a=a|0;b=b|0;d=d|0;TC(b,87397,c[d+4>>2]|0,1)|0;return}function qk(a,b,d){a=a|0;b=b|0;d=d|0;TC(b,87382,c[d+8>>2]|0,1)|0;return}function rk(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;p=l;l=l+240|0;m=p+120|0;n=p;c[47193]=GA(b,2,87412,0)|0;k=GA(b,2,87421,0)|0;c[47194]=k;a:do if((k|0)!=0|(c[47193]|0)!=0){k=jC(b)|0;while(1){if(!k)break a;j=0;d=0;i=aB(b,k)|0;while(1){if(!i){f=0;break}e=c[i>>2]|0;g=e&3;f=c[((g|0)==2?i:i+-48|0)+40>>2]|0;h=i+48|0;b:do if((f|0)!=(c[((g|0)==3?i:h)+40>>2]|0)){g=c[47193]|0;do if((f|0)==(k|0)&(g|0)!=0){f=RA(i,g)|0;if(!(a[f>>0]|0)){e=c[i>>2]|0;break}else{e=j;d=sk(m,d,k,i,f)|0;break b}}while(0);f=c[47194]|0;if((f|0?(c[((e&3|0)==3?i:h)+40>>2]|0)==(k|0):0)?(o=RA(i,f)|0,(a[o>>0]|0)!=0):0)e=sk(n,j,k,i,o)|0;else e=j}else e=j;while(0);j=e;i=bB(b,i,k)|0}while(1){if((f|0)>=(d|0)){e=0;break}e=m+(f*24|0)+4|0;if((c[m+(f*24|0)+8>>2]|0)>1)tk(k,e);e=c[e>>2]|0;if(e|0)U1(e);f=f+1|0}while(1){if((e|0)>=(j|0))break;d=n+(e*24|0)+4|0;if((c[n+(e*24|0)+8>>2]|0)>1)tk(k,d);d=c[d>>2]|0;if(d|0)U1(d);e=e+1|0}k=kC(b,k)|0}}while(0);l=p;return}function sk(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var i=0.0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;p=l;l=l+16|0;k=p;m=p+12|0;n=p+8|0;o=0;while(1){if((o|0)>=(d|0)){j=10;break}j=c[b+(o*24|0)>>2]|0;if((a[j>>0]|0)==(a[g>>0]|0)?(s2(j,g)|0)==0:0){j=5;break}o=o+1|0}do if((j|0)==5){k=b+(o*24|0)+4|0;j=c[k>>2]|0;if(!j){j=b+(o*24|0)+8|0;g=j;j=KK((c[j>>2]<<2)+8|0)|0}else{q=b+(o*24|0)+8|0;g=q;j=MK(j,(c[q>>2]<<2)+8|0)|0}c[k>>2]=j;r=c[g>>2]|0;q=r+1|0;c[g>>2]=q;c[j+(r<<2)>>2]=f;c[(c[k>>2]|0)+(q<<2)>>2]=0;j=13}else if((j|0)==10)if((d|0)>4){r=KB(e)|0;c[k>>2]=5;c[k+4>>2]=r;gA(1,87430,k)|0;break}else{s=b+(o*24|0)+8|0;c[s>>2]=0;k=JK(8)|0;r=b+(o*24|0)+4|0;c[r>>2]=k;q=c[s>>2]|0;j=q+1|0;c[s>>2]=j;c[k+(q<<2)>>2]=f;c[(c[r>>2]|0)+(j<<2)>>2]=0;c[b+(o*24|0)>>2]=g;c[b+(o*24|0)+12>>2]=0;h[b+(o*24|0)+16>>3]=0.0;d=d+1|0;j=13;break}while(0);if((j|0)==13){HH(f,m,n);j=(c[((c[f>>2]&3|0)==2?f:f+-48|0)+40>>2]|0)==(e|0)?c[n>>2]|0:c[m>>2]|0;if(j){r=b+(o*24|0)+12|0;s=c[r>>2]|0;c[r>>2]=s+1;if(!s)i=+LH(f,j);else i=0.0;h[b+(o*24|0)+16>>3]=i}}l=p;return d|0}function tk(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,i=0,j=0.0,k=0.0,m=0.0,n=0,o=0.0,p=0.0,q=0.0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0.0;x=l;l=l+80|0;t=x+68|0;u=x+64|0;r=x;v=d+4|0;n=c[v>>2]|0;w=b+16|0;i=0;p=0.0;q=0.0;while(1){if((i|0)>=(n|0))break;f=c[(c[d>>2]|0)+(i<<2)>>2]|0;g=c[f>>2]&3;e=c[((g|0)==2?f:f+-48|0)+40>>2]|0;if((e|0)==(b|0))e=c[((g|0)==3?f:f+48|0)+40>>2]|0;g=c[e+16>>2]|0;s=c[w>>2]|0;k=+h[g+16>>3]-+h[s+16>>3];m=+h[g+24>>3]-+h[s+24>>3];o=+L2(k,m);i=i+1|0;p=k/o+p;q=m/o+q}j=+L2(p,q);s=c[w>>2]|0;k=+h[s+16>>3];m=+h[s+24>>3];y=+h[s+96>>3]+ +h[s+88>>3];o=+h[s+80>>3];s=y>o+ +(c[(c[(xC(b)|0)+16>>2]|0)+252>>2]|0);e=c[w>>2]|0;if(s)o=+h[e+96>>3]+ +h[e+88>>3];else{o=+h[e+80>>3];o=o+ +(c[(c[(xC(b)|0)+16>>2]|0)+252>>2]|0);e=c[w>>2]|0}y=+h[e+16>>3]+o*(p/j);j=+h[e+24>>3]+o*(q/j);h[r>>3]=k;n=r+8|0;h[n>>3]=m;h[r+16>>3]=(y+k*2.0)*.3333333333333333;h[r+24>>3]=(j+m*2.0)*.3333333333333333;h[r+32>>3]=(y*2.0+k)*.3333333333333333;h[r+40>>3]=(j*2.0+m)*.3333333333333333;h[r+48>>3]=y;h[r+56>>3]=j;aO(b,r);s=c[w>>2]|0;j=+h[r>>3]-+h[s+16>>3];k=+h[n>>3]-+h[s+24>>3];j=+(~~(j+(j>=0.0?.5:-.5))|0);k=+(~~(k+(k>=0.0?.5:-.5))|0);y=+h[s+88>>3];s=~~((y+j)*256.0/(+h[s+96>>3]+y))&255;r=0;while(1){if((r|0)>=(c[v>>2]|0))break;n=c[(c[d>>2]|0)+(r<<2)>>2]|0;HH(n,t,u);while(1){if(!n)break;else g=n;while(1){if(!g){i=n;break}e=c[g>>2]|0;i=g+-48|0;if((c[((e&3|0)==2?g:i)+40>>2]|0)==(b|0)){e=c[g+16>>2]|0;h[e+56>>3]=j;h[e+64>>3]=k;h[e+72>>3]=0.0;c[e+80>>2]=0;a[e+84>>0]=1;a[e+85>>0]=0;a[e+86>>0]=0;a[e+87>>0]=0;a[e+88>>0]=s;a[e+89>>0]=0;c[e+92>>2]=0;e=c[g>>2]|0}f=g+16|0;if((c[((e&3|0)==3?g:g+48|0)+40>>2]|0)==(b|0)){e=c[f>>2]|0;h[e+16>>3]=j;h[e+24>>3]=k;h[e+32>>3]=0.0;c[e+40>>2]=0;a[e+44>>0]=1;a[e+45>>0]=0;a[e+46>>0]=0;a[e+47>>0]=0;a[e+48>>0]=s;a[e+49>>0]=0;c[e+52>>2]=0}if((a[(c[f>>2]|0)+112>>0]|0)!=1){g=0;continue}e=c[(c[((c[g>>2]&3|0)==2?g:i)+40>>2]|0)+16>>2]|0;if((a[e+156>>0]|0)!=1){g=0;continue}if((c[e+184>>2]|0)!=1){g=0;continue}g=c[c[e+180>>2]>>2]|0}while(1){if(!i)break;e=c[i>>2]|0;if((c[((e&3|0)==2?i:i+-48|0)+40>>2]|0)==(b|0)){e=c[i+16>>2]|0;h[e+56>>3]=j;h[e+64>>3]=k;h[e+72>>3]=0.0;c[e+80>>2]=0;a[e+84>>0]=1;a[e+85>>0]=0;a[e+86>>0]=0;a[e+87>>0]=0;a[e+88>>0]=s;a[e+89>>0]=0;c[e+92>>2]=0;e=c[i>>2]|0}f=i+48|0;g=i+16|0;if((c[((e&3|0)==3?i:f)+40>>2]|0)==(b|0)){e=c[g>>2]|0;h[e+16>>3]=j;h[e+24>>3]=k;h[e+32>>3]=0.0;c[e+40>>2]=0;a[e+44>>0]=1;a[e+45>>0]=0;a[e+46>>0]=0;a[e+47>>0]=0;a[e+48>>0]=s;a[e+49>>0]=0;c[e+52>>2]=0}if((a[(c[g>>2]|0)+112>>0]|0)!=1){i=0;continue}e=c[(c[((c[i>>2]&3|0)==3?i:f)+40>>2]|0)+16>>2]|0;if((a[e+156>>0]|0)!=1){i=0;continue}if((c[e+176>>2]|0)!=1){i=0;continue}i=c[c[e+172>>2]>>2]|0}n=c[(c[n+16>>2]|0)+172>>2]|0}r=r+1|0}a[(c[w>>2]|0)+145>>0]=1;l=x;return}function uk(a){a=a|0;var b=0,d=0,e=0;ih(a);b=c[a>>2]&3;d=a+-48|0;e=a+48|0;b=dh(c[((b|0)==2?a:d)+40>>2]|0,c[((b|0)==3?a:e)+40>>2]|0)|0;if(!b){b=c[a>>2]&3;nh(c[((b|0)==2?a:d)+40>>2]|0,c[((b|0)==3?a:e)+40>>2]|0,a)|0}else vh(a,b);return}function vk(b){b=b|0;var d=0,e=0,f=0,g=0;f=b+16|0;e=0;while(1){b=c[f>>2]|0;if((e|0)>=(c[b+220>>2]|0))break;d=c[(c[b+216>>2]|0)+(e<<2)>>2]|0;c[b+192>>2]=d;b=d;d=b;while(1){if(!d)break;g=c[d+16>>2]|0;a[g+157>>0]=0;d=c[g+164>>2]|0}while(1){if(!b)break;wk(b);b=c[(c[b+16>>2]|0)+164>>2]|0}e=e+1|0}return}function wk(b){b=b|0;var d=0,e=0,f=0,g=0;g=b+16|0;d=c[g>>2]|0;b=d+157|0;if(!(a[b>>0]|0)){a[b>>0]=1;a[d+158>>0]=1;b=0;while(1){f=c[(c[d+180>>2]|0)+(b<<2)>>2]|0;if(!f)break;d=c[((c[f>>2]&3|0)==2?f:f+-48|0)+40>>2]|0;e=c[d+16>>2]|0;if(!(a[e+158>>0]|0)){if(!(a[e+157>>0]|0))wk(d)}else{uk(f);b=b+-1|0}b=b+1|0;d=c[g>>2]|0}a[d+158>>0]=0}return}function xk(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;e=jC(a)|0;b=0;while(1){if(!e)break;d=XA(a,e)|0;while(1){if(!d)break;g=c[d>>2]&3;h=c[(c[(c[((g|0)==2?d:d+-48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0;g=c[(c[(c[((g|0)==3?d:d+48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0;f=h-g|0;d=ZA(a,d)|0;b=((h|0)==(g|0)?0:((f|0)>-1?f:0-f|0)+-1|0)+b|0}e=kC(a,e)|0}return b|0}function yk(b){b=b|0;var d=0,e=0,f=0,g=0;e=jC(b)|0;while(1){if(!e)break;g=c[e+16>>2]|0;f=c[g+176>>2]|0;g=g+172|0;d=0;while(1){if((d|0)>=(f|0))break;a[(c[(c[(c[g>>2]|0)+(d<<2)>>2]|0)+16>>2]|0)+112>>0]=0;d=d+1|0}e=kC(b,e)|0}return}function zk(a,b){a=a|0;b=b|0;var d=0,e=0.0,f=0.0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;q=l;l=l+16|0;o=q;j=c[b+24>>2]|0;Ak(a);k=(j|0)==-1;m=b+8|0;i=k^1;n=c[15712]|0;f=1797693134862315708145274.0e284;g=0;while(1){if(!(k|(g|0)<(j|0)))break;d=jC(a)|0;while(1){if(!d)break;c[(c[d+16>>2]|0)+232>>2]=0;d=kC(a,d)|0}wj(a);e=+Bk(a);h[m>>3]=e;if(0){h[o>>3]=e;w4(n,87482,o)|0;e=+h[m>>3]}if(!(!(e<=+h[b>>3])&(!(f<=e)|i))){p=9;break}Ck(a);f=e;g=g+1|0}if((p|0)==9){p=b+20|0;c[b+16>>2]=c[p>>2];c[p>>2]=g}wj(a);Dk(a);Ek();h[m>>3]=+Bk(a);l=q;return}function Ak(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,i=0,j=0,k=0,l=0.0,m=0.0,n=0;c[46752]=KK((tB(a)|0)*24|0)|0;c[46751]=0;b=jC(a)|0;while(1){if(!b)break;c[(c[b+16>>2]|0)+120>>2]=-1;b=kC(a,b)|0}i=jC(a)|0;while(1){if(!i)break;j=i+16|0;do if(!(c[(c[j>>2]|0)+216>>2]|0)){f=JK(4)|0;g=c[46752]|0;k=c[46751]|0;c[g+(k*24|0)>>2]=f;c[f>>2]=i;c[g+(k*24|0)+4>>2]=1;j=c[j>>2]|0;h[g+(k*24|0)+8>>3]=+h[j+32>>3];h[g+(k*24|0)+16>>3]=+h[j+40>>3];c[j+120>>2]=k;c[46751]=k+1}else{g=fP(i)|0;k=g+16|0;b=c[k>>2]|0;d=c[b+120>>2]|0;if((d|0)>-1){g=c[46752]|0;f=c[g+(d*24|0)>>2]|0;e=g+(d*24|0)+4|0;k=c[e>>2]|0;c[e>>2]=k+1;c[f+(k<<2)>>2]=i;k=c[j>>2]|0;j=g+(d*24|0)+8|0;h[j>>3]=+h[j>>3]+ +h[k+32>>3];j=g+(d*24|0)+16|0;l=+h[j>>3];m=+h[k+40>>3];h[j>>3]=l>2]=d;break}d=JK(c[b+216>>2]<<2)|0;e=c[46752]|0;f=c[46751]|0;b=e+(f*24|0)|0;c[b>>2]=d;c[d>>2]=g;if((g|0)==(i|0)){h[e+(f*24|0)+8>>3]=+h[(c[k>>2]|0)+32>>3];d=1;b=i}else{c[(c[b>>2]|0)+4>>2]=i;n=c[k>>2]|0;b=c[j>>2]|0;h[e+(f*24|0)+8>>3]=+h[b+32>>3]+ +h[n+32>>3];d=2;b=+h[n+40>>3]<+h[b+40>>3]?i:g}c[e+(f*24|0)+4>>2]=d;h[e+(f*24|0)+16>>3]=+h[(c[b+16>>2]|0)+40>>3];c[(c[k>>2]|0)+120>>2]=f;c[(c[j>>2]|0)+120>>2]=f;c[46751]=f+1}while(0);i=kC(a,i)|0}return}function Bk(a){a=a|0;var b=0.0,d=0.0,e=0,f=0,g=0,i=0.0,j=0.0;Dk(a);g=c[46749]|0;e=c[a+16>>2]|0;b=+(O(c[e+252>>2]|0,g+-1|0)|0);f=c[46750]|0;e=e+248|0;a=0;d=0.0;while(1){if((a|0)>=(g|0))break;i=+h[f+(a*40|0)+24>>3]+ +(O(c[e>>2]|0,c[f+(a*40|0)+16>>2]|0)|0);j=+h[f+(a*40|0)+32>>3]+b;a=a+1|0;b=j;d=d=(tB(a)|0))break;c[(c[46753]|0)+(b<<2)>>2]=b;b=b+1|0}Dk(a);Fk(a);Gk(a);return}function Dk(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,i=0,j=0.0,k=0,l=0;c[46749]=0;b=c[46750]|0;if(b|0){e=0;while(1){if((e|0)>=(c[46751]|0))break;d=c[b+(e*40|0)+4>>2]|0;if(d){U1(d);b=c[46750]|0}d=c[b+(e*40|0)+8>>2]|0;if(d){U1(d);b=c[46750]|0}e=e+1|0}U1(b)}c[46750]=JK((c[46751]|0)*40|0)|0;b=0;while(1){d=c[46751]|0;if((b|0)>=(d|0))break;k=JK(d<<2)|0;c[(c[46750]|0)+(b*40|0)+4>>2]=k;k=JK(c[46751]<<2)|0;l=c[46750]|0;c[l+(b*40|0)+8>>2]=k;c[l+(b*40|0)>>2]=b;c[l+(b*40|0)+12>>2]=0;c[l+(b*40|0)+16>>2]=0;l=l+(b*40|0)+24|0;c[l>>2]=0;c[l+4>>2]=0;c[l+8>>2]=0;c[l+12>>2]=0;b=b+1|0}e=jC(a)|0;while(1){if(!e)break;d=XA(a,e)|0;while(1){if(!d)break;i=c[d>>2]|0;f=d+-48|0;g=c[46750]|0;b=c[(c[(c[((i&3|0)==3?d:d+48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0;while(1){b=b+1|0;if((b|0)>=(c[(c[(c[((i&3|0)==2?d:f)+40>>2]|0)+16>>2]|0)+232>>2]|0))break;i=g+(b*40|0)+16|0;c[i>>2]=(c[i>>2]|0)+1;i=c[d>>2]|0}d=ZA(a,d)|0}e=kC(a,e)|0}i=c[46751]|0;k=c[46752]|0;l=c[46750]|0;d=a+16|0;b=0;while(1){if((b|0)>=(i|0))break;e=(c[c[k+(b*24|0)>>2]>>2]|0)+16|0;f=c[(c[e>>2]|0)+232>>2]|0;if((f|0)>=(c[46749]|0))c[46749]=f+1;g=l+(f*40|0)+24|0;j=+h[g>>3];h[g>>3]=j+ +h[k+(b*24|0)+8>>3]*72.0+(j>0.0?+(c[(c[d>>2]|0)+248>>2]|0):0.0);g=l+(f*40|0)+32|0;j=+h[k+(b*24|0)+16>>3]*72.0;if(+h[g>>3]>3]=j;c[(c[l+(f*40|0)+4>>2]|0)+(c[l+(f*40|0)+12>>2]<<2)>>2]=k+(b*24|0);a=l+((c[(c[e>>2]|0)+232>>2]|0)*40|0)+12|0;c[a>>2]=(c[a>>2]|0)+1;b=b+1|0}return}function Ek(){var a=0,b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;k=c[46749]|0;l=c[46750]|0;j=0;b=0;a=0;while(1){if((j|0)>=(k|0))break;d=l+(j*40|0)|0;i=c[l+(j*40|0)+12>>2]|0;e=(b|0)==0;a:do if(i)if(!e){if((c[d>>2]|0)>(a|0)){f=l+(j*40|0)+4|0;d=0;while(1){if((d|0)>=(i|0))break a;g=c[(c[f>>2]|0)+(d<<2)>>2]|0;h=c[g+4>>2]|0;e=0;while(1){if((e|0)>=(h|0))break;m=(c[(c[(c[g>>2]|0)+(e<<2)>>2]|0)+16>>2]|0)+232|0;c[m>>2]=(c[m>>2]|0)-b;e=e+1|0}d=d+1|0}}}else b=0;else{if(e)a=c[d>>2]|0;b=b+1|0}while(0);j=j+1|0}return}function Fk(a){a=a|0;var b=0;b=c[46753]|0;o4(b,tB(a)|0,4,63);return}function Gk(b){b=b|0;var d=0.0,e=0,f=0,g=0,i=0,j=0,k=0,l=0,m=0.0,n=0,o=0,p=0,q=0,r=0.0,s=0;j=c[46749]|0;k=c[46750]|0;g=c[46753]|0;i=0;while(1){if((i|0)>=(j|0)){e=0;d=0.0;break}e=c[g+(i<<2)>>2]|0;f=i+1|0;if((c[k+(e*40|0)+12>>2]|0)<2)i=f;else{l=4;break}}if((l|0)==4)if((j|0)>(f|0))d=+h[k+((c[g+(f<<2)>>2]|0)*40|0)+24>>3];else d=0.0;a:do if((i|0)!=(j|0)){o4(c[k+(e*40|0)+4>>2]|0,c[k+(e*40|0)+12>>2]|0,4,64);g=c[46750]|0;r=+h[g+(e*40|0)+24>>3];r=!(d<=r*.25)&!(d>=r*.75)?d:r*.5;s=c[g+(e*40|0)+12>>2]|0;q=b+16|0;n=0;o=0;d=0.0;f=0;p=0;while(1){if((p|0)>=(f+s|0))break a;do if(!(c[(c[g+(e*40|0)+8>>2]|0)+(p<<2)>>2]|0)){l=c[(c[g+(e*40|0)+4>>2]|0)+(p<<2)>>2]|0;b=l+8|0;m=+h[b>>3]*72.0+d+(d>0.0?+(c[(c[q>>2]|0)+248>>2]|0):0.0);i=(o|0)!=0;if(!(i&!(m<=r))){j=i?n:l;i=i?o:1;d=m;break}j=n+4|0;k=l+4|0;i=0;while(1){if((i|0)<(c[j>>2]|0))g=0;else break;while(1){if((g|0)>=(c[k>>2]|0))break;a[(c[(nh(c[(c[n>>2]|0)+(i<<2)>>2]|0,c[(c[l>>2]|0)+(g<<2)>>2]|0,0)|0)+16>>2]|0)+112>>0]=1;g=g+1|0}i=i+1|0}g=c[46750]|0;c[(c[g+(e*40|0)+8>>2]|0)+(p<<2)>>2]=1;j=g+(e*40|0)+12|0;c[j>>2]=(c[j>>2]|0)+-1;j=g+(e*40|0)+16|0;c[j>>2]=(c[j>>2]|0)+1;j=g+(e*40|0)+24|0;h[j>>3]=+h[b>>3]*-72.0-+(c[(c[q>>2]|0)+248>>2]|0)+ +h[j>>3];j=n;i=o}else{j=n;i=o;f=f+1|0}while(0);n=j;o=i;p=p+1|0}}while(0);return}function Hk(a,b){a=a|0;b=b|0;a=Ik(c[a>>2]|0)|0;b=Ik(c[b>>2]|0)|0;return ((b|0)<(a|0)&1)-((b|0)>(a|0)&1)|0}function Ik(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;f=a+4|0;d=0;b=0;while(1){if((d|0)>=(c[f>>2]|0))break;e=c[(c[a>>2]|0)+(d<<2)>>2]|0;g=xC(e)|0;e=XA(g,e)|0;while(1){if(!e)break;e=ZA(g,e)|0;b=b+1|0}d=d+1|0}return b|0}function Jk(a,b){a=a|0;b=b|0;var d=0.0,e=0.0,f=0;f=c[46750]|0;e=+h[f+((c[b>>2]|0)*40|0)+24>>3];d=+h[f+((c[a>>2]|0)*40|0)+24>>3];return (e>d&1)-(e>2]|0)+216>>2]=0;b=kC(a,b)|0}return}function Lk(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;g=l;l=l+32|0;f=g+16|0;e=g+8|0;d=g+20|0;c[d>>2]=5;a=QA(a,99605)|0;if(a|0?(c[e>>2]=g,c[e+4>>2]=d,(b5(a,87497,e)|0)>=1):0)gA(0,87504,f)|0;c[b+24>>2]=0;c[b+32>>2]=0;l=g;return 0}function Mk(b){b=b|0;var d=0,e=0;d=c[47189]|0;if((((d|0)!=0?(e=RA(b,d)|0,(e|0)!=0):0)?(a[e>>0]|0)!=0:0)?(dP(e)|0)<<24>>24==0:0)b=1;else b=0;return b|0}function Nk(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0;gl(a);b=jC(a)|0;while(1){if(!b)break;d=XA(a,b)|0;while(1){if(!d)break;do if(((c[(c[d+16>>2]|0)+172>>2]|0)==0?(Mk(d)|0)==0:0)?(e=d+48|0,f=fP(c[((c[d>>2]&3|0)==3?d:e)+40>>2]|0)|0,g=d+-48|0,h=fP(c[((c[d>>2]&3|0)==2?d:g)+40>>2]|0)|0,(f|0)!=(h|0)):0){if((c[(c[f+16>>2]|0)+212>>2]|0)==0?(c[(c[h+16>>2]|0)+212>>2]|0)==0:0){i=dh(f,h)|0;if(!i){nh(f,h,d)|0;break}else{vh(d,i);break}}i=c[d>>2]&3;Ok(a,c[((i|0)==3?d:e)+40>>2]|0,c[((i|0)==2?d:g)+40>>2]|0,d)}while(0);d=ZA(a,d)|0}b=kC(a,b)|0}return}function Ok(b,d,f,g){b=b|0;d=d|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;j=c[g>>2]&3;h=c[(c[((j|0)==3?g:g+48|0)+40>>2]|0)+16>>2]|0;i=c[h+212>>2]|0;if(!i)k=0;else k=(c[h+232>>2]|0)-(c[(c[(c[(c[i+16>>2]|0)+264>>2]|0)+16>>2]|0)+232>>2]|0)|0;h=c[(c[((j|0)==2?g:g+-48|0)+40>>2]|0)+16>>2]|0;i=c[h+212>>2]|0;if(!i)h=0;else h=(c[(c[(c[(c[i+16>>2]|0)+264>>2]|0)+16>>2]|0)+232>>2]|0)-(c[h+232>>2]|0)|0;j=g+16|0;k=h+k+(e[(c[j>>2]|0)+170>>1]|0)|0;b=sh(b)|0;a[(c[b+16>>2]|0)+156>>0]=2;i=fP(d)|0;d=fP(f)|0;f=Zi(b,i,(k|0)>0?0.0:+(0-k|0),(c[(c[j>>2]|0)+156>>2]|0)*10|0)|0;c[(c[(Zi(b,d,+(((k|0)>0?k:0)|0),c[(c[j>>2]|0)+156>>2]|0)|0)+16>>2]|0)+116>>2]=g;c[(c[f+16>>2]|0)+116>>2]=g;return}function Pk(a,d,f,g){a=a|0;d=d|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;j=c[d>>2]&3;i=(j|0)==3?d:d+48|0;j=(j|0)==2?d:d+-48|0;j=c[(c[(c[((c[(c[(c[i+40>>2]|0)+16>>2]|0)+232>>2]|0)>(c[(c[(c[j+40>>2]|0)+16>>2]|0)+232>>2]|0)?i:j)+40>>2]|0)+16>>2]|0)+232>>2]|0;i=d+16|0;d=(c[i>>2]|0)+172|0;if(c[d>>2]|0)qa(87593,87615,148,87624);c[d>>2]=f;h=(g|0)==0;do{d=c[i>>2]|0;if(h)g=c[f+16>>2]|0;else{g=c[f+16>>2]|0;k=g+168|0;b[k>>1]=(e[k>>1]|0)+(e[d+168>>1]|0)}k=g+154|0;b[k>>1]=(e[k>>1]|0)+(e[d+154>>1]|0);g=g+156|0;c[g>>2]=(c[g>>2]|0)+(c[d+156>>2]|0);d=f+-48|0;g=c[((c[f>>2]&3|0)==2?f:d)+40>>2]|0;if((c[(c[g+16>>2]|0)+232>>2]|0)==(j|0))break;Qk(a,g);f=c[c[(c[(c[((c[f>>2]&3|0)==2?f:d)+40>>2]|0)+16>>2]|0)+180>>2]>>2]|0}while((f|0)!=0);return}function Qk(a,b){a=a|0;b=b|0;var d=0.0;d=+((c[(c[a+16>>2]|0)+248>>2]|0)/2|0|0);b=c[b+16>>2]|0;a=b+88|0;h[a>>3]=+h[a>>3]+d;b=b+96|0;h[b>>3]=+h[b>>3]+d;return}function Rk(a,b){a=a|0;b=b|0;var d=0,e=0;if(((((a|0)!=0&(b|0)!=0?(e=c[a>>2]&3,d=c[b>>2]&3,(c[((e|0)==3?a:a+48|0)+40>>2]|0)==(c[((d|0)==3?b:b+48|0)+40>>2]|0)):0)?(c[((e|0)==2?a:a+-48|0)+40>>2]|0)==(c[((d|0)==2?b:b+-48|0)+40>>2]|0):0)?(c[(c[a+16>>2]|0)+96>>2]|0)==(c[(c[b+16>>2]|0)+96>>2]|0):0)?(uj(a,b)|0)!=0:0)a=1;else a=0;return a|0}function Sk(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;r=b+16|0;d=c[r>>2]|0;c[d+192>>2]=0;c[d+232>>2]=0;gl(b);d=1;while(1){e=c[r>>2]|0;if((d|0)>(c[e+180>>2]|0))break;hl(b,c[(c[e+184>>2]|0)+(d<<2)>>2]|0);d=d+1|0}h=jC(b)|0;while(1){if(!h)break;g=XA(b,h)|0;while(1){if(!g)break;d=c[g>>2]|0;e=(c[(c[((d&3|0)==2?g:g+-48|0)+40>>2]|0)+16>>2]|0)+160|0;f=a[e>>0]|0;if(f<<24>>24<3){a[e>>0]=f+1<<24>>24;d=c[g>>2]|0}d=(c[(c[((d&3|0)==3?g:g+48|0)+40>>2]|0)+16>>2]|0)+160|0;e=a[d>>0]|0;if(e<<24>>24<3)a[d>>0]=e+1<<24>>24;g=ZA(b,g)|0}h=kC(b,h)|0}m=jC(b)|0;while(1){if(!m)break;if((c[(c[m+16>>2]|0)+212>>2]|0)==0?(m|0)==(fP(m)|0):0){oh(b,m);l=(c[r>>2]|0)+232|0;c[l>>2]=(c[l>>2]|0)+1}d=0;l=XA(b,m)|0;while(1){if(!l)break;k=l+16|0;h=c[k>>2]|0;a:do if(!(c[h+172>>2]|0)){if(Tk(l)|0){if(!(Rk(d,l)|0)){Uk(b,l);d=l;break}e=c[(c[d+16>>2]|0)+172>>2]|0;if(e|0){Pk(b,l,e,0);jh(l);break}k=c[l>>2]&3;if((c[(c[(c[((k|0)==3?l:l+48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)!=(c[(c[(c[((k|0)==2?l:l+-48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0))break;vh(l,d);jh(l);break}if(d){i=c[l>>2]&3;e=l+48|0;f=c[((i|0)==3?l:e)+40>>2]|0;g=c[d>>2]&3;if((f|0)==(c[((g|0)==3?d:d+48|0)+40>>2]|0)?(n=c[((i|0)==2?l:l+-48|0)+40>>2]|0,(n|0)==(c[((g|0)==2?d:d+-48|0)+40>>2]|0)):0){if((c[(c[f+16>>2]|0)+232>>2]|0)==(c[(c[n+16>>2]|0)+232>>2]|0)){vh(l,d);jh(l);break}if(((c[h+96>>2]|0)==0?(o=d+16|0,(c[(c[o>>2]|0)+96>>2]|0)==0):0)?(uj(l,d)|0)!=0:0)if(!(a[194954]|0)){Pk(b,l,c[(c[o>>2]|0)+172>>2]|0,1);jh(l);break}else{a[(c[k>>2]|0)+112>>0]=6;break}else i=e}else i=e}else i=l+48|0;h=c[l>>2]&3;e=c[((h|0)==3?l:i)+40>>2]|0;j=l+-48|0;if((e|0)==(c[((h|0)==2?l:j)+40>>2]|0)){jh(l);d=l;break}e=fP(e)|0;f=fP(c[((c[l>>2]&3|0)==2?l:j)+40>>2]|0)|0;h=c[l>>2]&3;if((c[((h|0)==3?l:i)+40>>2]|0)==(e|0)?(c[((h|0)==2?l:j)+40>>2]|0)==(f|0):0){g=c[(c[e+16>>2]|0)+232>>2]|0;h=c[(c[f+16>>2]|0)+232>>2]|0;if((g|0)==(h|0)){th(b,l);d=l;break}if((h|0)>(g|0)){Vk(b,e,f,l);d=l;break}e=iB(b,f,e,0,0)|0;do if(e|0?(p=c[e>>2]&3,q=c[((p|0)==2?e:e+-48|0)+40>>2]|0,(q|0)!=(c[((c[l>>2]&3|0)==2?l:j)+40>>2]|0)):0){f=e+16|0;if(!(c[(c[f>>2]|0)+172>>2]|0))Vk(b,c[((p|0)==3?e:e+48|0)+40>>2]|0,q,e);if((c[(c[k>>2]|0)+96>>2]|0)==0?(c[(c[f>>2]|0)+96>>2]|0)==0:0){if(!(uj(l,e)|0))break;if(!(a[194954]|0)){jh(l);Pk(b,l,c[(c[f>>2]|0)+172>>2]|0,1);break a}else{a[(c[k>>2]|0)+112>>0]=6;a[(c[f>>2]|0)+153>>0]=1;break a}}}while(0);d=c[l>>2]&3;Vk(b,c[((d|0)==2?l:j)+40>>2]|0,c[((d|0)==3?l:i)+40>>2]|0,l);d=l}}else d=l;while(0);l=ZA(b,l)|0}m=kC(b,m)|0}if((gg(b)|0)!=(b|0)){d=c[(c[r>>2]|0)+216>>2]|0;if(!d)d=KK(4)|0;else d=MK(d,4)|0;r=c[r>>2]|0;c[r+216>>2]=d;c[d>>2]=c[r+192>>2]}return}function Tk(b){b=b|0;var d=0;d=c[b>>2]&3;if((a[(c[(c[((d|0)==3?b:b+48|0)+40>>2]|0)+16>>2]|0)+159>>0]|0)==7)b=1;else b=(a[(c[(c[((d|0)==2?b:b+-48|0)+40>>2]|0)+16>>2]|0)+159>>0]|0)==7&1;return b|0}function Uk(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;f=Yk(c[((c[d>>2]&3|0)==3?d:d+48|0)+40>>2]|0)|0;g=Yk(c[((c[d>>2]&3|0)==2?d:d+-48|0)+40>>2]|0)|0;i=(c[(c[f+16>>2]|0)+232>>2]|0)>(c[(c[g+16>>2]|0)+232>>2]|0);e=i?f:g;f=i?g:f;g=f+16|0;i=e+16|0;a:do if((c[(c[g>>2]|0)+212>>2]|0)!=(c[(c[i>>2]|0)+212>>2]|0)){h=dh(f,e)|0;if(h|0){Pk(b,d,h,1);break}if((c[(c[g>>2]|0)+232>>2]|0)!=(c[(c[i>>2]|0)+232>>2]|0)){Vk(b,f,e,d);e=(c[d+16>>2]|0)+172|0;while(1){e=c[e>>2]|0;if(!e)break a;f=e+-48|0;if((c[(c[(c[((c[e>>2]&3|0)==2?e:f)+40>>2]|0)+16>>2]|0)+232>>2]|0)>(c[(c[i>>2]|0)+232>>2]|0))break a;a[(c[e+16>>2]|0)+112>>0]=5;e=c[(c[(c[((c[e>>2]&3|0)==2?e:f)+40>>2]|0)+16>>2]|0)+180>>2]|0}}}while(0);return}function Vk(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;k=e+16|0;f=c[k>>2]|0;if(!(c[f+96>>2]|0))j=-1;else j=((c[(c[d+16>>2]|0)+232>>2]|0)+(c[(c[b+16>>2]|0)+232>>2]|0)|0)/2|0;if(c[f+172>>2]|0)qa(87636,87615,89,87661);i=d+16|0;h=c[(c[b+16>>2]|0)+232>>2]|0;while(1){g=h+1|0;f=c[(c[i>>2]|0)+232>>2]|0;if((h|0)>=(f|0))break;if((g|0)<(f|0)){if((g|0)==(j|0))f=Wk(a,e)|0;else f=Xk(a)|0;c[(c[f+16>>2]|0)+232>>2]=g}else f=d;Ii(nh(b,f,e)|0);h=g;b=f}if(!(c[(c[k>>2]|0)+172>>2]|0))qa(87672,87615,103,87661);else return}function Wk(b,d){b=b|0;d=d|0;var e=0.0,f=0.0,g=0,i=0,j=0.0;i=d+16|0;g=c[(c[i>>2]|0)+96>>2]|0;e=+h[g+24>>3];f=+h[g+32>>3];g=sh(b)|0;d=g+16|0;c[(c[d>>2]|0)+104>>2]=c[(c[i>>2]|0)+96>>2];j=+(c[(c[(yC(g)|0)+16>>2]|0)+248>>2]|0);h[(c[d>>2]|0)+88>>3]=j;if(!(a[(c[i>>2]|0)+114>>0]|0)){b=(c[(c[(yC(b)|0)+16>>2]|0)+116>>2]&1|0)==0;i=c[d>>2]|0;h[i+80>>3]=b?f:e;h[i+96>>3]=b?e:f}return g|0}function Xk(a){a=a|0;var b=0;b=sh(a)|0;Qk(a,b);return b|0}function Yk(b){b=b|0;var d=0;d=c[b+16>>2]|0;if((a[d+159>>0]|0)==7)b=c[(c[(c[(c[d+212>>2]|0)+16>>2]|0)+268>>2]|0)+(c[d+232>>2]<<2)>>2]|0;else b=fP(b)|0;return b|0}function Zk(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;j=gg(a)|0;h=jC(a)|0;while(1){if(!h)break;b=aB(j,h)|0;i=0;while(1){if(!b)break;l=bB(j,b,h)|0;if(HC(a,b)|0){k=i;b=l;i=k;continue}k=(c[b>>2]&3|0)==2?b:b+-48|0;m=(Rk(i,k)|0)==0;e=c[k>>2]&3;b=c[((e|0)==3?k:k+48|0)+40>>2]|0;d=c[(c[b+16>>2]|0)+232>>2]|0;e=c[((e|0)==2?k:k+-48|0)+40>>2]|0;f=c[(c[e+16>>2]|0)+232>>2]|0;g=(d|0)==(f|0);if(!m){c[(c[k+16>>2]|0)+172>>2]=g?i:0;b=c[(c[i+16>>2]|0)+172>>2]|0;if(!b){m=i;b=l;i=m;continue}Pk(a,k,b,0);kh(k);m=i;b=l;i=m;continue}if(!g)if((f|0)>(d|0)){_k(b,e,k);b=l;i=k;continue}else{_k(e,b,k);b=l;i=k;continue}b=fh(b,e)|0;if(!b){th(j,k);b=l;i=k;continue}if((k|0)==(b|0)){m=i;b=l;i=m;continue}kh(k);if(c[(c[k+16>>2]|0)+172>>2]|0){m=i;b=l;i=m;continue}vh(k,b);m=i;b=l;i=m}h=kC(a,h)|0}return}function _k(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;f=$k(a)|0;e=$k(b)|0;al(f,e,d,c[(c[d+16>>2]|0)+172>>2]|0,(f|0)==(a|0)&(e|0)==(b|0)?1:5);return}function $k(b){b=b|0;var d=0,e=0,f=0;d=c[b+16>>2]|0;e=c[d+212>>2]|0;if((e|0)!=0?(f=c[e+16>>2]|0,(a[f+272>>0]|0)==0):0)b=c[(c[f+268>>2]|0)+(c[d+232>>2]<<2)>>2]|0;return b|0}function al(d,e,f,g,h){d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0;n=d+16|0;k=c[(c[n>>2]|0)+232>>2]|0;o=e+16|0;i=c[(c[o>>2]|0)+232>>2]|0;if((i|0)<=(k|0))qa(87697,87725,81,87735);m=c[g>>2]&3;if(!((c[((m|0)==3?g:g+48|0)+40>>2]|0)==(d|0)?(c[((m|0)==2?g:g+-48|0)+40>>2]|0)==(e|0):0))l=5;a:do if((l|0)==5){if((b[(c[g+16>>2]|0)+168>>1]|0)>1){c[(c[f+16>>2]|0)+172>>2]=0;if(((i-k|0)==1?(j=dh(d,e)|0,j|0):0)?uj(f,j)|0:0){vh(f,j);if(a[(c[n>>2]|0)+156>>0]|0)break;if(a[(c[o>>2]|0)+156>>0]|0)break;jh(f);break}m=h&255;h=d;l=c[(c[n>>2]|0)+232>>2]|0;while(1){i=c[(c[o>>2]|0)+232>>2]|0;if((l|0)>=(i|0))break a;if((l|0)<(i+-1|0)){i=gg(d)|0;j=g+-48|0;i=bl(i,c[((c[g>>2]&3|0)==2?g:j)+40>>2]|0)|0;k=g}else{i=e;j=g+-48|0;k=g}a[(c[(nh(h,i,f)|0)+16>>2]|0)+112>>0]=m;n=(c[g+16>>2]|0)+168|0;b[n>>1]=(b[n>>1]|0)+-1<<16>>16;h=i;l=l+1|0;g=c[c[(c[(c[((c[k>>2]&3|0)==2?g:j)+40>>2]|0)+16>>2]|0)+180>>2]>>2]|0}}do if((i-k|0)==1){g=dh(d,e)|0;if(g|0?uj(f,g)|0:0){c[(c[f+16>>2]|0)+172>>2]=g;m=c[g+16>>2]|0;a[m+112>>0]=h;m=m+168|0;b[m>>1]=(b[m>>1]|0)+1<<16>>16;if(a[(c[n>>2]|0)+156>>0]|0)break;if(a[(c[o>>2]|0)+156>>0]|0)break;jh(f);break}c[(c[f+16>>2]|0)+172>>2]=0;g=nh(d,e,f)|0;a[(c[g+16>>2]|0)+112>>0]=h}while(0);i=c[(c[o>>2]|0)+232>>2]|0;if((i-(c[(c[n>>2]|0)+232>>2]|0)|0)>1){if((c[((c[g>>2]&3|0)==3?g:g+48|0)+40>>2]|0)==(d|0))l=i;else{n=f+16|0;c[(c[n>>2]|0)+172>>2]=0;l=nh(d,c[((c[g>>2]&3|0)==2?g:g+-48|0)+40>>2]|0,f)|0;c[(c[n>>2]|0)+172>>2]=l;ih(g);g=l;l=c[(c[o>>2]|0)+232>>2]|0}while(1){i=c[g>>2]&3;j=c[((i|0)==2?g:g+-48|0)+40>>2]|0;k=c[j+16>>2]|0;if((c[k+232>>2]|0)==(l|0))break;g=c[c[k+180>>2]>>2]|0}if((j|0)!=(e|0)){a[(c[(nh(c[((i|0)==3?g:g+48|0)+40>>2]|0,e,f)|0)+16>>2]|0)+112>>0]=h;ih(g)}}}while(0);return}function bl(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=b+16|0;b=c[d>>2]|0;e=c[b+232>>2]|0;cl(a,e,c[b+236>>2]|0,2);b=sh(a)|0;d=c[d>>2]|0;f=c[b+16>>2]|0;h[f+88>>3]=+h[d+88>>3];h[f+96>>3]=+h[d+96>>3];c[f+232>>2]=c[d+232>>2];d=(c[d+236>>2]|0)+1|0;c[f+236>>2]=d;c[(c[(c[(c[a+16>>2]|0)+196>>2]|0)+(e<<6)+4>>2]|0)+(d<<2)>>2]=b;return b|0}function cl(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;h=a+16|0;f=c[(c[h>>2]|0)+196>>2]|0;i=c[f+(b<<6)+4>>2]|0;a:do if((e|0)<1){d=d-e|0;while(1){g=d+1|0;a=c[f+(b<<6)>>2]|0;if((g|0)>=(a|0))break;a=c[i+(g<<2)>>2]|0;f=d+e|0;c[(c[a+16>>2]|0)+236>>2]=f;c[i+(f<<2)>>2]=a;d=g;f=c[(c[h>>2]|0)+196>>2]|0}g=e+-1|0;d=g+a|0;while(1){if((d|0)>=(a|0))break a;c[i+(d<<2)>>2]=0;f=c[(c[h>>2]|0)+196>>2]|0;d=d+1|0;a=c[f+(b<<6)>>2]|0}}else{g=e+-1|0;a=c[f+(b<<6)>>2]|0;while(1){a=a+-1|0;if((a|0)<=(d|0))break;j=c[i+(a<<2)>>2]|0;f=g+a|0;c[(c[j+16>>2]|0)+236>>2]=f;c[i+(f<<2)>>2]=j}f=e+d|0;a=d;while(1){a=a+1|0;if((a|0)>=(f|0))break;c[i+(a<<2)>>2]=0}a=c[(c[h>>2]|0)+196>>2]|0;f=a;a=c[a+(b<<6)>>2]|0}while(0);c[f+(b<<6)>>2]=g+a;return}function dl(a){a=a|0;var b=0;Sk(a);b=c[a+16>>2]|0;c[b+220>>2]=1;c[c[b+216>>2]>>2]=c[b+192>>2];Fi(a);ki(a,0);el(a);Zk(a);fl(a);return}function el(d){d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;k=gg(d)|0;l=d+16|0;f=c[l>>2]|0;j=b[f+236>>1]|0;e=j<<16>>16;m=k+16|0;if(j<<16>>16>0)a[(c[(c[m>>2]|0)+196>>2]|0)+(e+-1<<6)+49>>0]=0;j=e;while(1){if((j|0)>(b[f+238>>1]|0))break;i=c[(c[(c[(c[f+268>>2]|0)+(j<<2)>>2]|0)+16>>2]|0)+236>>2]|0;cl(k,j,i,c[(c[f+196>>2]|0)+(j<<6)>>2]|0);g=0;h=i;while(1){f=c[l>>2]|0;e=c[f+196>>2]|0;if((g|0)>=(c[e+(j<<6)>>2]|0))break;e=c[(c[e+(j<<6)+4>>2]|0)+(g<<2)>>2]|0;c[(c[(c[(c[m>>2]|0)+196>>2]|0)+(j<<6)+4>>2]|0)+(h<<2)>>2]=e;f=c[e+16>>2]|0;c[f+236>>2]=h;if((a[f+156>>0]|0)==1)c[e+24>>2]=yC(k)|0;qh(d,e);oh(k,e);f=(c[m>>2]|0)+232|0;c[f>>2]=(c[f>>2]|0)+1;g=g+1|0;h=h+1|0}h=c[(c[m>>2]|0)+196>>2]|0;c[e+(j<<6)+4>>2]=(c[h+(j<<6)+4>>2]|0)+(i<<2);a[h+(j<<6)+49>>0]=0;j=j+1|0}e=c[m>>2]|0;if((j|0)<(b[e+238>>1]|0))a[(c[e+196>>2]|0)+(j<<6)+49>>0]=0;a[f+272>>0]=1;return}function fl(a){a=a|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=a+16|0;d=c[i>>2]|0;h=b[d+236>>1]|0;while(1){if((h|0)>(b[d+238>>1]|0))break;f=c[(c[d+268>>2]|0)+(h<<2)>>2]|0;g=f+16|0;while(1){d=c[g>>2]|0;e=c[c[d+180>>2]>>2]|0;if(!e)break;ih(e)}while(1){d=c[c[d+172>>2]>>2]|0;if(!d)break;ih(d);d=c[g>>2]|0}qh(gg(a)|0,f);c[(c[(c[i>>2]|0)+268>>2]|0)+(h<<2)>>2]=0;h=h+1|0;d=c[i>>2]|0}return}function gl(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;o=l;l=l+16|0;n=o;f=jC(b)|0;while(1){if(!f)break;e=f+16|0;d=c[e>>2]|0;if((a[d+159>>0]|0)==7){hP(f);d=c[e>>2]|0}c[d+212>>2]=0;f=kC(b,f)|0}m=b+16|0;k=1;while(1){d=c[m>>2]|0;if((k|0)>(c[d+180>>2]|0))break;h=c[(c[d+184>>2]|0)+(k<<2)>>2]|0;i=h+16|0;d=jC(h)|0;a:while(1){if(!d)break;j=kC(h,d)|0;e=d+16|0;if(a[(c[e>>2]|0)+159>>0]|0){f=KB(d)|0;g=KB(b)|0;c[n>>2]=f;c[n+4>>2]=g;gA(0,87744,n)|0;wC(h,d)|0;d=j;continue}iP(d,c[(c[i>>2]|0)+264>>2]|0);g=c[e>>2]|0;c[g+212>>2]=h;a[g+159>>0]=7;g=XA(h,d)|0;while(1){if(!g){d=j;continue a}d=c[(c[g+16>>2]|0)+172>>2]|0;b:do if(d|0)do{e=d+-48|0;f=c[(c[((c[d>>2]&3|0)==2?d:e)+40>>2]|0)+16>>2]|0;if((a[f+156>>0]|0)!=1)break b;c[f+212>>2]=h;d=c[c[(c[(c[((c[d>>2]&3|0)==2?d:e)+40>>2]|0)+16>>2]|0)+180>>2]>>2]|0}while((d|0)!=0);while(0);g=ZA(h,g)|0}}k=k+1|0}l=o;return}function hl(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;k=e+16|0;g=JK((b[(c[k>>2]|0)+238>>1]<<2)+8|0)|0;f=c[k>>2]|0;c[f+268>>2]=g;g=0;h=b[f+236>>1]|0;while(1){if((h|0)>(b[f+238>>1]|0))break;f=sh(d)|0;c[(c[(c[k>>2]|0)+268>>2]|0)+(h<<2)>>2]=f;j=c[f+16>>2]|0;c[j+232>>2]=h;a[j+159>>0]=7;c[j+212>>2]=e;if(g|0){j=(c[(nh(g,f,0)|0)+16>>2]|0)+154|0;b[j>>1]=(b[j>>1]|0)*1e3}g=f;h=h+1|0;f=c[k>>2]|0}j=jC(e)|0;while(1){f=c[k>>2]|0;if(!j)break;h=(c[(c[f+268>>2]|0)+(c[(c[j+16>>2]|0)+232>>2]<<2)>>2]|0)+16|0;f=(c[h>>2]|0)+216|0;c[f>>2]=(c[f>>2]|0)+1;f=XA(e,j)|0;while(1){if(!f)break;i=c[f>>2]|0;d=f+-48|0;g=c[(c[(c[((i&3|0)==3?f:f+48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0;while(1){if((g|0)>=(c[(c[(c[((i&3|0)==2?f:d)+40>>2]|0)+16>>2]|0)+232>>2]|0))break;i=(c[(c[c[(c[h>>2]|0)+180>>2]>>2]|0)+16>>2]|0)+168|0;b[i>>1]=(b[i>>1]|0)+1<<16>>16;g=g+1|0;i=c[f>>2]|0}f=ZA(e,f)|0}j=kC(e,j)|0}d=b[f+238>>1]|0;i=f+268|0;f=b[f+236>>1]|0;while(1){if((f|0)>(d|0))break;g=(c[(c[(c[i>>2]|0)+(f<<2)>>2]|0)+16>>2]|0)+216|0;h=c[g>>2]|0;if((h|0)>1)c[g>>2]=h+-1;f=f+1|0}return}function il(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;k=(c[(c[e+16>>2]|0)+212>>2]|0)+16|0;e=c[k>>2]|0;j=f+1|0;if((j|0)!=(a[e+273>>0]|0)){i=b[e+236>>1]|0;while(1){h=b[e+238>>1]|0;if((i|0)>(h<<16>>16|0))break;zi(d,c[(c[e+268>>2]|0)+(i<<2)>>2]|0);i=i+1|0;e=c[k>>2]|0}i=b[e+236>>1]|0;while(1){if((i|0)>(h<<16>>16|0))break;Ai(g,c[(c[e+268>>2]|0)+(i<<2)>>2]|0,f);d=c[k>>2]|0;i=i+1|0;h=b[d+238>>1]|0;e=d}a[e+273>>0]=j}return}function jl(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;h=jC(b)|0;while(1){if(!h)break;c[(c[h+16>>2]|0)+212>>2]=0;g=XA(b,h)|0;while(1){if(!g)break;d=c[(c[g+16>>2]|0)+172>>2]|0;a:do if(d|0)do{e=d+-48|0;f=c[(c[((c[d>>2]&3|0)==2?d:e)+40>>2]|0)+16>>2]|0;if((a[f+156>>0]|0)!=1)break a;c[f+212>>2]=0;d=c[c[(c[(c[((c[d>>2]&3|0)==2?d:e)+40>>2]|0)+16>>2]|0)+180>>2]>>2]|0}while((d|0)!=0);while(0);g=ZA(b,g)|0}h=kC(b,h)|0}kl(b);return}function kl(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;e=b+16|0;d=1;while(1){f=c[e>>2]|0;if((d|0)>(c[f+180>>2]|0))break;kl(c[(c[f+184>>2]|0)+(d<<2)>>2]|0);d=d+1|0}i=jC(b)|0;while(1){if(!i)break;d=(c[i+16>>2]|0)+212|0;if(!(c[d>>2]|0))c[d>>2]=b;h=XA(b,i)|0;while(1){if(!h)break;d=c[(c[h+16>>2]|0)+172>>2]|0;a:do if(d|0)do{e=c[d>>2]|0;g=d+-48|0;f=c[(c[((e&3|0)==2?d:g)+40>>2]|0)+16>>2]|0;if((a[f+156>>0]|0)!=1)break a;f=f+212|0;if(!(c[f>>2]|0)){c[f>>2]=b;e=c[d>>2]|0}d=c[c[(c[(c[((e&3|0)==2?d:g)+40>>2]|0)+16>>2]|0)+180>>2]>>2]|0}while((d|0)!=0);while(0);h=ZA(b,h)|0}i=kC(b,i)|0}return}function ll(a){a=a|0;var b=0,c=0,d=0;d=IP(a)|0;c=jC(a)|0;while(1){if(!c)break;b=XA(a,c)|0;while(1){if(!b)break;ml(b,d);b=ZA(a,b)|0}c=kC(a,c)|0}Rz(d)|0;return}function ml(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0;M=l;l=l+320|0;H=M+296|0;G=M+280|0;x=M+136|0;w=M+120|0;n=M+104|0;i=M+88|0;f=M+80|0;E=M+16|0;z=M;j=M+264|0;k=M+248|0;m=M+232|0;o=M+216|0;A=M+200|0;B=M+184|0;y=M+168|0;D=M+152|0;g=nl(QA(a,87798)|0,b)|0;q=nl(QA(a,87804)|0,b)|0;r=(q|0)!=0;b=(g|0)!=0;do if(b|r?(L=a+16|0,e=c[(c[L>>2]|0)+8>>2]|0,e|0):0){if((c[e+4>>2]|0)>1){K=KB(c[((c[a>>2]&3|0)==3?a:a+48|0)+40>>2]|0)|0;L=KB(c[((c[a>>2]&3|0)==2?a:a+-48|0)+40>>2]|0)|0;c[f>>2]=K;c[f+4>>2]=L;gA(0,87810,f)|0;break}I=c[e>>2]|0;e=c[I+4>>2]|0;p=c[a>>2]&3;s=a+-48|0;t=c[((p|0)==2?a:s)+40>>2]|0;u=a+48|0;p=c[((p|0)==3?a:u)+40>>2]|0;J=KK(48)|0;v=I+12|0;c[J+12>>2]=c[v>>2];C=I+8|0;c[J+8>>2]=c[C>>2];do if(b){h=(c[g+16>>2]|0)+16|0;g=(c[t+16>>2]|0)+16|0;c[H>>2]=c[g>>2];c[H+4>>2]=c[g+4>>2];c[H+8>>2]=c[g+8>>2];c[H+12>>2]=c[g+12>>2];if(!(ol(H,h)|0)){o=KB(c[((c[a>>2]&3|0)==3?a:u)+40>>2]|0)|0;F=KB(c[((c[a>>2]&3|0)==2?a:s)+40>>2]|0)|0;K=QA(a,87798)|0;c[i>>2]=o;c[i+4>>2]=F;c[i+8>>2]=K;gA(0,87851,i)|0;K=26;break}b=c[I>>2]|0;c[H>>2]=c[b>>2];c[H+4>>2]=c[b+4>>2];c[H+8>>2]=c[b+8>>2];c[H+12>>2]=c[b+12>>2];if(ol(H,h)|0){F=(c[p+16>>2]|0)+16|0;c[H>>2]=c[F>>2];c[H+4>>2]=c[F+4>>2];c[H+8>>2]=c[F+8>>2];c[H+12>>2]=c[F+12>>2];if(ol(H,h)|0){o=KB(c[((c[a>>2]&3|0)==3?a:u)+40>>2]|0)|0;F=KB(c[((c[a>>2]&3|0)==2?a:s)+40>>2]|0)|0;K=QA(a,87798)|0;c[n>>2]=o;c[n+4>>2]=F;c[n+8>>2]=K;gA(0,87894,n)|0;K=26;break}if(!(c[C>>2]|0))qa(87936,87947,369,87958);o=I+16|0;c[G>>2]=c[b>>2];c[G+4>>2]=c[b+4>>2];c[G+8>>2]=c[b+8>>2];c[G+12>>2]=c[b+12>>2];c[H>>2]=c[o>>2];c[H+4>>2]=c[o+4>>2];c[H+8>>2]=c[o+8>>2];c[H+12>>2]=c[o+12>>2];pl(z,G,H,h);F=(c[I>>2]|0)+48|0;c[F>>2]=c[z>>2];c[F+4>>2]=c[z+4>>2];c[F+8>>2]=c[z+8>>2];c[F+12>>2]=c[z+12>>2];F=(c[I>>2]|0)+16|0;c[G>>2]=c[z>>2];c[G+4>>2]=c[z+4>>2];c[G+8>>2]=c[z+8>>2];c[G+12>>2]=c[z+12>>2];c[H>>2]=c[o>>2];c[H+4>>2]=c[o+4>>2];c[H+8>>2]=c[o+8>>2];c[H+12>>2]=c[o+12>>2];ql(j,G,H);c[F>>2]=c[j>>2];c[F+4>>2]=c[j+4>>2];c[F+8>>2]=c[j+8>>2];c[F+12>>2]=c[j+12>>2];F=c[I>>2]|0;b=F+16|0;c[G>>2]=c[b>>2];c[G+4>>2]=c[b+4>>2];c[G+8>>2]=c[b+8>>2];c[G+12>>2]=c[b+12>>2];c[H>>2]=c[o>>2];c[H+4>>2]=c[o+4>>2];c[H+8>>2]=c[o+8>>2];c[H+12>>2]=c[o+12>>2];ql(k,G,H);c[F>>2]=c[k>>2];c[F+4>>2]=c[k+4>>2];c[F+8>>2]=c[k+8>>2];c[F+12>>2]=c[k+12>>2];F=c[I>>2]|0;b=F+32|0;F=F+16|0;c[G>>2]=c[F>>2];c[G+4>>2]=c[F+4>>2];c[G+8>>2]=c[F+8>>2];c[G+12>>2]=c[F+12>>2];c[H>>2]=c[z>>2];c[H+4>>2]=c[z+4>>2];c[H+8>>2]=c[z+8>>2];c[H+12>>2]=c[z+12>>2];ql(m,G,H);c[b>>2]=c[m>>2];c[b+4>>2]=c[m+4>>2];c[b+8>>2]=c[m+8>>2];c[b+12>>2]=c[m+12>>2];b=c[v>>2]|0;if(!b){F=3;break}F=(UH(a,c[I>>2]|0,0,0,J,b)|0)+3|0;break}g=e+-1|0;b=0;while(1){if((b|0)>=(g|0))break;if(rl((c[I>>2]|0)+(b<<4)|0,h)|0)break;b=b+3|0}e=c[v>>2]|0;f=(e|0)!=0;if((b|0)==(g|0))if(f){F=J+32|0;m=I+32|0;n=(c[I>>2]|0)+(g<<4)|0;c[G>>2]=c[m>>2];c[G+4>>2]=c[m+4>>2];c[G+8>>2]=c[m+8>>2];c[G+12>>2]=c[m+12>>2];c[H>>2]=c[n>>2];c[H+4>>2]=c[n+4>>2];c[H+8>>2]=c[n+8>>2];c[H+12>>2]=c[n+12>>2];pl(o,G,H,h);c[F>>2]=c[o>>2];c[F+4>>2]=c[o+4>>2];c[F+8>>2]=c[o+8>>2];c[F+12>>2]=c[o+12>>2];F=g;break}else qa(87975,87947,387,87958);else{if(f)b=UH(a,c[I>>2]|0,0,b,J,e)|0;F=b+3|0;break}}else K=26;while(0);if((K|0)==26){b=e+-1|0;if(!(c[v>>2]|0))F=b;else{F=J+32|0;o=I+32|0;c[F>>2]=c[o>>2];c[F+4>>2]=c[o+4>>2];c[F+8>>2]=c[o+8>>2];c[F+12>>2]=c[o+12>>2];F=b}}do if(r){f=(c[q+16>>2]|0)+16|0;r=(c[p+16>>2]|0)+16|0;c[H>>2]=c[r>>2];c[H+4>>2]=c[r+4>>2];c[H+8>>2]=c[r+8>>2];c[H+12>>2]=c[r+12>>2];if(!(ol(H,f)|0)){G=KB(c[((c[a>>2]&3|0)==3?a:u)+40>>2]|0)|0;H=KB(c[((c[a>>2]&3|0)==2?a:s)+40>>2]|0)|0;K=QA(a,87804)|0;c[w>>2]=G;c[w+4>>2]=H;c[w+8>>2]=K;gA(0,87986,w)|0;K=52;break}b=(c[I>>2]|0)+(F<<4)|0;c[H>>2]=c[b>>2];c[H+4>>2]=c[b+4>>2];c[H+8>>2]=c[b+8>>2];c[H+12>>2]=c[b+12>>2];if(ol(H,f)|0){E=(c[t+16>>2]|0)+16|0;c[H>>2]=c[E>>2];c[H+4>>2]=c[E+4>>2];c[H+8>>2]=c[E+8>>2];c[H+12>>2]=c[E+12>>2];if(ol(H,f)|0){G=KB(c[((c[a>>2]&3|0)==3?a:u)+40>>2]|0)|0;H=KB(c[((c[a>>2]&3|0)==2?a:s)+40>>2]|0)|0;K=QA(a,87804)|0;c[x>>2]=G;c[x+4>>2]=H;c[x+8>>2]=K;gA(0,88029,x)|0;K=52;break}if(!(c[v>>2]|0))qa(87975,87947,429,87958);x=J+32|0;c[G>>2]=c[b>>2];c[G+4>>2]=c[b+4>>2];c[G+8>>2]=c[b+8>>2];c[G+12>>2]=c[b+12>>2];c[H>>2]=c[x>>2];c[H+4>>2]=c[x+4>>2];c[H+8>>2]=c[x+8>>2];c[H+12>>2]=c[x+12>>2];pl(z,G,H,f);d=F+-3|0;E=(c[I>>2]|0)+(d<<4)|0;c[E>>2]=c[z>>2];c[E+4>>2]=c[z+4>>2];c[E+8>>2]=c[z+8>>2];c[E+12>>2]=c[z+12>>2];E=F+-1|0;b=(c[I>>2]|0)+(E<<4)|0;c[G>>2]=c[z>>2];c[G+4>>2]=c[z+4>>2];c[G+8>>2]=c[z+8>>2];c[G+12>>2]=c[z+12>>2];c[H>>2]=c[x>>2];c[H+4>>2]=c[x+4>>2];c[H+8>>2]=c[x+8>>2];c[H+12>>2]=c[x+12>>2];ql(A,G,H);c[b>>2]=c[A>>2];c[b+4>>2]=c[A+4>>2];c[b+8>>2]=c[A+8>>2];c[b+12>>2]=c[A+12>>2];b=c[I>>2]|0;D=b+(F<<4)|0;b=b+(E<<4)|0;c[G>>2]=c[b>>2];c[G+4>>2]=c[b+4>>2];c[G+8>>2]=c[b+8>>2];c[G+12>>2]=c[b+12>>2];c[H>>2]=c[x>>2];c[H+4>>2]=c[x+4>>2];c[H+8>>2]=c[x+8>>2];c[H+12>>2]=c[x+12>>2];ql(B,G,H);c[D>>2]=c[B>>2];c[D+4>>2]=c[B+4>>2];c[D+8>>2]=c[B+8>>2];c[D+12>>2]=c[B+12>>2];D=c[I>>2]|0;b=D+(F+-2<<4)|0;E=D+(E<<4)|0;c[G>>2]=c[E>>2];c[G+4>>2]=c[E+4>>2];c[G+8>>2]=c[E+8>>2];c[G+12>>2]=c[E+12>>2];c[H>>2]=c[z>>2];c[H+4>>2]=c[z+4>>2];c[H+8>>2]=c[z+8>>2];c[H+12>>2]=c[z+12>>2];ql(y,G,H);c[b>>2]=c[y>>2];c[b+4>>2]=c[y+4>>2];c[b+8>>2]=c[y+8>>2];c[b+12>>2]=c[y+12>>2];b=c[C>>2]|0;if(!b)break;d=WH(a,c[I>>2]|0,d,d,J,b)|0;break}e=F;while(1){if((e|0)>0)b=0;else break;while(1){if((b|0)==4)break;B=E+(b<<4)|0;A=(c[I>>2]|0)+(e-b<<4)|0;c[B>>2]=c[A>>2];c[B+4>>2]=c[A+4>>2];c[B+8>>2]=c[A+8>>2];c[B+12>>2]=c[A+12>>2];b=b+1|0}if(rl(E,f)|0){b=0;K=43;break}e=e+-3|0}a:do if((K|0)==43)while(1){K=0;if((b|0)==4)break a;K=(c[I>>2]|0)+(e-b<<4)|0;B=E+(b<<4)|0;c[K>>2]=c[B>>2];c[K+4>>2]=c[B+4>>2];c[K+8>>2]=c[B+8>>2];c[K+12>>2]=c[B+12>>2];b=b+1|0;K=43}while(0);if(e|0){d=e+-3|0;b=c[C>>2]|0;if(!b)break;d=WH(a,c[I>>2]|0,d,F+-3|0,J,b)|0;break}if(!(c[C>>2]|0))qa(87936,87947,452,87958);else{d=J+16|0;E=I+16|0;a=c[I>>2]|0;c[G>>2]=c[E>>2];c[G+4>>2]=c[E+4>>2];c[G+8>>2]=c[E+8>>2];c[G+12>>2]=c[E+12>>2];c[H>>2]=c[a>>2];c[H+4>>2]=c[a+4>>2];c[H+8>>2]=c[a+8>>2];c[H+12>>2]=c[a+12>>2];pl(D,G,H,f);c[d>>2]=c[D>>2];c[d+4>>2]=c[D+4>>2];c[d+8>>2]=c[D+8>>2];c[d+12>>2]=c[D+12>>2];d=0;break}}else K=52;while(0);if((K|0)==52)if(!(c[C>>2]|0))d=0;else{d=J+16|0;K=I+16|0;c[d>>2]=c[K>>2];c[d+4>>2]=c[K+4>>2];c[d+8>>2]=c[K+8>>2];c[d+12>>2]=c[K+12>>2];d=0}b=F-d+1|0;e=J+4|0;c[e>>2]=b;c[J>>2]=KK(b<<4)|0;b=0;while(1){if((b|0)>=(c[e>>2]|0))break;K=(c[J>>2]|0)+(b<<4)|0;a=(c[I>>2]|0)+(d<<4)|0;c[K>>2]=c[a>>2];c[K+4>>2]=c[a+4>>2];c[K+8>>2]=c[a+8>>2];c[K+12>>2]=c[a+12>>2];d=d+1|0;b=b+1|0}U1(c[I>>2]|0);U1(I);c[c[(c[L>>2]|0)+8>>2]>>2]=J}while(0);l=M;return}function nl(b,d){b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;if((b|0)!=0?(a[b>>0]|0)!=0:0){d=KP(d,b)|0;if(!d){c[e>>2]=b;gA(0,88149,e)|0;d=0}}else d=0;l=f;return d|0}function ol(a,b){a=a|0;b=b|0;var c=0.0,d=0.0;d=+h[a>>3];if((+h[b>>3]<=d?d<=+h[b+16>>3]:0)?(c=+h[a+8>>3],+h[b+8>>3]<=c):0)a=c<=+h[b+24>>3]&1;else a=0;return a|0}function pl(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,g=0.0,i=0,j=0.0,k=0.0,m=0.0,n=0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0.0,u=0,v=0,w=0,x=0,y=0.0,z=0,A=0,B=0,C=0;C=l;l=l+464|0;n=C+48|0;B=C+32|0;u=C+16|0;v=C;w=C+364|0;x=C+264|0;z=C+164|0;A=C+64|0;q=+h[b>>3];r=+h[b+8>>3];s=+h[d>>3];t=+h[d+8>>3];c[u>>2]=c[e>>2];c[u+4>>2]=c[e+4>>2];c[u+8>>2]=c[e+8>>2];c[u+12>>2]=c[e+12>>2];e=e+16|0;c[v>>2]=c[e>>2];c[v+4>>2]=c[e+4>>2];c[v+8>>2]=c[e+8>>2];c[v+12>>2]=c[e+12>>2];k=+h[u>>3];if((s=+h[u+8>>3]):0)?f<=+h[v+8>>3]:0){o=f;p=k}else i=4;do if((i|0)==4){j=+h[v>>3];if(s>j){g=r+ +(~~((j-q)*(r-t)/(q-s))|0);f=+h[u+8>>3];if(g>=f?g<=+h[v+8>>3]:0){o=g;p=j;break}}else f=+h[u+8>>3];if(t=k)|!(m<=j))):0){o=f;p=m;break}f=+h[v+8>>3];if(t>f?(y=q+ +(~~((f-r)*(q-s)/(r-t))|0),!(!(y>=k)|!(y<=j))):0){o=f;p=y;break};c[n>>2]=c[b>>2];c[n+4>>2]=c[b+4>>2];c[n+8>>2]=c[b+8>>2];c[n+12>>2]=c[b+12>>2];w=wl(n,w)|0;c[n>>2]=c[d>>2];c[n+4>>2]=c[d+4>>2];c[n+8>>2]=c[d+8>>2];c[n+12>>2]=c[d+12>>2];x=wl(n,x)|0;c[n>>2]=c[u>>2];c[n+4>>2]=c[u+4>>2];c[n+8>>2]=c[u+8>>2];c[n+12>>2]=c[u+12>>2];z=wl(n,z)|0;c[n>>2]=c[v>>2];c[n+4>>2]=c[v+4>>2];c[n+8>>2]=c[v+8>>2];c[n+12>>2]=c[v+12>>2];A=wl(n,A)|0;c[B>>2]=w;c[B+4>>2]=x;c[B+8>>2]=z;c[B+12>>2]=A;gA(1,88071,B)|0;qa(138394,87947,78,88123)}while(0);h[a>>3]=p;h[a+8>>3]=o;l=C;return}function ql(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0;d=(+h[c+8>>3]+ +h[b+8>>3])*.5;h[a>>3]=(+h[c>>3]+ +h[b>>3])*.5;h[a+8>>3]=d;return}function rl(a,b){a=a|0;b=b|0;var d=0.0,e=0,f=0.0,g=0,i=0,j=0,k=0,m=0;m=l;l=l+80|0;j=m+16|0;k=m;e=0;while(1){if((e|0)==4)break;i=j+(e<<4)|0;g=a+(e<<4)|0;c[i>>2]=c[g>>2];c[i+4>>2]=c[g+4>>2];c[i+8>>2]=c[g+8>>2];c[i+12>>2]=c[g+12>>2];e=e+1|0}e=b+8|0;i=b+24|0;d=+sl(a,0.0,1.0,+h[b>>3],+h[e>>3],+h[i>>3]);if(d>=0.0&d<2.0)kP(k,j,3,d,a,0);else d=2.0;g=b+16|0;f=+sl(a,0.0,d>1.0?1.0:d,+h[g>>3],+h[e>>3],+h[i>>3]);if(f>=0.0&f1.0?1.0:d,+h[e>>3],+h[b>>3],+h[g>>3]);if(f>=0.0&f1.0?1.0:d,+h[i>>3],+h[b>>3],+h[g>>3]);if(f>=0.0&f>3]-d))<=.005){b=+h[a+56>>3];b=!(b>=e)|!(b<=f)?-1.0:c;break a}break}default:{}}kP(i,a,3,.5,j,k);g=(c+b)*.5;b=+sl(j,b,g,d,e,f);if(!(b>=0.0))b=+sl(k,g,c,d,e,f)}while(0);l=m;return +b}function tl(a,b,c,d,e,f){a=a|0;b=+b;c=+c;d=+d;e=+e;f=+f;var g=0.0,i=0,j=0,k=0,m=0;m=l;l=l+144|0;j=m+80|0;k=m+16|0;i=m;a:do if(!(b==c)){switch(ul(a,d)|0){case 0:{b=-1.0;break a}case 1:{if(+B(+(+h[a+56>>3]-d))<=.005){b=+h[a+48>>3];b=!(b>=e)|!(b<=f)?-1.0:c;break a}break}default:{}}kP(i,a,3,.5,j,k);g=(c+b)*.5;b=+tl(j,b,g,d,e,f);if(!(b>=0.0))b=+tl(k,g,c,d,e,f)}while(0);l=m;return +b}function ul(a,b){a=a|0;b=+b;var c=0,d=0,e=0,f=0.0,g=0,i=0;f=+h[a+8>>3];e=fb&1;c=1;d=e;e=(e|0)==0&1;while(1){if((c|0)==4)break;f=+h[a+(c<<4)+8>>3];i=fb&1;g=e+((d|0)!=0&(i|0)!=(d|0)&1)|0;c=c+1|0;d=i;e=g}return e|0}function vl(a,b){a=a|0;b=+b;var c=0,d=0,e=0,f=0.0,g=0,i=0;f=+h[a>>3];e=fb&1;c=1;d=e;e=(e|0)==0&1;while(1){if((c|0)==4)break;f=+h[a+(c<<4)>>3];i=fb&1;g=e+((d|0)!=0&(i|0)!=(d|0)&1)|0;c=c+1|0;d=i;e=g}return e|0}function wl(a,b){a=a|0;b=b|0;var c=0,d=0,e=0.0;c=l;l=l+16|0;d=c;e=+h[a+8>>3];h[d>>3]=+h[a>>3];h[d+8>>3]=e;m4(b,88137,d)|0;l=c;return b|0}function xl(a){a=a|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0;v=l;l=l+16|0;s=v;u=4;t=T1(40)|0;c[t>>2]=0;r=a+16|0;e=c[r>>2]|0;a:do if(((b[e+238>>1]|0)-(b[e+236>>1]|0)|0)>=2){m=1;d=e;e=c[e+196>>2]|0;b:while(1){n=m+1|0;if(!(c[e+(n<<6)>>2]|0)){q=15;break}else k=0;while(1){h=c[e+(m<<6)>>2]|0;if((k|0)>=(h|0)){m=n;continue b}j=c[(c[e+(m<<6)+4>>2]|0)+(k<<2)>>2]|0;o=0;d=$(20,j|0)|0;f=o;o=0;if((f|0)!=0&(p|0)!=0){g=V6(c[f>>2]|0,t|0,u|0)|0;if(!g)bb(f|0,p|0);z=p}else g=-1;if((g|0)==1){d=z;break b}if(d<<24>>24){i=k;d=h;while(1){g=i+1|0;if((g|0)>=(d|0))break;o=0;d=aa(65,j|0,c[(c[e+(m<<6)+4>>2]|0)+(g<<2)>>2]|0)|0;e=o;o=0;if((e|0)!=0&(p|0)!=0){f=V6(c[e>>2]|0,t|0,u|0)|0;if(!f)bb(e|0,p|0);z=p}else f=-1;if((f|0)==1){d=z;break b}if(!(d<<24>>24))break;d=c[(c[r>>2]|0)+196>>2]|0;i=g;e=d;d=c[d+(m<<6)>>2]|0}if((g-k|0)>1){o=0;na(6,a|0,m|0,k|0,i|0,1);d=o;o=0;if((d|0)!=0&(p|0)!=0){e=V6(c[d>>2]|0,t|0,u|0)|0;if(!e)bb(d|0,p|0);z=p}else e=-1;if((e|0)==1){d=z;break b}}}e=c[r>>2]|0;k=k+1|0;d=e;e=c[e+196>>2]|0}}c:do if((q|0)==15){while(1){if((m|0)>0)k=0;else break;while(1){e=c[d+196>>2]|0;h=c[e+(m<<6)>>2]|0;if((k|0)>=(h|0))break;j=c[(c[e+(m<<6)+4>>2]|0)+(k<<2)>>2]|0;o=0;d=$(21,j|0)|0;f=o;o=0;if((f|0)!=0&(p|0)!=0){g=V6(c[f>>2]|0,t|0,u|0)|0;if(!g)bb(f|0,p|0);z=p}else g=-1;if((g|0)==1){d=z;break c}if(d<<24>>24){i=k;d=h;while(1){g=i+1|0;if((g|0)>=(d|0))break;o=0;d=aa(66,j|0,c[(c[e+(m<<6)+4>>2]|0)+(g<<2)>>2]|0)|0;e=o;o=0;if((e|0)!=0&(p|0)!=0){f=V6(c[e>>2]|0,t|0,u|0)|0;if(!f)bb(e|0,p|0);z=p}else f=-1;if((f|0)==1){d=z;break c}if(!(d<<24>>24))break;d=c[(c[r>>2]|0)+196>>2]|0;i=g;e=d;d=c[d+(m<<6)>>2]|0}if((g-k|0)>1){o=0;na(6,a|0,m|0,k|0,i|0,0);d=o;o=0;if((d|0)!=0&(p|0)!=0){e=V6(c[d>>2]|0,t|0,u|0)|0;if(!e)bb(d|0,p|0);z=p}else e=-1;if((e|0)==1){d=z;break c}}}k=k+1|0;d=c[r>>2]|0}m=m+-1|0;q=15}t=U6(187016,1,t|0,u|0)|0;u=z;o=0;d=o;o=0;if((d|0)!=0&(p|0)!=0){e=V6(c[d>>2]|0,t|0,u|0)|0;if(!e)bb(d|0,p|0);z=p}else e=-1;if((e|0)==1)d=z;else d=0}while(0);d:while(1){if(d){o=0;ca(20,3,88177,s|0)|0;d=o;o=0;if((d|0)!=0&(p|0)!=0){e=V6(c[d>>2]|0,t|0,u|0)|0;if(!e)bb(d|0,p|0);z=p}else e=-1;if((e|0)==1){d=z;continue}else break}else f=1;while(1){d=c[r>>2]|0;if((f|0)>(c[d+180>>2]|0))break a;o=0;ia(101,c[(c[d+184>>2]|0)+(f<<2)>>2]|0);d=o;o=0;if((d|0)!=0&(p|0)!=0){e=V6(c[d>>2]|0,t|0,u|0)|0;if(!e)bb(d|0,p|0);z=p}else e=-1;if((e|0)==1){d=z;continue d}f=f+1|0}}}while(0);U1(t|0);l=v;return}function yl(b){b=b|0;b=c[b+16>>2]|0;if(((a[b+156>>0]|0)==1?(c[b+176>>2]|0)==1:0)?(c[b+184>>2]|0)==1:0)b=(c[b+104>>2]|0)==0&1;else b=0;return b|0}function zl(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=l;l=l+80|0;h=i+40|0;g=i;e=c[c[(c[a+16>>2]|0)+172>>2]>>2]|0;a=c[c[(c[b+16>>2]|0)+172>>2]>>2]|0;if(((yl(b)|0)<<24>>24!=0?(c[((c[e>>2]&3|0)==3?e:e+48|0)+40>>2]|0)==(c[((c[a>>2]&3|0)==3?a:a+48|0)+40>>2]|0):0)?(Fl(e,a)|0)<<24>>24!=0:0){d=(c[a+16>>2]|0)+16|0;f=g;a=(c[e+16>>2]|0)+16|0;b=f+40|0;do{c[f>>2]=c[a>>2];f=f+4|0;a=a+4|0}while((f|0)<(b|0));f=h;a=d;b=f+40|0;do{c[f>>2]=c[a>>2];f=f+4|0;a=a+4|0}while((f|0)<(b|0));a=(hg(g,h)|0)==0&1}else a=0;l=i;return a|0}function Al(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;t=a+16|0;q=c[(c[(c[(c[t>>2]|0)+196>>2]|0)+(b<<6)+4>>2]|0)+(d<<2)>>2]|0;p=d+1|0;m=(f|0)==1;n=q+16|0;l=p;while(1){if((l|0)>(e|0)){g=e;s=p;break}o=c[(c[(c[(c[t>>2]|0)+196>>2]|0)+(b<<6)+4>>2]|0)+(l<<2)>>2]|0;k=o+16|0;a:do if(m)while(1){d=c[k>>2]|0;j=c[c[d+180>>2]>>2]|0;if(!j)break a;h=c[(c[n>>2]|0)+180>>2]|0;i=j+-48|0;f=0;while(1){d=c[h+(f<<2)>>2]|0;if(!d){r=8;break}if((c[((c[d>>2]&3|0)==2?d:d+-48|0)+40>>2]|0)==(c[((c[j>>2]&3|0)==2?j:i)+40>>2]|0))break;else f=f+1|0}if((r|0)==8){r=0;d=nh(q,c[((c[j>>2]&3|0)==2?j:i)+40>>2]|0,j)|0}while(1){f=c[c[(c[k>>2]|0)+172>>2]>>2]|0;if(!f)break;vh(f,d);ih(f)}ih(j)}else while(1){d=c[k>>2]|0;j=c[c[d+172>>2]>>2]|0;if(!j)break a;h=c[(c[n>>2]|0)+172>>2]|0;i=j+48|0;f=0;while(1){d=c[h+(f<<2)>>2]|0;if(!d){r=17;break}if((c[((c[d>>2]&3|0)==3?d:d+48|0)+40>>2]|0)==(c[((c[j>>2]&3|0)==3?j:i)+40>>2]|0))break;else f=f+1|0}if((r|0)==17){r=0;d=nh(c[((c[j>>2]&3|0)==3?j:i)+40>>2]|0,q,j)|0}while(1){f=c[c[(c[k>>2]|0)+180>>2]>>2]|0;if(!f)break;vh(f,d);ih(f)}ih(j)}while(0);if((c[d+176>>2]|0)!=(0-(c[d+184>>2]|0)|0)){r=23;break}qh(a,o);l=l+1|0}if((r|0)==23)qa(88313,88357,115,88364);while(1){g=g+1|0;d=c[(c[t>>2]|0)+196>>2]|0;f=d+(b<<6)|0;if((g|0)>=(c[f>>2]|0))break;e=c[d+(b<<6)+4>>2]|0;r=c[e+(g<<2)>>2]|0;c[e+(s<<2)>>2]=r;c[(c[r+16>>2]|0)+236>>2]=s;s=s+1|0}c[f>>2]=s;c[(c[d+(b<<6)+4>>2]|0)+(s<<2)>>2]=0;return}function Bl(b){b=b|0;b=c[b+16>>2]|0;if(((a[b+156>>0]|0)==1?(c[b+184>>2]|0)==1:0)?(c[b+176>>2]|0)==1:0)b=(c[b+104>>2]|0)==0&1;else b=0;return b|0}function Cl(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=l;l=l+80|0;h=i+40|0;g=i;e=c[c[(c[a+16>>2]|0)+180>>2]>>2]|0;a=c[c[(c[b+16>>2]|0)+180>>2]>>2]|0;if(((Bl(b)|0)<<24>>24!=0?(c[((c[e>>2]&3|0)==2?e:e+-48|0)+40>>2]|0)==(c[((c[a>>2]&3|0)==2?a:a+-48|0)+40>>2]|0):0)?(Fl(e,a)|0)<<24>>24!=0:0){d=(c[a+16>>2]|0)+56|0;f=g;a=(c[e+16>>2]|0)+56|0;b=f+40|0;do{c[f>>2]=c[a>>2];f=f+4|0;a=a+4|0}while((f|0)<(b|0));f=h;a=d;b=f+40|0;do{c[f>>2]=c[a>>2];f=f+4|0;a=a+4|0}while((f|0)<(b|0));a=(hg(g,h)|0)==0&1}else a=0;l=i;return a|0}function Dl(d){d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;r=l;l=l+32|0;p=r+16|0;o=r;m=d+16|0;f=c[m>>2]|0;e=b[f+236>>1]|0;while(1){if((e|0)>(b[f+238>>1]|0))break;c[(c[f+268>>2]|0)+(e<<2)>>2]=0;e=e+1|0;f=c[m>>2]|0}vj(d);j=jC(d)|0;while(1){if(!j)break;El(d,j);i=XA(d,j)|0;while(1){if(!i)break;else f=i;while(1){e=c[(c[f+16>>2]|0)+172>>2]|0;if(!e)break;else f=e}h=i+-48|0;while(1){e=f+-48|0;g=c[((c[f>>2]&3|0)==2?f:e)+40>>2]|0;if((c[(c[g+16>>2]|0)+232>>2]|0)>=(c[(c[(c[((c[i>>2]&3|0)==2?i:h)+40>>2]|0)+16>>2]|0)+232>>2]|0))break;El(d,g);f=c[c[(c[(c[((c[f>>2]&3|0)==2?f:e)+40>>2]|0)+16>>2]|0)+180>>2]>>2]|0}i=ZA(d,i)|0}j=kC(d,j)|0}e=c[m>>2]|0;i=b[e+236>>1]|0;while(1){if((i|0)>(b[e+238>>1]|0)){k=1;n=e;break}e=c[(c[e+268>>2]|0)+(i<<2)>>2]|0;j=c[(c[(c[(gg(d)|0)+16>>2]|0)+196>>2]|0)+(i<<6)+4>>2]|0;f=e+16|0;if((c[j+(c[(c[f>>2]|0)+236>>2]<<2)>>2]|0)!=(e|0)){q=17;break}h=c[(c[(c[(gg(d)|0)+16>>2]|0)+196>>2]|0)+(i<<6)+4>>2]|0;e=c[m>>2]|0;f=c[e+196>>2]|0;c[f+(i<<6)+4>>2]=h+(c[(c[(c[(c[e+268>>2]|0)+(i<<2)>>2]|0)+16>>2]|0)+236>>2]<<2);e=-1;h=0;a:while(1){if((h|0)>=(c[f+(i<<6)>>2]|0))break;f=c[(c[f+(i<<6)+4>>2]|0)+(h<<2)>>2]|0;if(!f)break;g=c[f+16>>2]|0;b:do if(!(a[g+156>>0]|0))if(!(HC(d,f)|0))break a;else e=h;else{f=c[c[g+172>>2]>>2]|0;while(1){if(!f)break b;g=c[(c[f+16>>2]|0)+116>>2]|0;if(!g)break;else f=g}if(HC(d,c[((c[f>>2]&3|0)==3?f:f+48|0)+40>>2]|0)|0){j=(HC(d,c[((c[f>>2]&3|0)==2?f:f+-48|0)+40>>2]|0)|0)==0;e=j?e:h}}while(0);h=h+1|0;f=c[(c[m>>2]|0)+196>>2]|0}if((e|0)==-1){c[p>>2]=KB(d)|0;c[p+4>>2]=i;gA(0,88277,p)|0}j=c[m>>2]|0;c[(c[j+196>>2]|0)+(i<<6)>>2]=e+1;i=i+1|0;e=j}if((q|0)==17){p=KB(e)|0;q=c[(c[f>>2]|0)+236>>2]|0;c[o>>2]=p;c[o+4>>2]=q;c[o+8>>2]=i;gA(1,88219,o)|0;bb(187016,1)}while(1){if((k|0)>(c[n+180>>2]|0))break;Dl(c[(c[n+184>>2]|0)+(k<<2)>>2]|0);k=k+1|0;n=c[m>>2]|0}l=r;return}function El(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[b+16>>2]|0;a=(c[(c[a+16>>2]|0)+268>>2]|0)+(c[d+232>>2]<<2)|0;e=c[a>>2]|0;if(!((e|0)!=0?(c[(c[e+16>>2]|0)+236>>2]|0)<=(c[d+236>>2]|0):0))c[a>>2]=b;return}function Fl(b,d){b=b|0;d=d|0;var e=0,f=0;while(1){f=c[b+16>>2]|0;if(!(a[f+112>>0]|0))break;b=c[f+116>>2]|0}while(1){e=c[d+16>>2]|0;if(!(a[e+112>>0]|0))break;d=c[e+116>>2]|0}if((a[f+153>>0]|0)==0?(a[e+153>>0]|0)==0:0){f=c[d>>2]&3;e=c[b>>2]&3;b=(O((c[(c[(c[((e|0)==3?b:b+48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)-(c[(c[(c[((e|0)==2?b:b+-48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)|0,(c[(c[(c[((f|0)==3?d:d+48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)-(c[(c[(c[((f|0)==2?d:d+-48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)|0)|0)>0&1}else b=0;return b|0}function Gl(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;k=l;l=l+544|0;j=k+528|0;Hl(j,k+512|0,k);e=(a[193770]|0)+1<<24>>24;a[193770]=e<<24>>24==0?1:e;e=c[b+16>>2]|0;c[e+220>>2]=0;c[e+232>>2]=0;e=(d|0)>0;d=jC(b)|0;while(1){if(!d)break;if(e?(h=c[d+16>>2]|0,i=c[h+212>>2]|0,(i|0)!=0):0){g=c[(c[(c[i+16>>2]|0)+268>>2]|0)+(c[h+232>>2]<<2)>>2]|0;f=7}else f=6;if((f|0)==6?(f=0,(d|0)==(fP(d)|0)):0){g=d;f=7}if((f|0)==7?(0,(a[(c[g+16>>2]|0)+157>>0]|0)!=(a[193770]|0)):0){Il(b);Jl(j,b,g);Kl(b)}d=kC(b,d)|0}Ll(j);l=k;return}function Hl(a,b,d){a=a|0;b=b|0;d=d|0;c[b>>2]=d;c[b+4>>2]=d+512;c[b+12>>2]=0;c[b+8>>2]=0;c[a>>2]=b;c[a+4>>2]=b;c[a+8>>2]=d;return}function Il(a){a=a|0;c[(c[a+16>>2]|0)+192>>2]=0;c[46793]=0;return}function Jl(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;q=l;l=l+32|0;p=q;Ml(b,e);k=p+8|0;m=p+16|0;n=p+24|0;a:while(1){o=Nl(b)|0;if(!o)break;e=o+16|0;if((a[(c[e>>2]|0)+157>>0]|0)==(a[193770]|0))continue;Ol(d,o);h=c[e>>2]|0;g=h+180|0;j=c[g+4>>2]|0;i=p;c[i>>2]=c[g>>2];c[i+4>>2]=j;i=h+172|0;j=c[i+4>>2]|0;g=k;c[g>>2]=c[i>>2];c[g+4>>2]=j;g=h+188|0;j=c[g+4>>2]|0;i=m;c[i>>2]=c[g>>2];c[i+4>>2]=j;h=h+196|0;i=c[h+4>>2]|0;j=n;c[j>>2]=c[h>>2];c[j+4>>2]=i;j=3;while(1){if((j|0)<=-1)continue a;e=c[p+(j<<3)>>2]|0;b:do if(e|0){i=(c[p+(j<<3)+4>>2]|0)+-1|0;h=e+(i<<2)|0;while(1){if((i|0)<=-1)break b;f=c[h>>2]|0;g=c[f>>2]&3;e=c[((g|0)==2?f:f+-48|0)+40>>2]|0;if((e|0)==(o|0))e=c[((g|0)==3?f:f+48|0)+40>>2]|0;if((a[(c[e+16>>2]|0)+157>>0]|0)!=(a[193770]|0)?(e|0)==(fP(e)|0):0)Ml(b,e);h=h+-4|0;i=i+-1|0}}while(0);j=j+-1|0}}l=q;return}function Kl(a){a=a|0;var b=0,d=0,e=0,f=0;d=a+16|0;b=c[d>>2]|0;f=b+220|0;e=c[f>>2]|0;a=e+1|0;c[f>>2]=a;b=c[b+216>>2]|0;if(!b)a=KK(a<<2)|0;else a=MK(b,a<<2)|0;f=c[d>>2]|0;c[f+216>>2]=a;c[a+(e<<2)>>2]=c[f+192>>2];return}function Ll(a){a=a|0;var b=0;a=c[(c[a>>2]|0)+12>>2]|0;while(1){if(!a)break;b=c[a+12>>2]|0;U1(c[a>>2]|0);U1(a);a=b}return}function Ml(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;k=l;l=l+16|0;h=k+8|0;g=k;j=b+8|0;f=c[j>>2]|0;i=b+4|0;b=c[i>>2]|0;if((f|0)==(c[b+4>>2]|0)){f=c[b+12>>2]|0;if(!f){f=JK(16)|0;if(!f)gA(1,98969,g)|0;c[f+8>>2]=c[i>>2];c[f+12>>2]=0;b=JK(4e6)|0;c[f>>2]=b;if(!b){gA(1,88377,h)|0;b=c[f>>2]|0}c[f+4>>2]=b+4e6;c[(c[i>>2]|0)+12>>2]=f}c[i>>2]=f;f=c[f>>2]|0;c[j>>2]=f}a[(c[e+16>>2]|0)+157>>0]=(d[193770]|0)+1;c[j>>2]=f+4;c[f>>2]=e;l=k;return}function Nl(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;f=a+8|0;b=c[f>>2]|0;d=a+4|0;e=c[d>>2]|0;if((b|0)==(c[e>>2]|0))if((e|0)==(c[a>>2]|0))b=0;else{b=c[e+8>>2]|0;c[d>>2]=b;b=c[b+4>>2]|0;c[f>>2]=b;g=4}else g=4;if((g|0)==4){b=b+-4|0;c[f>>2]=b;b=c[b>>2]|0}return b|0}function Ol(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;f=c[b+16>>2]|0;g=f+232|0;c[g>>2]=(c[g>>2]|0)+1;g=c[d+16>>2]|0;a[g+157>>0]=a[193770]|0;b=c[46793]|0;e=g+168|0;if(!b){c[e>>2]=0;c[f+192>>2]=d}else{c[e>>2]=b;c[(c[b+16>>2]|0)+164>>2]=d}c[46793]=d;c[g+164>>2]=0;return}function Pl(b){b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0,k=0,l=0,m=0,n=0.0,o=0.0;m=b+16|0;d=(c[m>>2]|0)+192|0;while(1){d=c[d>>2]|0;if(!d)break;g=d+16|0;d=c[g>>2]|0;e=c[d+188>>2]|0;a:do if(!e)f=0;else{f=0;while(1){e=c[e+(f<<2)>>2]|0;if(!e){f=0;break a}Ql(e);d=c[g>>2]|0;f=f+1|0;e=c[d+188>>2]|0}}while(0);while(1){if((f|0)>=(c[d+208>>2]|0))break;e=c[(c[d+204>>2]|0)+(f<<2)>>2]|0;l=c[e>>2]&3;if((c[(c[(c[((l|0)==2?e:e+-48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)==(c[(c[(c[((l|0)==3?e:e+48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)){Ql(e);d=c[g>>2]|0}f=f+1|0}d=d+164|0}l=c[m>>2]|0;d=c[l+196>>2]|0;if(!((c[d+56>>2]|0)==0?(c[l+180>>2]|0)<=0:0))i=13;b:do if((i|0)==13){i=c[d+4>>2]|0;g=0;c:while(1){d=c[i+(g<<2)>>2]|0;if(!d)break b;e=c[(c[d+16>>2]|0)+196>>2]|0;d=0;while(1){f=c[e+(d<<2)>>2]|0;if(!f)break;l=c[f+16>>2]|0;if(c[l+96>>2]|0?(a[l+113>>0]|0)==0:0)break c;d=d+1|0}g=g+1|0}Rl(b)}while(0);Hi(b);e=0;d=(c[m>>2]|0)+192|0;while(1){d=c[d>>2]|0;if(!d)break;l=d+16|0;d=c[l>>2]|0;f=c[d+188>>2]|0;d:do if(f){k=0;while(1){g=c[f+(k<<2)>>2]|0;if(!g){k=0;break}i=c[g+16>>2]|0;j=c[i+96>>2]|0;do if(j)if(!(a[i+113>>0]|0)){Sl(g);f=c[l>>2]|0;e=1;d=f;f=c[f+188>>2]|0;break}else{h[i+136>>3]=+h[((c[(c[m>>2]|0)+116>>2]&1|0)==0?j+24|0:j+32|0)>>3];break}while(0);k=k+1|0}while(1){if((k|0)>=(c[d+208>>2]|0))break d;i=c[(c[d+204>>2]|0)+(k<<2)>>2]|0;j=c[i>>2]&3;g=c[((j|0)==3?i:i+48|0)+40>>2]|0;j=c[((j|0)==2?i:i+-48|0)+40>>2]|0;do if(!((g|0)==(j|0)?1:(c[(c[g+16>>2]|0)+232>>2]|0)!=(c[(c[j+16>>2]|0)+232>>2]|0))){f=i;do{j=c[f+16>>2]|0;f=c[j+172>>2]|0}while((f|0)!=0);f=a[j+113>>0]|0;g=c[i+16>>2]|0;a[g+113>>0]=f;g=c[g+96>>2]|0;if(g)if(!(f<<24>>24)){Sl(i);e=1;d=c[l>>2]|0;break}else{o=+h[((c[(c[m>>2]|0)+116>>2]&1|0)==0?g+24|0:g+32|0)>>3];j=j+136|0;n=+h[j>>3];h[j>>3]=o>n?o:n;break}}while(0);k=k+1|0}}while(0);d=d+164|0}if(e|0){Ah(b);Oh(b)}return e|0}function Ql(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;d=c[b>>2]&3;i=c[((d|0)==3?b:b+48|0)+40>>2]|0;f=i+16|0;g=c[(c[f>>2]|0)+236>>2]|0;d=c[(c[(c[((d|0)==2?b:b+-48|0)+40>>2]|0)+16>>2]|0)+236>>2]|0;h=(g|0)<(d|0);e=h?d:g;i=c[(c[(gg(i)|0)+16>>2]|0)+196>>2]|0;f=i+(c[(c[f>>2]|0)+232>>2]<<6)+4|0;d=h?g:d;a:while(1){d=d+1|0;if((d|0)>=(e|0))break;g=c[(c[(c[f>>2]|0)+(d<<2)>>2]|0)+16>>2]|0;switch(a[g+156>>0]|0){case 0:break a;case 1:break;default:continue a}if(c[g+104>>2]|0)break}if((d|0)==(e|0))do{i=c[b+16>>2]|0;a[i+113>>0]=1;b=c[i+172>>2]|0}while((b|0)!=0);return}function Rl(a){a=a|0;var d=0,e=0,f=0,g=0;g=a+16|0;a=c[g>>2]|0;if(b[a+236>>1]|0)qa(88434,88417,190,88453);d=(b[a+238>>1]|0)+3|0;a=c[a+196>>2]|0;if(!a)a=KK(d<<6)|0;else a=MK(a,d<<6)|0;d=a+64|0;a=c[g>>2]|0;c[a+196>>2]=d;a=b[a+238>>1]|0;while(1){if((a|0)<=-1)break;f=a+-1|0;e=d+(a<<6)|0;a=d+(f<<6)|0;d=e+64|0;do{c[e>>2]=c[a>>2];e=e+4|0;a=a+4|0}while((e|0)<(d|0));a=f;d=c[(c[g>>2]|0)+196>>2]|0}c[d+(a<<6)+8>>2]=0;c[d+(a<<6)>>2]=0;e=JK(8)|0;g=c[g>>2]|0;f=c[g+196>>2]|0;c[f+(a<<6)+12>>2]=e;c[f+(a<<6)+4>>2]=e;c[f+(a<<6)+56>>2]=0;h[f+(a<<6)+24>>3]=1.0;h[f+(a<<6)+16>>3]=1.0;h[f+(a<<6)+40>>3]=1.0;h[f+(a<<6)+32>>3]=1.0;g=g+236|0;b[g>>1]=(b[g>>1]|0)+-1<<16>>16;return}function Sl(b){b=b|0;var d=0,e=0,f=0.0,g=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0.0,q=0.0,r=0.0;j=b+16|0;if(c[(c[j>>2]|0)+96>>2]|0){m=b+48|0;k=gg(c[((c[b>>2]&3|0)==3?b:m)+40>>2]|0)|0;d=c[(c[(c[((c[b>>2]&3|0)==3?b:m)+40>>2]|0)+16>>2]|0)+232>>2]|0;l=Tl(k,b)|0;n=k+16|0;e=c[n>>2]|0;g=c[e+196>>2]|0;o=d+-1|0;i=c[c[g+(o<<6)+4>>2]>>2]|0;if(!i)f=+h[g+(d<<6)+24>>3]+ +h[(c[(c[c[g+(d<<6)+4>>2]>>2]|0)+16>>2]|0)+24>>3]+ +(c[e+252>>2]|0);else f=+h[(c[i+16>>2]|0)+24>>3]-+h[g+(o<<6)+16>>3];d=Ul(k,o,l)|0;k=c[(c[j>>2]|0)+96>>2]|0;q=+h[k+24>>3];p=+h[k+32>>3];j=(c[(c[n>>2]|0)+116>>2]&1|0)==0;r=j?p:q;g=d+16|0;e=c[g>>2]|0;h[e+80>>3]=r;l=~~(r*.5);p=(j?q:p)*.5;h[e+96>>3]=p;h[e+88>>3]=p;c[e+104>>2]=k;h[e+24>>3]=+(l+~~f|0);e=nh(d,c[((c[b>>2]&3|0)==3?b:m)+40>>2]|0,b)|0;e=c[e+16>>2]|0;h[e+16>>3]=-+h[(c[g>>2]|0)+88>>3];h[e+56>>3]=+h[(c[(c[((c[b>>2]&3|0)==3?b:m)+40>>2]|0)+16>>2]|0)+96>>3];a[e+112>>0]=4;e=b+-48|0;d=nh(d,c[((c[b>>2]&3|0)==2?b:e)+40>>2]|0,b)|0;g=c[g>>2]|0;d=c[d+16>>2]|0;h[d+16>>3]=+h[g+96>>3];h[d+56>>3]=+h[(c[(c[((c[b>>2]&3|0)==2?b:e)+40>>2]|0)+16>>2]|0)+88>>3];a[d+112>>0]=4;d=c[(c[n>>2]|0)+196>>2]|0;e=d+(o<<6)+16|0;f=+(l|0);if(+h[e>>3]>3]=f;d=d+(o<<6)+24|0;if(+h[d>>3]>3]=f;c[g+112>>2]=b}return} +function QI(d,f,g){d=d|0;f=f|0;g=g|0;var i=0,j=0,k=0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;A=l;l=l+160|0;y=A+24|0;w=A+20|0;v=A+16|0;o=A;p=A+32|0;x=c[d+152>>2]|0;c[y>>2]=0;c[w>>2]=0;c[v>>2]=0;z=aI(d)|0;c[z+4>>2]=3;c[z+8>>2]=f;c[z+12>>2]=9;t=f+16|0;n=c[(c[t>>2]|0)+96>>2]|0;if((n|0?(a[n+82>>0]|0)==0:0)?(eP(QA(f,100105)|0,0)|0)<<24>>24:0){n=z+260|0;b[n>>1]=b[n>>1]|512}if(g|0?c[(c[t>>2]|0)+8>>2]|0:0)lS(d,g);g=c[47206]|0;if((g|0?(i=RA(f,g)|0,i|0):0)?a[i>>0]|0:0)uS(d,+_O(f,c[47206]|0,1.0,0.0));do if(x&134217728|0){g=f+48|0;if((e[(c[(xC(c[((c[f>>2]&3|0)==3?f:g)+40>>2]|0)|0)+16>>2]|0)+178>>1]|0)>2){m=+h[(c[(c[(c[((c[f>>2]&3|0)==3?f:g)+40>>2]|0)+16>>2]|0)+132>>2]|0)+16>>3]*72.0;h[z+176>>3]=+(~~(m+(m>=0.0?.5:-.5))|0);m=+h[(c[(c[(c[((c[f>>2]&3|0)==2?f:f+-48|0)+40>>2]|0)+16>>2]|0)+132>>2]|0)+16>>3]*72.0;h[z+184>>3]=+(~~(m+(m>=0.0?.5:-.5))|0);break}else{n=z+176|0;c[n>>2]=0;c[n+4>>2]=0;c[n+8>>2]=0;c[n+12>>2]=0;break}}while(0);if(x&32768|0){n=c[t>>2]|0;g=c[n+96>>2]|0;if(!g)g=c[z+192>>2]|0;else{g=c[g>>2]|0;c[z+192>>2]=g}i=z+196|0;c[i>>2]=g;k=z+204|0;c[k>>2]=g;j=z+200|0;c[j>>2]=g;g=c[n+108>>2]|0;if(g|0)c[i>>2]=c[g>>2];g=c[n+104>>2]|0;if(g|0)c[j>>2]=c[g>>2];g=c[n+100>>2]|0;if(g|0)c[k>>2]=c[g>>2]}if(!(x&65536))j=0;else{kA(o,128,p);c[z+212>>2]=EK(dI(d,f,o)|0,f)|0;oA(o);g=QA(f,141055)|0;if((g|0)!=0?(a[g>>0]|0)!=0:0)q=31;else{g=QA(f,111477)|0;if((g|0)!=0?(a[g>>0]|0)!=0:0)q=31;else i=0}if((q|0)==31)i=EK(g,f)|0;g=QA(f,100118)|0;if((g|0)!=0?(a[g>>0]|0)!=0:0)q=36;else q=34;do if((q|0)==34){g=QA(f,100127)|0;if(g|0?a[g>>0]|0:0){q=36;break}if(i|0){g=D4(i)|0;q=39}}while(0);if((q|0)==36){g=EK(g,f)|0;q=39}if((q|0)==39)c[z+208>>2]=g;g=QA(f,100135)|0;if((g|0)!=0?(a[g>>0]|0)!=0:0)q=44;else q=42;do if((q|0)==42){g=QA(f,100145)|0;if(g|0?a[g>>0]|0:0){q=44;break}if(i|0){g=D4(i)|0;q=47}}while(0);if((q|0)==44){g=EK(g,f)|0;q=47}if((q|0)==47)c[z+216>>2]=g;g=QA(f,100154)|0;if((g|0)!=0?(a[g>>0]|0)!=0:0)q=52;else q=50;do if((q|0)==50){g=QA(f,100163)|0;if(g|0?a[g>>0]|0:0){q=52;break}if(i|0)c[z+220>>2]=D4(i)|0}while(0);if((q|0)==52){c[z+220>>2]=EK(g,f)|0;q=z+260|0;b[q>>1]=b[q>>1]|128}g=QA(f,100171)|0;if((g|0)!=0?(a[g>>0]|0)!=0:0)q=59;else q=57;do if((q|0)==57){g=QA(f,100180)|0;if(g|0?a[g>>0]|0:0){q=59;break}if(i|0)c[z+224>>2]=D4(i)|0}while(0);if((q|0)==59){c[z+224>>2]=EK(g,f)|0;q=z+260|0;b[q>>1]=b[q>>1]|256}j=i}do if(x&8388608){g=QA(f,141088)|0;if((g|0)!=0?(a[g>>0]|0)!=0:0)i=EK(g,f)|0;else i=0;g=QA(f,100188)|0;if((g|0)!=0?(a[g>>0]|0)!=0:0){q=z+260|0;b[q>>1]=b[q>>1]|64;g=EK(g,f)|0;q=72}else q=70;if((q|0)==70?i|0:0){g=D4(i)|0;q=72}if((q|0)==72)c[z+244>>2]=g;g=QA(f,100199)|0;if((g|0)!=0?(a[g>>0]|0)!=0:0){g=EK(g,f)|0;q=78}else q=76;if((q|0)==76?i|0:0){g=D4(i)|0;q=78}if((q|0)==78)c[z+248>>2]=g;g=QA(f,100211)|0;if((g|0)!=0?(a[g>>0]|0)!=0:0){c[z+252>>2]=EK(g,f)|0;p=z+260|0;b[p>>1]=b[p>>1]|16}else q=82;if((q|0)==82?i|0:0)c[z+252>>2]=D4(i)|0;g=QA(f,100222)|0;if(g|0?a[g>>0]|0:0){q=z+260|0;b[q>>1]=b[q>>1]|32;c[z+256>>2]=EK(g,f)|0;break}if(i)c[z+256>>2]=D4(i)|0;else i=0}else i=0;while(0);do if(x&4194304|0){g=QA(f,141101)|0;if((g|0)!=0?(a[g>>0]|0)!=0:0)q=94;else q=92;do if((q|0)==92){g=QA(f,100233)|0;if(g|0?a[g>>0]|0:0){q=94;break}g=c[z+192>>2]|0;if(g|0)c[z+228>>2]=D4(g)|0}while(0);if((q|0)==94){p=jJ(g,f)|0;c[z+228>>2]=EK(p,f)|0;U1(p);p=z+260|0;b[p>>1]=b[p>>1]|1}g=QA(f,100245)|0;if((g|0)!=0?(a[g>>0]|0)!=0:0){p=jJ(g,f)|0;c[z+232>>2]=EK(p,f)|0;U1(p);p=z+260|0;b[p>>1]=b[p>>1]|8}else q=100;if((q|0)==100?(r=c[z+192>>2]|0,r|0):0)c[z+232>>2]=D4(r)|0;g=QA(f,100258)|0;if((g|0)!=0?(a[g>>0]|0)!=0:0){r=jJ(g,f)|0;c[z+236>>2]=EK(r,f)|0;U1(r);r=z+260|0;b[r>>1]=b[r>>1]|2}else q=105;if((q|0)==105?(s=c[z+200>>2]|0,s|0):0)c[z+236>>2]=D4(s)|0;g=QA(f,100270)|0;if(g|0?a[g>>0]|0:0){s=jJ(g,f)|0;c[z+240>>2]=EK(s,f)|0;U1(s);s=z+260|0;b[s>>1]=b[s>>1]|4;break}g=c[z+204>>2]|0;if(g|0)c[z+240>>2]=D4(g)|0}while(0);U1(j);U1(i);do if(x&4259840|0?(u=c[(c[t>>2]|0)+8>>2]|0,u|0):0){if(!(c[z+208>>2]|0)){if((x&524288|0)==0|(c[z+228>>2]|0)==0)break}else if(!(x&524288))break;m=+h[(c[d+16>>2]|0)+152>>3]*.5;m=m>2.0?m:2.0;i=c[u+4>>2]|0;g=0;while(1){if((g|0)>=(i|0))break;kJ(y,w,v,(c[u>>2]|0)+(g*48|0)|0,m);g=g+1|0}j=c[v>>2]|0;c[z+276>>2]=j;k=c[w>>2]|0;c[z+280>>2]=k;if(!(x&8192)){g=0;i=0;while(1){if((i|0)>=(j|0))break;g=(c[k+(i<<2)>>2]|0)+g|0;i=i+1|0}y=c[y>>2]|0;NR(d,y,y,g)|0;g=y}else g=c[y>>2]|0;c[z+284>>2]=g;c[z+264>>2]=2;c[z+272>>2]=g;c[z+268>>2]=c[k>>2]}while(0);aS(d,f);g=c[z+208>>2]|0;if(!((g|0)==0?!(b[z+260>>1]&1):0))cS(d,g,c[z+228>>2]|0,c[z+244>>2]|0,c[z+212>>2]|0);l=A;return}function RI(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0.0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0.0,N=0.0,O=0,P=0,Q=0,R=0,S=0;P=l;l=l+240|0;L=P+224|0;K=P+208|0;x=P+128|0;w=P+112|0;O=P+64|0;C=P+48|0;D=P+32|0;E=P+16|0;F=P;G=P+192|0;H=P+176|0;y=P+160|0;B=P+144|0;c[E>>2]=0;c[E+4>>2]=0;c[E+8>>2]=0;c[E+12>>2]=0;M=+h[(c[b+16>>2]|0)+152>>3];HT(QA(e,100032)|0);J=e+16|0;a:do if(c[(c[J>>2]|0)+8>>2]|0){N=+_O(e,c[47188]|0,1.0,0.0);k=aP(e,c[47176]|0,195059)|0;v=(f|0)!=0;b:do if(v){g=f;while(1){i=g;g=g+4|0;i=c[i>>2]|0;if(!i){o=0;break b}if((a[i>>0]|0)!=116)continue;if(!(s2(i,111117)|0)){o=1;break}}}else o=0;while(0);j=k;q=0;i=0;c:while(1){switch(a[j>>0]|0){case 0:break c;case 58:{g=q+1|0;break}case 59:{g=q;i=i+1|0;break}default:g=q}j=j+1|0;q=g}n=(q|0)!=0;if((i|0)!=0&n)if(!(ZI(b,e,f,k,q+1|0,N,M)|0))break;else m=137314;else m=k;g=d[(c[J>>2]|0)+115>>0]|0;if(!(g&1))if(!(g&2))if(!(g&8))if(!(g&4)){i=m;j=bP(e,c[47177]|0,m)|0}else{j=106296;g=106288;k=188712;i=188712;p=18}else{j=106280;g=106272;k=188712;i=188712;p=18}else{j=106264;g=106256;k=188712;i=188712;p=18}else{j=106248;g=106240;k=188712;i=188712;p=18}if((p|0)==18){i=c[i>>2]|0;i=bP(e,i,_I(m,g)|0)|0;g=bP(e,c[k>>2]|0,j)|0;if((i|0)==(m|0)){i=m;j=g}else{hS(b,i);j=g}}if((j|0)!=(m|0))jS(b,j);if(o<<24>>24){i=(a[i>>0]|0)==0?137314:i;g=(a[j>>0]|0)==0?137314:j;hS(b,137379);jS(b,i);u=O;r=c[c[(c[J>>2]|0)+8>>2]>>2]|0;s=u+48|0;do{c[u>>2]=c[r>>2];u=u+4|0;r=r+4|0}while((u|0)<(s|0));J=zO(O,$I(e)|0,M,0,0)|0;nS(b,c[J+8>>2]|0,c[J>>2]|0,1);aJ(J);hS(b,i);if((g|0)!=(i|0))jS(b,g);g=c[O+8>>2]|0;if(g|0){I=O+16|0;J=c[O>>2]|0;c[K>>2]=c[I>>2];c[K+4>>2]=c[I+4>>2];c[K+8>>2]=c[I+8>>2];c[K+12>>2]=c[I+12>>2];c[L>>2]=c[J>>2];c[L+4>>2]=c[J+4>>2];c[L+8>>2]=c[J+8>>2];c[L+12>>2]=c[J+12>>2];ZH(b,2,K,L,N,M,g)}g=c[O+12>>2]|0;if(!g)break;J=O+32|0;O=(c[O>>2]|0)+((c[O+4>>2]|0)+-1<<4)|0;c[K>>2]=c[J>>2];c[K+4>>2]=c[J+4>>2];c[K+8>>2]=c[J+8>>2];c[K+12>>2]=c[J+12>>2];c[L>>2]=c[O>>2];c[L+4>>2]=c[O+4>>2];c[L+8>>2]=c[O+8>>2];c[L+12>>2]=c[O+12>>2];ZH(b,3,K,L,N,M,g);break}g=c[J>>2]|0;if(!n){do if(!(a[g+115>>0]&3)){if(a[i>>0]|0){hS(b,i);jS(b,j);break}hS(b,137314);if(!(a[j>>0]|0)){jS(b,137314);break}else{jS(b,j);break}}while(0);k=b+152|0;m=O+4|0;n=O+8|0;o=O+12|0;p=O+32|0;q=O+16|0;j=0;while(1){g=c[(c[J>>2]|0)+8>>2]|0;if((j|0)>=(c[g+4>>2]|0))break a;u=O;r=(c[g>>2]|0)+(j*48|0)|0;s=u+48|0;do{c[u>>2]=c[r>>2];u=u+4|0;r=r+4|0}while((u|0)<(s|0));g=c[O>>2]|0;i=c[m>>2]|0;do if(!(c[k>>2]&16384)){pS(b,g,i,0,0,0);g=c[n>>2]|0;if(g|0){I=c[O>>2]|0;c[K>>2]=c[q>>2];c[K+4>>2]=c[q+4>>2];c[K+8>>2]=c[q+8>>2];c[K+12>>2]=c[q+12>>2];c[L>>2]=c[I>>2];c[L+4>>2]=c[I+4>>2];c[L+8>>2]=c[I+8>>2];c[L+12>>2]=c[I+12>>2];ZH(b,2,K,L,N,M,g)}g=c[o>>2]|0;if(g|0){I=(c[O>>2]|0)+((c[m>>2]|0)+-1<<4)|0;c[K>>2]=c[p>>2];c[K+4>>2]=c[p+4>>2];c[K+8>>2]=c[p+8>>2];c[K+12>>2]=c[p+12>>2];c[L>>2]=c[I>>2];c[L+4>>2]=c[I+4>>2];c[L+8>>2]=c[I+8>>2];c[L+12>>2]=c[I+12>>2];ZH(b,3,K,L,N,M,g)}if((c[(c[(c[J>>2]|0)+8>>2]|0)+4>>2]|0)>1){if(!(c[n>>2]|0)){if(!(v&(c[o>>2]|0)!=0))break}else if(!v)break;lS(b,f)}}else pS(b,g,i,c[n>>2]|0,c[o>>2]|0,0);while(0);j=j+1|0}}I=c[(c[g+8>>2]|0)+4>>2]|0;A=I*48|0;z=T1(A)|0;A=T1(A)|0;t=+(q+2|0)*.5;v=O+4|0;p=C+8|0;q=D+8|0;e=E+8|0;f=F+8|0;o=0;while(1){if((o|0)>=(I|0))break;u=O;r=(c[c[(c[J>>2]|0)+8>>2]>>2]|0)+(o*48|0)|0;s=u+48|0;do{c[u>>2]=c[r>>2];u=u+4|0;r=r+4|0}while((u|0)<(s|0));g=c[v>>2]|0;c[z+(o*48|0)+4>>2]=g;c[A+(o*48|0)+4>>2]=g;n=g<<4;m=T1(n)|0;c[z+(o*48|0)>>2]=m;n=T1(n)|0;c[A+(o*48|0)>>2]=n;k=c[O>>2]|0;c[F>>2]=c[k>>2];c[F+4>>2]=c[k+4>>2];c[F+8>>2]=c[k+8>>2];c[F+12>>2]=c[k+12>>2];k=0;while(1){if((k|0)>=(g+-1|0))break;c[C>>2]=c[F>>2];c[C+4>>2]=c[F+4>>2];c[C+8>>2]=c[F+8>>2];c[C+12>>2]=c[F+12>>2];g=k+1|0;j=(c[O>>2]|0)+(g<<4)|0;c[D>>2]=c[j>>2];c[D+4>>2]=c[j+4>>2];c[D+8>>2]=c[j+8>>2];c[D+12>>2]=c[j+12>>2];j=m+(k<<4)|0;if(!k){c[K>>2]=c[C>>2];c[K+4>>2]=c[C+4>>2];c[K+8>>2]=c[C+8>>2];c[K+12>>2]=c[C+12>>2];c[L>>2]=c[D>>2];c[L+4>>2]=c[D+4>>2];c[L+8>>2]=c[D+8>>2];c[L+12>>2]=c[D+12>>2];bJ(G,K,L);c[j>>2]=c[G>>2];c[j+4>>2]=c[G+4>>2];c[j+8>>2]=c[G+8>>2];c[j+12>>2]=c[G+12>>2]}else{c[K>>2]=c[E>>2];c[K+4>>2]=c[E+4>>2];c[K+8>>2]=c[E+8>>2];c[K+12>>2]=c[E+12>>2];c[L>>2]=c[D>>2];c[L+4>>2]=c[D+4>>2];c[L+8>>2]=c[D+8>>2];c[L+12>>2]=c[D+12>>2];bJ(H,K,L);c[j>>2]=c[H>>2];c[j+4>>2]=c[H+4>>2];c[j+8>>2]=c[H+8>>2];c[j+12>>2]=c[H+12>>2]}R=c[O>>2]|0;s=k+2|0;S=R+(s<<4)|0;c[E>>2]=c[S>>2];c[E+4>>2]=c[S+4>>2];c[E+8>>2]=c[S+8>>2];c[E+12>>2]=c[S+12>>2];u=k+3|0;R=R+(u<<4)|0;c[F>>2]=c[R>>2];c[F+4>>2]=c[R+4>>2];c[F+8>>2]=c[R+8>>2];c[F+12>>2]=c[R+12>>2];Q=m+(g<<4)|0;r=m+(s<<4)|0;c[w>>2]=c[C>>2];c[w+4>>2]=c[C+4>>2];c[w+8>>2]=c[C+8>>2];c[w+12>>2]=c[C+12>>2];c[x>>2]=c[D>>2];c[x+4>>2]=c[D+4>>2];c[x+8>>2]=c[D+8>>2];c[x+12>>2]=c[D+12>>2];c[K>>2]=c[S>>2];c[K+4>>2]=c[S+4>>2];c[K+8>>2]=c[S+8>>2];c[K+12>>2]=c[S+12>>2];c[L>>2]=c[R>>2];c[L+4>>2]=c[R+4>>2];c[L+8>>2]=c[R+8>>2];c[L+12>>2]=c[R+12>>2];cJ(y,w,x,K,L);c[r>>2]=c[y>>2];c[r+4>>2]=c[y+4>>2];c[r+8>>2]=c[y+8>>2];c[r+12>>2]=c[y+12>>2];c[Q>>2]=c[y>>2];c[Q+4>>2]=c[y+4>>2];c[Q+8>>2]=c[y+8>>2];c[Q+12>>2]=c[y+12>>2];h[n+(k<<4)>>3]=+h[C>>3]-+h[j>>3]*t;h[n+(k<<4)+8>>3]=+h[p>>3]-+h[m+(k<<4)+8>>3]*t;h[n+(g<<4)>>3]=+h[D>>3]-+h[Q>>3]*t;h[n+(g<<4)+8>>3]=+h[q>>3]-+h[m+(g<<4)+8>>3]*t;h[n+(s<<4)>>3]=+h[E>>3]-+h[r>>3]*t;h[n+(s<<4)+8>>3]=+h[e>>3]-+h[m+(s<<4)+8>>3]*t;k=u;g=c[v>>2]|0}S=m+(k<<4)|0;c[K>>2]=c[E>>2];c[K+4>>2]=c[E+4>>2];c[K+8>>2]=c[E+8>>2];c[K+12>>2]=c[E+12>>2];c[L>>2]=c[F>>2];c[L+4>>2]=c[F+4>>2];c[L+8>>2]=c[F+8>>2];c[L+12>>2]=c[F+12>>2];bJ(B,K,L);c[S>>2]=c[B>>2];c[S+4>>2]=c[B+4>>2];c[S+8>>2]=c[B+8>>2];c[S+12>>2]=c[B+12>>2];h[n+(k<<4)>>3]=+h[F>>3]-+h[S>>3]*t;h[n+(k<<4)+8>>3]=+h[f>>3]-+h[m+(k<<4)+8>>3]*t;o=o+1|0}s=D4(i)|0;f=0;r=i;g=i;j=i;i=s;while(1){i=A4(i,107984)|0;if(!i)break;e=(a[i>>0]|0)==0?137314:i;if((e|0)!=(j|0))if(!(a[(c[J>>2]|0)+115>>0]&3)){hS(b,e);jS(b,e);j=e}else j=e;m=(f|0)==0;n=f>>>0<2;i=0;while(1){if((i|0)>=(I|0))break;o=c[A+(i*48|0)>>2]|0;p=c[z+(i*48|0)>>2]|0;q=c[A+(i*48|0)+4>>2]|0;k=0;while(1){if((k|0)>=(q|0))break;S=o+(k<<4)|0;h[S>>3]=+h[S>>3]+ +h[p+(k<<4)>>3];S=o+(k<<4)+8|0;h[S>>3]=+h[S>>3]+ +h[p+(k<<4)+8>>3];k=k+1|0}pS(b,o,q,0,0,0);i=i+1|0}f=f+1|0;r=m?e:r;g=n?e:g;i=0}i=c[O+8>>2]|0;if(!i)i=0;else{if(g){if(!(a[(c[J>>2]|0)+115>>0]&3)){hS(b,g);jS(b,g)}}else g=0;R=O+16|0;S=c[O>>2]|0;c[K>>2]=c[R>>2];c[K+4>>2]=c[R+4>>2];c[K+8>>2]=c[R+8>>2];c[K+12>>2]=c[R+12>>2];c[L>>2]=c[S>>2];c[L+4>>2]=c[S+4>>2];c[L+8>>2]=c[S+8>>2];c[L+12>>2]=c[S+12>>2];ZH(b,2,K,L,N,M,i);i=g}j=O+12|0;g=c[j>>2]|0;if(g|0){if((i|0)!=(r|0)?(a[(c[J>>2]|0)+115>>0]&3)==0:0){hS(b,r);jS(b,r);g=c[j>>2]|0}R=O+32|0;S=(c[O>>2]|0)+((c[v>>2]|0)+-1<<4)|0;c[K>>2]=c[R>>2];c[K+4>>2]=c[R+4>>2];c[K+8>>2]=c[R+8>>2];c[K+12>>2]=c[R+12>>2];c[L>>2]=c[S>>2];c[L+4>>2]=c[S+4>>2];c[L+8>>2]=c[S+8>>2];c[L+12>>2]=c[S+12>>2];ZH(b,3,K,L,N,M,g)}U1(s);g=0;while(1){if((g|0)>=(I|0))break;U1(c[z+(g*48|0)>>2]|0);U1(c[A+(g*48|0)>>2]|0);g=g+1|0}U1(z);U1(A)}while(0);l=P;return}function SI(a){a=a|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;x=l;l=l+64|0;r=x+48|0;u=x+32|0;t=x+16|0;s=x;w=c[a+16>>2]|0;v=c[w+8>>2]|0;q=w+208|0;if(!((c[q>>2]|0)==0?!(b[w+260>>1]&1):0))d=3;a:do if((d|0)==3?(dS(a),p=w+276|0,e=c[p>>2]|0,e|0):0){h=w+280|0;d=c[h>>2]|0;i=w+268|0;j=w+284|0;k=w+272|0;m=w+228|0;n=w+244|0;o=w+212|0;f=c[d>>2]|0;g=1;while(1){if((g|0)>=(e|0))break a;c[i>>2]=c[d+(g<<2)>>2];c[k>>2]=(c[j>>2]|0)+(f<<4);cS(a,c[q>>2]|0,c[m>>2]|0,c[n>>2]|0,c[o>>2]|0);dS(a);y=c[h>>2]|0;f=(c[y+(g<<2)>>2]|0)+f|0;g=g+1|0;e=c[p>>2]|0;d=y}}while(0);c[w+268>>2]=0;c[w+272>>2]=0;q=v+16|0;d=c[q>>2]|0;e=c[d+8>>2]|0;if(!e)f=w+260|0;else{p=c[e>>2]|0;d=c[p>>2]|0;y=c[p+8>>2]|0;o=p+16|0;c[t>>2]=c[o>>2];c[t+4>>2]=c[o+4>>2];c[t+8>>2]=c[o+8>>2];c[t+12>>2]=c[o+12>>2];p=p+32|0;c[s>>2]=c[p>>2];c[s+4>>2]=c[p+4>>2];c[s+8>>2]=c[p+8>>2];c[s+12>>2]=c[p+12>>2];if(!y){c[u>>2]=c[d>>2];c[u+4>>2]=c[d+4>>2];c[u+8>>2]=c[d+8>>2];c[u+12>>2]=c[d+12>>2]}else{c[u>>2]=c[t>>2];c[u+4>>2]=c[t+4>>2];c[u+8>>2]=c[t+8>>2];c[u+12>>2]=c[t+12>>2]}f=w+260|0;p=b[f>>1]|0;o=c[w+220>>2]|0;c[r>>2]=c[u>>2];c[r+4>>2]=c[u+4>>2];c[r+8>>2]=c[u+8>>2];c[r+12>>2]=c[u+12>>2];TI(a,r,(p<<8&65535)<<16>>16>>15&255,o,(p<<14&65535)<<16>>16>>15&255);p=c[(c[q>>2]|0)+8>>2]|0;o=c[p>>2]|0;p=(c[p+4>>2]|0)+-1|0;d=c[o+(p*48|0)>>2]|0;e=c[o+(p*48|0)+4>>2]|0;y=c[o+(p*48|0)+12>>2]|0;n=o+(p*48|0)+16|0;c[t>>2]=c[n>>2];c[t+4>>2]=c[n+4>>2];c[t+8>>2]=c[n+8>>2];c[t+12>>2]=c[n+12>>2];t=o+(p*48|0)+32|0;c[s>>2]=c[t>>2];c[s+4>>2]=c[t+4>>2];c[s+8>>2]=c[t+8>>2];c[s+12>>2]=c[t+12>>2];if(!y){y=d+(e+-1<<4)|0;c[u>>2]=c[y>>2];c[u+4>>2]=c[y+4>>2];c[u+8>>2]=c[y+8>>2];c[u+12>>2]=c[y+12>>2]}else{c[u>>2]=c[s>>2];c[u+4>>2]=c[s+4>>2];c[u+8>>2]=c[s+8>>2];c[u+12>>2]=c[s+12>>2]}d=b[f>>1]|0;y=c[w+224>>2]|0;c[r>>2]=c[u>>2];c[r+4>>2]=c[u+4>>2];c[r+8>>2]=c[u+8>>2];c[r+12>>2]=c[u+12>>2];TI(a,r,(d<<7&65535)<<16>>16>>15&255,y,(d<<13&65535)<<16>>16>>15&255);d=c[q>>2]|0}e=c[d+96>>2]|0;g=(b[f>>1]<<12&65535)<<16>>16>>15<<16>>16;m=w+216|0;h=c[m>>2]|0;n=w+232|0;i=c[n>>2]|0;o=w+248|0;j=c[o>>2]|0;p=w+212|0;k=c[p>>2]|0;if(!((dP(aP(v,c[47186]|0,137308)|0)|0)<<24>>24))d=0;else d=c[(c[q>>2]|0)+8>>2]|0;UI(a,e,11,g,h,i,j,k,d);j=c[(c[q>>2]|0)+108>>2]|0;k=(b[f>>1]<<12&65535)<<16>>16>>15<<16>>16;i=c[m>>2]|0;h=c[n>>2]|0;e=c[o>>2]|0;g=c[p>>2]|0;if(!((dP(aP(v,c[47186]|0,137308)|0)|0)<<24>>24))d=0;else d=c[(c[q>>2]|0)+8>>2]|0;UI(a,j,11,k,i,h,e,g,d);UI(a,c[(c[q>>2]|0)+100>>2]|0,7,(b[f>>1]<<13&65535)<<16>>16>>15<<16>>16,c[w+224>>2]|0,c[w+240>>2]|0,c[w+256>>2]|0,c[p>>2]|0,0);UI(a,c[(c[q>>2]|0)+104>>2]|0,6,(b[f>>1]<<14&65535)<<16>>16>>15<<16>>16,c[w+220>>2]|0,c[w+236>>2]|0,c[w+252>>2]|0,c[p>>2]|0,0);bS(a);bI(a);l=x;return}function TI(a,d,e,f,g){a=a|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0;j=l;l=l+16|0;h=j;i=c[a+16>>2]|0;if(!(e<<24>>24))f=c[i+208>>2]|0;if(!(g<<24>>24==0?((f|0)==0?(b[i+260>>1]&1)==0:0):0)){c[h>>2]=c[d>>2];c[h+4>>2]=c[d+4>>2];c[h+8>>2]=c[d+8>>2];c[h+12>>2]=c[d+12>>2];YI(a,h)}l=j;return}function UI(b,d,e,f,g,h,i,j,k){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;var m=0,n=0,o=0,p=0,q=0,r=0;r=l;l=l+16|0;o=r;q=c[b+152>>2]|0;if(d|0?a[d+81>>0]|0:0){if(!j)n=0;else{n=JK((l2(j)|0)+11|0)|0;switch(e|0){case 11:{m=108224;break}case 7:{m=101583;break}case 6:{m=101593;break}default:qa(138394,99906,2730,100044)}c[o>>2]=j;c[o+4>>2]=m;m4(n,100060,o)|0}o=b+16|0;j=(c[o>>2]|0)+12|0;p=c[j>>2]|0;c[j>>2]=e;j=(f|0)!=0|(g|0)!=0;m=(q&4|0)==0;if(j&m){VI(b,d);cS(b,g,h,i,n)}DK(b,e,d);if(k|0)WI(b,d,k);if(j){if(!m){VI(b,d);cS(b,g,h,i,n)}dS(b)}U1(n);c[(c[o>>2]|0)+12>>2]=p}l=r;return}function VI(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0;d=c[a+16>>2]|0;e=c[a+152>>2]|0;if(e&4259840|0){f=e&131072;i=f>>>16^2;c[d+264>>2]=i;j=d+268|0;c[j>>2]=i+2;i=d+272|0;U1(c[i>>2]|0);d=JK(c[j>>2]<<4)|0;c[i>>2]=d;i=b+56|0;j=b+24|0;h[d>>3]=+h[i>>3]-+h[j>>3]*.5;g=b+64|0;b=b+32|0;h[d+8>>3]=+h[g>>3]-+h[b>>3]*.5;h[d+16>>3]=+h[j>>3]*.5+ +h[i>>3];h[d+24>>3]=+h[b>>3]*.5+ +h[g>>3];if(!(e&8192))NR(a,d,d,2)|0;if(!f)jK(d)}return}function WI(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0.0;o=l;l=l+96|0;g=o+80|0;i=o+32|0;j=o+16|0;k=o;f=c[d>>2]|0;while(1){m=a[f>>0]|0;if(!(m<<24>>24))break;if(!(S2(m&255)|0)){n=4;break}else f=f+1|0}if((n|0)==4){p=+h[d+24>>3];m=d+56|0;XI(i,+h[m>>3]+p*.5,+h[d+64>>3]-+h[d+32>>3]*.5);n=i+16|0;XI(j,+h[i>>3]-p,+h[i+8>>3]);c[n>>2]=c[j>>2];c[n+4>>2]=c[j+4>>2];c[n+8>>2]=c[j+8>>2];c[n+12>>2]=c[j+12>>2];n=i+32|0;c[g>>2]=c[m>>2];c[g+4>>2]=c[m+4>>2];c[g+8>>2]=c[m+8>>2];c[g+12>>2]=c[m+12>>2];qP(k,e,g);c[n>>2]=c[k>>2];c[n+4>>2]=c[k+4>>2];c[n+8>>2]=c[k+8>>2];c[n+12>>2]=c[k+12>>2];lS(b,c[(c[b>>2]|0)+336>>2]|0);hS(b,c[d+8>>2]|0);qS(b,i,3)}l=o;return}function XI(a,b,c){a=a|0;b=+b;c=+c;h[a>>3]=b;h[a+8>>3]=c;return}function YI(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0.0,i=0.0,j=0,k=0;d=c[a+16>>2]|0;e=c[a+152>>2]|0;if(e&4259840|0){f=e&131072;j=f>>>16^2;c[d+264>>2]=j;k=d+268|0;c[k>>2]=j+2;j=d+272|0;U1(c[j>>2]|0);d=JK(c[k>>2]<<4)|0;c[j>>2]=d;i=+h[b>>3];h[d>>3]=i+-3.0;g=+h[b+8>>3];h[d+8>>3]=g+-3.0;h[d+16>>3]=i+3.0;h[d+24>>3]=g+3.0;if(!(e&8192))NR(a,d,d,2)|0;if(!f)jK(d)}return}function ZI(a,b,d,e,f,h,i){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;h=+h;i=+i;var j=0,k=0,m=0.0,n=0.0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0;J=l;l=l+256|0;D=J+224|0;C=J+208|0;j=J+192|0;F=J+144|0;G=J+96|0;H=J+48|0;E=J;k=J+240|0;e=gI(e,f,k)|0;if((e|0)>1){z=b+48|0;A=xC(c[((c[b>>2]&3|0)==3?b:z)+40>>2]|0)|0;z=KB(c[((c[b>>2]&3|0)==3?b:z)+40>>2]|0)|0;A=(xB(A)|0)!=0;B=KB(c[((c[b>>2]&3|0)==2?b:b+-48|0)+40>>2]|0)|0;c[j>>2]=z;c[j+4>>2]=A?100079:100084;c[j+8>>2]=B;gA(3,100089,j)|0;if((e|0)==2)e=1;else I=4}else if((e|0)==1)e=1;else I=4;if((I|0)==4){B=b+16|0;r=c[k>>2]|0;s=r+8|0;t=H+4|0;u=F+8|0;v=F+12|0;w=(d|0)!=0;q=(d|0)==0;x=F+32|0;y=F+4|0;z=F+16|0;A=E+4|0;e=0;p=0;while(1){f=c[(c[B>>2]|0)+8>>2]|0;if((p|0)>=(c[f+4>>2]|0))break;j=F;f=(c[f>>2]|0)+(p*48|0)|0;b=j+48|0;do{c[j>>2]=c[f>>2];j=j+4|0;f=f+4|0}while((j|0)<(b|0));b=1;m=1.0;o=c[s>>2]|0;a:while(1){f=c[o>>2]|0;if(!f)break;k=o+4|0;n=+g[k>>2];do if(n<1.0e-05&n>-1.0e-05)f=b;else{hS(a,f);n=+g[k>>2];m=m-n;e=c[o>>2]|0;if(b|0){hJ(F,n,H,E);k=c[H>>2]|0;pS(a,k,c[t>>2]|0,0,0,0);U1(k);if(m<1.0e-05&m>-1.0e-05){I=11;break a}else{f=0;break}}if(m<1.0e-05&m>-1.0e-05){I=13;break a}j=G;f=E;b=j+48|0;do{c[j>>2]=c[f>>2];j=j+4|0;f=f+4|0}while((j|0)<(b|0));n=+g[k>>2];hJ(G,n/(m+n),H,E);U1(c[G>>2]|0);f=c[H>>2]|0;pS(a,f,c[t>>2]|0,0,0,0);U1(f);f=0}while(0);b=f;o=o+12|0}if((I|0)==11){I=0;U1(c[E>>2]|0)}else if((I|0)==13){I=0;o=c[E>>2]|0;pS(a,o,c[A>>2]|0,0,0,0);U1(o)}if(c[u>>2]|0){hS(a,c[c[s>>2]>>2]|0);jS(a,c[c[s>>2]>>2]|0);k=c[F>>2]|0;o=c[u>>2]|0;c[C>>2]=c[z>>2];c[C+4>>2]=c[z+4>>2];c[C+8>>2]=c[z+8>>2];c[C+12>>2]=c[z+12>>2];c[D>>2]=c[k>>2];c[D+4>>2]=c[k+4>>2];c[D+8>>2]=c[k+8>>2];c[D+12>>2]=c[k+12>>2];ZH(a,2,C,D,h,i,o)}if(c[v>>2]|0){hS(a,e);jS(a,e);k=(c[F>>2]|0)+((c[y>>2]|0)+-1<<4)|0;o=c[v>>2]|0;c[C>>2]=c[x>>2];c[C+4>>2]=c[x+4>>2];c[C+8>>2]=c[x+8>>2];c[C+12>>2]=c[x+12>>2];c[D>>2]=c[k>>2];c[D+4>>2]=c[k+4>>2];c[D+8>>2]=c[k+8>>2];c[D+12>>2]=c[k+12>>2];ZH(a,3,C,D,h,i,o)}do if((c[(c[(c[B>>2]|0)+8>>2]|0)+4>>2]|0)>1){if(!(c[u>>2]|0)){if(!(w&(c[v>>2]|0)!=0))break}else if(q)break;lS(a,d)}while(0);p=p+1|0}hI(r);e=0}l=J;return e|0}function _I(b,d){b=b|0;d=d|0;var e=0,f=0;e=1;a:while(1){switch(a[b>>0]|0){case 0:break a;case 58:{e=e+1|0;break}default:{}}b=b+1|0}f=O((l2(d)|0)+1|0,e)|0;b=f+10|0;if((c[47121]|0)<(f|0)){c[47121]=b;b=W1(c[47122]|0,b)|0;c[47122]=b}else b=c[47122]|0;r3(b,d)|0;while(1){e=e+-1|0;b=c[47122]|0;if(!e)break;f=b+(l2(b)|0)|0;a[f>>0]=58;a[f+1>>0]=0;F4(b,d)|0}return b|0}function $I(b){b=b|0;var d=0,e=0;d=c[47184]|0;a:do if(!d)e=7;else{d=RA(b,d)|0;switch(a[d>>0]|0){case 110:if(!(s2(d,135709)|0)){d=1;break a}else{e=7;break a}case 102:if(!(s2(d,100066)|0)){d=2;break a}else{e=7;break a}case 98:{if(!(s2(d,100074)|0)){d=3;break a}if(!(s2(d,111221)|0)){d=4;break a}else{e=7;break a}}default:{e=7;break a}}}while(0);if((e|0)==7){d=(xB(xC(c[((c[b>>2]&3|0)==2?b:b+-48|0)+40>>2]|0)|0)|0)!=0;d=d?2:1}return d|0}function aJ(a){a=a|0;if(a|0){U1(c[a+8>>2]|0);U1(a)}return}function bJ(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0,e=0.0,f=0.0;e=+h[b>>3]-+h[c>>3];f=+h[b+8>>3]-+h[c+8>>3];d=2.0/+C(+(e*e+.0001+f*f));h[a>>3]=d*f;h[a+8>>3]=-(e*d);return}function cJ(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0.0,g=0.0,i=0.0,j=0.0;g=+h[c>>3]-+h[d>>3];i=+h[c+8>>3]-+h[d+8>>3];f=+C(+(i*i+g*g));if(f<.0001){j=+h[b>>3]-+h[e>>3];f=+h[b+8>>3]-+h[e+8>>3];i=f;g=j;f=+C(+(j*j+.0001+f*f))}j=2.0/f;h[a>>3]=i*j;h[a+8>>3]=-(j*g);return}function dJ(a,b,c){a=+a;b=+b;c=+c;return +(c*.5*(1.0-a/b))}function eJ(a,b,c){a=+a;b=+b;c=+c;return +(c*.5)}function fJ(a,b,c){a=+a;b=+b;c=+c;return +(c*.5*(a/b))}function gJ(a,b,c){a=+a;b=+b;c=+c;b=a/b;return +((!(b<=.5)?1.0-b:b)*c)}function hJ(a,b,d,e){a=a|0;b=+b;d=d|0;e=e|0;var f=0.0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0.0,r=0,s=0;p=l;l=l+16|0;o=p;n=c[a+4>>2]|0;j=(n+-1|0)/3|0;if((n+-4|0)>>>0<3){c[d+4>>2]=4;c[d>>2]=JK(64)|0;c[e+4>>2]=4;n=JK(64)|0;c[e>>2]=n;kP(o,c[a>>2]|0,3,b,c[d>>2]|0,n)}else{n=JK(j<<3)|0;g=0;i=c[a>>2]|0;f=0.0;while(1){if((g|0)>=(j|0))break;q=+iJ(i);h[n+(g<<3)>>3]=q;g=g+1|0;i=i+48|0;f=q+f}b=f*b;m=0;f=0.0;while(1){if((j|0)<=(m|0))break;f=+h[n+(m<<3)>>3]+f;if(f>=b)break;m=m+1|0}k=m*3|0;g=k+4|0;i=d+4|0;c[i>>2]=g;c[d>>2]=JK(g<<4)|0;g=((j-m|0)*3|0)+1|0;j=e+4|0;c[j>>2]=g;c[e>>2]=JK(g<<4)|0;g=0;while(1){if((g|0)>=(c[i>>2]|0))break;r=(c[d>>2]|0)+(g<<4)|0;s=(c[a>>2]|0)+(g<<4)|0;c[r>>2]=c[s>>2];c[r+4>>2]=c[s+4>>2];c[r+8>>2]=c[s+8>>2];c[r+12>>2]=c[s+12>>2];g=g+1|0}g=g+-4|0;i=0;while(1){if((i|0)>=(c[j>>2]|0))break;s=(c[e>>2]|0)+(i<<4)|0;r=(c[a>>2]|0)+(g<<4)|0;c[s>>2]=c[r>>2];c[s+4>>2]=c[r+4>>2];c[s+8>>2]=c[r+8>>2];c[s+12>>2]=c[r+12>>2];g=g+1|0;i=i+1|0}q=+h[n+(m<<3)>>3];kP(o,(c[a>>2]|0)+(k<<4)|0,3,(b-f+q)/q,(c[d>>2]|0)+(k<<4)|0,c[e>>2]|0);U1(n)}l=p;return}function iJ(a){a=a|0;var b=0.0,c=0.0,d=0.0,e=0.0,f=0.0;e=+h[a+16>>3];d=+h[a>>3]-e;f=+h[a+24>>3];b=+h[a+8>>3]-f;d=+C(+(b*b+d*d));b=+h[a+32>>3];e=e-b;c=+h[a+40>>3];f=f-c;d=+C(+(f*f+e*e))+d;b=b-+h[a+48>>3];c=c-+h[a+56>>3];return +(d+ +C(+(c*c+b*b)))}function jJ(b,d){b=b|0;d=d|0;d=yC(d)|0;if((a[(c[d+16>>2]|0)+115>>0]|0)==1)d=eQ(b)|0;else d=bQ(b,d)|0;return qJ(d)|0}function kJ(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=+f;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;q=l;l=l+1664|0;m=q+1600|0;n=q+800|0;o=q;p=KK(24)|0;c[p+16>>2]=1;j=((c[e+4>>2]|0)+-1|0)/3|0;h=0;i=p;while(1){if((h|0)>=(j|0))break;k=h*3|0;g=0;while(1){if((g|0)==4)break;r=m+(g<<4)|0;s=(c[e>>2]|0)+(g+k<<4)|0;c[r>>2]=c[s>>2];c[r+4>>2]=c[s+4>>2];c[r+8>>2]=c[s+8>>2];c[r+12>>2]=c[s+12>>2];g=g+1|0}h=h+1|0;i=lJ(m,i)|0}g=0;h=0;i=p;while(1){if(!i){h=p;g=p;break}j=c[i+16>>2]|0;k=n+(g<<4)|0;e=o+(g<<4)|0;mJ(h,i,j,k,e,f);g=g+1|0;if(!((g|0)==50|(j|0)==0)){h=i;i=j;continue}nJ(a,b,d,g,n,o);c[n>>2]=c[k>>2];c[n+4>>2]=c[k+4>>2];c[n+8>>2]=c[k+8>>2];c[n+12>>2]=c[k+12>>2];c[o>>2]=c[e>>2];c[o+4>>2]=c[e+4>>2];c[o+8>>2]=c[e+8>>2];c[o+12>>2]=c[e+12>>2];h=i;g=1;i=j}while(1){if(!h)break;s=c[h+16>>2]|0;U1(g);h=s;g=s}l=q;return}function lJ(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;g=l;l=l+144|0;f=g+128|0;d=g+64|0;e=g;if(!(mI(a)|0)){kP(f,a,3,.5,d,e);d=lJ(e,lJ(d,b)|0)|0}else{d=b+16|0;if((c[d>>2]|0)==1){c[d>>2]=0;c[b>>2]=c[a>>2];c[b+4>>2]=c[a+4>>2];c[b+8>>2]=c[a+8>>2];c[b+12>>2]=c[a+12>>2]}d=a+48|0;c[f>>2]=c[d>>2];c[f+4>>2]=c[d+4>>2];c[f+8>>2]=c[d+8>>2];c[f+12>>2]=c[d+12>>2];d=pJ(f,b)|0}l=g;return d|0}function mJ(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=+g;var i=0.0,j=0.0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0.0,t=0.0;r=l;l=l+96|0;n=r+80|0;m=r+64|0;k=r+48|0;o=r+32|0;p=r+16|0;q=r;c[o>>2]=c[b>>2];c[o+4>>2]=c[b+4>>2];c[o+8>>2]=c[b+8>>2];c[o+12>>2]=c[b+12>>2];do if(a){c[p>>2]=c[a>>2];c[p+4>>2]=c[a+4>>2];c[p+8>>2]=c[a+8>>2];c[p+12>>2]=c[a+12>>2];if(!d){i=+h[o>>3];h[q>>3]=i*2.0-+h[p>>3];j=+h[o+8>>3];h[q+8>>3]=j*2.0-+h[p+8>>3];break}else{c[q>>2]=c[d>>2];c[q+4>>2]=c[d+4>>2];c[q+8>>2]=c[d+8>>2];c[q+12>>2]=c[d+12>>2];i=+h[o>>3];j=+h[o+8>>3];break}}else{c[q>>2]=c[d>>2];c[q+4>>2]=c[d+4>>2];c[q+8>>2]=c[d+8>>2];c[q+12>>2]=c[d+12>>2];i=+h[o>>3];h[p>>3]=i*2.0-+h[q>>3];j=+h[o+8>>3];h[p+8>>3]=j*2.0-+h[q+8>>3]}while(0);c[k>>2]=c[p>>2];c[k+4>>2]=c[p+4>>2];c[k+8>>2]=c[p+8>>2];c[k+12>>2]=c[p+12>>2];c[m>>2]=c[o>>2];c[m+4>>2]=c[o+4>>2];c[m+8>>2]=c[o+8>>2];c[m+12>>2]=c[o+12>>2];c[n>>2]=c[q>>2];c[n+4>>2]=c[q+4>>2];c[n+8>>2]=c[q+8>>2];c[n+12>>2]=c[q+12>>2];t=+oJ(k,m,n);s=+E(+t)*g;g=+F(+t)*g;h[e>>3]=i+s;h[e+8>>3]=j+g;h[f>>3]=i-s;h[f+8>>3]=j-g;l=r;return}function nJ(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0;i=e<<1;j=c[d>>2]|0;h=0;k=0;while(1){if((h|0)>=(j|0))break;l=(c[(c[b>>2]|0)+(h<<2)>>2]|0)+k|0;h=h+1|0;k=l}l=j+1|0;c[d>>2]=l;l=MK(c[b>>2]|0,l<<2)|0;c[b>>2]=l;c[l+(h<<2)>>2]=i;c[a>>2]=MK(c[a>>2]|0,k+i<<4)|0;b=i+-1+k|0;h=0;while(1){if((h|0)>=(e|0))break;l=(c[a>>2]|0)+(h+k<<4)|0;j=f+(h<<4)|0;c[l>>2]=c[j>>2];c[l+4>>2]=c[j+4>>2];c[l+8>>2]=c[j+8>>2];c[l+12>>2]=c[j+12>>2];l=(c[a>>2]|0)+(b-h<<4)|0;j=g+(h<<4)|0;c[l>>2]=c[j>>2];c[l+4>>2]=c[j+4>>2];c[l+8>>2]=c[j+8>>2];c[l+12>>2]=c[j+12>>2];h=h+1|0}return}function oJ(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0,e=0.0,f=0.0;f=+h[b+8>>3];d=+h[b>>3];e=+K(+(+h[c+8>>3]-f),+(+h[c>>3]-d));d=+K(+(+h[a+8>>3]-f),+(+h[a>>3]-d));e=e-d;return +((e>0.0?e+-6.283185307179586:e)*.5+d)}function pJ(a,b){a=a|0;b=b|0;var d=0;d=KK(24)|0;c[d+16>>2]=0;c[d>>2]=c[a>>2];c[d+4>>2]=c[a+4>>2];c[d+8>>2]=c[a+8>>2];c[d+12>>2]=c[a+12>>2];c[b+16>>2]=d;return d|0}function qJ(b){b=b|0;var c=0,d=0,e=0,f=0,g=0;c=b;f=b;a:while(1){e=0;while(1){d=c;c=c+1|0;d=a[d>>0]|0;if(!(d<<24>>24))break a;if(e<<24>>24){g=5;break}if(d<<24>>24!=92)break;else e=1}b:do if((g|0)==5){g=0;switch(d<<24>>24|0){case 114:{d=13;break b}case 108:case 110:{d=10;break b}default:break b}}while(0);a[f>>0]=d;f=f+1|0}a[f>>0]=0;return b|0}function rJ(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;e=c[b>>2]|0;while(1){g=a[e>>0]|0;if(!(g<<24>>24)){f=0;break}f=g<<24>>24;if(!(g<<24>>24==44|(S2(f)|0)!=0)){h=5;break}e=e+1|0}a:do if((h|0)==5){switch(f|0){case 0:{f=0;break a}case 41:case 40:{e=e+1|0;break a}default:{}}h=d+4|0;i=d+8|0;while(1){if((sJ(g<<24>>24)|0)<<24>>24){f=1;break a}f=c[h>>2]|0;if(f>>>0>=(c[i>>2]|0)>>>0){lA(d,1)|0;f=c[h>>2]|0}c[h>>2]=f+1;a[f>>0]=g;f=e+1|0;e=f;g=a[f>>0]|0}}while(0);c[b>>2]=e;return f|0}function sJ(a){a=a|0;switch(a|0){case 0:case 44:case 41:case 40:{a=1;break}default:a=0}return a|0}function tJ(a,b){a=a|0;b=b|0;return uJ(c[a>>2]|0,c[a+160>>2]|0,c[a+156>>2]|0,b)|0}function uJ(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;o=l;l=l+160|0;k=o+20|0;m=o+16|0;n=o;c[k>>2]=0;c[m>>2]=0;kA(n,128,o+24|0);nA(n,f)|0;g=n+4|0;f=c[g>>2]|0;if(f>>>0>=(c[n+8>>2]|0)>>>0){lA(n,1)|0;f=c[g>>2]|0}a[f>>0]=0;h=c[n>>2]|0;c[g>>2]=h;i=b+300|0;j=b+296|0;f=0;g=h;a:while(1){if(f){f=1;break}f=C4(g,c[i>>2]|0,k)|0;if(!f){f=0;break}g=C4(f,c[j>>2]|0,m)|0;h=(g|0)!=0;if(h)f=C4(0,c[j>>2]|0,m)|0;else f=0;switch(((f|0)!=0&1)+(h&1)&3){case 2:{g=vJ(b,g,0)|0;f=vJ(b,f,e)|0;h=(g|0)>(f|0);f=(f&g|0)>-1&(((h?g:f)|0)>=(d|0)&((h?f:g)|0)<=(d|0));g=0;continue a}case 1:{f=(vJ(b,g,d)|0)==(d|0);g=0;continue a}default:{f=0;g=0;continue a}}}oA(n);l=o;return f|0}function vJ(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;h=a[d>>0]|0;if(!(h<<24>>24==97?(s2(d,100396)|0)==0:0))f=3;a:do if((f|0)==3){if((wJ(d)|0)<<24>>24){e=q5(d)|0;break}g=c[b+308>>2]|0;if(!g)e=-1;else{b=c[b+312>>2]|0;e=1;while(1){if((e|0)>(b|0)){e=-1;break a}f=c[g+(e<<2)>>2]|0;if(h<<24>>24==(a[f>>0]|0)?(s2(d,f)|0)==0:0)break a;e=e+1|0}}}while(0);return e|0}function wJ(b){b=b|0;var c=0;while(1){c=a[b>>0]|0;if(!(c<<24>>24)){b=1;break}if(((c&255)+-48|0)>>>0<10)b=b+1|0;else{b=0;break}}return b|0}function xJ(a,b){a=a|0;b=b|0;if((+h[a+16>>3]>=+h[b>>3]?+h[b+16>>3]>=+h[a>>3]:0)?+h[a+24>>3]>=+h[b+8>>3]:0)a=+h[b+24>>3]>=+h[a+8>>3]&1;else a=0;return a|0}function yJ(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;a:do if((c[b+156>>2]|0)>=2?(f=aP(e,c[47167]|0,195059)|0,(tJ(b,f)|0)<<24>>24==0):0)if(!(a[f>>0]|0))if(!(aB(d,e)|0))f=1;else{f=aB(d,e)|0;while(1){if(!f){f=0;break a}g=aP(f,c[47190]|0,195059)|0;if(!(a[g>>0]|0)){f=1;break a}if((tJ(b,g)|0)<<24>>24){f=1;break a}f=bB(d,f,e)|0}}else f=0;else f=1;while(0);return f|0}function zJ(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+64|0;e=d+32|0;f=d;a=(c[a+16>>2]|0)+48|0;c[f>>2]=c[a>>2];c[f+4>>2]=c[a+4>>2];c[f+8>>2]=c[a+8>>2];c[f+12>>2]=c[a+12>>2];c[f+16>>2]=c[a+16>>2];c[f+20>>2]=c[a+20>>2];c[f+24>>2]=c[a+24>>2];c[f+28>>2]=c[a+28>>2];c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];c[e+16>>2]=c[b+16>>2];c[e+20>>2]=c[b+20>>2];c[e+24>>2]=c[b+24>>2];c[e+28>>2]=c[b+28>>2];b=(xJ(f,e)|0)&255;l=d;return b|0}function AJ(a,d){a=a|0;d=d|0;var f=0.0,g=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0.0,r=0,s=0,t=0,u=0.0,v=0.0;r=c[a+152>>2]|0;s=aI(a)|0;c[s+4>>2]=2;c[s+8>>2]=d;c[s+12>>2]=8;if(r&134217728|0){if((e[(c[(xC(d)|0)+16>>2]|0)+178>>1]|0)>2){f=+h[(c[(c[d+16>>2]|0)+132>>2]|0)+16>>3]*72.0;f=+(~~(f+(f>=0.0?.5:-.5))|0)}else f=0.0;h[s+168>>3]=f}k=d+16|0;CJ(a,c[(c[k>>2]|0)+104>>2]|0,d);do if(r&4259840|0){if((c[s+208>>2]|0)==0?(b[s+260>>1]&1)==0:0)break;p=WM(d)|0;l=c[k>>2]|0;f=+h[l+16>>3];q=+h[l+24>>3];l=DJ(d)|0;a:do if((p|2|0)==3){n=c[(c[k>>2]|0)+12>>2]|0;if(!((EJ(n)|0)<<24>>24))g=0;else g=(c[n+4>>2]|l|0)!=0;if(!((r&524288|0)==0|((n|0)==0|g))){i=n+8|0;o=c[i>>2]|0;o=(o|0)<3?1:o;j=n+4|0;m=c[j>>2]|0;m=(m|0)>1?m:1;p=c[n+44>>2]|0;g=QA(d,102705)|0;if(!g)g=0;else g=q5(g)|0;g=(g+-4|0)>>>0>56?20:g;if(!(c[j>>2]|l)){c[s+264>>2]=0;i=JK(32)|0;g=c[k>>2]|0;v=+h[g+88>>3];h[i>>3]=f-v;u=+h[g+80>>3]*.5;h[i+8>>3]=q-u;h[i+16>>3]=v+f;h[i+24>>3]=u+q;g=2;break}i=c[i>>2]|0;if(((i|0)<3?+h[n+32>>3]==0.0:0)?+h[n+24>>3]==0.0:0){i=s+264|0;if(c[n>>2]|0){c[i>>2]=1;i=JK(32)|0;h[i>>3]=f;h[i+8>>3]=q;g=(m<<1)+-1|0;h[i+16>>3]=+h[p+(g<<4)>>3]+f;h[i+24>>3]=+h[p+(g<<4)+8>>3]+q;g=2;break}c[i>>2]=2;i=(m<<1)+-1|0;i=FJ(+h[p+(i<<4)>>3],+h[p+(i<<4)+8>>3],g)|0;j=0;while(1){if((j|0)>=(g|0))break a;p=i+(j<<4)|0;h[p>>3]=+h[p>>3]+f;p=i+(j<<4)+8|0;h[p>>3]=+h[p>>3]+q;j=j+1|0}}m=O(i,m+-1|0)|0;c[s+264>>2]=2;if((i|0)<(g|0)){i=JK(o<<4)|0;g=0;while(1){if((g|0)>=(o|0)){g=o;break a}n=g+m|0;h[i+(g<<4)>>3]=+h[p+(n<<4)>>3]+f;h[i+(g<<4)+8>>3]=+h[p+(n<<4)+8>>3]+q;g=g+1|0}}else{l=(i|0)/(g|0)|0;i=JK(g<<4)|0;j=0;k=0;while(1){if((j|0)>=(g|0))break a;o=k+m|0;h[i+(j<<4)>>3]=+h[p+(o<<4)>>3]+f;h[i+(j<<4)+8>>3]=+h[p+(o<<4)+8>>3]+q;j=j+1|0;k=k+l|0}}}else t=31}else t=31;while(0);if((t|0)==31){c[s+264>>2]=0;i=JK(32)|0;g=c[k>>2]|0;h[i>>3]=f-+h[g+88>>3];v=+h[g+80>>3]*.5;h[i+8>>3]=q-v;h[i+16>>3]=+h[g+96>>3]+f;h[i+24>>3]=v+q;g=2}if(!(r&8192))NR(a,i,i,g)|0;c[s+272>>2]=i;c[s+268>>2]=g}while(0);HT(QA(d,100032)|0);_R(a,d);return}function BJ(a){a=a|0;$R(a);bI(a);return}function CJ(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0;m=l;l=l+144|0;j=m;f=QA(e,141055)|0;i=QA(e,141101)|0;k=QA(e,141088)|0;kA(j,128,m+16|0);if(!d)h=0;else h=c[d>>2]|0;if(!((f|0)!=0?(a[f>>0]|0)!=0:0))f=QA(e,111477)|0;g=dI(b,e,j)|0;if(!i)d=0;else d=jJ(i,e)|0;cI(b,h,f,d,k,g,e)|0;U1(d);oA(j);l=m;return}function DJ(b){b=b|0;var d=0,e=0;b=bP(b,c[47157]|0,195059)|0;a:do if(!(a[b>>0]|0))b=0;else{PI(b)|0;b=0;d=188228;while(1){e=c[d>>2]|0;if(!e)break a;e=(s2(e,111101)|0)==0;b=e?1:b;d=d+4|0}}while(0);return b|0}function EJ(a){a=a|0;var b=0.0;if(((c[a+8>>2]|0)==4?(b=+h[a+16>>3],((~~(b+(b>=0.0?.5:-.5))|0)%90|0|0)==0):0)?+h[a+24>>3]==0.0:0)a=+h[a+32>>3]==0.0&1;else a=0;return a|0}function FJ(a,b,c){a=+a;b=+b;c=c|0;var d=0.0,e=0,f=0.0,g=0;f=6.283185307179586/+(c|0);g=JK(c<<4)|0;d=0.0;e=0;while(1){if((e|0)>=(c|0))break;h[g+(e<<4)>>3]=+E(+d)*a;h[g+(e<<4)+8>>3]=+F(+d)*b;d=d+f;e=e+1|0}return g|0}function GJ(b,d){b=b|0;d=d|0;var e=0;a:do if((c[b+156>>2]|0)>=2?(e=aP(d,GA(d,0,101510,0)|0,195059)|0,(tJ(b,e)|0)<<24>>24==0):0)if(!(a[e>>0]|0)){e=jC(d)|0;while(1){if(!e){e=0;break a}if((yJ(b,d,e)|0)<<24>>24){e=1;break a}e=kC(d,e)|0}}else e=0;else e=1;while(0);return e|0}function HJ(a,b){a=a|0;b=b|0;var d=0;d=aI(a)|0;c[d+4>>2]=1;c[d+8>>2]=b;c[d+12>>2]=1;CJ(a,c[(c[b+16>>2]|0)+12>>2]|0,b);UR(a,b);return}function IJ(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;b=QA(b,141082)|0;a:do if((b|0)!=0?(a[b>>0]|0)!=0:0){PI(b)|0;e=188228;b=0;while(1){while(1){f=c[e>>2]|0;if(!f){e=188228;break a}if(!(s2(f,111101)|0)){g=10;break}if(!(s2(f,106334)|0)){f=e;g=12;break}if(!(s2(f,106341)|0)){f=e;g=14;break}if(!(s2(f,106316)|0)){f=e;g=16;break}e=e+4|0}if((g|0)==10){e=e+4|0;b=b|1;continue}else if((g|0)==12){while(1){h=f;f=f+4|0;g=c[f>>2]|0;c[h>>2]=g;if(!g)break;else g=12}b=b|3;continue}else if((g|0)==14){while(1){g=f;f=f+4|0;h=c[f>>2]|0;c[g>>2]=h;if(!h)break;else g=14}b=b|64;continue}else if((g|0)==16){while(1){g=f;f=f+4|0;h=c[f>>2]|0;c[g>>2]=h;if(!h)break;else g=16}b=b|4;continue}}}else{e=0;b=0}while(0);c[d>>2]=b;return e|0}function JJ(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0,k=0,m=0;k=l;l=l+16|0;i=k;j=k+4|0;c[j>>2]=0;m=(gI(b,0,j)|0)==0;j=c[j>>2]|0;if((m?(f=c[j>>2]|0,(f|0)>=2):0)?(h=j+8|0,(c[c[h>>2]>>2]|0)!=0):0){if((f|0)>2)gA(0,100415,i)|0;m=KK((l2(b)|0)+1|0)|0;c[d>>2]=m;r3(m,c[c[h>>2]>>2]|0)|0;if(!(c[(c[h>>2]|0)+12>>2]|0))c[d+4>>2]=0;else{m=c[d>>2]|0;m=m+((l2(m)|0)+1)|0;c[d+4>>2]=m;r3(m,c[(c[h>>2]|0)+12>>2]|0)|0}b=c[h>>2]|0;do if(!(a[b+8>>0]|0))if(!(a[b+20>>0]|0)){g[e>>2]=0.0;break}else{g[e>>2]=1.0-+g[b+16>>2];break}else c[e>>2]=c[b+4>>2];while(0);hI(j);b=1}else{c[d>>2]=0;hI(j);b=0}l=k;return b|0}function KJ(a,b){a=a|0;b=b|0;VR(a,b);bI(a);return}function LJ(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,i=0,j=0,k=0.0,m=0.0,n=0,o=0.0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;x=l;l=l+96|0;p=x+48|0;s=x+16|0;w=x+8|0;v=x;t=x+80|0;c[t>>2]=1e3;f=KK(16e3)|0;u=a+256|0;e=1;j=1;i=0;q=0;r=c[b+8>>2]|0;while(1){if((q|0)>=(c[b>>2]|0))break;d=c[r>>2]|0;a:do switch(d|0){case 1:case 0:{n=r+80|0;c[s>>2]=c[n>>2];c[s+4>>2]=c[n+4>>2];c[s+8>>2]=c[n+8>>2];c[s+12>>2]=c[n+12>>2];c[s+16>>2]=c[n+16>>2];c[s+20>>2]=c[n+20>>2];c[s+24>>2]=c[n+24>>2];c[s+28>>2]=c[n+28>>2];c[p>>2]=c[u>>2];c[p+4>>2]=c[u+4>>2];c[p+8>>2]=c[u+8>>2];c[p+12>>2]=c[u+12>>2];c[p+16>>2]=c[u+16>>2];c[p+20>>2]=c[u+20>>2];c[p+24>>2]=c[u+24>>2];c[p+28>>2]=c[u+28>>2];if(!(xJ(s,p)|0))d=j;else{z=r+8|0;A=r+24|0;h[f>>3]=+h[z>>3]-+h[A>>3];n=r+16|0;y=r+32|0;h[f+8>>3]=+h[n>>3]-+h[y>>3];h[f+16>>3]=+h[A>>3]+ +h[z>>3];h[f+24>>3]=+h[y>>3]+ +h[n>>3];mS(a,f,2,(d|0)==0?j:0);d=j}break}case 3:case 2:{A=r+80|0;c[s>>2]=c[A>>2];c[s+4>>2]=c[A+4>>2];c[s+8>>2]=c[A+8>>2];c[s+12>>2]=c[A+12>>2];c[s+16>>2]=c[A+16>>2];c[s+20>>2]=c[A+20>>2];c[s+24>>2]=c[A+24>>2];c[s+28>>2]=c[A+28>>2];c[p>>2]=c[u>>2];c[p+4>>2]=c[u+4>>2];c[p+8>>2]=c[u+8>>2];c[p+12>>2]=c[u+12>>2];c[p+16>>2]=c[u+16>>2];c[p+20>>2]=c[u+20>>2];c[p+24>>2]=c[u+24>>2];c[p+28>>2]=c[u+28>>2];if(!(xJ(s,p)|0))d=j;else{d=r+8|0;f=MJ(f,t,c[d+4>>2]|0,c[d>>2]|0)|0;nS(a,f,c[d>>2]|0,(c[r>>2]|0)==2?j:0);d=j}break}case 5:case 4:{A=r+80|0;c[s>>2]=c[A>>2];c[s+4>>2]=c[A+4>>2];c[s+8>>2]=c[A+8>>2];c[s+12>>2]=c[A+12>>2];c[s+16>>2]=c[A+16>>2];c[s+20>>2]=c[A+20>>2];c[s+24>>2]=c[A+24>>2];c[s+28>>2]=c[A+28>>2];c[p>>2]=c[u>>2];c[p+4>>2]=c[u+4>>2];c[p+8>>2]=c[u+8>>2];c[p+12>>2]=c[u+12>>2];c[p+16>>2]=c[u+16>>2];c[p+20>>2]=c[u+20>>2];c[p+24>>2]=c[u+24>>2];c[p+28>>2]=c[u+28>>2];if(!(xJ(s,p)|0))d=j;else{d=r+8|0;f=MJ(f,t,c[d+4>>2]|0,c[d>>2]|0)|0;pS(a,f,c[d>>2]|0,0,0,(c[r>>2]|0)==4?j&255:0);d=j}break}case 6:{A=r+80|0;c[s>>2]=c[A>>2];c[s+4>>2]=c[A+4>>2];c[s+8>>2]=c[A+8>>2];c[s+12>>2]=c[A+12>>2];c[s+16>>2]=c[A+16>>2];c[s+20>>2]=c[A+20>>2];c[s+24>>2]=c[A+24>>2];c[s+28>>2]=c[A+28>>2];c[p>>2]=c[u>>2];c[p+4>>2]=c[u+4>>2];c[p+8>>2]=c[u+8>>2];c[p+12>>2]=c[u+12>>2];c[p+16>>2]=c[u+16>>2];c[p+20>>2]=c[u+20>>2];c[p+24>>2]=c[u+24>>2];c[p+28>>2]=c[u+28>>2];if(!(xJ(s,p)|0))d=j;else{d=r+8|0;f=MJ(f,t,c[d+4>>2]|0,c[d>>2]|0)|0;qS(a,f,c[d>>2]|0);d=j}break}case 7:{A=r+80|0;c[s>>2]=c[A>>2];c[s+4>>2]=c[A+4>>2];c[s+8>>2]=c[A+8>>2];c[s+12>>2]=c[A+12>>2];c[s+16>>2]=c[A+16>>2];c[s+20>>2]=c[A+20>>2];c[s+24>>2]=c[A+24>>2];c[s+28>>2]=c[A+28>>2];c[p>>2]=c[u>>2];c[p+4>>2]=c[u+4>>2];c[p+8>>2]=c[u+8>>2];c[p+12>>2]=c[u+12>>2];c[p+16>>2]=c[u+16>>2];c[p+20>>2]=c[u+20>>2];c[p+24>>2]=c[u+24>>2];c[p+28>>2]=c[u+28>>2];if(!(xJ(s,p)|0))d=j;else{h[f>>3]=+h[r+8>>3];h[f+8>>3]=+h[r+16>>3];d=c[r+112>>2]|0;c[p>>2]=c[f>>2];c[p+4>>2]=c[f+4>>2];c[p+8>>2]=c[f+8>>2];c[p+12>>2]=c[f+12>>2];gS(a,p,d);d=j}break}case 8:{jS(a,c[r+8>>2]|0);d=1;break}case 9:{hS(a,c[r+8>>2]|0);d=1;break}case 13:{if((c[r+8>>2]|0)!=2){d=r+16|0;z=c[d+36>>2]|0;A=c[z+12>>2]|0;o=+g[z+8>>2];d=~~(+K(+(+h[r+40>>3]-+h[r+24>>3]),+(+h[r+32>>3]-+h[d>>3]))*57.29577951308232);jS(a,c[z+4>>2]|0);kS(a,A,d,o);d=2;break a}A=c[r+68>>2]|0;j=c[A+4>>2]|0;n=c[A+12>>2]|0;o=+g[A+8>>2];k=+h[r+40>>3];m=+h[r+16>>3];if(k==m?+h[r+48>>3]==+h[r+24>>3]:0)d=0;else d=~~(+H(+((m-k)/+h[r+32>>3]))*57.29577951308232);jS(a,j);kS(a,n,d,o);d=3;break}case 14:{gA(0,100481,v)|0;d=j;break}case 12:{if(!e){e=0;d=j}else{gA(0,100521,w)|0;e=0;d=j}break}case 11:{PI(c[r+8>>2]|0)|0;lS(a,188228);i=188228;d=j;break}default:d=j}while(0);j=d;q=q+1|0;r=r+120|0}if(i|0)lS(a,c[(c[a>>2]|0)+336>>2]|0);U1(f);l=x;return}function MJ(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;g=c[b>>2]|0;f=g<<1;f=(f|0)>(e|0)?f:e;if((g|0)<(e|0)){a=MK(a,f<<4)|0;c[b>>2]=f}b=0;while(1){if((b|0)>=(e|0))break;h[a+(b<<4)>>3]=+h[d+(b*24|0)>>3];h[a+(b<<4)+8>>3]=+h[d+(b*24|0)+8>>3];b=b+1|0}return a|0}function NJ(a,b){a=a|0;b=b|0;var d=0;d=c[b>>2]|0;c[a>>2]=c[b+4>>2];c[a+4>>2]=d;return}function OJ(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;g=d+16|0;f=1;while(1){d=c[g>>2]|0;if((f|0)>(c[d+180>>2]|0))break;e=c[(c[d+184>>2]|0)+(f<<2)>>2]|0;OJ(b,e);d=QA(e,140823)|0;if(d|0?a[d>>0]|0:0)hS(b,d);d=QA(e,137729)|0;if(d|0?a[d>>0]|0:0)hS(b,d);d=QA(e,140977)|0;if(d|0?a[d>>0]|0:0)hS(b,d);d=QA(e,101418)|0;if(d|0?a[d>>0]|0:0)jS(b,d);d=QA(e,101446)|0;if(d|0?a[d>>0]|0:0)hS(b,d);f=f+1|0}return}function PJ(a){a=a|0;var b=0,d=0,e=0;b=c[47127]|0;if(!b){b=Vz(20628,c[4581]|0)|0;c[47127]=b}if(!(nb[c[b>>2]&63](b,a,4)|0)){d=c[47127]|0;e=c[d>>2]|0;b=D4(a)|0;nb[e&63](d,b,1)|0;b=1}else b=0;return b|0}function QJ(a,b,c){a=a|0;b=b|0;c=c|0;U1(b);return}function RJ(a){a=a|0;var b=0;b=c[47128]|0;if(!a){if((b|0)>0?(b=b+-1|0,c[47128]=b,(b|0)==0):0){Z3(1,c[47129]|0)|0;U1(c[47129]|0)}}else{c[47128]=b+1;if(!b){c[47129]=D4(Z3(1,0)|0)|0;Z3(1,153563)|0}}return}function SJ(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0.0;u=l;l=l+96|0;r=u+72|0;q=u+56|0;p=u+48|0;t=u+32|0;s=u+24|0;e=u+8|0;d=u;if(0)TO();do if((TC(b,137483,0,1)|0)!=0?(o=b+16|0,(c[(c[o>>2]|0)+8>>2]|0)!=0):0){TJ(b);UJ(a,b);VJ(a,b);RJ(1);j=a+56|0;k=a+184|0;m=a+192|0;n=a+28|0;i=EF(a)|0;a:while(1){if(!i){g=33;break}d=c[j>>2]|0;if(!d){c[i+20>>2]=0;d=0}else{c[i+20>>2]=c[d+8>>2];d=c[d+12>>2]|0}c[i+24>>2]=d;c[i+12>>2]=a;c[i+28>>2]=c[k>>2];c[i+620>>2]=25764;c[i+624>>2]=14;if(!(c[(c[o>>2]|0)+8>>2]|0)){g=13;break}e=i+52|0;g=JR(i,c[e>>2]|0)|0;c[i+56>>2]=g;switch(g|0){case 999:{g=16;break a}case 21:{d=1;break}case 24:{d=520;break}default:d=WJ(b)|0}f=i+152|0;c[f>>2]=c[f>>2]|d;d=c[m>>2]|0;do if(!d)g=24;else{if(c[d+152>>2]&32|0?(s2(c[e>>2]|0,c[d+52>>2]|0)|0)==0:0){d=c[47130]|0;if(!d){g=27;break}c[d+8>>2]=i;c[i+36>>2]=c[d+36>>2];g=29;break}LR(d);c[m>>2]=0;c[n>>2]=0;g=24}while(0);if((g|0)==24){c[47130]=0;g=27}if((g|0)==27?(g=0,(KR(i)|0)==0):0){c[m>>2]=i;g=29}if((g|0)==29){c[i+8>>2]=0;c[i+104>>2]=25876;XJ(i);YJ(i);ZJ(i,b);_J(i,b);$J(i,b);if(!(c[f>>2]&128))sI(i,b);c[47130]=i}i=FF(a)|0}if((g|0)==13){gA(1,100679,s)|0;RJ(0);if(!0){d=-1;break}d=c[15712]|0;s=KB(b)|0;v=+UO();c[t>>2]=s;h[t+8>>3]=v;w4(d,100650,t)|0;d=-1;break}else if((g|0)==16){c[p>>2]=c[e>>2];gA(1,100700,p)|0;RJ(0);if(!0){d=-1;break}d=c[15712]|0;t=KB(b)|0;v=+UO();c[q>>2]=t;h[q+8>>3]=v;w4(d,100650,q)|0;d=-1;break}else if((g|0)==33){RJ(0);if(!0){d=0;break}d=c[15712]|0;t=KB(b)|0;v=+UO();c[r>>2]=t;h[r+8>>3]=v;w4(d,100650,r)|0;d=0;break}}else g=5;while(0);if((g|0)==5){gA(1,100602,d)|0;if(!0)d=-1;else{d=c[15712]|0;t=KB(b)|0;v=+UO();c[e>>2]=t;h[e+8>>3]=v;w4(d,100650,e)|0;d=-1}}l=u;return d|0}function TJ(a){a=a|0;var b=0;b=jC(a)|0;while(1){if(!b)break;eK(a,b);b=kC(a,b)|0}return}function UJ(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0.0;o=l;l=l+32|0;k=o+24|0;f=o+16|0;j=o+8|0;n=o;c[b+168>>2]=d;g=b+293|0;a[g>>0]=0;e=QA(d,105496)|0;if(e|0?(c[f>>2]=j,c[f+4>>2]=n,i=b5(e,105503,f)|0,(i|0)>0):0){p=+h[j>>3]*72.0;e=b+208|0;h[e>>3]=p;h[b+200>>3]=p;if((i|0)!=1)h[e>>3]=+h[n>>3]*72.0;a[g>>0]=1}f=b+292|0;a[f>>0]=0;e=QA(d,101102)|0;if(e|0?(c[k>>2]=j,c[k+4>>2]=n,m=b5(e,105503,k)|0,(m|0)>0):0){p=+h[j>>3]*72.0;e=b+224|0;h[e>>3]=p;h[b+216>>3]=p;if((m|0)!=1)h[e>>3]=+h[n>>3]*72.0;a[f>>0]=1}e=b+294|0;a[e>>0]=0;f=b+232|0;g=d+16|0;n=(c[(c[g>>2]|0)+8>>2]|0)+48|0;c[f>>2]=c[n>>2];c[f+4>>2]=c[n+4>>2];c[f+8>>2]=c[n+8>>2];c[f+12>>2]=c[n+12>>2];f=c[(c[g>>2]|0)+8>>2]|0;if(+h[f+48>>3]>.001?+h[f+56>>3]>.001:0)a[e>>0]=1;c[b+288>>2]=a[f+81>>0]|0?90:0;e=b+196|0;c[e>>2]=101106;f=QA(d,101109)|0;if(f|0?a[f>>0]|0:0)c[e>>2]=f;n=b+256|0;m=(c[g>>2]|0)+16|0;c[n>>2]=c[m>>2];c[n+4>>2]=c[m+4>>2];c[n+8>>2]=c[m+8>>2];c[n+12>>2]=c[m+12>>2];c[n+16>>2]=c[m+16>>2];c[n+20>>2]=c[m+20>>2];c[n+24>>2]=c[m+24>>2];c[n+28>>2]=c[m+28>>2];c[47141]=GA(d,0,101472,0)|0;c[47142]=GA(d,0,101463,0)|0;c[b+320>>2]=bP(0,c[47151]|0,107994)|0;h[b+328>>3]=+_O(0,c[47150]|0,14.0,1.0);c[b+336>>2]=20664;c[b+188>>2]=KB(d)|0;l=o;return}function VJ(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;e=b+304|0;f=c[e>>2]|0;if(f|0){U1(f);c[e>>2]=0}f=b+308|0;e=c[f>>2]|0;if(e|0){U1(e);c[f>>2]=0}g=b+316|0;e=c[g>>2]|0;if(e|0){U1(e);c[g>>2]=0}e=QA(d,100853)|0;if(e){c[b+312>>2]=cK(b,d,e)|0;e=QA(d,100860)|0;if(e|0?a[e>>0]|0:0)c[g>>2]=dK(b,e)|0}else{c[f>>2]=0;c[b+312>>2]=1}return}function WJ(b){b=b|0;b=QA(b,100821)|0;a:do if(!b)b=0;else switch(a[b>>0]|0){case 110:{if(!(s2(b+1|0,100833)|0))b=1;else{b=0;break a}break}case 101:{if(!(s2(b+1|0,100843)|0))b=16;else{b=0;break a}break}default:{b=0;break a}}while(0);return b|0}function XJ(b){b=b|0;var d=0.0,e=0;e=c[b>>2]|0;if(!(a[e+292>>0]|0)){if((c[b+56>>2]|0)==300)d=+h[(c[b+68>>2]|0)+8>>3];else d=4.0;h[b+248>>3]=d;h[b+240>>3]=d}else{b=b+240|0;e=e+216|0;c[b>>2]=c[e>>2];c[b+4>>2]=c[e+4>>2];c[b+8>>2]=c[e+8>>2];c[b+12>>2]=c[e+12>>2]}return}function YJ(b){b=b|0;var d=0;d=c[b>>2]|0;a:do if(!(a[d+293>>0]|0))switch(c[b+56>>2]|0){case 300:{d=b+416|0;b=(c[b+84>>2]|0)+8|0;c[d>>2]=c[b>>2];c[d+4>>2]=c[b+4>>2];c[d+8>>2]=c[b+8>>2];c[d+12>>2]=c[b+12>>2];break a}case 30:case 21:case 22:case 4:case 3:case 2:{h[b+424>>3]=36.0;h[b+416>>3]=36.0;break a}default:{d=b+416|0;c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=0;break a}}else{b=b+416|0;d=d+200|0;c[b>>2]=c[d>>2];c[b+4>>2]=c[d+4>>2];c[b+8>>2]=c[d+8>>2];c[b+12>>2]=c[d+12>>2]}while(0);return}function ZJ(b,d){b=b|0;d=d|0;var e=0.0,f=0;f=c[(c[b>>2]|0)+192>>2]|0;e=+h[(c[(c[d+16>>2]|0)+8>>2]|0)+24>>3];do if(!(e!=0.0)){if(f|0?a[f+128>>0]|0:0){b=b+432|0;f=f+112|0;c[b>>2]=c[f>>2];c[b+4>>2]=c[f+4>>2];c[b+8>>2]=c[f+8>>2];c[b+12>>2]=c[f+12>>2];break}d=b+432|0;if((c[b+56>>2]|0)==300){b=(c[b+84>>2]|0)+40|0;c[d>>2]=c[b>>2];c[d+4>>2]=c[b+4>>2];c[d+8>>2]=c[b+8>>2];c[d+12>>2]=c[b+12>>2];break}else{h[b+440>>3]=96.0;h[d>>3]=96.0;break}}else{h[b+440>>3]=e;h[b+432>>3]=e}while(0);return}function _J(b,d){b=b|0;d=d|0;var e=0.0,f=0.0,g=0,i=0.0,j=0.0,k=0.0,m=0,n=0,o=0.0,p=0.0,q=0.0,r=0.0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;A=l;l=l+112|0;t=A+80|0;u=A+56|0;s=A+40|0;v=A+32|0;w=A+24|0;x=A+16|0;y=A+8|0;z=A;m=c[b>>2]|0;o=+h[m+272>>3];q=+h[m+280>>3];p=+h[m+256>>3];r=+h[m+264>>3];f=+h[b+240>>3];e=p-f;h[b+208>>3]=e;i=+h[b+248>>3];j=r-i;h[b+216>>3]=j;f=f+o;h[b+224>>3]=f;i=i+q;h[b+232>>3]=i;e=f-e;j=i-j;h[x>>3]=1.0;g=c[(c[d+16>>2]|0)+8>>2]|0;i=+h[g+64>>3];do if(i>.001?(k=+h[g+72>>3],k>.001):0){e=e==0.0?i:e;f=j==0.0?k:j;if(!(if&(i>e&(a[g+80>>0]|0)!=0)):0){k=e;j=f;i=1.0;break}n=i/e>3]=i;k=e;j=f}else{k=e;i=1.0}while(0);f=(p+o)*.5;h[y>>3]=f;e=(r+q)*.5;h[z>>3]=e;c[b+360>>2]=c[m+288>>2];k=i*k;h[v>>3]=k;j=i*j;h[w>>3]=j;g=QA(d,100752)|0;if(g){m=T1((l2(g)|0)+1|0)|0;n=T1((l2(g)|0)+1|0)|0;c[s>>2]=v;c[s+4>>2]=w;c[s+8>>2]=x;c[s+12>>2]=m;do if((b5(g,100761,s)|0)==4){g=tC(c[d+60>>2]|0,m,0)|0;if(g|0){u=c[g+16>>2]|0;h[y>>3]=+h[u+16>>3];h[z>>3]=+h[u+24>>3]}}else{c[u>>2]=v;c[u+4>>2]=w;c[u+8>>2]=x;c[u+12>>2]=m;c[u+16>>2]=n;if((b5(g,100781,u)|0)!=4){c[t>>2]=v;c[t+4>>2]=w;c[t+8>>2]=x;c[t+12>>2]=y;c[t+16>>2]=z;b5(g,100801,t)|0;break}g=tC(c[d+60>>2]|0,m,0)|0;if(g|0){u=c[g+16>>2]|0;h[y>>3]=+h[u+16>>3];h[z>>3]=+h[u+24>>3]}}while(0);U1(m);U1(n);k=+h[v>>3];j=+h[w>>3];i=+h[x>>3];f=+h[y>>3];e=+h[z>>3]}h[b+368>>3]=k;h[b+376>>3]=j;h[b+352>>3]=i;h[b+336>>3]=f;h[b+344>>3]=e;l=A;return}function $J(b,d){b=b|0;d=d|0;var e=0,f=0,g=0.0,i=0.0,j=0,k=0.0,m=0.0,n=0.0,o=0.0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0.0,P=0.0,Q=0.0;M=l;l=l+224|0;J=M+200|0;z=M+168|0;E=M+144|0;I=M+120|0;F=M+96|0;G=M+64|0;e=M+184|0;v=M+176|0;w=M+160|0;y=M+136|0;x=M+112|0;A=M+80|0;B=M+48|0;C=M+32|0;D=M+16|0;K=M+8|0;L=M;u=c[b>>2]|0;c[G>>2]=0;c[G+4>>2]=0;c[G+8>>2]=0;c[G+12>>2]=0;H=b+368|0;c[I>>2]=c[H>>2];c[I+4>>2]=c[H+4>>2];c[I+8>>2]=c[H+8>>2];c[I+12>>2]=c[H+12>>2];H=b+360|0;if(c[H>>2]|0){c[J>>2]=c[I>>2];c[J+4>>2]=c[I+4>>2];c[J+8>>2]=c[I+8>>2];c[J+12>>2]=c[I+12>>2];aK(e,J);c[I>>2]=c[e>>2];c[I+4>>2]=c[e+4>>2];c[I+8>>2]=c[e+8>>2];c[I+12>>2]=c[e+12>>2]}t=b+416|0;c[F>>2]=c[t>>2];c[F+4>>2]=c[t+4>>2];c[F+8>>2]=c[t+8>>2];c[F+12>>2]=c[t+12>>2];if((a[u+294>>0]|0)!=0?(c[b+152>>2]&32|0)!=0:0){i=+h[u+232>>3]-+h[F>>3]*2.0;h[E>>3]=i;k=+h[u+240>>3]-+h[F+8>>3]*2.0;p=E+8|0;h[p>>3]=k;if(!(i<.0001)){o=+h[I>>3];e=~~(o/i);f=b+164|0;c[f>>2]=e;if(o-i*+(e|0)>.0001){e=e+1|0;c[f>>2]=e}}else{c[b+164>>2]=1;e=1}if(!(k<.0001)){g=+h[I+8>>3];f=~~(g/k);j=b+168|0;c[j>>2]=f;if(g-k*+(f|0)>.0001){f=f+1|0;c[j>>2]=f}}else{c[b+168>>2]=1;f=1;g=+h[I+8>>3]}c[b+204>>2]=O(f,e)|0;o=+h[(+h[I>>3]>3];h[I>>3]=o;e=p;f=I;m=+h[(g>3];g=o;j=21}else{if(c[b+68>>2]|0){e=c[b+84>>2]|0;i=+h[e+24>>3]-+h[F>>3]*2.0;i=i<0.0?0.0:i;h[E>>3]=i;o=+h[e+32>>3]-+h[F+8>>3]*2.0;e=E+8|0;h[e>>3]=o;if(o<0.0){f=E;j=17}else e=E}else{h[E+8>>3]=0.0;f=E;e=E;j=17}if((j|0)==17){h[e>>3]=0.0;e=f;i=+h[f>>3]}c[b+204>>2]=1;c[b+168>>2]=1;c[b+164>>2]=1;g=+h[I>>3];if(i>3]=g;i=g}e=E+8|0;k=+h[e>>3];m=+h[I+8>>3];if(k>3]=m;r=e;m=+h[e>>3]}n=+h[F>>3];s=b+432|0;k=+h[s>>3]*.013888888888888888*(n*2.0+i);c[b+448>>2]=~~(k+(k>=0.0?.5:-.5));q=F+8|0;k=+h[q>>3];t=b+440|0;o=+h[t>>3]*.013888888888888888*(k*2.0+m);c[b+452>>2]=~~(o+(o>=0.0?.5:-.5));j=b+188|0;p=b+180|0;e=b+172|0;f=u+196|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;c[e+16>>2]=0;c[e+20>>2]=0;bK(v,b,a[c[f>>2]>>0]|0);u=v;v=c[u+4>>2]|0;e=p;c[e>>2]=c[u>>2];c[e+4>>2]=v;bK(w,b,a[(c[f>>2]|0)+1>>0]|0);e=w;w=c[e>>2]|0;e=c[e+4>>2]|0;v=j;c[v>>2]=w;c[v+4>>2]=e;w=(c[p>>2]|0)+w|0;if(!((((w|0)>-1?w:0-w|0)|0)==1?(w=(c[b+184>>2]|0)+e|0,(((w|0)>-1?w:0-w|0)|0)==1):0)){bK(y,b,66);v=y;y=c[v+4>>2]|0;w=p;c[w>>2]=c[v>>2];c[w+4>>2]=y;bK(x,b,76);w=x;x=c[w+4>>2]|0;y=j;c[y>>2]=c[w>>2];c[y+4>>2]=x;c[z>>2]=c[f>>2];gA(0,100732,z)|0}if(a[(c[(c[d+16>>2]|0)+8>>2]|0)+82>>0]|0){if(i>g){m=(i-g)*.5;h[G>>3]=m}else m=0.0;i=+h[r>>3];o=+h[I+8>>3];if(i>o){i=(i-o)*.5;h[G+8>>3]=i}else i=0.0}else{i=0.0;m=0.0}if(!(c[H>>2]|0))j=1;else{c[J>>2]=c[I>>2];c[J+4>>2]=c[I+4>>2];c[J+8>>2]=c[I+8>>2];c[J+12>>2]=c[I+12>>2];aK(A,J);c[I>>2]=c[A>>2];c[I+4>>2]=c[A+4>>2];c[I+8>>2]=c[A+8>>2];c[I+12>>2]=c[A+12>>2];c[J>>2]=c[E>>2];c[J+4>>2]=c[E+4>>2];c[J+8>>2]=c[E+8>>2];c[J+12>>2]=c[E+12>>2];aK(B,J);c[E>>2]=c[B>>2];c[E+4>>2]=c[B+4>>2];c[E+8>>2]=c[B+8>>2];c[E+12>>2]=c[B+12>>2];c[J>>2]=c[F>>2];c[J+4>>2]=c[F+4>>2];c[J+8>>2]=c[F+8>>2];c[J+12>>2]=c[F+12>>2];aK(C,J);c[F>>2]=c[C>>2];c[F+4>>2]=c[C+4>>2];c[F+8>>2]=c[C+8>>2];c[F+12>>2]=c[C+12>>2];c[J>>2]=c[G>>2];c[J+4>>2]=c[G+4>>2];c[J+8>>2]=c[G+8>>2];c[J+12>>2]=c[G+12>>2];aK(D,J);c[G>>2]=c[D>>2];c[G+4>>2]=c[D+4>>2];c[G+8>>2]=c[D+8>>2];c[G+12>>2]=c[D+12>>2];n=+h[F>>3];m=+h[G>>3];k=+h[q>>3];i=+h[G+8>>3];g=+h[I>>3];j=(c[H>>2]|0)==0}o=m+n;h[b+384>>3]=o;P=i+k;h[b+392>>3]=P;N=m+n+g;h[b+400>>3]=N;Q=+h[I+8>>3];n=i+k+Q;h[b+408>>3]=n;m=+h[b+352>>3];h[b+320>>3]=g/m;h[b+328>>3]=Q/m;m=+h[s>>3];o=o*.013888888888888888*m;f=b+456|0;c[f>>2]=~~(o+(o>=0.0?.5:-.5));o=+h[t>>3];k=P*.013888888888888888*o;c[b+460>>2]=~~(k+(k>=0.0?.5:-.5));m=N*.013888888888888888*m;e=b+464|0;c[e>>2]=~~(m+(m>=0.0?.5:-.5));o=n*.013888888888888888*o;c[b+468>>2]=~~(o+(o>=0.0?.5:-.5));if(!j){c[J>>2]=c[f>>2];c[J+4>>2]=c[f+4>>2];NJ(K,J);I=K;K=c[I+4>>2]|0;b=f;c[b>>2]=c[I>>2];c[b+4>>2]=K;c[J>>2]=c[e>>2];c[J+4>>2]=c[e+4>>2];NJ(L,J);b=L;K=c[b+4>>2]|0;L=e;c[L>>2]=c[b>>2];c[L+4>>2]=K}l=M;return}function aK(a,b){a=a|0;b=b|0;var c=0.0;c=+h[b>>3];h[a>>3]=+h[b+8>>3];h[a+8>>3]=c;return}function bK(a,b,d){a=a|0;b=b|0;d=d|0;d=(d<<24>>24)+-66|0;switch(d>>>1|d<<31|0){case 9:{c[b+176>>2]=(c[b+168>>2]|0)+-1;b=0;d=-1;break}case 0:{b=0;d=1;break}case 5:{b=1;d=0;break}case 8:{c[b+172>>2]=(c[b+164>>2]|0)+-1;b=-1;d=0;break}default:{b=0;d=0}}c[a>>2]=b;c[a+4>>2]=d;return}function cK(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;j=l;l=l+16|0;g=j;f=QA(d,100973)|0;i=b+296|0;c[i>>2]=(f|0)==0?100982:f;d=QA(d,100986)|0;f=b+300|0;d=(d|0)==0?100999:d;c[f>>2]=d;d=G4(c[i>>2]|0,d)|0;if(d|0){c[g>>2]=a[d>>0];gA(0,101001,g)|0;c[f>>2]=195059}d=D4(e)|0;c[b+304>>2]=d;h=b+308|0;f=0;b=0;while(1){e=A4(d,c[i>>2]|0)|0;if(!e)break;g=b+1|0;if((b|0)<(f|0))d=c[h>>2]|0;else{f=f+128|0;d=c[h>>2]|0;if(!d)d=KK(f<<2)|0;else d=MK(d,f<<2)|0;c[h>>2]=d}c[d+(g<<2)>>2]=e;b=g;d=0}if(b|0){i=MK(c[h>>2]|0,(b<<2)+8|0)|0;c[h>>2]=i;c[i>>2]=0;c[(c[h>>2]|0)+(b+1<<2)>>2]=0}l=j;return b|0}function dK(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;k=l;l=l+16|0;j=k;i=a+312|0;d=KK((c[i>>2]<<2)+8|0)|0;e=0;h=1;while(1){g=c[i>>2]|0;if((h|0)>(g|0))break;f=e+1|0;if((uJ(a,h,g,b)|0)<<24>>24){c[d+(f<<2)>>2]=h;e=f}h=h+1|0}if(!e){c[j>>2]=b;gA(0,100872,j)|0;U1(d);d=0}else{c[d>>2]=e;c[d+(e+1<<2)>>2]=(c[i>>2]|0)+1}l=k;return d|0}function eK(a,b){a=a|0;b=b|0;var d=0,e=0.0,f=0.0,g=0.0;d=c[b+16>>2]|0;g=+h[d+16>>3];h[d+48>>3]=g-+h[d+88>>3];e=+h[d+24>>3];f=+h[d+80>>3]*.5;h[d+56>>3]=e-f;h[d+64>>3]=+h[d+96>>3]+g;h[d+72>>3]=f+e;b=XA(a,b)|0;while(1){if(!b)break;fK(b);b=ZA(a,b)|0}return}function fK(a){a=a|0;a=c[(c[a+16>>2]|0)+8>>2]|0;if(a|0)gK(a);return}function gK(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0;C=l;l=l+240|0;v=C+192|0;u=C+176|0;w=C+64|0;x=C+32|0;y=C;z=C+144|0;A=C+112|0;B=a+4|0;if((c[B>>2]|0)<=0)qa(101140,99906,3994,101154);b=c[a>>2]|0;d=w;e=b;f=d+48|0;do{c[d>>2]=c[e>>2];d=d+4|0;e=e+4|0}while((d|0)<(f|0));d=v;e=b;f=d+48|0;do{c[d>>2]=c[e>>2];d=d+4|0;e=e+4|0}while((d|0)<(f|0));hK(x,v);i=x+8|0;j=y+8|0;k=x+16|0;m=y+16|0;n=x+24|0;o=y+24|0;p=w+8|0;q=w+12|0;r=w+32|0;s=w+4|0;t=w+16|0;g=0;while(1){if((g|0)>=(c[B>>2]|0))break;if((g|0)>0){b=(c[a>>2]|0)+(g*48|0)|0;d=w;e=b;f=d+48|0;do{c[d>>2]=c[e>>2];d=d+4|0;e=e+4|0}while((d|0)<(f|0));d=v;e=b;f=d+48|0;do{c[d>>2]=c[e>>2];d=d+4|0;e=e+4|0}while((d|0)<(f|0));hK(y,v);h[x>>3]=+h[(+h[x>>3]<+h[y>>3]?x:y)>>3];h[i>>3]=+h[(+h[i>>3]<+h[j>>3]?x:y)+8>>3];h[k>>3]=+h[(+h[k>>3]>+h[m>>3]?x:y)+16>>3];h[n>>3]=+h[(+h[n>>3]>+h[o>>3]?x:y)+24>>3]}b=c[p>>2]|0;if(b|0){f=c[w>>2]|0;c[u>>2]=c[t>>2];c[u+4>>2]=c[t+4>>2];c[u+8>>2]=c[t+8>>2];c[u+12>>2]=c[t+12>>2];c[v>>2]=c[f>>2];c[v+4>>2]=c[f+4>>2];c[v+8>>2]=c[f+8>>2];c[v+12>>2]=c[f+12>>2];YH(z,u,v,1.0,b);c[y>>2]=c[z>>2];c[y+4>>2]=c[z+4>>2];c[y+8>>2]=c[z+8>>2];c[y+12>>2]=c[z+12>>2];c[y+16>>2]=c[z+16>>2];c[y+20>>2]=c[z+20>>2];c[y+24>>2]=c[z+24>>2];c[y+28>>2]=c[z+28>>2];h[x>>3]=+h[(+h[x>>3]<+h[y>>3]?x:y)>>3];h[i>>3]=+h[(+h[i>>3]<+h[j>>3]?x:y)+8>>3];h[k>>3]=+h[(+h[k>>3]>+h[m>>3]?x:y)+16>>3];h[n>>3]=+h[(+h[n>>3]>+h[o>>3]?x:y)+24>>3]}b=c[q>>2]|0;if(b|0){f=(c[w>>2]|0)+((c[s>>2]|0)+-1<<4)|0;c[u>>2]=c[r>>2];c[u+4>>2]=c[r+4>>2];c[u+8>>2]=c[r+8>>2];c[u+12>>2]=c[r+12>>2];c[v>>2]=c[f>>2];c[v+4>>2]=c[f+4>>2];c[v+8>>2]=c[f+8>>2];c[v+12>>2]=c[f+12>>2];YH(A,u,v,1.0,b);c[y>>2]=c[A>>2];c[y+4>>2]=c[A+4>>2];c[y+8>>2]=c[A+8>>2];c[y+12>>2]=c[A+12>>2];c[y+16>>2]=c[A+16>>2];c[y+20>>2]=c[A+20>>2];c[y+24>>2]=c[A+24>>2];c[y+28>>2]=c[A+28>>2];h[x>>3]=+h[(+h[x>>3]<+h[y>>3]?x:y)>>3];h[i>>3]=+h[(+h[i>>3]<+h[j>>3]?x:y)+8>>3];h[k>>3]=+h[(+h[k>>3]>+h[m>>3]?x:y)+16>>3];h[n>>3]=+h[(+h[n>>3]>+h[o>>3]?x:y)+24>>3]}g=g+1|0}B=a+8|0;c[B>>2]=c[x>>2];c[B+4>>2]=c[x+4>>2];c[B+8>>2]=c[x+8>>2];c[B+12>>2]=c[x+12>>2];c[B+16>>2]=c[x+16>>2];c[B+20>>2]=c[x+20>>2];c[B+24>>2]=c[x+24>>2];c[B+28>>2]=c[x+28>>2];l=C;return}function hK(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0;n=l;l=l+48|0;i=n+32|0;j=n;k=c[b+4>>2]|0;if((k|0)<=0)qa(101170,99906,3968,101182);if(((k>>>0)%3|0|0)!=1)qa(101192,99906,3969,101182);m=j+16|0;d=c[b>>2]|0;c[m>>2]=c[d>>2];c[m+4>>2]=c[d+4>>2];c[m+8>>2]=c[d+8>>2];c[m+12>>2]=c[d+12>>2];c[j>>2]=c[d>>2];c[j+4>>2]=c[d+4>>2];c[j+8>>2]=c[d+8>>2];c[j+12>>2]=c[d+12>>2];e=i+8|0;f=j+8|0;g=j+24|0;b=1;while(1){if((b|0)>=(k|0))break;p=+h[d+(b<<4)+8>>3];t=b+1|0;o=+h[d+(t<<4)+8>>3];r=(+h[d+(t<<4)>>3]+ +h[d+(b<<4)>>3])*.5;h[i>>3]=r;p=(o+p)*.5;h[e>>3]=p;o=+h[(+h[j>>3]>3];h[j>>3]=o;s=+h[(+h[f>>3]>3];h[f>>3]=s;r=+h[(+h[m>>3]>r?m:i)>>3];h[m>>3]=r;p=+h[(+h[g>>3]>p?m:i)+8>>3];h[g>>3]=p;t=d+(b+2<<4)|0;c[i>>2]=c[t>>2];c[i+4>>2]=c[t+4>>2];c[i+8>>2]=c[t+8>>2];c[i+12>>2]=c[t+12>>2];q=+h[i>>3];h[j>>3]=+h[(o>3];o=+h[e>>3];h[f>>3]=+h[(s>3];h[m>>3]=+h[(r>q?m:i)>>3];h[g>>3]=+h[(p>o?m:i)+8>>3];b=b+3|0}c[a>>2]=c[j>>2];c[a+4>>2]=c[j+4>>2];c[a+8>>2]=c[j+8>>2];c[a+12>>2]=c[j+12>>2];c[a+16>>2]=c[j+16>>2];c[a+20>>2]=c[j+20>>2];c[a+24>>2]=c[j+24>>2];c[a+28>>2]=c[j+28>>2];l=n;return}function iK(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0.0,f=0.0,g=0.0,i=0,j=0.0,k=0,l=0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0.0;q=+h[a>>3];r=+h[c>>3];k=!(q>=r);if((!k?q<=+h[c+16>>3]:0)?(e=+h[a+8>>3],e>=+h[c+8>>3]):0)i=e<=+h[c+24>>3];else i=0;e=+h[b>>3];if((e>=r?e<=+h[c+16>>3]:0)?(f=+h[b+8>>3],f>=+h[c+8>>3]):0){d=f<=+h[c+24>>3];if(!(i^d))if(i&d)d=1;else l=11;else d=0}else if(i)d=0;else l=11;a:do if((l|0)==11){p=+h[a+8>>3];do if(q==e){r=+h[c+8>>3];if(!(k|p>=r^+h[b+8>>3]>=r^1)?q<=+h[c+16>>3]:0){d=0;break a}}else{j=+h[b+8>>3];if(p==j){if(!(q>=r^e>=r))break;if(!(p>=+h[c+8>>3]))break;if(!(p<=+h[c+24>>3]))break;else{d=0;break a}}o=(j-p)/(e-q);l=q>3];if(!(!(r>=g)|!(r<=e)|!(f>=m))?f<=+h[c+24>>3]:0){d=0;break a}n=+h[c+16>>3];f=(n-r)*o+f;if(f>=m?!(!(n<=e)|(n>=g?!(f<=+h[c+24>>3]):1)):0){d=0;break a}l=p=r?!(!(m<=f)|(!(m>=g)|!(e<=n))):0){d=0;break a}p=+h[c+24>>3];q=(p-m)/o+e;if(q>=r?!(!(p<=f)|(!(p>=g)|!(q<=n))):0){d=0;break a}}while(0);d=-1}while(0);return d|0}function jK(a){a=a|0;var b=0,c=0.0;b=a+16|0;c=+h[b>>3];h[a+32>>3]=c;h[a+48>>3]=c;h[a+40>>3]=+h[a+24>>3];h[a+56>>3]=+h[a+8>>3];h[b>>3]=+h[a>>3];return}function kK(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0.0,g=0.0,i=0.0;if((c[47131]|0)!=(d|0)){N2(+(d|0)*.15915494309189535,186328,186336);c[47131]=d}g=+h[b>>3];e=+h[23292];f=+h[b+8>>3];i=+h[23291];h[a>>3]=e*g-i*f;h[a+8>>3]=i*g+f*e;return}function lK(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0,g=0.0,i=0,j=0,k=0;k=l;l=l+16|0;f=k;e=+h[b>>3];i=b+8|0;g=+h[i>>3];a:do switch(d|0){case 0:{j=11;break}case 90:{h[b>>3]=g;e=-e;j=10;break}case 180:{e=-g;j=10;break}case 270:{h[b>>3]=g;j=10;break}default:{if((d|0)<0){c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];mK(a,f,0-d|0);break a}if((d|0)>360){c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];lK(a,f,(d>>>0)%360|0);break a}else{c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];kK(a,f,d);break a}}}while(0);if((j|0)==10){h[i>>3]=e;j=11}if((j|0)==11){c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2]}l=k;return}function mK(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0,g=0.0,i=0,j=0,k=0;k=l;l=l+16|0;f=k;e=+h[b>>3];i=b+8|0;g=+h[i>>3];a:do switch(d|0){case 0:{j=11;break}case 90:{h[b>>3]=-g;j=10;break}case 180:{e=-g;j=10;break}case 270:{h[b>>3]=g;j=10;break}default:{if((d|0)<0){c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];lK(a,f,0-d|0);break a}if((d|0)>360){c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];mK(a,f,(d>>>0)%360|0);break a}else{c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];kK(a,f,360-d|0);break a}}}while(0);if((j|0)==10){h[i>>3]=e;j=11}if((j|0)==11){c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2]}l=k;return}function nK(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0,e=0.0,f=0.0,g=0.0;g=+h[c>>3];d=+h[c+8>>3];f=d+ +h[b>>3];e=g+ +h[b+24>>3];d=d+ +h[b+16>>3];h[a>>3]=g+ +h[b+8>>3];h[a+8>>3]=f;h[a+16>>3]=e;h[a+24>>3]=d;return}function oK(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0,e=0.0,f=0.0,g=0.0;f=+h[a>>3];d=+h[b>>3]-f;g=+h[a+8>>3];e=+h[b+8>>3]-g;f=(+h[c+8>>3]-g)*d-(+h[c>>3]-f)*e;f=f*f;return +(f<1.0e-10?0.0:f/(e*e+d*d))}function pK(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;g=l;l=l+16|0;f=g+8|0;e=g;a=QA(a,b)|0;if(a|0?(c[f>>2]=e,(b5(a,101209,f)|0)>0):0)h[d>>3]=+h[e>>3];l=g;return}function qK(b,d){b=b|0;d=d|0;var e=0,f=0.0,g=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+16|0;g=n+8|0;i=n;e=JK(96)|0;m=b+16|0;c[(c[m>>2]|0)+8>>2]=e;e=QA(b,101213)|0;if(!e){e=Ta(101222)|0;if(e|0)k=3}else k=3;if((k|0)==3)cb(101234,e|0,1)|0;e=(rK(b)|0)&255;a[(c[m>>2]|0)+115>>0]=e;if(0==0?(e=QA(b,101245)|0,c[47133]=e,(e|0)==0):0)c[47133]=c[47132];f=+_O(b,GA(b,0,101255,0)|0,0.0,0.0);h[c[(c[m>>2]|0)+8>>2]>>3]=f;e=QA(b,101263)|0;a:do if(!e)e=0;else{switch(a[e>>0]|0){case 76:{if(!(s2(e,101271)|0)){e=1;break a}break}case 66:{if(!(s2(e,101274)|0)){e=2;break a}break}case 82:{e=(s2(e,101277)|0)==0;e=e?3:0;break a}default:{e=0;break a}}e=0}while(0);c[(c[m>>2]|0)+116>>2]=e<<2|(d<<24>>24==0?0:e);f=+_O(b,GA(b,0,101280,0)|0,.25,.02);h[i>>3]=f;f=f*72.0;c[(c[m>>2]|0)+248>>2]=~~(f+(f>=0.0?.5:-.5));e=aP(b,GA(b,0,101288,0)|0,0)|0;if(e){c[g>>2]=i;if(b5(e,101209,g)|0){f=+h[i>>3];if(f<.02){h[i>>3]=.02;f=.02}}else{h[i>>3]=.5;f=.5}if(d4(e,101296)|0)a[(c[m>>2]|0)+276>>0]=1}else{h[i>>3]=.5;f=.5}f=f*72.0;c[(c[m>>2]|0)+252>>2]=~~(f+(f>=0.0?.5:-.5));i=(ZO(b,GA(b,0,101304,0)|0,0,0)|0)&255;a[(c[m>>2]|0)+243>>0]=i;i=pP(aP(b,GA(b,0,101314,0)|0,0)|0,20676,20692)|0;c[(c[m>>2]|0)+244>>2]=i;sK(b);i=tK(b,101324,(c[(c[m>>2]|0)+8>>2]|0)+64|0)|0;e=c[(c[m>>2]|0)+8>>2]|0;a[e+80>>0]=i;tK(b,101329,e+48|0)|0;e=dP(QA(b,101334)|0)|0;a[(c[(c[m>>2]|0)+8>>2]|0)+82>>0]=e;e=QA(b,101341)|0;do if(!e){e=QA(b,101348)|0;if(e|0){e=(a[e>>0]|32)<<24>>24==108&1;k=27;break}e=QA(b,101360)|0;if(e|0){e=dP(e)|0;k=27}}else{e=(q5(e)|0)==90&1;k=27}while(0);if((k|0)==27)a[(c[(c[m>>2]|0)+8>>2]|0)+81>>0]=e;c[47135]=pP(QA(b,101370)|0,20708,20724)|0;a[194954]=dP(QA(b,101382)|0)|0;c[47138]=0;c[47139]=0;h[(c[(c[m>>2]|0)+8>>2]|0)+24>>3]=0.0;e=QA(b,101394)|0;if((e|0)!=0?(a[e>>0]|0)!=0:0)k=32;else k=30;if(((k|0)==30?(j=QA(b,101398)|0,j|0):0)?a[j>>0]|0:0){e=j;k=32}if((k|0)==32){f=+r5(e);h[(c[(c[m>>2]|0)+8>>2]|0)+24>>3]=f}uK(b);h[23295]=1.e+37;c[47140]=GA(b,0,101409,0)|0;c[47143]=GA(b,0,141034,0)|0;c[47144]=GA(b,0,105496,0)|0;c[47145]=GA(b,1,141048,0)|0;c[47146]=GA(b,1,141116,0)|0;c[47147]=GA(b,1,108230,0)|0;c[47148]=GA(b,1,140823,0)|0;c[47149]=GA(b,1,101418,0)|0;c[47157]=GA(b,1,141082,0)|0;c[47150]=GA(b,1,101428,0)|0;c[47151]=GA(b,1,101437,0)|0;c[47152]=GA(b,1,101446,0)|0;k=GA(b,1,108224,0)|0;c[47154]=k;if(!k)c[47154]=GA(b,1,108224,105493)|0;c[47155]=GA(b,1,101456,0)|0;c[47158]=GA(b,1,101304,0)|0;c[47172]=GA(b,1,101463,0)|0;c[47161]=GA(b,1,101409,0)|0;c[47153]=GA(b,1,105496,0)|0;c[47159]=GA(b,1,141076,0)|0;c[47160]=GA(b,1,101472,0)|0;c[47163]=GA(b,1,101484,0)|0;c[47162]=GA(b,1,101348,0)|0;c[47164]=GA(b,1,101489,0)|0;c[47165]=GA(b,1,141024,0)|0;c[47166]=GA(b,1,137297,0)|0;c[47156]=GA(b,1,101500,0)|0;c[47167]=GA(b,1,101510,0)|0;c[47168]=GA(b,1,101516,0)|0;c[47169]=GA(b,1,101522,0)|0;c[47170]=GA(b,1,101530,0)|0;c[47171]=GA(b,1,101539,0)|0;c[47173]=GA(b,1,141034,0)|0;c[47174]=GA(b,2,101541,0)|0;c[47176]=GA(b,2,140823,0)|0;c[47177]=GA(b,2,101418,0)|0;c[47179]=GA(b,2,101428,0)|0;c[47180]=GA(b,2,101437,0)|0;c[47181]=GA(b,2,101446,0)|0;c[47182]=GA(b,2,108224,0)|0;c[47183]=GA(b,2,101456,0)|0;c[47192]=GA(b,2,101548,0)|0;c[47184]=GA(b,2,101559,0)|0;c[47195]=GA(b,2,101563,0)|0;c[47196]=GA(b,2,101573,0)|0;c[47197]=GA(b,2,101583,0)|0;c[47198]=GA(b,2,101593,0)|0;c[47199]=GA(b,2,101603,0)|0;c[47200]=GA(b,2,101617,0)|0;c[47201]=GA(b,2,101631,0)|0;c[47202]=GA(b,2,101646,0)|0;c[47203]=GA(b,2,101660,0)|0;c[47175]=GA(b,2,101671,0)|0;c[47187]=GA(b,2,101304,0)|0;c[47185]=GA(b,2,141082,0)|0;c[47186]=GA(b,2,101678,0)|0;c[47188]=GA(b,2,101687,0)|0;c[47189]=GA(b,2,101697,0)|0;c[47190]=GA(b,2,101510,0)|0;c[47191]=GA(b,2,101522,0)|0;c[47204]=GA(b,2,101708,0)|0;c[47205]=GA(b,2,101717,0)|0;c[47206]=GA(b,2,101463,0)|0;e=$H(b)|0;c[(c[(c[m>>2]|0)+8>>2]|0)+88>>2]=e;e=QA(b,141060)|0;if(e|0?a[e>>0]|0:0){b=EK(e,b)|0;c[(c[(c[m>>2]|0)+8>>2]|0)+92>>2]=b}l=n;return}function rK(a){a=a|0;var b=0,d=0;d=l;l=l+16|0;b=d;a=bP(a,GA(a,0,101807,0)|0,101815)|0;if(((((((c3(a,101821)|0)!=0?(c3(a,101829)|0)!=0:0)?(c3(a,101836)|0)!=0:0)?(c3(a,101839)|0)!=0:0)?(c3(a,101850)|0)!=0:0)?(c3(a,101861)|0)!=0:0)?(c3(a,101871)|0)!=0:0)if((c3(a,101882)|0)!=0?(c3(a,101888)|0)!=0:0)if((c3(a,101815)|0)!=0?(c3(a,101893)|0)!=0:0){c[b>>2]=a;gA(0,101898,b)|0;a=0}else a=0;else a=2;else a=1;l=d;return a|0}function sK(b){b=b|0;var d=0.0,e=0,f=0;e=QA(b,101765)|0;a:do if(e|0?(f=a[e>>0]|0,f<<24>>24):0)switch(f<<24>>24|0){case 97:{if(f<<24>>24!=97)break a;if(s2(e,101771)|0)break a;c[(c[(c[b+16>>2]|0)+8>>2]|0)+84>>2]=4;break a}case 99:{if(f<<24>>24!=99)break a;if(s2(e,101776)|0)break a;c[(c[(c[b+16>>2]|0)+8>>2]|0)+84>>2]=3;break a}case 101:{if(f<<24>>24!=101)break a;if(s2(e,101785)|0)break a;c[(c[(c[b+16>>2]|0)+8>>2]|0)+84>>2]=5;break a}case 102:{if(f<<24>>24!=102)break a;if(s2(e,101792)|0)break a;c[(c[(c[b+16>>2]|0)+8>>2]|0)+84>>2]=2;break a}default:{d=+r5(e);if(!(d>0.0))break a;b=c[(c[b+16>>2]|0)+8>>2]|0;c[b+84>>2]=1;h[b+16>>3]=d;break a}}while(0);return}function tK(b,d,e){b=b|0;d=d|0;e=e|0;var f=0.0,g=0.0,i=0,j=0,k=0,m=0,n=0,o=0;o=l;l=l+48|0;m=o+32|0;i=o+16|0;k=o+8|0;j=o;n=o+40|0;a[n>>0]=0;b=QA(b,d)|0;do if(b){c[i>>2]=k;c[i+4>>2]=j;c[i+8>>2]=n;i=(b5(b,101749,i)|0)>1;g=+h[k>>3];f=+h[j>>3];if(i&g>0.0&f>0.0){g=g*72.0;h[e>>3]=+(~~(g+(g>=0.0?.5:-.5))|0);g=f*72.0;h[e+8>>3]=+(~~(g+(g>=0.0?.5:-.5))|0);b=(a[n>>0]|0)==33;break}a[n>>0]=0;c[m>>2]=k;c[m+4>>2]=n;m=(b5(b,101759,m)|0)>0;f=+h[k>>3];if(m&f>0.0){g=f*72.0;g=+(~~(g+(g>=0.0?.5:-.5))|0);h[e>>3]=g;h[e+8>>3]=g;b=(a[n>>0]|0)==33}else b=0}else b=0;while(0);l=o;return b&1|0}function uK(b){b=b|0;var d=0,e=0,f=0.0,g=0.0,i=0;d=QA(b,108224)|0;do if(d|0?a[d>>0]|0:0){e=(c[(c[b+60>>2]|0)+16>>2]|0)+113|0;a[e>>0]=a[e>>0]|8;e=(iD(d)|0)!=0;g=+_O(b,GA(b,0,101428,0)|0,14.0,1.0);i=bP(b,GA(b,0,101437,0)|0,107994)|0;d=zK(b,d,e?2:0,g,i,bP(b,GA(b,0,101446,0)|0,137314)|0)|0;i=b+16|0;c[(c[i>>2]|0)+12>>2]=d;d=QA(b,105628)|0;e=(d|0)!=0;do if((yC(b)|0)==(b|0)){if(e?(a[d>>0]|0)==116:0){d=1;break}d=0}else{if(e?(a[d>>0]|0)==98:0){d=0;break}d=1}while(0);e=QA(b,101726)|0;a:do if(e)switch(a[e>>0]|0){case 108:{d=d|2;break a}case 114:{d=d|4;break a}default:break a}while(0);a[(c[i>>2]|0)+275>>0]=d;if((yC(b)|0)!=(b|0)){d=c[(c[i>>2]|0)+12>>2]|0;f=+h[d+24>>3]+16.0;g=+h[d+32>>3]+8.0;b=(c[(c[(yC(b)|0)+16>>2]|0)+116>>2]&1|0)==0;d=c[i>>2]|0;e=a[d+275>>0]<<1&2;if(b){b=e&255;h[d+48+(b<<4)>>3]=f;h[d+48+(b<<4)+8>>3]=g;break}else{b=(e^3)&255;h[d+48+(b<<4)>>3]=g;h[d+48+(b<<4)+8>>3]=f;break}}}while(0);return}function vK(a){a=a|0;var b=0,d=0,e=0;e=a+16|0;d=c[e>>2]|0;b=c[d+8>>2]|0;do if(!b)b=d;else{d=c[b+88>>2]|0;if(d){EH(d);d=c[e>>2]|0;b=c[d+8>>2]|0;if(!b){b=d;break}}U1(c[b+92>>2]|0);b=c[e>>2]|0}while(0);U1(c[b+8>>2]|0);e=c[e>>2]|0;c[e+8>>2]=0;CK(c[e+12>>2]|0);ZC(a,0,137483);return}function wK(a){a=a|0;var b=0,d=0;d=l;l=l+16|0;b=d;switch(a|0){case 0:{a=101971;break}case 1:{a=101839;break}case 2:{a=101977;break}default:{c[b>>2]=a;gA(1,101941,b)|0;a=101971}}l=d;return a|0}function xK(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;f=c[d>>2]|0;l=d+24|0;c[l>>2]=0;c[l+4>>2]=0;c[l+8>>2]=0;c[l+12>>2]=0;if(a[f>>0]|0){i=KK((l2(f)|0)+1|0)|0;a[i>>0]=0;j=d+12|0;e=i;a:while(1){b:while(1){h=f+1|0;g=a[f>>0]|0;if(!(g<<24>>24))break a;if(!(g<<24>>24==-1|((g&255)<161|(c[j>>2]|0)!=2))){a[e>>0]=g;h=a[h>>0]|0;g=e+2|0;a[e+1>>0]=h;if(!(h<<24>>24)){e=g;break a}else{e=g;f=f+2|0;continue}}switch(g<<24>>24){case 92:break b;case 10:{k=12;break b}default:{}}a[e>>0]=g;e=e+1|0;f=h}if((k|0)==12){k=0;f=e+1|0;a[e>>0]=0;yK(b,d,i,110);e=f;i=f;f=h;continue}g=a[h>>0]|0;switch(g<<24>>24|0){case 114:case 108:case 110:{g=e+1|0;a[e>>0]=0;yK(b,d,i,a[h>>0]|0);e=g;break}default:{a[e>>0]=g;e=e+1|0;g=i}}i=g;f=(a[h>>0]|0)==0?h:f+2|0}if((i|0)!=(e|0)){a[e>>0]=0;yK(b,d,i,110)}d=d+40|0;c[d>>2]=c[l>>2];c[d+4>>2]=c[l+4>>2];c[d+8>>2]=c[l+8>>2];c[d+12>>2]=c[l+12>>2]}return}function yK(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;var i=0.0,j=0.0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=l;l=l+32|0;q=s+16|0;p=s;r=e+76|0;k=b[r>>1]|0;o=e+72|0;m=c[o>>2]|0;if(!m)n=JK((k*56|0)+112|0)|0;else n=LK(m,k+2|0,56,k+1|0)|0;c[o>>2]=n;k=b[r>>1]|0;m=n+(k*56|0)|0;c[m>>2]=f;a[n+(k*56|0)+48>>0]=g;if((f|0)!=0?(a[f>>0]|0)!=0:0){c[46594]=c[e+4>>2];h[23299]=+h[e+16>>3];g=c[d+144>>2]|0;c[n+(k*56|0)+4>>2]=nb[c[g>>2]&63](g,186376,1)|0;LO(p,d,m);j=+h[p>>3];h[q>>3]=j;i=+h[p+8>>3]}else{h[q>>3]=0.0;i=+(~~(+h[e+16>>3]*1.2)|0);h[n+(k*56|0)+40>>3]=i;j=0.0}b[r>>1]=(b[r>>1]|0)+1<<16>>16;r=e+24|0;h[r>>3]=+h[(+h[r>>3]>j?r:q)>>3];r=e+32|0;h[r>>3]=+h[r>>3]+i;l=s;return}function zK(b,e,f,g,i,j){b=b|0;e=e|0;f=f|0;g=+g;i=i|0;j=j|0;var k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;u=l;l=l+32|0;r=u+16|0;q=u+8|0;p=u;t=JK(88)|0;switch(IC(b)|0){case 0:{m=0;s=c[b+60>>2]|0;n=b;o=0;break}case 1:{m=0;s=yC(xC(b)|0)|0;n=0;o=b;break}case 2:{m=b;s=yC(xC(c[((c[b>>2]&3|0)==2?b:b+-48|0)+40>>2]|0)|0)|0;n=0;o=0;break}default:{m=0;s=0;n=0;o=0}}c[t+4>>2]=i;c[t+8>>2]=j;h[t+16>>3]=g;k=s+16|0;j=t+12|0;c[j>>2]=d[(c[k>>2]|0)+115>>0];a:do if(f&4){c[t>>2]=D4(e)|0;if(f&2|0)a[t+82>>0]=1}else switch(f|0){case 2:{c[t>>2]=D4(e)|0;a[t+82>>0]=1;if(!(BU(b,t)|0))break a;switch(IC(b)|0){case 0:{c[p>>2]=KB(n)|0;gA(3,101983,p)|0;break a}case 1:{c[q>>2]=KB(o)|0;gA(3,102005,q)|0;break a}case 2:{p=KB(c[((c[m>>2]&3|0)==3?m:m+48|0)+40>>2]|0)|0;q=(xB(s)|0)!=0;s=KB(c[((c[m>>2]&3|0)==2?m:m+-48|0)+40>>2]|0)|0;c[r>>2]=p;c[r+4>>2]=q?137738:141747;c[r+8>>2]=s;gA(3,102026,r)|0;break a}default:break a}}case 0:{i=AK(e,b,0)|0;c[t>>2]=i;if((c[j>>2]|0)==1)i=eQ(i)|0;else i=bQ(i,s)|0;U1(c[t>>2]|0);c[t>>2]=i;xK(c[(c[k>>2]|0)+144>>2]|0,t);break a}default:qa(102053,102069,166,102078)}while(0);l=u;return t|0}function AK(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;switch(IC(d)|0){case 0:{i=KB(d)|0;g=l2(i)|0;f=c[(c[d+16>>2]|0)+12>>2]|0;if(f){f=c[f>>2]|0;if(!b){v=0;t=2;u=2;s=2;h=2;y=102101;m=102098;j=105493;o=195059;q=195059;p=0;r=0;n=2;w=f;x=102095}else{v=0;t=2;u=2;s=2;h=2;y=102101;m=102098;j=105493;o=195059;q=195059;p=0;r=0;n=l2(f)|0;w=f;x=102095}}else{v=0;t=2;u=2;s=2;h=2;y=102101;m=102098;j=105493;o=195059;q=195059;p=0;r=0;n=2;w=102089;x=102095}break}case 1:{i=KB(xC(d)|0)|0;g=l2(i)|0;j=KB(d)|0;h=l2(j)|0;f=c[(c[d+16>>2]|0)+104>>2]|0;if(f){f=c[f>>2]|0;if(!b){v=0;t=2;u=2;s=2;y=102101;m=102098;o=195059;q=195059;p=0;r=0;n=2;w=f;x=102095}else{v=0;t=2;u=2;s=2;y=102101;m=102098;o=195059;q=195059;p=0;r=0;n=l2(f)|0;w=f;x=102095}}else{v=0;t=2;u=2;s=2;y=102101;m=102098;o=195059;q=195059;p=0;r=0;n=2;w=102089;x=102095}break}case 2:{h=d+48|0;i=KB(yC(xC(c[((c[d>>2]&3|0)==3?d:h)+40>>2]|0)|0)|0)|0;g=l2(i)|0;l=KB(c[((c[d>>2]&3|0)==3?d:h)+40>>2]|0)|0;k=l2(l)|0;f=d+16|0;q=c[(c[f>>2]|0)+52>>2]|0;if(!q)r=0;else r=l2(q)|0;m=KB(c[((c[d>>2]&3|0)==2?d:d+-48|0)+40>>2]|0)|0;f=c[f>>2]|0;o=c[f+92>>2]|0;if(!o)p=0;else p=l2(o)|0;j=l2(m)|0;f=c[f+96>>2]|0;if(f){f=c[f>>2]|0;if(!b)n=2;else n=l2(f)|0}else{n=2;f=102089}x=(xB(yC(xC(c[((c[d>>2]&3|0)==3?d:h)+40>>2]|0)|0)|0)|0)==0;v=1;t=k;u=j;s=k+2+(r|0?r+1|0:0)+j+(p|0?p+1|0:0)|0;h=2;y=l;j=105493;w=f;x=x?141747:137738;break}default:{v=0;t=2;u=2;s=2;h=2;g=2;y=102101;m=102098;j=105493;i=102092;o=195059;q=195059;p=0;r=0;n=2;w=102089;x=102095}}e=(e|0)==0;l=0;f=b;a:while(1){d=f+1|0;b:do switch(a[f>>0]|0){case 0:break a;case 92:{f=f+2|0;switch(a[d>>0]|0){case 78:{k=h;break b}case 71:{k=g;break b}case 69:{k=s;break b}case 72:{k=u;break b}case 84:{k=t;break b}case 76:{k=n;break b}case 92:{if(!e){k=1;break b}break}default:{}}k=2;break}default:{k=1;f=d}}while(0);l=l+k|0}s=KK(l+1|0)|0;n=(v|0)==0;l=(r|0)==0;d=(p|0)==0;f=s;g=b;c:while(1){k=g+1|0;h=a[g>>0]|0;switch(h<<24>>24){case 0:break c;case 92:break;default:{a[f>>0]=h;f=f+1|0;g=k;continue c}}h=g+2|0;g=a[k>>0]|0;switch(g<<24>>24|0){case 71:{g=i;while(1){b=a[g>>0]|0;a[f>>0]=b;if(!(b<<24>>24)){g=h;continue c}g=g+1|0;f=f+1|0}}case 78:{g=j;while(1){b=a[g>>0]|0;a[f>>0]=b;if(!(b<<24>>24)){g=h;continue c}g=g+1|0;f=f+1|0}}case 69:{if(n){g=h;continue c}else g=y;while(1){b=a[g>>0]|0;a[f>>0]=b;if(!(b<<24>>24))break;g=g+1|0;f=f+1|0}if(l)g=x;else{a[f>>0]=58;g=q;while(1){f=f+1|0;b=a[g>>0]|0;a[f>>0]=b;if(!(b<<24>>24)){g=x;break}else g=g+1|0}}while(1){b=a[g>>0]|0;a[f>>0]=b;if(!(b<<24>>24)){g=m;break}g=g+1|0;f=f+1|0}while(1){b=a[g>>0]|0;a[f>>0]=b;if(!(b<<24>>24))break;g=g+1|0;f=f+1|0}if(d){g=h;continue c}a[f>>0]=58;g=o;while(1){f=f+1|0;b=a[g>>0]|0;a[f>>0]=b;if(!(b<<24>>24)){g=h;continue c}else g=g+1|0}}case 84:{g=y;while(1){b=a[g>>0]|0;a[f>>0]=b;if(!(b<<24>>24)){g=h;continue c}g=g+1|0;f=f+1|0}}case 72:{g=m;while(1){b=a[g>>0]|0;a[f>>0]=b;if(!(b<<24>>24)){g=h;continue c}f=f+1|0;g=g+1|0}}case 76:{g=w;while(1){b=a[g>>0]|0;a[f>>0]=b;if(!(b<<24>>24)){g=h;continue c}f=f+1|0;g=g+1|0}}case 92:{if(!e){a[f>>0]=92;f=f+1|0;g=h;continue c}break}default:{}}a[f>>0]=92;a[f+1>>0]=g;f=f+2|0;g=h}a[f>>0]=0;return s|0}function BK(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;if(a|0){d=a;e=0;while(1){if((e|0)>=(b|0))break;if(!e)U1(c[d>>2]|0);g=c[d+8>>2]|0;if(g|0?(f=c[d+12>>2]|0,f|0):0)tb[f&127](g);d=d+56|0;e=e+1|0}U1(a)}return}function CK(d){d=d|0;var e=0;if(d|0){U1(c[d>>2]|0);e=d+72|0;if(a[d+82>>0]|0){e=c[e>>2]|0;if(e|0)mU(e,1)}else BK(c[e>>2]|0,b[d+76>>1]|0);U1(d)}return}function DK(d,e,f){d=d|0;e=e|0;f=f|0;var g=0.0,i=0,j=0.0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;u=l;l=l+32|0;q=u+16|0;r=u;k=c[d+16>>2]|0;s=k+12|0;t=c[s>>2]|0;c[s>>2]=e;if(!(a[f+82>>0]|0)){p=f+76|0;if((b[p>>1]|0)>=1){eS(d,0);hS(d,c[f+8>>2]|0);switch(a[f+80>>0]|0){case 116:{j=+h[f+64>>3];g=+h[f+48>>3]*.5+j;break}case 98:{j=+h[f+64>>3];g=+h[f+48>>3]*-.5+j+ +h[f+32>>3];break}default:{j=+h[f+64>>3];g=+h[f+32>>3]*.5+j}}g=g-+h[f+16>>3];o=r+8|0;h[o>>3]=g;if(b[k+260>>1]&512)h[o>>3]=g-j;m=f+72|0;n=f+56|0;i=f+40|0;e=0;while(1){if((e|0)>=(b[p>>1]|0))break;k=c[m>>2]|0;switch(a[k+(e*56|0)+48>>0]|0){case 108:{g=+h[n>>3]-+h[i>>3]*.5;break}case 114:{g=+h[i>>3]*.5+ +h[n>>3];break}default:g=+h[n>>3]}h[r>>3]=g;c[q>>2]=c[r>>2];c[q+4>>2]=c[r+4>>2];c[q+8>>2]=c[r+8>>2];c[q+12>>2]=c[r+12>>2];gS(d,q,k+(e*56|0)|0);h[o>>3]=+h[o>>3]-+h[(c[m>>2]|0)+(e*56|0)+40>>3];e=e+1|0}fS(d);i=18}}else{TT(d,c[f+72>>2]|0,f);i=18}if((i|0)==18)c[s>>2]=t;l=u;return}function EK(a,b){a=a|0;b=b|0;return AK(a,b,1)|0}function FK(a){a=a|0;return GK(a,0)|0}function GK(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;e=c[47207]|0;if(!e){c[47208]=64;e=KK(64)|0;c[47207]=e}j=d<<24>>24==0;i=0;f=0;h=b;while(1){if(!h)break;d=a[h>>0]|0;if(!(d<<24>>24))break;b=c[47208]|0;if((i|0)>(b+-8|0)){e=b<<1;c[47208]=e;e=MK(c[47207]|0,e)|0;c[47207]=e;e=e+i|0;d=a[h>>0]|0}a:do switch(d<<24>>24){case 38:{if(j?(HK(h)|0)!=0:0)k=18;else{f=5;d=102130}break}case 60:{f=4;d=102153;break}case 62:{f=4;d=102136;break}case 45:{f=5;d=102147;break}default:{if((f|0)!=0&d<<24>>24==32)if((a[f>>0]|0)==32){f=6;d=102123;break a}else{k=18;break a}switch(d<<24>>24){case 34:{f=6;d=102116;break a}case 39:{f=5;d=102141;break a}case 10:if(j){k=18;break a}else{f=5;d=102110;break a}default:{k=18;break a}}}}while(0);if((k|0)==18){k=0;d=j|d<<24>>24!=13;f=d?1:5;d=d?h:102104}g=e+f|0;b=f;while(1){if(!b)break;a[e>>0]=a[d>>0]|0;b=b+-1|0;d=d+1|0;e=e+1|0}b=h;i=f+i|0;e=g;h=h+1|0;f=b}a[e>>0]=0;return c[47207]|0}function HK(b){b=b|0;var c=0,d=0;d=b+1|0;c=a[d>>0]|0;a:do if(c<<24>>24==35){d=b+2|0;c=a[d>>0]|0;switch(c<<24>>24){case 88:case 120:break;default:{b=d;while(1){d=b+1|0;if((c+-48&255)>=10)break a;b=d;c=a[d>>0]|0}}}d=b+3|0;while(1){c=a[d>>0]|0;if((c+-48&255)>=10)switch(c<<24>>24){case 65:case 66:case 67:case 68:case 69:case 70:case 97:case 98:case 99:case 100:case 101:case 102:break;default:break a}d=d+1|0}}else while(1){b=d+1|0;if(((c&-33)+-65&255)>=26)break a;d=b;c=a[b>>0]|0}while(0);return c<<24>>24==59|0}function IK(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;d=c[47209]|0;if(!d){c[47210]=64;d=KK(64)|0;c[47209]=d;i=0}else i=0;while(1){if(!b)break;e=a[b>>0]|0;if(!(e<<24>>24))break;f=c[47210]|0;if((i|0)>(f+-8|0)){d=f<<1;c[47210]=d;d=MK(c[47209]|0,d)|0;c[47209]=d;d=d+i|0;e=a[b>>0]|0}switch(e<<24>>24){case 38:{if(!(HK(b)|0)){g=5;e=102130}else j=12;break}case 60:{g=4;e=102153;break}case 62:{g=4;e=102136;break}case 34:{g=6;e=102116;break}case 39:{g=5;e=102141;break}default:j=12}if((j|0)==12){j=0;g=1;e=b}h=d+g|0;f=g;while(1){if(!f)break;a[d>>0]=a[e>>0]|0;f=f+-1|0;e=e+1|0;d=d+1|0}i=g+i|0;d=h;b=b+1|0}a[d>>0]=0;return c[47209]|0}function JK(a){a=a|0;var b=0;if(!a)a=0;else{b=KK(a)|0;Y6(b|0,0,a|0)|0;a=b}return a|0}function KK(a){a=a|0;if(a){a=T1(a)|0;if(!a){U4(111740,14,1,c[15712]|0)|0;a=0}}else a=0;return a|0}function LK(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;a=W1(a,O(d,b)|0)|0;if(!((b|0)!=0&(a|0)==0)){if(b>>>0>e>>>0)Y6(a+(O(e,d)|0)|0,0,O(b-e|0,d)|0)|0}else U4(111740,14,1,c[15712]|0)|0;return a|0}function MK(a,b){a=a|0;b=b|0;a=W1(a,b)|0;if((b|0)!=0&(a|0)==0)U4(111740,14,1,c[15712]|0)|0;return a|0}function NK(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0,k=0.0,m=0,n=0,q=0,r=0,s=0,t=0,u=0;u=l;l=l+80|0;r=u+40|0;q=u+32|0;n=u+24|0;m=u;s=4;t=T1(40)|0;c[t>>2]=0;f=u+68|0;g=u+64|0;if(0){o=0;ka(62,a|0,f|0,g|0);i=o;o=0;if((i|0)!=0&(p|0)!=0){j=V6(c[i>>2]|0,t|0,s|0)|0;if(!j)bb(i|0,p|0);z=p}else j=-1;if((j|0)!=1){j=c[15712]|0;i=c[f>>2]|0;f=c[g>>2]|0;o=0;c[m>>2]=102202;c[m+4>>2]=i;c[m+8>>2]=f;c[m+12>>2]=d;c[m+16>>2]=b;ca(32,j|0,102158,m|0)|0;f=o;o=0;if((f|0)!=0&(p|0)!=0){g=V6(c[f>>2]|0,t|0,s|0)|0;if(!g)bb(f|0,p|0);z=p}else g=-1;if((g|0)!=1){o=0;ha(1);f=o;o=0;if((f|0)!=0&(p|0)!=0){g=V6(c[f>>2]|0,t|0,s|0)|0;if(!g)bb(f|0,p|0);z=p}else g=-1;if((g|0)!=1)j=6;else{f=z;j=15}}else{f=z;j=15}}else{f=z;j=15}}else j=6;do if((j|0)==6){o=0;f=$(27,a|0)|0;g=o;o=0;if((g|0)!=0&(p|0)!=0){i=V6(c[g>>2]|0,t|0,s|0)|0;if(!i)bb(g|0,p|0);z=p}else i=-1;if((i|0)!=1){if(!f){o=0;ha(2);f=o;o=0;if((f|0)!=0&(p|0)!=0){g=V6(c[f>>2]|0,t|0,s|0)|0;if(!g)bb(f|0,p|0);z=p}else g=-1;if((g|0)==1){f=z;j=15;break}}if((d|0)<1){o=0;ha(3);f=o;o=0;if((f|0)!=0&(p|0)!=0){g=V6(c[f>>2]|0,t|0,s|0)|0;if(!g)bb(f|0,p|0);z=p}else g=-1;if((g|0)==1){f=z;j=15;break}f=0;break}else{c[47211]=(e|0)>-1?e:30;t=U6(188848,1,t|0,s|0)|0;s=z;o=0;f=o;o=0;if((f|0)!=0&(p|0)!=0){g=V6(c[f>>2]|0,t|0,s|0)|0;if(!g)bb(f|0,p|0);z=p}else g=-1;if((g|0)==1){f=z;j=15;break}f=0;j=15;break}}else{f=z;j=15}}while(0);a:do if((j|0)==15){b:while(1){if(f|0){f=2;break a}o=0;ha(4);f=o;o=0;if((f|0)!=0&(p|0)!=0){g=V6(c[f>>2]|0,t|0,s|0)|0;if(!g)bb(f|0,p|0);z=p}else g=-1;if((g|0)==1){f=z;j=15;continue}a=c[15712]|0;m=0;while(1){o=0;j=_(2)|0;f=o;o=0;if((f|0)!=0&(p|0)!=0){g=V6(c[f>>2]|0,t|0,s|0)|0;if(!g)bb(f|0,p|0);z=p}else g=-1;if((g|0)==1){f=z;j=15;continue b}if(!j)break;o=0;f=$(28,j|0)|0;g=o;o=0;if((g|0)!=0&(p|0)!=0){i=V6(c[g>>2]|0,t|0,s|0)|0;if(!i)bb(g|0,p|0);z=p}else i=-1;if((i|0)==1){f=z;j=15;continue b}o=0;ja(25,j|0,f|0);f=o;o=0;if((f|0)!=0&(p|0)!=0){g=V6(c[f>>2]|0,t|0,s|0)|0;if(!g)bb(f|0,p|0);z=p}else g=-1;if((g|0)==1){f=z;j=15;continue b}m=m+1|0;do if(((m|0)%100|0|0)==0&0!=0){f=(m|0)%1e3|0;if((f|0)==100){o=0;aa(93,102202,a|0)|0;f=o;o=0;if((f|0)!=0&(p|0)!=0){g=V6(c[f>>2]|0,t|0,s|0)|0;if(!g)bb(f|0,p|0);z=p}else g=-1;if((g|0)==1){f=z;j=15;continue b}o=0;c[n>>2]=m;ca(32,a|0,102220,n|0)|0;f=o;o=0;if((f|0)!=0&(p|0)!=0){g=V6(c[f>>2]|0,t|0,s|0)|0;if(!g)bb(f|0,p|0);z=p}else g=-1;if((g|0)==1){f=z;j=15;continue b}break}o=0;c[q>>2]=m;ca(32,a|0,102220,q|0)|0;g=o;o=0;if((g|0)!=0&(p|0)!=0){i=V6(c[g>>2]|0,t|0,s|0)|0;if(!i)bb(g|0,p|0);z=p}else i=-1;if((i|0)==1){f=z;j=15;continue b}if(!f){o=0;aa(94,10,a|0)|0;f=o;o=0;if((f|0)!=0&(p|0)!=0){g=V6(c[f>>2]|0,t|0,s|0)|0;if(!g)bb(f|0,p|0);z=p}else g=-1;if((g|0)==1){f=z;j=15;continue b}}}while(0);if((m|0)>=(d|0))break}switch(b|0){case 1:{o=0;ha(5);f=o;o=0;if((f|0)!=0&(p|0)!=0){g=V6(c[f>>2]|0,t|0,s|0)|0;if(!g)bb(f|0,p|0);z=p}else g=-1;if((g|0)==1){f=z;j=15;continue b}break}case 2:{o=0;ha(6);f=o;o=0;if((f|0)!=0&(p|0)!=0){g=V6(c[f>>2]|0,t|0,s|0)|0;if(!g)bb(f|0,p|0);z=p}else g=-1;if((g|0)==1){f=z;j=15;continue b}break}default:{o=0;ha(7);f=o;o=0;if((f|0)!=0&(p|0)!=0){g=V6(c[f>>2]|0,t|0,s|0)|0;if(!g)bb(f|0,p|0);z=p}else g=-1;if((g|0)==1){f=z;j=15;continue b}o=0;ha(3);f=o;o=0;if((f|0)!=0&(p|0)!=0){g=V6(c[f>>2]|0,t|0,s|0)|0;if(!g)bb(f|0,p|0);z=p}else g=-1;if((g|0)==1){f=z;j=15;continue b}}}if(!0){f=0;break a}if((m|0)>99){o=0;aa(94,10,a|0)|0;f=o;o=0;if((f|0)!=0&(p|0)!=0){g=V6(c[f>>2]|0,t|0,s|0)|0;if(!g)bb(f|0,p|0);z=p}else g=-1;if((g|0)==1){f=z;j=15;continue}}f=c[47251]|0;g=c[47252]|0;o=0;k=+X(1);i=o;o=0;if((i|0)!=0&(p|0)!=0){j=V6(c[i>>2]|0,t|0,s|0)|0;if(!j)bb(i|0,p|0);z=p}else j=-1;if((j|0)==1){f=z;j=15;continue}o=0;c[r>>2]=102202;c[r+4>>2]=f;c[r+8>>2]=g;c[r+12>>2]=m;h[r+16>>3]=k;ca(32,a|0,102224,r|0)|0;f=o;o=0;if((f|0)!=0&(p|0)!=0){g=V6(c[f>>2]|0,t|0,s|0)|0;if(!g)bb(f|0,p|0);z=p}else g=-1;if((g|0)==1){f=z;j=15}else break}f=0}while(0);U1(t|0);l=u;return f|0}function OK(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;a=(c[a+16>>2]|0)+192|0;e=0;h=0;while(1){a=c[a>>2]|0;if(!a)break;g=c[a+16>>2]|0;f=c[g+180>>2]|0;a=0;while(1){if(!(c[f+(a<<2)>>2]|0))break;a=a+1|0;e=e+1|0}a=g+164|0;h=h+1|0}c[b>>2]=h;c[d>>2]=e;return}function PK(b){b=b|0;var d=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;c[47254]=b;c[47261]=0;c[47252]=0;c[47251]=0;i=b+16|0;b=(c[i>>2]|0)+192|0;h=0;f=0;while(1){b=c[b>>2]|0;if(!b)break;g=c[b+16>>2]|0;a[g+157>>0]=0;h=h+1|0;c[47251]=h;d=c[g+180>>2]|0;b=0;while(1){if(!(c[d+(b<<2)>>2]|0))break;k=f+1|0;c[47252]=k;b=b+1|0;f=k}b=g+164|0}b=c[47262]|0;if(!b)b=KK(h<<2)|0;else b=MK(b,h<<2)|0;c[47262]=b;c[47263]=0;b=c[47256]|0;if(!b)b=KK(c[47251]<<2)|0;else b=MK(b,c[47251]<<2)|0;c[47256]=b;c[47255]=0;d=1;b=(c[i>>2]|0)+192|0;while(1){b=c[b>>2]|0;if(!b)break;k=b+16|0;i=c[k>>2]|0;j=i+292|0;c[j>>2]=0;i=c[i+172>>2]|0;h=d;g=0;b=0;while(1){d=c[i+(g<<2)>>2]|0;if(!d)break;f=b+1|0;c[j>>2]=f;b=c[d+16>>2]|0;c[b+160>>2]=0;c[b+164>>2]=-1;if(!h)b=0;else{l=c[d>>2]&3;b=((c[(c[(c[((l|0)==2?d:d+-48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)-(c[(c[(c[((l|0)==3?d:d+48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)|0)<(e[b+170>>1]|0|0)?0:h}h=b;g=g+1|0;b=f}b=JK((g<<2)+4|0)|0;d=c[k>>2]|0;c[d+264>>2]=b;c[d+268>>2]=0;d=c[d+180>>2]|0;b=0;do{l=b;b=b+1|0}while((c[d+(l<<2)>>2]|0)!=0);d=JK(b<<2)|0;b=c[k>>2]|0;c[b+272>>2]=d;c[b+276>>2]=0;d=h;b=b+164|0}return d|0}function QK(){var a=0,b=0,d=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;o=l;l=l+16|0;n=o+8|0;k=o;m=VO(c[47251]|0)|0;a=(c[(c[47254]|0)+16>>2]|0)+192|0;while(1){b=c[a>>2]|0;if(!b){j=0;break}d=b+16|0;a=c[d>>2]|0;if(!(c[a+292>>2]|0)){XO(m,b);a=c[d>>2]|0}a=a+164|0}while(1){a=YO(m)|0;if(!a)break;i=a+16|0;a=c[i>>2]|0;f=a+232|0;c[f>>2]=0;d=c[a+172>>2]|0;b=0;h=0;while(1){g=c[d+(b<<2)>>2]|0;if(!g){f=0;break}g=(c[(c[(c[((c[g>>2]&3|0)==3?g:g+48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)+(e[(c[g+16>>2]|0)+170>>1]|0)|0;g=(h|0)>(g|0)?h:g;c[f>>2]=g;b=b+1|0;h=g}while(1){b=c[(c[a+180>>2]|0)+(f<<2)>>2]|0;if(!b)break;d=b+-48|0;g=(c[(c[((c[b>>2]&3|0)==2?b:d)+40>>2]|0)+16>>2]|0)+292|0;h=c[g>>2]|0;c[g>>2]=h+-1;if((h|0)<2){XO(m,c[((c[b>>2]&3|0)==2?b:d)+40>>2]|0);a=c[i>>2]|0}f=f+1|0}j=j+1|0}a:do if((j|0)!=(c[47251]|0)){gA(1,102556,k)|0;a=(c[(c[47254]|0)+16>>2]|0)+192|0;while(1){b=c[a>>2]|0;if(!b)break a;d=b+16|0;a=c[d>>2]|0;if(c[a+292>>2]|0){k=KB(b)|0;a=c[(c[d>>2]|0)+292>>2]|0;c[n>>2]=k;c[n+4>>2]=a;gA(3,102578,n)|0;a=c[d>>2]|0}a=a+164|0}}while(0);WO(m);l=o;return}function RK(){var b=0,d=0,e=0;b=(c[(c[47254]|0)+16>>2]|0)+192|0;while(1){b=c[b>>2]|0;if(!b)break;e=b+16|0;b=c[e>>2]|0;d=c[b+264>>2]|0;if(d){U1(d);b=c[e>>2]|0}d=c[b+272>>2]|0;if(d){U1(d);b=c[e>>2]|0}a[b+157>>0]=0;b=b+164|0}return}function SK(){var a=0,b=0,d=0,e=0,f=0;a=(c[(c[47254]|0)+16>>2]|0)+192|0;while(1){a=c[a>>2]|0;if(!a)break;a=c[a+16>>2]|0;c[a+280>>2]=0;a=a+164|0}f=JK(c[47251]<<2)|0;e=0;a=(c[(c[47254]|0)+16>>2]|0)+192|0;while(1){b=c[a>>2]|0;if(!b)break;d=b+16|0;a=c[d>>2]|0;if(!(c[a+280>>2]|0)){c[f+(e<<2)>>2]=dL(b)|0;b=e+1|0;a=c[d>>2]|0}else b=e;e=b;a=a+164|0}a=eL(f,e)|0;while(1){if((fL(a)|0)<=1)break;jL(a,c[(iL(hL(gL(a)|0)|0)|0)+8>>2]|0)}U1(a);a=0;while(1){if((a|0)>=(e|0))break;U1(c[f+(a<<2)>>2]|0);a=a+1|0}U1(f);if((c[47255]|0)==((c[47251]|0)+-1|0)){kL();return}else qa(102301,102331,523,102336)}function TK(){var a=0,b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;i=c[47261]|0;f=c[47255]|0;j=c[47256]|0;k=c[47211]|0;b=0;a=0;g=i;while(1){if((g|0)>=(f|0)){h=8;break}e=c[j+(g<<2)>>2]|0;d=c[(c[e+16>>2]|0)+160>>2]|0;if((d|0)<0){if(!a)a=e;else a=(c[(c[a+16>>2]|0)+160>>2]|0)>(d|0)?e:a;b=b+1|0;if((b|0)>=(k|0))break}e=g+1|0;c[47261]=e;g=e}if((h|0)==8)if((i|0)>0){f=0;while(1){if((f|0)>=(i|0))break;d=c[j+(f<<2)>>2]|0;e=c[(c[d+16>>2]|0)+160>>2]|0;if((e|0)<0){if(!a)a=d;else a=(c[(c[a+16>>2]|0)+160>>2]|0)>(e|0)?d:a;b=b+1|0;if((b|0)>=(k|0))break}f=f+1|0}c[47261]=f}return a|0}function UK(a){a=a|0;var b=0,d=0;b=c[a>>2]&3;d=c[((b|0)==3?a:a+48|0)+40>>2]|0;a=c[((b|0)==2?a:a+-48|0)+40>>2]|0;b=(c[(c[d+16>>2]|0)+288>>2]|0)<(c[(c[a+16>>2]|0)+288>>2]|0);a=b?d:a;c[47257]=0;c[47258]=2147483647;d=c[a+16>>2]|0;c[47259]=c[d+284>>2];c[47260]=c[d+288>>2];if(b)cL(a);else bL(a);return c[47257]|0}function VK(a,b){a=a|0;b=b|0;var d=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;o=l;l=l+16|0;n=o;g=c[b>>2]&3;m=b+-48|0;j=b+48|0;k=b+16|0;g=(c[(c[(c[((g|0)==2?b:m)+40>>2]|0)+16>>2]|0)+232>>2]|0)-(c[(c[(c[((g|0)==3?b:j)+40>>2]|0)+16>>2]|0)+232>>2]|0)-(e[(c[k>>2]|0)+170>>1]|0)|0;do if((g|0)>0){d=c[a>>2]&3;h=c[((d|0)==3?a:a+48|0)+40>>2]|0;i=c[h+16>>2]|0;if(((c[i+276>>2]|0)+(c[i+268>>2]|0)|0)==1){ZK(h,g);break}d=c[((d|0)==2?a:a+-48|0)+40>>2]|0;f=c[d+16>>2]|0;if(((c[f+276>>2]|0)+(c[f+268>>2]|0)|0)==1){ZK(d,0-g|0);break}if((c[i+288>>2]|0)<(c[f+288>>2]|0)){ZK(h,g);break}else{ZK(d,0-g|0);break}}while(0);d=a+16|0;f=c[(c[d>>2]|0)+160>>2]|0;g=c[b>>2]&3;g=_K(c[((g|0)==3?b:j)+40>>2]|0,c[((g|0)==2?b:m)+40>>2]|0,f,1)|0;i=c[b>>2]&3;if((_K(c[((i|0)==2?b:m)+40>>2]|0,c[((i|0)==3?b:j)+40>>2]|0,f,0)|0)==(g|0)){c[(c[k>>2]|0)+160>>2]=0-f;c[(c[d>>2]|0)+160>>2]=0;$K(a,b);n=c[g+16>>2]|0;aL(g,c[n+280>>2]|0,c[n+284>>2]|0)|0;l=o;return}else{gA(1,102262,n)|0;bb(188848,1)}}function WK(){var b=0,d=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;YK();m=JK((c[47253]<<2)+4|0)|0;d=c[47253]|0;b=0;while(1){if((b|0)>(d|0))break;c[m+(b<<2)>>2]=0;b=b+1|0}b=(c[(c[47254]|0)+16>>2]|0)+192|0;d=b;while(1){d=c[d>>2]|0;if(!d)break;d=c[d+16>>2]|0;if(!(a[d+156>>0]|0)){l=m+(c[d+232>>2]<<2)|0;c[l>>2]=(c[l>>2]|0)+1}d=d+164|0}while(1){b=c[b>>2]|0;if(!b)break;l=b+16|0;b=c[l>>2]|0;if(!(a[b+156>>0]|0)){h=c[47253]|0;f=c[b+172>>2]|0;k=0;j=0;d=0;while(1){g=c[f+(d<<2)>>2]|0;if(!g)break;n=c[g+16>>2]|0;i=(c[(c[(c[((c[g>>2]&3|0)==3?g:g+48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)+(e[n+170>>1]|0)|0;k=(c[n+156>>2]|0)+k|0;j=(j|0)>(i|0)?j:i;d=d+1|0}g=c[b+180>>2]|0;i=0;d=0;while(1){f=c[g+(d<<2)>>2]|0;if(!f)break;o=c[f+16>>2]|0;n=(c[(c[(c[((c[f>>2]&3|0)==2?f:f+-48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)-(e[o+170>>1]|0)|0;i=(c[o+156>>2]|0)+i|0;h=(h|0)<(n|0)?h:n;d=d+1|0}d=(j|0)>0?j:0;if((k|0)==(i|0)){g=d;f=d;while(1){d=f+1|0;if((f|0)>=(h|0))break;g=(c[m+(d<<2)>>2]|0)<(c[m+(g<<2)>>2]|0)?d:g;f=d}o=b+232|0;n=m+(c[o>>2]<<2)|0;c[n>>2]=(c[n>>2]|0)+-1;n=m+(g<<2)|0;c[n>>2]=(c[n>>2]|0)+1;c[o>>2]=g}d=c[b+264>>2]|0;if(d){U1(d);b=c[l>>2]|0}d=c[b+272>>2]|0;if(d){U1(d);b=c[l>>2]|0}a[b+157>>0]=0}b=b+164|0}U1(m);return}function XK(){var a=0,b=0,d=0,f=0,g=0,h=0;b=0;while(1){if((b|0)>=(c[47255]|0))break;a=c[(c[47256]|0)+(b<<2)>>2]|0;do if(((c[(c[a+16>>2]|0)+160>>2]|0)==0?(d=UK(a)|0,d|0):0)?(f=c[d>>2]&3,f=(c[(c[(c[((f|0)==2?d:d+-48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)-(c[(c[(c[((f|0)==3?d:d+48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)-(e[(c[d+16>>2]|0)+170>>1]|0)|0,(f|0)>=2):0){h=c[a>>2]&3;g=c[((h|0)==3?a:a+48|0)+40>>2]|0;a=c[((h|0)==2?a:a+-48|0)+40>>2]|0;if((c[(c[g+16>>2]|0)+288>>2]|0)<(c[(c[a+16>>2]|0)+288>>2]|0)){ZK(g,f>>>1);break}else{ZK(a,(f|0)/-2|0);break}}while(0);b=b+1|0}RK();return}function YK(){var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;i=l;l=l+16|0;h=i;c[h>>2]=0;c[h>>2]=2147483647;c[47253]=-2147483647;b=(c[(c[47254]|0)+16>>2]|0)+192|0;e=b;g=2147483647;f=-2147483647;while(1){d=c[e>>2]|0;if(!d)break;e=c[d+16>>2]|0;if(!(a[e+156>>0]|0)){j=c[e+232>>2]|0;d=(g|0)<(j|0)?g:j;c[h>>2]=d;f=(f|0)>(j|0)?f:j;c[47253]=f}else d=g;e=e+164|0;g=d}if(g|0){while(1){b=c[b>>2]|0;if(!b)break;b=c[b+16>>2]|0;j=b+232|0;c[j>>2]=(c[j>>2]|0)-g;b=b+164|0}c[47253]=f-g;c[h>>2]=0}l=i;return}function ZK(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=a+16|0;a=c[f>>2]|0;e=a+232|0;c[e>>2]=(c[e>>2]|0)-b;e=0;while(1){d=c[(c[a+272>>2]|0)+(e<<2)>>2]|0;if(!d){e=0;break}if((d|0)!=(c[a+280>>2]|0)){ZK(c[((c[d>>2]&3|0)==2?d:d+-48|0)+40>>2]|0,b);a=c[f>>2]|0}e=e+1|0}while(1){d=c[(c[a+264>>2]|0)+(e<<2)>>2]|0;if(!d)break;if((d|0)!=(c[a+280>>2]|0)){ZK(c[((c[d>>2]&3|0)==3?d:d+48|0)+40>>2]|0,b);a=c[f>>2]|0}e=e+1|0}return}function _K(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;g=(e|0)==0&1;h=0-d|0;f=c[(c[b+16>>2]|0)+288>>2]|0;b=a;while(1){a=c[b+16>>2]|0;if((c[a+284>>2]|0)<=(f|0)?(f|0)<=(c[a+288>>2]|0):0)break;a=c[a+280>>2]|0;i=a+48|0;j=(c[a+16>>2]|0)+160|0;c[j>>2]=(((b|0)==(c[((c[a>>2]&3|0)==3?a:i)+40>>2]|0)?e:g)|0?d:h)+(c[j>>2]|0);j=c[a>>2]&3;i=c[((j|0)==3?a:i)+40>>2]|0;a=c[((j|0)==2?a:a+-48|0)+40>>2]|0;b=(c[(c[i+16>>2]|0)+288>>2]|0)>(c[(c[a+16>>2]|0)+288>>2]|0)?i:a}return b|0}function $K(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;i=a+16|0;e=(c[i>>2]|0)+164|0;c[(c[b+16>>2]|0)+164>>2]=c[e>>2];c[(c[47256]|0)+(c[e>>2]<<2)>>2]=b;c[(c[i>>2]|0)+164>>2]=-1;i=(c[((c[a>>2]&3|0)==3?a:a+48|0)+40>>2]|0)+16|0;e=c[i>>2]|0;g=e+276|0;f=c[g>>2]|0;j=f+-1|0;c[g>>2]=j;g=e+272|0;h=0;while(1){if((h|0)>=(f|0)){k=3;break}d=c[g>>2]|0;if((c[d+(h<<2)>>2]|0)==(a|0))break;h=h+1|0}if((k|0)==3)d=c[e+272>>2]|0;c[d+(h<<2)>>2]=c[d+(j<<2)>>2];c[(c[(c[i>>2]|0)+272>>2]|0)+(j<<2)>>2]=0;i=(c[((c[a>>2]&3|0)==2?a:a+-48|0)+40>>2]|0)+16|0;e=c[i>>2]|0;g=e+268|0;f=c[g>>2]|0;j=f+-1|0;c[g>>2]=j;g=e+264|0;h=0;while(1){if((h|0)>=(f|0)){k=8;break}d=c[g>>2]|0;if((c[d+(h<<2)>>2]|0)==(a|0))break;h=h+1|0}if((k|0)==8)d=c[e+264>>2]|0;c[d+(h<<2)>>2]=c[d+(j<<2)>>2];c[(c[(c[i>>2]|0)+264>>2]|0)+(j<<2)>>2]=0;k=(c[((c[b>>2]&3|0)==3?b:b+48|0)+40>>2]|0)+16|0;a=c[k>>2]|0;j=c[a+272>>2]|0;a=a+276|0;i=c[a>>2]|0;c[a>>2]=i+1;c[j+(i<<2)>>2]=b;k=c[k>>2]|0;c[(c[k+272>>2]|0)+(c[k+276>>2]<<2)>>2]=0;k=(c[((c[b>>2]&3|0)==2?b:b+-48|0)+40>>2]|0)+16|0;i=c[k>>2]|0;j=c[i+264>>2]|0;i=i+268|0;a=c[i>>2]|0;c[i>>2]=a+1;c[j+(a<<2)>>2]=b;k=c[k>>2]|0;c[(c[k+264>>2]|0)+(c[k+268>>2]<<2)>>2]=0;return}function aL(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;g=a+16|0;a=c[g>>2]|0;c[a+280>>2]=b;c[a+284>>2]=d;f=0;while(1){e=c[(c[a+272>>2]|0)+(f<<2)>>2]|0;if(!e){f=0;break}if((e|0)!=(b|0)){d=aL(c[((c[e>>2]&3|0)==2?e:e+-48|0)+40>>2]|0,e,d)|0;a=c[g>>2]|0}f=f+1|0}while(1){e=c[(c[a+264>>2]|0)+(f<<2)>>2]|0;if(!e)break;if((e|0)!=(b|0)){d=aL(c[((c[e>>2]&3|0)==3?e:e+48|0)+40>>2]|0,e,d)|0;a=c[g>>2]|0}f=f+1|0}c[a+288>>2]=d;return d+1|0}function bL(a){a=a|0;var b=0,d=0,f=0,g=0,h=0,i=0,j=0;i=a+16|0;g=0;while(1){a=c[i>>2]|0;d=c[(c[a+180>>2]|0)+(g<<2)>>2]|0;if(!d){d=0;break}f=c[d+16>>2]|0;if((c[f+164>>2]|0)<0){a=c[d>>2]&3;b=c[(c[((a|0)==2?d:d+-48|0)+40>>2]|0)+16>>2]|0;j=c[b+288>>2]|0;if((c[47259]|0)>(j|0)|(j|0)>(c[47260]|0)?(h=(c[b+232>>2]|0)-(c[(c[(c[((a|0)==3?d:d+48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)-(e[f+170>>1]|0)|0,(h|0)<(c[47258]|0)|(c[47257]|0)==0):0){c[47257]=d;c[47258]=h}}else{b=c[((c[d>>2]&3|0)==2?d:d+-48|0)+40>>2]|0;if((c[(c[b+16>>2]|0)+288>>2]|0)<(c[a+288>>2]|0))bL(b)}g=g+1|0}while(1){b=c[(c[a+264>>2]|0)+(d<<2)>>2]|0;if(!((b|0)!=0&(c[47258]|0)>0))break;b=c[((c[b>>2]&3|0)==3?b:b+48|0)+40>>2]|0;if((c[(c[b+16>>2]|0)+288>>2]|0)<(c[a+288>>2]|0)){bL(b);a=c[i>>2]|0}d=d+1|0}return}function cL(a){a=a|0;var b=0,d=0,f=0,g=0,h=0,i=0,j=0;i=a+16|0;g=0;while(1){a=c[i>>2]|0;d=c[(c[a+172>>2]|0)+(g<<2)>>2]|0;if(!d){d=0;break}f=c[d+16>>2]|0;if((c[f+164>>2]|0)<0){a=c[d>>2]&3;b=c[(c[((a|0)==3?d:d+48|0)+40>>2]|0)+16>>2]|0;j=c[b+288>>2]|0;if((c[47259]|0)>(j|0)|(j|0)>(c[47260]|0)?(h=(c[(c[(c[((a|0)==2?d:d+-48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)-(c[b+232>>2]|0)-(e[f+170>>1]|0)|0,(h|0)<(c[47258]|0)|(c[47257]|0)==0):0){c[47257]=d;c[47258]=h}}else{b=c[((c[d>>2]&3|0)==3?d:d+48|0)+40>>2]|0;if((c[(c[b+16>>2]|0)+288>>2]|0)<(c[a+288>>2]|0))cL(b)}g=g+1|0}while(1){b=c[(c[a+272>>2]|0)+(d<<2)>>2]|0;if(!((b|0)!=0&(c[47258]|0)>0))break;b=c[((c[b>>2]&3|0)==2?b:b+-48|0)+40>>2]|0;if((c[(c[b+16>>2]|0)+288>>2]|0)<(c[a+288>>2]|0)){cL(b);a=c[i>>2]|0}d=d+1|0}return}function dL(a){a=a|0;var b=0;b=JK(16)|0;c[b>>2]=a;c[b+4>>2]=tL(a,b)|0;c[b+12>>2]=b;return b|0}function eL(a,b){a=a|0;b=b|0;var d=0,e=0;e=JK(8)|0;c[e>>2]=a;c[e+4>>2]=b;d=0;while(1){if((d|0)>=(b|0))break;c[(c[a+(d<<2)>>2]|0)+8>>2]=d;d=d+1|0}d=(b|0)/2|0;while(1){if((d|0)<=-1)break;jL(e,d);d=d+-1|0}return e|0}function fL(a){a=a|0;return c[a+4>>2]|0}function gL(a){a=a|0;var b=0,d=0,e=0,f=0;f=c[a>>2]|0;b=c[f>>2]|0;c[b+8>>2]=-1;d=a+4|0;e=(c[d>>2]|0)+-1|0;c[f>>2]=c[f+(e<<2)>>2];f=c[a>>2]|0;c[(c[f>>2]|0)+8>>2]=0;c[f+(e<<2)>>2]=b;c[d>>2]=e;jL(a,0);return b|0}function hL(a){a=a|0;return sL(c[a>>2]|0,0,0)|0}function iL(a){a=a|0;var b=0,d=0,f=0,g=0,h=0,i=0;b=a+16|0;if((c[(c[b>>2]|0)+164>>2]|0)>-1)qa(102350,102331,463,102364);g=a+48|0;d=oL(c[((c[a>>2]&3|0)==3?a:g)+40>>2]|0)|0;i=a+-48|0;f=oL(c[((c[a>>2]&3|0)==2?a:i)+40>>2]|0)|0;h=c[a>>2]&3;b=(c[(c[(c[((h|0)==2?a:i)+40>>2]|0)+16>>2]|0)+232>>2]|0)-(c[(c[(c[((h|0)==3?a:g)+40>>2]|0)+16>>2]|0)+232>>2]|0)-(e[(c[b>>2]|0)+170>>1]|0)|0;if((c[d+8>>2]|0)==-1)pL(c[d>>2]|0,0,b);else pL(c[f>>2]|0,0,0-b|0);qL(a);return rL(d,f)|0}function jL(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;h=c[a>>2]|0;g=c[a+4>>2]|0;while(1){a=b<<1;f=a+2|0;a=a|1;if(!((a|0)<(g|0)?(c[(c[h+(a<<2)>>2]|0)+4>>2]|0)<(c[(c[h+(b<<2)>>2]|0)+4>>2]|0):0))a=b;if((f|0)>=(g|0))break;d=h+(f<<2)|0;e=c[d>>2]|0;if((f|0)==(b|0)?1:(c[e+4>>2]|0)>=(c[(c[h+(a<<2)>>2]|0)+4>>2]|0))break;i=h+(b<<2)|0;a=c[i>>2]|0;c[i>>2]=e;c[d>>2]=a;c[(c[i>>2]|0)+8>>2]=b;c[a+8>>2]=f;b=f}return}function kL(){aL(c[(c[(c[47254]|0)+16>>2]|0)+192>>2]|0,0,1)|0;lL(c[(c[(c[47254]|0)+16>>2]|0)+192>>2]|0,0);return}function lL(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=a+16|0;d=0;while(1){a=c[f>>2]|0;e=c[(c[a+272>>2]|0)+(d<<2)>>2]|0;if(!e){e=0;break}if((e|0)!=(b|0))lL(c[((c[e>>2]&3|0)==2?e:e+-48|0)+40>>2]|0,e);d=d+1|0}while(1){d=c[(c[a+264>>2]|0)+(e<<2)>>2]|0;if(!d)break;if((d|0)!=(b|0)){lL(c[((c[d>>2]&3|0)==3?d:d+48|0)+40>>2]|0,d);a=c[f>>2]|0}e=e+1|0}if(b|0)mL(b);return}function mL(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0;b=c[a>>2]&3;d=c[((b|0)==3?a:a+48|0)+40>>2]|0;e=c[d+16>>2]|0;if((c[e+280>>2]|0)==(a|0))i=1;else{e=c[((b|0)==2?a:a+-48|0)+40>>2]|0;i=-1;d=e;e=c[e+16>>2]|0}g=c[e+180>>2]|0;b=0;f=0;while(1){h=c[g+(f<<2)>>2]|0;if(!h)break;b=(nL(h,d,i)|0)+b|0;f=f+1|0}g=c[e+172>>2]|0;e=0;while(1){f=c[g+(e<<2)>>2]|0;if(!f)break;b=(nL(f,d,i)|0)+b|0;e=e+1|0}c[(c[a+16>>2]|0)+160>>2]=b;return}function nL(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;h=c[a>>2]&3;i=(h|0)==3?a:a+48|0;e=c[i+40>>2]|0;if((e|0)==(b|0))e=c[((h|0)==2?a:a+-48|0)+40>>2]|0;g=c[b+16>>2]|0;f=c[(c[e+16>>2]|0)+288>>2]|0;if((c[g+284>>2]|0)<=(f|0)?(f|0)<=(c[g+288>>2]|0):0){f=c[a+16>>2]|0;if((c[f+164>>2]|0)>-1)e=c[f+160>>2]|0;else e=0;g=1;e=e-(c[f+156>>2]|0)|0}else{g=0;e=c[(c[a+16>>2]|0)+156>>2]|0}i=(c[((d|0)>0?((h|0)==2?a:a+-48|0):i)+40>>2]|0)==(b|0)?1:-1;return (((g?i:0-i|0)|0)<0?0-e|0:e)|0}function oL(a){a=a|0;var b=0,d=0;a=c[(c[a+16>>2]|0)+280>>2]|0;while(1){b=a+12|0;d=c[b>>2]|0;if(!((d|0)!=(a|0)&(d|0)!=0))break;a=c[d+12>>2]|0;if(!a){a=d;continue}c[b>>2]=a}return a|0}function pL(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=a+16|0;e=c[h>>2]|0;g=e+232|0;c[g>>2]=(c[g>>2]|0)+d;g=0;while(1){f=c[(c[e+264>>2]|0)+(g<<2)>>2]|0;if(!f){g=0;break}f=c[((c[f>>2]&3|0)==3?f:f+48|0)+40>>2]|0;if((f|0)!=(b|0)){pL(f,a,d);e=c[h>>2]|0}g=g+1|0}while(1){f=c[(c[e+272>>2]|0)+(g<<2)>>2]|0;if(!f)break;f=c[((c[f>>2]&3|0)==2?f:f+-48|0)+40>>2]|0;if((f|0)!=(b|0)){pL(f,a,d);e=c[h>>2]|0}g=g+1|0}return}function qL(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;h=l;l=l+32|0;d=(c[b+16>>2]|0)+164|0;if((c[d>>2]|0)>-1){gA(1,102453,h)|0;bb(188848,1)}g=c[47255]|0;c[d>>2]=g;d=c[47256]|0;c[47255]=g+1;c[d+(g<<2)>>2]=b;d=c[b>>2]|0;g=b+48|0;e=c[((d&3|0)==3?b:g)+40>>2]|0;if(!(a[(c[e+16>>2]|0)+157>>0]|0)){f=c[47262]|0;d=c[47263]|0;c[47263]=d+1;c[f+(d<<2)>>2]=e;d=c[b>>2]|0}f=b+-48|0;e=c[((d&3|0)==2?b:f)+40>>2]|0;if(!(a[(c[e+16>>2]|0)+157>>0]|0)){i=c[47262]|0;d=c[47263]|0;c[47263]=d+1;c[i+(d<<2)>>2]=e;d=c[b>>2]|0}i=(c[((d&3|0)==3?b:g)+40>>2]|0)+16|0;d=c[i>>2]|0;a[d+157>>0]=1;e=c[d+272>>2]|0;d=d+276|0;g=c[d>>2]|0;c[d>>2]=g+1;c[e+(g<<2)>>2]=b;g=c[i>>2]|0;c[(c[g+272>>2]|0)+(c[g+276>>2]<<2)>>2]=0;i=c[i>>2]|0;if(!(c[(c[i+180>>2]|0)+((c[i+276>>2]|0)+-1<<2)>>2]|0)){gA(1,102487,h+8|0)|0;bb(188848,1)}i=(c[((c[b>>2]&3|0)==2?b:f)+40>>2]|0)+16|0;e=c[i>>2]|0;a[e+157>>0]=1;f=c[e+264>>2]|0;e=e+268|0;g=c[e>>2]|0;c[e>>2]=g+1;c[f+(g<<2)>>2]=b;b=c[i>>2]|0;c[(c[b+264>>2]|0)+(c[b+268>>2]<<2)>>2]=0;i=c[i>>2]|0;if(!(c[(c[i+172>>2]|0)+((c[i+268>>2]|0)+-1<<2)>>2]|0)){gA(1,102522,h+16|0)|0;bb(188848,1)}else{l=h;return}}function rL(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;while(1){g=a+12|0;d=c[g>>2]|0;if((d|0)==0|(d|0)==(a|0))break;else a=d}while(1){f=b+12|0;d=c[f>>2]|0;if((d|0)==0|(d|0)==(b|0))break;else b=d}if((a|0)!=(b|0)){e=c[a+8>>2]|0;d=c[b+8>>2]|0;do if((e|0)>-1)if((d|0)==-1)h=a;else j=10;else if((d|0)>-1)if((e|0)==-1){h=b;break}else{j=10;break}else qa(102376,102331,327,102423);while(0);if((j|0)==10)h=(c[b+4>>2]|0)<(c[a+4>>2]|0)?a:b;c[f>>2]=h;c[g>>2]=h;c[h+4>>2]=(c[b+4>>2]|0)+(c[a+4>>2]|0);if((c[h+8>>2]|0)>-1)i=h;else qa(102434,102331,335,102423)}else i=a;return i|0}function sL(a,b,d){a=a|0;b=b|0;d=d|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;l=oL(a)|0;if(d){k=c[d>>2]&3;if(((c[(c[(c[((k|0)==2?d:d+-48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)-(c[(c[(c[((k|0)==3?d:d+48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)|0)!=(e[(c[d+16>>2]|0)+170>>1]|0|0))f=3}else{d=0;f=3}a:do if((f|0)==3){k=a+16|0;j=0;while(1){f=c[k>>2]|0;i=c[(c[f+180>>2]|0)+(j<<2)>>2]|0;if(!i){j=0;break}f=i+16|0;g=i+-48|0;h=c[((c[i>>2]&3|0)==2?i:g)+40>>2]|0;do if((c[(c[f>>2]|0)+164>>2]|0)>-1){if((h|0)!=(b|0))d=sL(h,a,d)|0}else if((oL(h)|0)!=(l|0)){if(d|0?(m=c[i>>2]&3,h=c[d>>2]&3,((c[(c[(c[((m|0)==2?i:g)+40>>2]|0)+16>>2]|0)+232>>2]|0)-(c[(c[(c[((m|0)==3?i:i+48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)-(e[(c[f>>2]|0)+170>>1]|0)|0)>=((c[(c[(c[((h|0)==2?d:d+-48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)-(c[(c[(c[((h|0)==3?d:d+48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)-(e[(c[d+16>>2]|0)+170>>1]|0)|0)):0)break;d=i}while(0);j=j+1|0}while(1){f=c[(c[f+172>>2]|0)+(j<<2)>>2]|0;if(!f)break a;g=f+16|0;h=f+48|0;i=c[((c[f>>2]&3|0)==3?f:h)+40>>2]|0;do if((c[(c[g>>2]|0)+164>>2]|0)>-1){if((i|0)!=(b|0))d=sL(i,a,d)|0}else if((oL(i)|0)!=(l|0)){if(d|0?(i=c[f>>2]&3,m=c[d>>2]&3,((c[(c[(c[((i|0)==2?f:f+-48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)-(c[(c[(c[((i|0)==3?f:h)+40>>2]|0)+16>>2]|0)+232>>2]|0)-(e[(c[g>>2]|0)+170>>1]|0)|0)>=((c[(c[(c[((m|0)==2?d:d+-48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)-(c[(c[(c[((m|0)==3?d:d+48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)-(e[(c[d+16>>2]|0)+170>>1]|0)|0)):0)break;d=f}while(0);j=j+1|0;f=c[k>>2]|0}}while(0);return d|0}function tL(a,b){a=a|0;b=b|0;var d=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;l=a+16|0;d=c[l>>2]|0;c[d+280>>2]=b;a=1;h=0;while(1){g=c[(c[d+172>>2]|0)+(h<<2)>>2]|0;if(!g){h=0;break}f=c[g+16>>2]|0;if(((c[f+164>>2]|0)<=-1?(i=c[g>>2]&3,j=g+48|0,k=c[(c[((i|0)==3?g:j)+40>>2]|0)+16>>2]|0,(c[k+280>>2]|0)==0):0)?((c[(c[(c[((i|0)==2?g:g+-48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)-(c[k+232>>2]|0)|0)==(e[f+170>>1]|0|0):0){qL(g);a=(tL(c[((c[g>>2]&3|0)==3?g:j)+40>>2]|0,b)|0)+a|0;d=c[l>>2]|0}h=h+1|0}while(1){f=c[(c[d+180>>2]|0)+(h<<2)>>2]|0;if(!f)break;g=c[f+16>>2]|0;if(((c[g+164>>2]|0)<=-1?(m=c[f>>2]&3,n=f+-48|0,o=c[(c[((m|0)==2?f:n)+40>>2]|0)+16>>2]|0,(c[o+280>>2]|0)==0):0)?((c[o+232>>2]|0)-(c[(c[(c[((m|0)==3?f:f+48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)|0)==(e[g+170>>1]|0|0):0){qL(f);a=(tL(c[((c[f>>2]&3|0)==2?f:n)+40>>2]|0,b)|0)+a|0;d=c[l>>2]|0}h=h+1|0}return a|0}function uL(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;d=QA(a,102586)|0;if(!d)d=30;else d=q5(d)|0;return NK(a,b,c,d)|0}function vL(a){a=+a;return +(0==0?a:+h[23301]-a)}function wL(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0.0,t=0.0,u=0;r=l;l=l+16|0;q=r;c[47264]=c[(c[(c[d+64>>2]|0)+8>>2]|0)+4>>2];xL(d);i=c[d+16>>2]|0;t=+h[i+32>>3];s=+h[i+40>>3];yL(e,102597,+h[b+352>>3]);yL(e,102604,t*.013888888888888888);yL(e,102604,s*.013888888888888888);zL(e);i=jC(d)|0;while(1){if(!i)break;g=i+16|0;if(!(a[(c[g>>2]|0)+118>>0]|0)){AL(e,102606,$D(KB(i)|0)|0);p=(c[g>>2]|0)+16|0;c[q>>2]=c[p>>2];c[q+4>>2]=c[p+4>>2];c[q+8>>2]=c[p+8>>2];c[q+12>>2]=c[p+12>>2];BL(e,q);if(!(a[(c[(c[g>>2]|0)+104>>2]|0)+82>>0]|0)){b=xC(i)|0;b=CL(b,c[c[(c[g>>2]|0)+104>>2]>>2]|0)|0}else b=$D(RA(i,c[47154]|0)|0)|0;yL(e,102604,+h[(c[g>>2]|0)+32>>3]);yL(e,102604,+h[(c[g>>2]|0)+40>>3]);AL(e,102604,b);AL(e,102604,bP(i,c[47157]|0,111067)|0);AL(e,102604,c[c[(c[g>>2]|0)+8>>2]>>2]|0);AL(e,102604,bP(i,c[47148]|0,137314)|0);b=bP(i,c[47149]|0,195059)|0;if(!(a[b>>0]|0))b=bP(i,c[47148]|0,134800)|0;AL(e,102604,b);zL(e)}i=kC(d,i)|0}o=f<<24>>24==0;n=jC(d)|0;while(1){if(!n)break;m=XA(d,n)|0;while(1){if(!m)break;if(o){f=195059;j=195059}else{j=QA(m,111455)|0;f=QA(m,111464)|0;f=f|0?f:195059;j=j|0?j:195059}p=m+16|0;b=c[p>>2]|0;k=c[b+8>>2]|0;a:do if(k){i=c[k+4>>2]|0;b=0;g=0;while(1){if((b|0)>=(i|0))break;u=(c[(c[k>>2]|0)+(b*48|0)+4>>2]|0)+g|0;b=b+1|0;g=u}AL(e,0,111450);DL(e,c[((c[m>>2]&3|0)==3?m:m+48|0)+40>>2]|0,j);DL(e,c[((c[m>>2]&3|0)==2?m:m+-48|0)+40>>2]|0,f);EL(e,g);f=0;while(1){b=c[p>>2]|0;g=c[b+8>>2]|0;if((f|0)>=(c[g+4>>2]|0))break a;i=c[g>>2]|0;g=c[i+(f*48|0)>>2]|0;i=c[i+(f*48|0)+4>>2]|0;b=0;while(1){if((b|0)>=(i|0))break;u=g+(b<<4)|0;c[q>>2]=c[u>>2];c[q+4>>2]=c[u+4>>2];c[q+8>>2]=c[u+8>>2];c[q+12>>2]=c[u+12>>2];BL(e,q);b=b+1|0}f=f+1|0}}while(0);if(c[b+96>>2]|0){u=xC(c[((c[m>>2]&3|0)==3?m:m+48|0)+40>>2]|0)|0;AL(e,102604,CL(u,c[c[(c[p>>2]|0)+96>>2]>>2]|0)|0);u=(c[(c[p>>2]|0)+96>>2]|0)+56|0;c[q>>2]=c[u>>2];c[q+4>>2]=c[u+4>>2];c[q+8>>2]=c[u+8>>2];c[q+12>>2]=c[u+12>>2];BL(e,q)}AL(e,102604,bP(m,c[47185]|0,111067)|0);AL(e,102604,bP(m,c[47176]|0,137314)|0);zL(e);m=ZA(d,m)|0}n=kC(d,n)|0}FL(102612,e);l=r;return}function xL(a){a=a|0;var b=0.0;if(0){a=c[a+16>>2]|0;b=+h[a+24>>3]+ +h[a+40>>3];h[23301]=b;h[23302]=b*.013888888888888888}return}function yL(a,b,c){a=a|0;b=b|0;c=+c;var d=0,e=0,f=0;f=l;l=l+1040|0;e=f;d=f+8|0;if(b|0)FL(b,a);h[e>>3]=c;m4(d,102618,e)|0;FL(d,a);l=f;return}function zL(b){b=b|0;a[194955]=10;lb[c[47264]&127](b,194955)|0;return}function AL(a,b,c){a=a|0;b=b|0;c=c|0;if(b|0)FL(b,a);FL(c,a);return}function BL(a,b){a=a|0;b=b|0;var c=0.0;yL(a,102604,+h[b>>3]*.013888888888888888);if(!0)c=+h[b+8>>3];else c=+h[23301]-+h[b+8>>3];yL(a,102604,c*.013888888888888888);return}function CL(a,b){a=a|0;b=b|0;var c=0;c=fD(a,b)|0;b=$D(c)|0;hD(a,c)|0;return b|0}function DL(b,d,e){b=b|0;d=d|0;e=e|0;var f=0;if(!(a[(c[d+16>>2]|0)+118>>0]|0))d=$D(KB(d)|0)|0;else{f=xC(d)|0;d=CL(f,(R2(KB(d)|0,58)|0)+1|0)|0}AL(b,102604,d);if(e|0?a[e>>0]|0:0)AL(b,107984,$D(e)|0);return}function EL(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+1040|0;f=d;e=d+8|0;FL(102604,a);c[f>>2]=b;m4(e,137395,f)|0;FL(e,a);l=d;return}function FL(a,b){a=a|0;b=b|0;lb[c[47264]&127](b,a)|0;return}function GL(d,f,g){d=d|0;f=f|0;g=g|0;var i=0,j=0,k=0,m=0.0,n=0,o=0.0,p=0,q=0.0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0;Y=l;l=l+2288|0;W=Y+208|0;V=Y+192|0;U=Y+176|0;T=Y+160|0;S=Y+144|0;R=Y+128|0;P=Y+112|0;O=Y+96|0;N=Y+80|0;M=Y+64|0;L=Y+56|0;K=Y+48|0;X=Y+32|0;Q=Y+24|0;J=Y;G=Y+1264|0;H=Y+224|0;I=d+16|0;C=(e[(c[I>>2]|0)+178>>1]|0)>2;RJ(1);xL(d);kA(H,1024,Y+240|0);_P(d,1,102623,195059)|0;_P(d,1,102627,195059)|0;c[47146]=_P(d,1,141116,195059)|0;c[47145]=_P(d,1,141048,195059)|0;_P(d,2,102623,195059)|0;i=a[(c[I>>2]|0)+113>>0]|0;if(i&16){_P(d,1,102633,195059)|0;i=a[(c[I>>2]|0)+113>>0]|0}if(i&1){_P(d,2,102637,195059)|0;i=a[(c[I>>2]|0)+113>>0]|0}if(i&32){_P(d,2,102633,195059)|0;i=a[(c[I>>2]|0)+113>>0]|0}if(i&2){_P(d,2,102640,195059)|0;i=a[(c[I>>2]|0)+113>>0]|0}if(i&4){_P(d,2,102648,195059)|0;i=a[(c[I>>2]|0)+113>>0]|0}if(!(i&8)){v=0;w=0;x=0}else{x=_P(d,0,102637,195059)|0;w=_P(d,0,102656,195059)|0;v=_P(d,0,102663,195059)|0}z=_P(d,0,102671,195059)|0;A=H+4|0;B=H+8|0;u=0;i=0;y=jC(d)|0;while(1){if(!y)break;t=y+16|0;k=c[t>>2]|0;o=+h[k+16>>3];j=0==0;if(C){if(j)m=+h[k+24>>3];else m=+h[23301]-+h[k+24>>3];q=+h[(c[k+132>>2]|0)+16>>3]*72.0;h[J>>3]=o;h[J+8>>3]=m;h[J+16>>3]=q;m4(G,102674,J)|0;nA(H,G)|0;j=3;while(1){if((j|0)>=(e[(c[I>>2]|0)+178>>1]|0))break;h[Q>>3]=+h[(c[(c[t>>2]|0)+132>>2]|0)+(j<<3)>>3]*72.0;m4(G,102689,Q)|0;nA(H,G)|0;j=j+1|0}j=c[A>>2]|0;if(j>>>0>=(c[B>>2]|0)>>>0){lA(H,1)|0;j=c[A>>2]|0}a[j>>0]=0;s=c[H>>2]|0;c[A>>2]=s;SA(y,102623,s)|0;s=y}else{if(j)m=+h[k+24>>3];else m=+h[23301]-+h[k+24>>3];h[X>>3]=o;h[X+8>>3]=m;m4(G,102695,X)|0;SA(y,102623,G)|0;s=y}h[K>>3]=+h[(c[t>>2]|0)+80>>3]*.013888888888888888;m4(G,102618,K)|0;KA(s,c[47145]|0,G)|0;j=c[t>>2]|0;h[L>>3]=(+h[j+96>>3]+ +h[j+88>>3])*.013888888888888888;m4(G,102618,L)|0;KA(s,c[47146]|0,G)|0;j=c[t>>2]|0;k=c[j+108>>2]|0;if((k|0)!=0?(a[k+81>>0]|0)!=0:0){q=+h[k+64>>3];q=0==0?q:+h[23301]-q;h[M>>3]=+h[k+56>>3];h[M+8>>3]=q;m4(G,102695,M)|0;SA(s,102633,G)|0;j=c[t>>2]|0}if(s2(c[c[j+8>>2]>>2]|0,106220)|0){if(c[47170]|0?(hN(y)|0)<<24>>24:0){k=c[(c[t>>2]|0)+12>>2]|0;r=k+8|0;j=c[r>>2]|0;if((j|0)<3){j=QA(s,102705)|0;if(!j)j=8;else j=q5(j)|0;j=(j|0)<3?8:j}p=k+44|0;q=1.0/+(j|0);n=0;while(1){if((n|0)>=(j|0))break;if((n|0)>0){k=c[A>>2]|0;if(k>>>0>=(c[B>>2]|0)>>>0){lA(H,1)|0;k=c[A>>2]|0}c[A>>2]=k+1;a[k>>0]=32}if((c[r>>2]|0)>2){k=c[p>>2]|0;if(!0)m=+h[k+(n<<4)+8>>3]*.013888888888888888;else m=+h[23302]-+h[k+(n<<4)+8>>3]*.013888888888888888;h[N>>3]=+h[k+(n<<4)>>3]*.013888888888888888;h[N+8>>3]=m;m4(G,102718,N)|0}else{k=c[t>>2]|0;m=q*+(n|0)*6.283185307179586;o=+h[k+32>>3]*.5*+E(+m);if(!0)m=+h[k+40>>3]*.5*+F(+m);else m=+h[23302]-+h[k+40>>3]*.5*+F(+m);h[O>>3]=o;h[O+8>>3]=m;m4(G,102718,O)|0}nA(H,G)|0;n=n+1|0}k=c[47170]|0;j=c[A>>2]|0;if(j>>>0>=(c[B>>2]|0)>>>0){lA(H,1)|0;j=c[A>>2]|0}a[j>>0]=0;t=c[H>>2]|0;c[A>>2]=t;KA(s,k,t)|0}}else{HL(y,c[j+12>>2]|0,H);pA(H)|0;j=c[A>>2]|0;if(j>>>0>=(c[B>>2]|0)>>>0){lA(H,1)|0;j=c[A>>2]|0}a[j>>0]=0;t=c[H>>2]|0;c[A>>2]=t;SA(s,102627,t)|0}a:do if((c[47138]|0)>0){t=XA(d,y)|0;j=u;while(1){if(!t)break a;s=t+16|0;k=c[s>>2]|0;do if((a[k+112>>0]|0)!=6?(D=c[k+8>>2]|0,(D|0)!=0):0){r=0;k=D;while(1){if((r|0)>=(c[k+4>>2]|0))break;if((r|0)>0){k=c[A>>2]|0;if(k>>>0>=(c[B>>2]|0)>>>0){lA(H,1)|0;k=c[A>>2]|0}c[A>>2]=k+1;a[k>>0]=59;k=c[(c[s>>2]|0)+8>>2]|0}k=c[k>>2]|0;if(c[k+(r*48|0)+8>>2]|0){if(!0)m=+h[k+(r*48|0)+24>>3];else m=+h[23301]-+h[k+(r*48|0)+24>>3];h[P>>3]=+h[k+(r*48|0)+16>>3];h[P+8>>3]=m;m4(G,102728,P)|0;nA(H,G)|0;i=1;k=c[c[(c[s>>2]|0)+8>>2]>>2]|0}if(c[k+(r*48|0)+12>>2]|0){if(!0)m=+h[k+(r*48|0)+40>>3];else m=+h[23301]-+h[k+(r*48|0)+40>>3];h[R>>3]=+h[k+(r*48|0)+32>>3];h[R+8>>3]=m;m4(G,102741,R)|0;nA(H,G)|0;j=1}p=0;while(1){k=c[(c[s>>2]|0)+8>>2]|0;n=c[k>>2]|0;if((p|0)>=(c[n+(r*48|0)+4>>2]|0))break;if((p|0)>0){k=c[A>>2]|0;if(k>>>0>=(c[B>>2]|0)>>>0){lA(H,1)|0;k=c[A>>2]|0}c[A>>2]=k+1;a[k>>0]=32;k=c[c[(c[s>>2]|0)+8>>2]>>2]|0}else k=n;u=c[k+(r*48|0)>>2]|0;q=+h[u+(p<<4)+8>>3];q=0==0?q:+h[23301]-q;h[S>>3]=+h[u+(p<<4)>>3];h[S+8>>3]=q;m4(G,102695,S)|0;nA(H,G)|0;p=p+1|0}r=r+1|0}k=c[A>>2]|0;if(k>>>0>=(c[B>>2]|0)>>>0){lA(H,1)|0;k=c[A>>2]|0}a[k>>0]=0;k=c[H>>2]|0;c[A>>2]=k;SA(t,102623,k)|0;k=c[s>>2]|0;n=c[k+96>>2]|0;if(n){q=+h[n+64>>3];q=0==0?q:+h[23301]-q;h[T>>3]=+h[n+56>>3];h[T+8>>3]=q;m4(G,102695,T)|0;SA(t,102637,G)|0;k=c[s>>2]|0}n=c[k+108>>2]|0;do if(n){if(!(a[n+81>>0]|0))break;q=+h[n+64>>3];q=0==0?q:+h[23301]-q;h[U>>3]=+h[n+56>>3];h[U+8>>3]=q;m4(G,102695,U)|0;SA(t,102633,G)|0;k=c[s>>2]|0}while(0);n=c[k+100>>2]|0;if(n){q=+h[n+64>>3];q=0==0?q:+h[23301]-q;h[V>>3]=+h[n+56>>3];h[V+8>>3]=q;m4(G,102695,V)|0;SA(t,102640,G)|0;k=c[s>>2]|0}k=c[k+104>>2]|0;if(!k)break;q=+h[k+64>>3];q=0==0?q:+h[23301]-q;h[W>>3]=+h[k+56>>3];h[W+8>>3]=q;m4(G,102695,W)|0;SA(t,102648,G)|0}while(0);t=ZA(d,t)|0}}else j=u;while(0);u=j;y=kC(d,y)|0}IL(d,z,x,w,v);oA(H);if(b[(c[I>>2]|0)+136>>1]&1)UP(d);c[f>>2]=i;c[g>>2]=u;RJ(0);l=Y;return}function HL(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0.0,g=0.0,i=0.0,j=0,k=0,m=0,n=0,o=0.0;n=l;l=l+1056|0;k=n;j=n+32|0;m=b+48|0;if(!(c[m>>2]|0)){e=c[a+16>>2]|0;i=+h[e+16>>3];if(!0){g=+h[e+24>>3];f=g+ +h[b+24>>3];g=g+ +h[b+40>>3]}else{g=+h[e+24>>3];f=+h[23301]-+h[b+24>>3]-g;g=+h[23301]-+h[b+40>>3]-g}o=i+ +h[b+32>>3];h[k>>3]=i+ +h[b+16>>3];h[k+8>>3]=f;h[k+16>>3]=o;h[k+24>>3]=g;m4(j,102779,k)|0;nA(d,j)|0}b=b+56|0;e=0;while(1){if((e|0)>=(c[m>>2]|0))break;HL(a,c[(c[b>>2]|0)+(e<<2)>>2]|0,d);e=e+1|0}l=n;return}function IL(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var i=0,j=0,k=0.0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0.0;s=l;l=l+1088|0;o=s+56|0;q=s+48|0;p=s+32|0;j=s;n=s+64|0;r=b+16|0;i=c[r>>2]|0;if(!0){k=+h[i+24>>3];m=+h[i+40>>3]}else{m=+h[23301];k=m-+h[i+24>>3];m=m-+h[i+40>>3]}t=+h[i+32>>3];h[j>>3]=+h[i+16>>3];h[j+8>>3]=k;h[j+16>>3]=t;h[j+24>>3]=m;m4(n,102754,j)|0;KA(b,d,n)|0;i=c[(c[r>>2]|0)+12>>2]|0;if((i|0)!=0?(a[c[i>>2]>>0]|0)!=0:0){t=+h[i+64>>3];t=0==0?t:+h[23301]-t;h[p>>3]=+h[i+56>>3];h[p+8>>3]=t;m4(n,102695,p)|0;KA(b,e,n)|0;i=c[(c[r>>2]|0)+12>>2]|0;t=+h[i+32>>3];h[q>>3]=+h[i+24>>3]*.013888888888888888;m4(n,102774,q)|0;KA(b,f,n)|0;h[o>>3]=t*.013888888888888888;m4(n,102774,o)|0;KA(b,g,n)|0;i=1}else i=1;while(1){j=c[r>>2]|0;if((i|0)>(c[j+180>>2]|0))break;IL(c[(c[j+184>>2]|0)+(i<<2)>>2]|0,d,e,f,g);i=i+1|0}l=s;return}function JL(a){a=a|0;var b=0;b=l;l=l+16|0;GL(a,b,b+4|0);l=b;return}function KL(){return Vz(20740,c[4581]|0)|0}function LL(a,b,c){a=a|0;b=b|0;c=c|0;U1(b);return}function ML(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;a=c[b>>2]|0;e=c[d>>2]|0;if((a|0)<=(e|0))if((a|0)<(e|0))a=-1;else{b=c[b+4>>2]|0;d=c[d+4>>2]|0;return ((b|0)>(d|0)?1:((b|0)<(d|0))<<31>>31)|0}else a=1;return a|0}function NL(a){a=a|0;Rz(a)|0;return}function OL(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];b=PL(e)|0;if((nb[c[a>>2]&63](a,b,1)|0)!=(b|0))U1(b);l=d;return}function PL(a){a=a|0;var b=0,d=0,e=0;b=JK(16)|0;e=a;d=c[e+4>>2]|0;a=b+8|0;c[a>>2]=c[e>>2];c[a+4>>2]=d;return b|0}function QL(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+8|0;g=e;c[g>>2]=b;c[g+4>>2]=d;c[f>>2]=c[g>>2];c[f+4>>2]=c[g+4>>2];b=PL(f)|0;if((nb[c[a>>2]&63](a,b,1)|0)!=(b|0))U1(b);l=e;return}function RL(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;d=l;l=l+16|0;e=d;g=b;f=c[g+4>>2]|0;b=e+8|0;c[b>>2]=c[g>>2];c[b+4>>2]=f;b=(nb[c[a>>2]&63](a,e,4)|0)!=0&1;l=d;return b|0}function SL(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f+8>>2]=b;c[f+12>>2]=d;d=(nb[c[a>>2]&63](a,f,4)|0)!=0&1;l=e;return d|0}function TL(a){a=a|0;return Xz(a)|0}function UL(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;d=JK((Xz(a)|0)<<3)|0;b=d;a=Tz(a)|0;while(1){if(!a)break;g=a+8|0;f=c[g+4>>2]|0;e=b;c[e>>2]=c[g>>2];c[e+4>>2]=f;b=b+8|0;a=c[a>>2]|0}return d|0}function VL(){var a=0,b=0,d=0,e=0;a=KK(40)|0;b=a;d=20776;e=b+36|0;do{c[b>>2]=c[d>>2];b=b+4|0;d=d+4|0}while((b|0)<(e|0));c[a+36>>2]=0;return Vz(a,c[4581]|0)|0}function WL(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;d=d+36|0;a=c[d>>2]|0;if(!a)a=KK(20)|0;else c[d>>2]=c[a>>2];f=b+8|0;e=c[f+4>>2]|0;d=a+8|0;c[d>>2]=c[f>>2];c[d+4>>2]=e;c[a+16>>2]=c[b+16>>2];return a|0}function XL(a,b,d){a=a|0;b=b|0;d=d|0;d=d+36|0;c[b>>2]=c[d>>2];c[d>>2]=b;return}function YL(a){a=a|0;nb[c[a>>2]&63](a,0,64)|0;return}function ZL(a){a=a|0;var b=0,d=0;b=c[a+4>>2]|0;Rz(a)|0;a=c[b+36>>2]|0;while(1){if(!a)break;d=c[a>>2]|0;U1(a);a=d}U1(b);return}function _L(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;f=l;l=l+32|0;g=f;c[g+8>>2]=b;c[g+12>>2]=d;c[g+16>>2]=e;e=c[(nb[c[a>>2]&63](a,g,1)|0)+16>>2]|0;l=f;return e|0}function $L(a,b){a=a|0;b=b|0;var d=0,e=0.0,f=0.0,g=0.0,i=0.0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;t=l;l=l+160|0;q=t+144|0;d=t+48|0;j=t+128|0;k=t+112|0;m=t+96|0;n=t+80|0;o=t+32|0;p=t+16|0;r=t;s=a+16|0;a=c[s>>2]|0;e=+h[a+16>>3];f=+h[a+24>>3];g=+h[a+32>>3];i=+h[a+40>>3];if((b+-1|0)>>>0<2){aM(j,e,i);c[q>>2]=c[j>>2];c[q+4>>2]=c[j+4>>2];c[q+8>>2]=c[j+8>>2];c[q+12>>2]=c[j+12>>2];bM(d,q);p=d+16|0;aM(k,g,f);c[q>>2]=c[k>>2];c[q+4>>2]=c[k+4>>2];c[q+8>>2]=c[k+8>>2];c[q+12>>2]=c[k+12>>2];bM(m,q);c[p>>2]=c[m>>2];c[p+4>>2]=c[m+4>>2];c[p+8>>2]=c[m+8>>2];c[p+12>>2]=c[m+12>>2]}else{aM(n,e,f);c[q>>2]=c[n>>2];c[q+4>>2]=c[n+4>>2];c[q+8>>2]=c[n+8>>2];c[q+12>>2]=c[n+12>>2];bM(d,q);n=d+16|0;aM(o,g,i);c[q>>2]=c[o>>2];c[q+4>>2]=c[o+4>>2];c[q+8>>2]=c[o+8>>2];c[q+12>>2]=c[o+12>>2];bM(p,q);c[n>>2]=c[p>>2];c[n+4>>2]=c[p+4>>2];c[n+8>>2]=c[p+8>>2];c[n+12>>2]=c[p+12>>2]}a=(c[s>>2]|0)+16|0;c[a>>2]=c[d>>2];c[a+4>>2]=c[d+4>>2];c[a+8>>2]=c[d+8>>2];c[a+12>>2]=c[d+12>>2];c[a+16>>2]=c[d+16>>2];c[a+20>>2]=c[d+20>>2];c[a+24>>2]=c[d+24>>2];c[a+28>>2]=c[d+28>>2];a=c[(c[s>>2]|0)+12>>2]|0;if(!a)a=1;else{a=a+56|0;c[q>>2]=c[a>>2];c[q+4>>2]=c[a+4>>2];c[q+8>>2]=c[a+8>>2];c[q+12>>2]=c[a+12>>2];bM(r,q);c[a>>2]=c[r>>2];c[a+4>>2]=c[r+4>>2];c[a+8>>2]=c[r+8>>2];c[a+12>>2]=c[r+12>>2];a=1}while(1){d=c[s>>2]|0;if((a|0)>(c[d+180>>2]|0))break;$L(c[(c[d+184>>2]|0)+(a<<2)>>2]|0,b);a=a+1|0}l=t;return}function aM(a,b,c){a=a|0;b=+b;c=+c;h[a>>3]=b;h[a+8>>3]=c;return}function bM(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;d=l;l=l+32|0;g=d+16|0;e=d;f=(c[47265]|0)*90|0;c[g>>2]=c[b>>2];c[g+4>>2]=c[b+4>>2];c[g+8>>2]=c[b+8>>2];c[g+12>>2]=c[b+12>>2];mK(e,g,f);c[b>>2]=c[e>>2];c[b+4>>2]=c[e+4>>2];c[b+8>>2]=c[e+8>>2];c[b+12>>2]=c[e+12>>2];h[b>>3]=+h[b>>3]-+h[23303];e=b+8|0;h[e>>3]=+h[e>>3]-+h[23304];c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];l=d;return}function cM(b,d){b=b|0;d=d|0;var e=0,f=0.0,g=0,i=0,j=0.0,k=0.0,m=0,n=0.0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;w=l;l=l+1168|0;s=w+144|0;v=w+96|0;u=w+64|0;t=w+48|0;o=w+32|0;p=w+16|0;q=w;c[t>>2]=0;c[t+4>>2]=0;c[t+8>>2]=0;c[t+12>>2]=0;r=b+16|0;m=c[(c[r>>2]|0)+116>>2]|0;c[47265]=m&3;m=m&1;a[194957]=m;if(!(m<<24>>24))eM(b);else dM(b);fM(b);m=c[r>>2]|0;e=c[m+12>>2]|0;do if(e|0?(a[e+81>>0]|0)==0:0){g=e+24|0;c[t>>2]=c[g>>2];c[t+4>>2]=c[g+4>>2];c[t+8>>2]=c[g+8>>2];c[t+12>>2]=c[g+12>>2];n=+h[t>>3]+16.0;h[t>>3]=n;g=t+8|0;f=+h[g>>3]+8.0;h[g>>3]=f;g=(a[m+275>>0]&1)!=0;if(a[194957]|0){if(g){i=m+32|0;h[i>>3]=+h[i>>3]+f}else{i=m+16|0;h[i>>3]=+h[i>>3]-f}g=m+40|0;f=+h[g>>3];i=m+24|0;j=+h[i>>3];k=f-j;if(!(n>k))break;n=(n-k)*.5;h[i>>3]=j-n;h[g>>3]=f+n;break}i=(c[47265]|0)==0;do if(g)if(i){i=m+40|0;h[i>>3]=+h[i>>3]+f;break}else{i=m+24|0;h[i>>3]=+h[i>>3]-f;break}else if(i){i=m+24|0;h[i>>3]=+h[i>>3]-f;break}else{i=m+40|0;h[i>>3]=+h[i>>3]+f;break}while(0);g=m+32|0;f=+h[g>>3];i=m+16|0;j=+h[i>>3];k=f-j;if(n>k){n=(n-k)*.5;h[i>>3]=j-n;h[g>>3]=f+n}}while(0);if(d){switch(c[47265]|0){case 0:{q=m+16|0;c[46606]=c[q>>2];c[46607]=c[q+4>>2];c[46608]=c[q+8>>2];c[46609]=c[q+12>>2];break}case 1:{aM(o,-+h[m+40>>3],+h[m+16>>3]);c[46606]=c[o>>2];c[46607]=c[o+4>>2];c[46608]=c[o+8>>2];c[46609]=c[o+12>>2];break}case 2:{aM(p,+h[m+16>>3],-+h[m+40>>3]);c[46606]=c[p>>2];c[46607]=c[p+4>>2];c[46608]=c[p+8>>2];c[46609]=c[p+12>>2];break}case 3:{aM(q,+h[m+24>>3],+h[m+16>>3]);c[46606]=c[q>>2];c[46607]=c[q+4>>2];c[46608]=c[q+8>>2];c[46609]=c[q+12>>2];break}default:{}}gM(b);e=c[(c[r>>2]|0)+12>>2]|0}if(e|0?(a[e+81>>0]|0)==0:0){c[s>>2]=c[t>>2];c[s+4>>2]=c[t+4>>2];c[s+8>>2]=c[t+8>>2];c[s+12>>2]=c[t+12>>2];hM(b,s)}if(!0){l=w;return}if(!(a[194957]|0)){n=+h[23304];k=+h[23303];h[v>>3]=n;h[v+8>>3]=k;h[v+16>>3]=n;h[v+24>>3]=k;h[v+32>>3]=-k;h[v+40>>3]=-n;m4(s,103015,v)|0}else{k=+h[23303];n=+h[23304];h[u>>3]=k;h[u+8>>3]=n;h[u+16>>3]=k;h[u+24>>3]=n;m4(s,102800,u)|0}D4(s)|0;ab()}function dM(b){b=b|0;var d=0,e=0.0,f=0.0,g=0,i=0,j=0;j=b+16|0;if(((yC(b)|0)!=(b|0)?(g=c[j>>2]|0,i=c[g+12>>2]|0,(i|0)!=0):0)?(a[i+81>>0]|0)==0:0){d=a[g+275>>0]|0;if(!(d&1)){f=+h[g+16>>3]+ +h[g+96>>3]*.5;b=g+104|0}else{f=+h[g+32>>3]-+h[g+64>>3]*.5;b=g+72|0}e=+h[b>>3];b=d<<24>>24;do if(!(b&4))if(!(b&2)){e=(+h[g+40>>3]+ +h[g+24>>3])*.5;break}else{e=+h[g+40>>3]-e*.5;break}else e=+h[g+24>>3]+e*.5;while(0);h[i+56>>3]=f;h[i+64>>3]=e;a[(c[(c[j>>2]|0)+12>>2]|0)+81>>0]=1;b=1}else b=1;while(1){d=c[j>>2]|0;if((b|0)>(c[d+180>>2]|0))break;dM(c[(c[d+184>>2]|0)+(b<<2)>>2]|0);b=b+1|0}return}function eM(b){b=b|0;var d=0,e=0.0,f=0.0,g=0.0,i=0,j=0,k=0;k=b+16|0;if(((yC(b)|0)!=(b|0)?(i=c[k>>2]|0,j=c[i+12>>2]|0,(j|0)!=0):0)?(a[j+81>>0]|0)==0:0){d=a[i+275>>0]|0;if(!(d&1)){g=+h[i+24>>3]+ +h[i+56>>3]*.5;b=i+48|0}else{g=+h[i+40>>3]-+h[i+88>>3]*.5;b=i+80|0}f=+h[b>>3];b=d<<24>>24;do if(!(b&4)){e=+h[i+16>>3];if(!(b&2)){e=(+h[i+32>>3]+e)*.5;break}else{e=e+f*.5;break}}else e=+h[i+32>>3]-f*.5;while(0);h[j+56>>3]=e;h[j+64>>3]=g;a[(c[(c[k>>2]|0)+12>>2]|0)+81>>0]=1;b=1}else b=1;while(1){d=c[k>>2]|0;if((b|0)>(c[d+180>>2]|0))break;eM(c[(c[d+184>>2]|0)+(b<<2)>>2]|0);b=b+1|0}return}function fM(e){e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0;S=l;l=l+544|0;L=S+504|0;R=S+416|0;Q=S+376|0;K=S+352|0;J=S+312|0;I=S+288|0;H=S+248|0;M=S+200|0;B=S+152|0;O=S+96|0;p=S+488|0;C=S+456|0;D=S+424|0;E=S+384|0;F=S+360|0;G=S+320|0;w=S+296|0;x=S+256|0;y=S+232|0;z=S+168|0;A=S+136|0;f=S+56|0;N=S+16|0;P=S;o=e+16|0;u=c[o>>2]|0;g=b[u+136>>1]&14;u=d[u+113>>0]|0;if(!((u&54|0)==0?(u&1|0)==0|(c[47139]|0)!=0:0)){u=g<<16>>16==0;n=jC(e)|0;h=0;j=0;i=0;while(1){if(!n)break;g=c[(c[n+16>>2]|0)+108>>2]|0;do if(g)if(!(a[g+81>>0]|0)){i=i+1|0;break}else{h=h+1|0;break}while(0);m=XA(e,n)|0;g=j;while(1){if(!m)break;k=c[m+16>>2]|0;j=c[k+108>>2]|0;do if(j){if(a[j+81>>0]|0){h=h+1|0;break}if(!u)g=g+((c[k+8>>2]|0)!=0&1)|0}while(0);j=c[k+100>>2]|0;do if(j){if(a[j+81>>0]|0){h=h+1|0;break}if(!u)g=g+((c[k+8>>2]|0)!=0&1)|0}while(0);j=c[k+104>>2]|0;do if(j){if(a[j+81>>0]|0){h=h+1|0;break}if(!u)g=g+((c[k+8>>2]|0)!=0&1)|0}while(0);j=c[k+96>>2]|0;do if(j){if(a[j+81>>0]|0){h=h+1|0;break}if(!u)g=g+((c[k+8>>2]|0)!=0&1)|0}while(0);m=ZA(e,m)|0}n=kC(e,n)|0;j=g}if(!(a[(c[o>>2]|0)+113>>0]&8))o=0;else o=jM(e)|0;t=j+i|0;if(t|0){q=h+j+o+(tB(e)|0)|0;r=JK(q*40|0)|0;s=JK(t*40|0)|0;aM(M,2147483647.0,2147483647.0);g=M+16|0;aM(p,-2147483647.0,-2147483647.0);c[g>>2]=c[p>>2];c[g+4>>2]=c[p+4>>2];c[g+8>>2]=c[p+8>>2];c[g+12>>2]=c[p+12>>2];g=s;i=r;n=jC(e)|0;while(1){if(!n)break;c[L>>2]=c[M>>2];c[L+4>>2]=c[M+4>>2];c[L+8>>2]=c[M+8>>2];c[L+12>>2]=c[M+12>>2];c[L+16>>2]=c[M+16>>2];c[L+20>>2]=c[M+20>>2];c[L+24>>2]=c[M+24>>2];c[L+28>>2]=c[M+28>>2];kM(C,n,i,L);c[M>>2]=c[C>>2];c[M+4>>2]=c[C+4>>2];c[M+8>>2]=c[C+8>>2];c[M+12>>2]=c[C+12>>2];c[M+16>>2]=c[C+16>>2];c[M+20>>2]=c[C+20>>2];c[M+24>>2]=c[C+24>>2];c[M+28>>2]=c[C+28>>2];h=c[(c[n+16>>2]|0)+108>>2]|0;do if(h)if(!(a[h+81>>0]|0)){c[L>>2]=c[B>>2];c[L+4>>2]=c[B+4>>2];c[L+8>>2]=c[B+8>>2];c[L+12>>2]=c[B+12>>2];mM(h,i,g,0,L);g=g+40|0;break}else{i=i+40|0;c[L>>2]=c[M>>2];c[L+4>>2]=c[M+4>>2];c[L+8>>2]=c[M+8>>2];c[L+12>>2]=c[M+12>>2];c[L+16>>2]=c[M+16>>2];c[L+20>>2]=c[M+20>>2];c[L+24>>2]=c[M+24>>2];c[L+28>>2]=c[M+28>>2];lM(D,h,i,L);c[M>>2]=c[D>>2];c[M+4>>2]=c[D+4>>2];c[M+8>>2]=c[D+8>>2];c[M+12>>2]=c[D+12>>2];c[M+16>>2]=c[D+16>>2];c[M+20>>2]=c[D+20>>2];c[M+24>>2]=c[D+24>>2];c[M+28>>2]=c[D+28>>2];break}while(0);m=XA(e,n)|0;i=i+40|0;while(1){if(!m)break;k=m+16|0;h=c[k>>2]|0;j=c[h+96>>2]|0;a:do if(!j)v=52;else{do if(!(a[j+81>>0]|0)){if(!u?c[h+8>>2]|0:0){vO(F,e,m);c[L>>2]=c[F>>2];c[L+4>>2]=c[F+4>>2];c[L+8>>2]=c[F+8>>2];c[L+12>>2]=c[F+12>>2];mM(j,i,g,1,L);g=g+40|0;break}c[H>>2]=c[j>>2];gA(0,103827,H)|0;break a}else{c[L>>2]=c[M>>2];c[L+4>>2]=c[M+4>>2];c[L+8>>2]=c[M+8>>2];c[L+12>>2]=c[M+12>>2];c[L+16>>2]=c[M+16>>2];c[L+20>>2]=c[M+20>>2];c[L+24>>2]=c[M+24>>2];c[L+28>>2]=c[M+28>>2];lM(E,j,i,L);c[M>>2]=c[E>>2];c[M+4>>2]=c[E+4>>2];c[M+8>>2]=c[E+8>>2];c[M+12>>2]=c[E+12>>2];c[M+16>>2]=c[E+16>>2];c[M+20>>2]=c[E+20>>2];c[M+24>>2]=c[E+24>>2];c[M+28>>2]=c[E+28>>2]}while(0);i=i+40|0;h=c[k>>2]|0;v=52}while(0);b:do if((v|0)==52){v=0;j=c[h+104>>2]|0;if(j){do if(!(a[j+81>>0]|0)){if(!u?c[h+8>>2]|0:0){nM(w,m);c[L>>2]=c[w>>2];c[L+4>>2]=c[w+4>>2];c[L+8>>2]=c[w+8>>2];c[L+12>>2]=c[w+12>>2];mM(j,i,g,1,L);g=g+40|0;break}c[I>>2]=c[j>>2];gA(0,103862,I)|0;break b}else{c[L>>2]=c[M>>2];c[L+4>>2]=c[M+4>>2];c[L+8>>2]=c[M+8>>2];c[L+12>>2]=c[M+12>>2];c[L+16>>2]=c[M+16>>2];c[L+20>>2]=c[M+20>>2];c[L+24>>2]=c[M+24>>2];c[L+28>>2]=c[M+28>>2];lM(G,j,i,L);c[M>>2]=c[G>>2];c[M+4>>2]=c[G+4>>2];c[M+8>>2]=c[G+8>>2];c[M+12>>2]=c[G+12>>2];c[M+16>>2]=c[G+16>>2];c[M+20>>2]=c[G+20>>2];c[M+24>>2]=c[G+24>>2];c[M+28>>2]=c[G+28>>2]}while(0);i=i+40|0;h=c[k>>2]|0}j=c[h+100>>2]|0;if(j){do if(!(a[j+81>>0]|0)){if(!u?c[h+8>>2]|0:0){oM(y,m);c[L>>2]=c[y>>2];c[L+4>>2]=c[y+4>>2];c[L+8>>2]=c[y+8>>2];c[L+12>>2]=c[y+12>>2];mM(j,i,g,1,L);g=g+40|0;break}c[J>>2]=c[j>>2];gA(0,103902,J)|0;break b}else{c[L>>2]=c[M>>2];c[L+4>>2]=c[M+4>>2];c[L+8>>2]=c[M+8>>2];c[L+12>>2]=c[M+12>>2];c[L+16>>2]=c[M+16>>2];c[L+20>>2]=c[M+20>>2];c[L+24>>2]=c[M+24>>2];c[L+28>>2]=c[M+28>>2];lM(x,j,i,L);c[M>>2]=c[x>>2];c[M+4>>2]=c[x+4>>2];c[M+8>>2]=c[x+8>>2];c[M+12>>2]=c[x+12>>2];c[M+16>>2]=c[x+16>>2];c[M+20>>2]=c[x+20>>2];c[M+24>>2]=c[x+24>>2];c[M+28>>2]=c[x+28>>2]}while(0);i=i+40|0;h=c[k>>2]|0}j=c[h+108>>2]|0;if(j){do if(!(a[j+81>>0]|0)){if(!u?c[h+8>>2]|0:0){vO(A,e,m);c[L>>2]=c[A>>2];c[L+4>>2]=c[A+4>>2];c[L+8>>2]=c[A+8>>2];c[L+12>>2]=c[A+12>>2];mM(j,i,g,1,L);g=g+40|0;break}c[K>>2]=c[j>>2];gA(0,103942,K)|0;break b}else{c[L>>2]=c[M>>2];c[L+4>>2]=c[M+4>>2];c[L+8>>2]=c[M+8>>2];c[L+12>>2]=c[M+12>>2];c[L+16>>2]=c[M+16>>2];c[L+20>>2]=c[M+20>>2];c[L+24>>2]=c[M+24>>2];c[L+28>>2]=c[M+28>>2];lM(z,j,i,L);c[M>>2]=c[z>>2];c[M+4>>2]=c[z+4>>2];c[M+8>>2]=c[z+8>>2];c[M+12>>2]=c[z+12>>2];c[M+16>>2]=c[z+16>>2];c[M+20>>2]=c[z+20>>2];c[M+24>>2]=c[z+24>>2];c[M+28>>2]=c[z+28>>2]}while(0);i=i+40|0}}while(0);m=ZA(e,m)|0}n=kC(e,n)|0}if(o|0){c[f>>2]=c[M>>2];c[f+4>>2]=c[M+4>>2];c[f+8>>2]=c[M+8>>2];c[f+12>>2]=c[M+12>>2];c[f+16>>2]=c[M+16>>2];c[f+20>>2]=c[M+20>>2];c[f+24>>2]=c[M+24>>2];c[f+28>>2]=c[M+28>>2];c[f+32>>2]=i;h=L;g=h+40|0;do{c[h>>2]=c[f>>2];h=h+4|0;f=f+4|0}while((h|0)<(g|0));pM(N,e,L);c[M>>2]=c[N>>2];c[M+4>>2]=c[N+4>>2];c[M+8>>2]=c[N+8>>2];c[M+12>>2]=c[N+12>>2];c[M+16>>2]=c[N+16>>2];c[M+20>>2]=c[N+20>>2];c[M+24>>2]=c[N+24>>2];c[M+28>>2]=c[N+28>>2]}a[O+32>>0]=cP(e,GA(e,0,103978,0)|0,1)|0;c[O>>2]=c[M>>2];c[O+4>>2]=c[M+4>>2];c[O+8>>2]=c[M+8>>2];c[O+12>>2]=c[M+12>>2];c[O+16>>2]=c[M+16>>2];c[O+20>>2]=c[M+20>>2];c[O+24>>2]=c[M+24>>2];c[O+28>>2]=c[M+28>>2];hT(r,q,s,t,O)|0;if(0)qM(r,q,s,t,O);f=0;g=0;h=s;while(1){if((g|0)>=(t|0))break;if(a[h+36>>0]|0){O=c[h+32>>2]|0;a[O+81>>0]=1;N=O+56|0;rM(P,h);c[N>>2]=c[P>>2];c[N+4>>2]=c[P+4>>2];c[N+8>>2]=c[P+8>>2];c[N+12>>2]=c[P+12>>2];zP(e,O);f=f+1|0}g=g+1|0;h=h+40|0}if(!0){if((f|0)!=(t|0)){c[R>>2]=f;c[R+4>>2]=t;gA(0,104023,R)|0}}else{R=c[15712]|0;c[Q>>2]=f;c[Q+4>>2]=t;w4(R,103990,Q)|0}U1(r);U1(s)}}l=S;return}function gM(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,i=0,j=0;i=l;l=l+48|0;e=i+32|0;f=i+16|0;g=i;if(+h[23303]!=0.0|+h[23304]!=0.0|(c[47265]|0)!=0){d=jC(a)|0;while(1){if(!d)break;if(c[47265]|0)qQ(d,0);b=d+16|0;j=(c[b>>2]|0)+16|0;c[e>>2]=c[j>>2];c[e+4>>2]=c[j+4>>2];c[e+8>>2]=c[j+8>>2];c[e+12>>2]=c[j+12>>2];bM(f,e);c[j>>2]=c[f>>2];c[j+4>>2]=c[f+4>>2];c[j+8>>2]=c[f+8>>2];c[j+12>>2]=c[f+12>>2];b=c[(c[b>>2]|0)+108>>2]|0;if(b|0){j=b+56|0;c[e>>2]=c[j>>2];c[e+4>>2]=c[j+4>>2];c[e+8>>2]=c[j+8>>2];c[e+12>>2]=c[j+12>>2];bM(g,e);c[j>>2]=c[g>>2];c[j+4>>2]=c[g+4>>2];c[j+8>>2]=c[g+8>>2];c[j+12>>2]=c[g+12>>2]}a:do if((c[47138]|0)==1){b=XA(a,d)|0;while(1){if(!b)break a;iM(b);b=ZA(a,b)|0}}while(0);d=kC(a,d)|0}$L(a,c[(c[a+16>>2]|0)+116>>2]&3)}l=i;return}function hM(b,d){b=b|0;d=d|0;var e=0.0,f=0.0,g=0,i=0,j=0;i=b+16|0;j=c[i>>2]|0;g=a[j+275>>0]|0;b=g<<24>>24;do if(!(b&4)){e=+h[j+16>>3];if(!(b&2)){f=(+h[j+32>>3]+e)*.5;break}else{f=+h[d>>3]*.5+e;break}}else f=+h[j+32>>3]-+h[d>>3]*.5;while(0);if(!(g&1))e=+h[d+8>>3]*.5+ +h[j+24>>3];else e=+h[j+40>>3]-+h[d+8>>3]*.5;j=c[j+12>>2]|0;h[j+56>>3]=f;h[j+64>>3]=e;a[(c[(c[i>>2]|0)+12>>2]|0)+81>>0]=1;return}function iM(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;s=l;l=l+144|0;q=s+120|0;e=s+16|0;i=s+104|0;j=s+88|0;k=s+72|0;m=s+56|0;n=s+40|0;o=s+24|0;r=s;p=b+16|0;d=c[p>>2]|0;f=c[d+8>>2]|0;if(!f){if((a[194954]|0)==0?(a[d+112>>0]|0)!=6:0){q=KB(c[((c[b>>2]&3|0)==3?b:b+48|0)+40>>2]|0)|0;r=KB(c[((c[b>>2]&3|0)==2?b:b+-48|0)+40>>2]|0)|0;c[e>>2]=q;c[e+4>>2]=r;gA(1,103810,e)|0}}else{h=0;b=f;while(1){if((h|0)>=(c[b+4>>2]|0))break;g=c[b>>2]|0;b=c[g+(h*48|0)>>2]|0;e=c[g+(h*48|0)+4>>2]|0;f=c[g+(h*48|0)+8>>2]|0;g=c[g+(h*48|0)+12>>2]|0;d=0;while(1){if((d|0)>=(e|0))break;t=b+(d<<4)|0;c[q>>2]=c[t>>2];c[q+4>>2]=c[t+4>>2];c[q+8>>2]=c[t+8>>2];c[q+12>>2]=c[t+12>>2];bM(i,q);c[t>>2]=c[i>>2];c[t+4>>2]=c[i+4>>2];c[t+8>>2]=c[i+8>>2];c[t+12>>2]=c[i+12>>2];d=d+1|0}if(f|0){t=(c[c[(c[p>>2]|0)+8>>2]>>2]|0)+(h*48|0)+16|0;c[q>>2]=c[t>>2];c[q+4>>2]=c[t+4>>2];c[q+8>>2]=c[t+8>>2];c[q+12>>2]=c[t+12>>2];bM(j,q);c[t>>2]=c[j>>2];c[t+4>>2]=c[j+4>>2];c[t+8>>2]=c[j+8>>2];c[t+12>>2]=c[j+12>>2]}if(g|0){t=(c[c[(c[p>>2]|0)+8>>2]>>2]|0)+(h*48|0)+32|0;c[q>>2]=c[t>>2];c[q+4>>2]=c[t+4>>2];c[q+8>>2]=c[t+8>>2];c[q+12>>2]=c[t+12>>2];bM(k,q);c[t>>2]=c[k>>2];c[t+4>>2]=c[k+4>>2];c[t+8>>2]=c[k+8>>2];c[t+12>>2]=c[k+12>>2]}d=c[p>>2]|0;h=h+1|0;b=c[d+8>>2]|0}b=c[d+96>>2]|0;if(b){d=b+56|0;c[q>>2]=c[d>>2];c[q+4>>2]=c[d+4>>2];c[q+8>>2]=c[d+8>>2];c[q+12>>2]=c[d+12>>2];bM(m,q);c[d>>2]=c[m>>2];c[d+4>>2]=c[m+4>>2];c[d+8>>2]=c[m+8>>2];c[d+12>>2]=c[m+12>>2];d=c[p>>2]|0}b=c[d+108>>2]|0;if(b){d=b+56|0;c[q>>2]=c[d>>2];c[q+4>>2]=c[d+4>>2];c[q+8>>2]=c[d+8>>2];c[q+12>>2]=c[d+12>>2];bM(n,q);c[d>>2]=c[n>>2];c[d+4>>2]=c[n+4>>2];c[d+8>>2]=c[n+8>>2];c[d+12>>2]=c[n+12>>2];d=c[p>>2]|0}b=c[d+100>>2]|0;if(b){d=b+56|0;c[q>>2]=c[d>>2];c[q+4>>2]=c[d+4>>2];c[q+8>>2]=c[d+8>>2];c[q+12>>2]=c[d+12>>2];bM(o,q);c[d>>2]=c[o>>2];c[d+4>>2]=c[o+4>>2];c[d+8>>2]=c[o+8>>2];c[d+12>>2]=c[o+12>>2];d=c[p>>2]|0}d=c[d+104>>2]|0;if(d|0){t=d+56|0;c[q>>2]=c[t>>2];c[q+4>>2]=c[t+4>>2];c[q+8>>2]=c[t+8>>2];c[q+12>>2]=c[t+12>>2];bM(r,q);c[t>>2]=c[r>>2];c[t+4>>2]=c[r+4>>2];c[t+8>>2]=c[r+8>>2];c[t+12>>2]=c[r+12>>2]}}l=s;return}function jM(b){b=b|0;var d=0,e=0,f=0;f=b+16|0;if((yC(b)|0)!=(b|0)?(d=c[(c[f>>2]|0)+12>>2]|0,(d|0)!=0):0){e=1;b=(a[d+81>>0]|0)!=0&1}else{e=1;b=0}while(1){d=c[f>>2]|0;if((e|0)>(c[d+180>>2]|0))break;d=(jM(c[(c[d+184>>2]|0)+(e<<2)>>2]|0)|0)+b|0;e=e+1|0;b=d}return b|0}function kM(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,i=0,j=0.0,k=0.0,m=0,n=0;g=l;l=l+32|0;i=g;n=(a[194957]|0)==0;d=d+16|0;m=c[d>>2]|0;k=+h[(n?m+32|0:m+40|0)>>3];h[e+16>>3]=k*72.0;j=+h[(n?m+40|0:m+32|0)>>3];h[e+24>>3]=j*72.0;d=(c[d>>2]|0)+16|0;c[e>>2]=c[d>>2];c[e+4>>2]=c[d+4>>2];c[e+8>>2]=c[d+8>>2];c[e+12>>2]=c[d+12>>2];h[e>>3]=+h[e>>3]-k*36.0;d=e+8|0;h[d>>3]=+h[d>>3]-j*36.0;c[i>>2]=c[f>>2];c[i+4>>2]=c[f+4>>2];c[i+8>>2]=c[f+8>>2];c[i+12>>2]=c[f+12>>2];c[i+16>>2]=c[f+16>>2];c[i+20>>2]=c[f+20>>2];c[i+24>>2]=c[f+24>>2];c[i+28>>2]=c[f+28>>2];sM(b,e,i);l=g;return}function lM(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,i=0,j=0.0,k=0.0,m=0,n=0;g=l;l=l+32|0;i=g;n=(a[194957]|0)==0;m=d+24|0;k=+h[(n?m:d+32|0)>>3];h[e+16>>3]=k;j=+h[(n?d+32|0:m)>>3];h[e+24>>3]=j;d=d+56|0;c[e>>2]=c[d>>2];c[e+4>>2]=c[d+4>>2];c[e+8>>2]=c[d+8>>2];c[e+12>>2]=c[d+12>>2];h[e>>3]=+h[e>>3]-k*.5;d=e+8|0;h[d>>3]=+h[d>>3]-j*.5;c[i>>2]=c[f>>2];c[i+4>>2]=c[f+4>>2];c[i+8>>2]=c[f+8>>2];c[i+12>>2]=c[f+12>>2];c[i+16>>2]=c[f+16>>2];c[i+20>>2]=c[f+20>>2];c[i+24>>2]=c[f+24>>2];c[i+28>>2]=c[f+28>>2];sM(b,e,i);l=g;return}function mM(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;if(f|0){f=d+16|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[d>>2]=c[g>>2];c[d+4>>2]=c[g+4>>2];c[d+8>>2]=c[g+8>>2];c[d+12>>2]=c[g+12>>2]}if(!(a[194957]|0)){g=b+24|0;c[e>>2]=c[g>>2];c[e+4>>2]=c[g+4>>2];c[e+8>>2]=c[g+8>>2];c[e+12>>2]=c[g+12>>2]}else{h[e>>3]=+h[b+32>>3];h[e+8>>3]=+h[b+24>>3]}c[e+32>>2]=b;a[e+36>>0]=0;c[d+32>>2]=e;return}function nM(a,b){a=a|0;b=b|0;b=uO(b)|0;do if(b){b=c[b>>2]|0;if(!(c[b+8>>2]|0)){b=c[b>>2]|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];break}else{b=b+16|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];break}}else{c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;c[a+12>>2]=0}while(0);return}function oM(a,b){a=a|0;b=b|0;var d=0;b=uO(b)|0;do if(b){d=c[b>>2]|0;b=(c[b+4>>2]|0)+-1|0;if(!(c[d+(b*48|0)+12>>2]|0)){d=(c[d+(b*48|0)>>2]|0)+((c[d+(b*48|0)+4>>2]|0)+-1<<4)|0;c[a>>2]=c[d>>2];c[a+4>>2]=c[d+4>>2];c[a+8>>2]=c[d+8>>2];c[a+12>>2]=c[d+12>>2];break}else{d=d+(b*48|0)+32|0;c[a>>2]=c[d>>2];c[a+4>>2]=c[d+4>>2];c[a+8>>2]=c[d+8>>2];c[a+12>>2]=c[d+12>>2];break}}else{c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;c[a+12>>2]=0}while(0);return}function pM(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;q=l;l=l+112|0;k=q+72|0;n=q+32|0;o=q;p=d+16|0;j=1;while(1){f=c[p>>2]|0;if((j|0)>(c[f+180>>2]|0))break;f=c[(c[f+184>>2]|0)+(j<<2)>>2]|0;g=k;h=e;i=g+40|0;do{c[g>>2]=c[h>>2];g=g+4|0;h=h+4|0}while((g|0)<(i|0));pM(n,f,k);g=e;h=n;i=g+40|0;do{c[g>>2]=c[h>>2];g=g+4|0;h=h+4|0}while((g|0)<(i|0));j=j+1|0}if(((yC(d)|0)!=(d|0)?(m=c[(c[p>>2]|0)+12>>2]|0,m|0):0)?a[m+81>>0]|0:0){p=e+32|0;n=c[p>>2]|0;c[k>>2]=c[e>>2];c[k+4>>2]=c[e+4>>2];c[k+8>>2]=c[e+8>>2];c[k+12>>2]=c[e+12>>2];c[k+16>>2]=c[e+16>>2];c[k+20>>2]=c[e+20>>2];c[k+24>>2]=c[e+24>>2];c[k+28>>2]=c[e+28>>2];lM(o,m,n,k);c[e>>2]=c[o>>2];c[e+4>>2]=c[o+4>>2];c[e+8>>2]=c[o+8>>2];c[e+12>>2]=c[o+12>>2];c[e+16>>2]=c[o+16>>2];c[e+20>>2]=c[o+20>>2];c[e+24>>2]=c[o+24>>2];c[e+28>>2]=c[o+28>>2];c[p>>2]=(c[p>>2]|0)+40}g=b;h=e;i=g+40|0;do{c[g>>2]=c[h>>2];g=g+4|0;h=h+4|0}while((g|0)<(i|0));l=q;return}function qM(a,b,e,f,g){a=a|0;b=b|0;e=e|0;f=f|0;g=g|0;var i=0.0,j=0.0,k=0.0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0;s=l;l=l+160|0;r=s+96|0;p=s+48|0;o=s;q=c[15712]|0;n=d[g+32>>0]|0;i=+h[g>>3];j=+h[g+8>>3];k=+h[g+16>>3];m=+h[g+24>>3];c[o>>2]=b;c[o+4>>2]=f;c[o+8>>2]=n;h[o+16>>3]=i;h[o+24>>3]=j;h[o+32>>3]=k;h[o+40>>3]=m;w4(q,104065,o)|0;a:do if(0>=2){U4(104125,8,1,q)|0;o=0;while(1){if((o|0)>=(b|0))break;g=c[a+32>>2]|0;i=+h[a>>3];j=+h[a+8>>3];k=+h[a+16>>3];m=+h[a+24>>3];if(!g)n=195059;else n=c[c[g+32>>2]>>2]|0;c[p>>2]=o;h[p+8>>3]=i;h[p+16>>3]=j;h[p+24>>3]=k;h[p+32>>3]=m;c[p+40>>2]=g;c[p+44>>2]=n;w4(q,104134,p)|0;o=o+1|0;a=a+40|0}U4(104177,8,1,q)|0;g=0;while(1){if((g|0)>=(f|0))break a;b=d[e+36>>0]|0;i=+h[e+16>>3];j=+h[e+24>>3];k=+h[e>>3];m=+h[e+8>>3];p=c[c[e+32>>2]>>2]|0;c[r>>2]=g;c[r+4>>2]=e;c[r+8>>2]=b;h[r+16>>3]=i;h[r+24>>3]=j;h[r+32>>3]=k;h[r+40>>3]=m;c[r+48>>2]=p;w4(q,104186,r)|0;e=e+40|0;g=g+1|0}}while(0);l=s;return}function rM(a,b){a=a|0;b=b|0;var c=0.0;c=+h[b+8>>3]*.5+ +h[b+24>>3];h[a>>3]=+h[b>>3]*.5+ +h[b+16>>3];h[a+8>>3]=c;return}function sM(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,i=0.0,j=0.0;e=l;l=l+16|0;f=e;j=+h[b>>3];h[d>>3]=+h[(+h[d>>3]>3];g=d+8|0;i=+h[b+8>>3];h[g>>3]=+h[(+h[g>>3]>3];j=+h[b+16>>3]+j;h[f>>3]=j;i=+h[b+24>>3]+i;h[f+8>>3]=i;g=d+16|0;h[g>>3]=+h[(+h[g>>3]>j?g:f)>>3];b=d+24|0;h[b>>3]=+h[(+h[b>>3]>i?g:f)+8>>3];c[a>>2]=c[d>>2];c[a+4>>2]=c[d+4>>2];c[a+8>>2]=c[d+8>>2];c[a+12>>2]=c[d+12>>2];c[a+16>>2]=c[d+16>>2];c[a+20>>2]=c[d+20>>2];c[a+24>>2]=c[d+24>>2];c[a+28>>2]=c[d+28>>2];l=e;return}function tM(a){a=a|0;cM(a,1);return}function uM(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;e=l;l=l+16|0;d=e;b=mP(QA(a,105526)|0)|0;if(b){b=vM(b)|0;if(b|0){f=c[b+40>>2]|0;d=c[b+44>>2]|0;g=a+16|0;a=c[g>>2]|0;h[a+32>>3]=+(f|0)*.013888888888888888;h[a+40>>3]=+(d|0)*.013888888888888888;a=JK(12)|0;c[(c[g>>2]|0)+12>>2]=a;c[a>>2]=c[b+12>>2];c[a+4>>2]=((f|0)/-2|0)-(c[b+32>>2]|0);c[a+8>>2]=((d|0)/-2|0)-(c[b+36>>2]|0)}}else{c[d>>2]=KB(a)|0;gA(0,104234,d)|0}l=e;return}function vM(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;p=l;l=l+1152|0;i=p+24|0;h=p+8|0;e=p;f=p+120|0;j=p+44|0;k=p+40|0;m=p+36|0;n=p+32|0;o=p+28|0;d=c[47266]|0;if(!d){d=Vz(20812,c[4581]|0)|0;c[47266]=d}d=nb[c[d>>2]&63](d,b,512)|0;do if(!d){g=$4(b,138821)|0;if(!g){c[e>>2]=b;gA(0,104283,e)|0;d=0;break}else{d=0;e=0}while(1){if(!(c4(f,1024,g)|0)){f=11;break}c[h>>2]=k;c[h+4>>2]=m;c[h+8>>2]=n;c[h+12>>2]=o;q=(b5(f,104311,h)|0)==4;e=q?1:e;if((a[f>>0]|0)!=37){q=(d4(f,104340)|0)==0;d=q?d:1}if((e|0)!=0&(d|0)!=0){f=12;break}}if((f|0)==11)if(!e){c[i>>2]=b;gA(0,104345,i)|0;d=0}else f=12;if((f|0)==12){q=KK(64)|0;k=c[k>>2]|0;c[q+32>>2]=k;m=c[m>>2]|0;c[q+40>>2]=(c[n>>2]|0)-k;c[q+36>>2]=(c[o>>2]|0)-m;c[q+8>>2]=b;o=c[47267]|0;c[47267]=o+1;c[q+12>>2]=o;Z4(A6(g)|0,j)|0;o=c[j+36>>2]|0;n=KK(o+1|0)|0;c[q+52>>2]=n;n5(g,0,0)|0;x6(n,o,1,g)|0;a[n+o>>0]=0;o=c[47266]|0;nb[c[o>>2]&63](o,q,1)|0;a[q+16>>0]=d;d=q}I4(g)|0}while(0);l=p;return d|0}function wM(a,b,d){a=a|0;b=b|0;d=d|0;U1(c[b+52>>2]|0);return}function xM(a){a=a|0;U1(c[(c[a+16>>2]|0)+12>>2]|0);return}function yM(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+16|0;m=n+8|0;k=n;j=(d|0)!=0;a:do if(j){h=0;f=0;b:while(1)while(1){if(h)break a;g=c[d+(f<<2)>>2]|0;if(!g){i=6;break a}f=f+1|0;if(!(a[g>>0]|0)){h=1;continue b}}}else i=6;while(0);c:do if((i|0)==6)while(1){f=c[e>>2]|0;if(!f)break c;oF(b,f)|0;oF(b,153599)|0;e=e+4|0;i=6}while(0);d:do if(j){h=0;while(1){f=c[d+(h<<2)>>2]|0;if(!f)break d;do if(a[f>>0]|0){e=mP(f)|0;if(!e){c[k>>2]=f;gA(0,104384,k)|0;break}g=$4(e,138821)|0;if(!g){c[m>>2]=e;gA(0,104412,m)|0;break}while(1){f=lP(g)|0;if(!f)break;oF(b,f)|0}oF(b,153599)|0;I4(g)|0}while(0);h=h+1|0}}while(0);l=n;return}function zM(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;d=c[d+52>>2]|0;a:while(1){e=a[d>>0]|0;b:do switch(e<<24>>24){case 0:break a;case 37:{if((a[d+1>>0]|0)==37){e=d+2|0;if((((j3(e,104440,3)|0)!=0?(j3(e,104444,5)|0)!=0:0)?(j3(e,104450,3)|0)!=0:0)?(j3(e,104454,7)|0)!=0:0){e=37;break b}else g=37;c:while(1){switch(g<<24>>24){case 13:{f=10;break c}case 10:case 0:{f=12;break c}default:{}}g=d+1|0;d=g;g=a[g>>0]|0}if((f|0)==10){e=d+1|0;if((a[e>>0]|0)==10){d=d+2|0;continue a}}else if((f|0)==12)e=d+1|0;d=g<<24>>24==0?d:e;continue a}else e=37;break}default:{}}while(0);d:while(1){switch(e<<24>>24){case 10:case 13:case 0:break d;default:{}}pF(b,e<<24>>24)|0;g=d+1|0;d=g;e=a[g>>0]|0}f=d+1|0;if(e<<24>>24==13?(a[f>>0]|0)==10:0)d=d+2|0;else d=e<<24>>24==0?d:f;pF(b,10)|0}return}function AM(b){b=b|0;var d=0,e=0,f=0,g=0;f=l;l=l+16|0;e=f;d=c[47266]|0;a:do if(d|0){d=nb[c[d>>2]&63](d,0,128)|0;while(1){if(!d)break a;if(!(a[d+16>>0]|0)){c[e>>2]=c[d+12>>2];uF(b,104462,e);oF(b,104480)|0;zM(b,d);oF(b,104498)|0;oF(b,104513)|0}g=c[47266]|0;d=nb[c[g>>2]&63](g,d,8)|0}}while(0);l=f;return}function BM(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;g=l;l=l+16|0;e=g;a:do switch(d|0){case 0:{f=b;break}case 1:{f=fQ(b)|0;break}default:{switch(CM(b)|0){case 2:break;case 1:{f=fQ(b)|0;break a}default:{f=b;break a}}if(!(c[47268]|0)){gA(0,104525,e)|0;c[47268]=1;f=b}else f=b}}while(0);if(!(c[47269]|0))kA(189076,0,0);d=c[47270]|0;if(d>>>0>=(c[47271]|0)>>>0){lA(189076,1)|0;d=c[47270]|0}c[47270]=d+1;a[d>>0]=40;e=f;b:while(1){switch(a[e>>0]|0){case 0:break b;case 92:case 41:case 40:{d=c[47270]|0;if(d>>>0>=(c[47271]|0)>>>0){lA(189076,1)|0;d=c[47270]|0}c[47270]=d+1;a[d>>0]=92;break}default:{}}d=c[47270]|0;if(d>>>0>=(c[47271]|0)>>>0){lA(189076,1)|0;d=c[47270]|0}h=a[e>>0]|0;c[47270]=d+1;a[d>>0]=h;e=e+1|0}d=c[47270]|0;if(d>>>0>=(c[47271]|0)>>>0){lA(189076,1)|0;d=c[47270]|0}c[47270]=d+1;a[d>>0]=41;if((f|0)!=(b|0))U1(f);d=c[47270]|0;if(d>>>0>=(c[47271]|0)>>>0){lA(189076,1)|0;d=c[47270]|0}a[d>>0]=0;h=c[47269]|0;c[47270]=h;l=g;return h|0}function CM(b){b=b|0;var c=0,d=0;c=0;a:while(1){while(1){d=a[b>>0]|0;if(!(d<<24>>24))break a;if((d&255)<127)b=b+1|0;else break}if((d&-4)<<24>>24==-64){c=1;b=b+2|0}else{c=2;break}}return c|0}function DM(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;n=l;l=l+96|0;i=n+80|0;j=n+72|0;m=n+64|0;g=n+32|0;k=n;h[g>>3]=+h[a>>3];h[g+8>>3]=+h[a+8>>3];h[g+16>>3]=+h[b>>3];h[g+24>>3]=+h[b+8>>3];do if((iY(d,g,j)|0)>=0){if(!f){b=d+4|0;a=c[b>>2]|0;f=c[47274]|0;if((a|0)>(c[47273]|0)){if(!f)a=KK(a<<5)|0;else a=MK(f,a<<5)|0;c[47274]=a;g=c[b>>2]|0;c[47273]=g;f=a}else g=a;b=c[d>>2]|0;a=0;while(1){if((a|0)>=(g|0))break;o=f+(a<<5)|0;d=b+(a<<4)|0;c[o>>2]=c[d>>2];c[o+4>>2]=c[d+4>>2];c[o+8>>2]=c[d+8>>2];c[o+12>>2]=c[d+12>>2];o=f+(a<<5)+16|0;d=a+1|0;p=b+(((d|0)%(g|0)|0)<<4)|0;c[o>>2]=c[p>>2];c[o+4>>2]=c[p+4>>2];c[o+8>>2]=c[p+8>>2];c[o+12>>2]=c[p+12>>2];a=d}c[k>>2]=0;c[k+4>>2]=0;c[k+8>>2]=0;c[k+12>>2]=0;c[k+16>>2]=0;c[k+20>>2]=0;c[k+24>>2]=0;c[k+28>>2]=0;c[i>>2]=c[j>>2];c[i+4>>2]=c[j+4>>2];if((OX(f,g,i,k,m)|0)<0){a=0;break}}else{c[i>>2]=c[j>>2];c[i+4>>2]=c[j+4>>2];FY(i,m)}a=m+4|0;if(!(EM(c[a>>2]|0)|0)){g=c[a>>2]|0;a=c[47275]|0;f=c[m>>2]|0;b=0;while(1){if((b|0)>=(g|0))break;p=a+(b<<4)|0;o=f+(b<<4)|0;c[p>>2]=c[o>>2];c[p+4>>2]=c[o+4>>2];c[p+8>>2]=c[o+8>>2];c[p+12>>2]=c[o+12>>2];b=b+1|0}c[e>>2]=g}else a=0}else a=0;while(0);l=n;return a|0}function EM(a){a=a|0;var b=0,d=0,e=0;e=l;l=l+16|0;d=e;b=c[47276]|0;do if((b|0)<(a|0)){a=a+300-((a|0)%300|0)+b|0;b=MK(c[47275]|0,a<<4)|0;c[47275]=b;if(!b){gA(1,104615,d)|0;a=1;break}else{c[47276]=a;a=0;break}}else a=0;while(0);l=e;return a|0}function FM(){var a=0,b=0,d=0;b=l;l=l+16|0;a=b;d=c[47277]|0;c[47277]=d+1;do if((d|0)<=0){d=KK(4800)|0;c[47275]=d;if(!d){gA(1,104638,a)|0;a=1;break}c[47276]=300;c[47278]=0;c[47279]=0;if(0){TO();a=0}else a=0}else a=0;while(0);l=b;return a|0}function GM(){var a=0,b=0,d=0,e=0.0,f=0,g=0;b=l;l=l+16|0;a=b;d=c[47277]|0;c[47277]=d+-1;if((d|0)<=1?(U1(c[47275]|0),0):0){d=c[15712]|0;g=c[47278]|0;f=c[47279]|0;e=+UO();c[a>>2]=g;c[a+4>>2]=f;h[a+8>>3]=e;w4(d,104676,a)|0}l=b;return}function HM(a,b){a=a|0;b=b|0;return IM(a,b,0)|0}function IM(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0,k=0.0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0;L=l;l=l+176|0;G=L+168|0;K=L+128|0;x=L+120|0;v=L+112|0;i=L+104|0;s=L+88|0;n=L+72|0;g=L+64|0;t=L+160|0;I=L+152|0;y=L+144|0;u=L+32|0;w=L;J=L+136|0;c[47278]=(c[47278]|0)+1;H=c[b+80>>2]|0;c[47279]=(c[47279]|0)+H;f=b+88|0;while(1){C=c[f>>2]|0;if(!C){D=4;break}f=c[C+16>>2]|0;if(!(a[f+112>>0]|0)){D=5;break}else f=f+116|0}do if((D|0)==4){gA(1,104719,g)|0;f=0}else if((D|0)==5){B=c[b+84>>2]|0;if(!(JM(H,B,b)|0)){g=H<<3;if((g|0)>(c[47280]|0)){f=c[47281]|0;if(!f)f=KK(H<<7)|0;else f=MK(f,H<<7)|0;c[47281]=f;c[47280]=g}a:do if((H|0)>1?+h[B+8>>3]>+h[B+40>>3]:0){f=0;while(1){if((f|0)==(H|0)){p=1;break a}z=B+(f<<5)+24|0;m=+h[z>>3];A=B+(f<<5)+8|0;h[z>>3]=-+h[A>>3];h[A>>3]=-m;f=f+1|0}}else p=0;while(0);r=c[C>>2]&3;z=C+48|0;f=c[((r|0)==3?C:z)+40>>2]|0;A=C+-48|0;if((f|0)==(c[((r|0)==2?C:A)+40>>2]|0)){c[i>>2]=KB(f)|0;gA(1,104826,i)|0;f=0;break}o=H+-1|0;q=c[47281]|0;r=q;f=0;j=0;b:while(1){if((j|0)>=(H|0)){j=o;n=f;break}if((j|0)>0)g=+h[B+(j<<5)+8>>3]>+h[B+(j+-1<<5)+8>>3]?-1:1;else g=0;if((j|0)<(o|0))i=+h[B+(j+1<<5)+8>>3]>+h[B+(j<<5)+8>>3]?1:-1;else i=0;c:do if((g|0)!=(i|0))if((g|0)==1|(i|0)==-1){g=B+(j<<5)|0;h[q+(f<<4)>>3]=+h[g>>3];i=f+1|0;h[q+(f<<4)+8>>3]=+h[B+(j<<5)+24>>3];h[q+(i<<4)>>3]=+h[g>>3];g=B+(j<<5)+8|0;D=29;break}else{g=B+(j<<5)+16|0;h[q+(f<<4)>>3]=+h[g>>3];i=f+1|0;h[q+(f<<4)+8>>3]=+h[B+(j<<5)+8>>3];h[q+(i<<4)>>3]=+h[g>>3];g=B+(j<<5)+24|0;D=29;break}else{switch(g|0){case -1:break c;case 0:break;default:{D=28;break b}}g=B+(j<<5)|0;h[q+(f<<4)>>3]=+h[g>>3];i=f+1|0;h[q+(f<<4)+8>>3]=+h[B+(j<<5)+24>>3];h[q+(i<<4)>>3]=+h[g>>3];g=B+(j<<5)+8|0;D=29}while(0);if((D|0)==29){D=0;h[q+(i<<4)+8>>3]=+h[g>>3];f=f+2|0}j=j+1|0}if((D|0)==28){c[n>>2]=g;c[n+4>>2]=g;c[n+8>>2]=480;gA(1,104761,n)|0;f=0;break}d:while(1){if((j|0)<=-1)break;if((j|0)<(o|0))f=+h[B+(j<<5)+8>>3]>+h[B+(j+1<<5)+8>>3]?-1:1;else f=0;if((j|0)>0)g=+h[B+(j+-1<<5)+8>>3]>+h[B+(j<<5)+8>>3]?1:-1;else g=0;e:do if((f|0)!=(g|0))if((f|0)==1|(g|0)==-1){f=B+(j<<5)|0;h[q+(n<<4)>>3]=+h[f>>3];g=n+1|0;h[q+(n<<4)+8>>3]=+h[B+(j<<5)+24>>3];h[q+(g<<4)>>3]=+h[f>>3];f=B+(j<<5)+8|0;i=2;break}else{f=B+(j<<5)+16|0;h[q+(n<<4)>>3]=+h[f>>3];g=n+1|0;h[q+(n<<4)+8>>3]=+h[B+(j<<5)+8>>3];h[q+(g<<4)>>3]=+h[f>>3];f=B+(j<<5)+24|0;i=2;break}else switch(f|0){case 0:{f=B+(j<<5)+16|0;h[q+(n<<4)>>3]=+h[f>>3];g=n+1|0;h[q+(n<<4)+8>>3]=+h[B+(j<<5)+8>>3];h[q+(g<<4)>>3]=+h[f>>3];f=B+(j<<5)+24|0;i=2;break e}case -1:{N=B+(j<<5)+16|0;h[q+(n<<4)>>3]=+h[N>>3];f=B+(j<<5)+8|0;i=n+1|0;h[q+(n<<4)+8>>3]=+h[f>>3];h[q+(i<<4)>>3]=+h[N>>3];N=B+(j<<5)+24|0;M=n+2|0;h[q+(i<<4)+8>>3]=+h[N>>3];i=B+(j<<5)|0;h[q+(M<<4)>>3]=+h[i>>3];g=n+3|0;h[q+(M<<4)+8>>3]=+h[N>>3];h[q+(g<<4)>>3]=+h[i>>3];i=4;break e}default:{D=42;break d}}while(0);h[q+(g<<4)+8>>3]=+h[f>>3];j=j+-1|0;n=n+i|0}if((D|0)==42){c[s>>2]=f;c[s+4>>2]=f;c[s+8>>2]=513;gA(1,104761,s)|0;f=0;break}f:do if(!p)f=0;else{f=0;while(1){if((f|0)>=(H|0)){f=0;break}M=B+(f<<5)+24|0;m=+h[M>>3];N=B+(f<<5)+8|0;h[M>>3]=-+h[N>>3];h[N>>3]=-m;f=f+1|0}while(1){if((f|0)>=(n|0)){f=0;break f}N=q+(f<<4)+8|0;h[N>>3]=-+h[N>>3];f=f+1|0}}while(0);while(1){if((f|0)>=(H|0))break;h[B+(f<<5)>>3]=2147483647.0;h[B+(f<<5)+16>>3]=-2147483648.0;f=f+1|0}c[t>>2]=r;i=t+4|0;c[i>>2]=n;h[u>>3]=+h[b>>3];h[u+8>>3]=+h[b+8>>3];h[u+16>>3]=+h[b+40>>3];h[u+24>>3]=+h[b+48>>3];if((iY(t,u,I)|0)<0){gA(1,104865,v)|0;f=0;break}if(!e){g=c[i>>2]|0;f=c[47274]|0;if((g|0)>(c[47273]|0)){if(!f)f=KK(g<<5)|0;else f=MK(f,g<<5)|0;c[47274]=f;g=c[i>>2]|0;c[47273]=g}j=c[47281]|0;i=0;while(1){if((i|0)>=(g|0))break;M=f+(i<<5)|0;N=j+(i<<4)|0;c[M>>2]=c[N>>2];c[M+4>>2]=c[N+4>>2];c[M+8>>2]=c[N+8>>2];c[M+12>>2]=c[N+12>>2];M=f+(i<<5)+16|0;N=i+1|0;v=j+(((N|0)%(g|0)|0)<<4)|0;c[M>>2]=c[v>>2];c[M+4>>2]=c[v+4>>2];c[M+8>>2]=c[v+8>>2];c[M+12>>2]=c[v+12>>2];i=N}if(!(a[b+29>>0]|0)){k=0.0;m=0.0}else{m=+h[b+16>>3];k=+E(+m);m=+F(+m)}h[w+8>>3]=m;h[w>>3]=k;if(!(a[b+69>>0]|0)){k=0.0;m=0.0}else{m=+h[b+56>>3];k=-+E(+m);m=-+F(+m)}h[w+24>>3]=m;h[w+16>>3]=k;c[G>>2]=c[I>>2];c[G+4>>2]=c[I+4>>2];if((OX(f,g,G,w,y)|0)<0){gA(1,104904,x)|0;f=0;break}}else{c[G>>2]=c[I>>2];c[G+4>>2]=c[I+4>>2];FY(G,y)}n=y+4|0;if(!(EM(c[n>>2]|0)|0)){f=0;while(1){if((f|0)>=(H|0))break;h[B+(f<<5)>>3]=2147483647.0;h[B+(f<<5)+16>>3]=-2147483648.0;f=f+1|0}i=c[n>>2]|0;j=c[47275]|0;g=c[y>>2]|0;f=0;while(1){if((f|0)>=(i|0)){i=1;f=10;g=0;break}N=j+(f<<4)|0;M=g+(f<<4)|0;c[N>>2]=c[M>>2];c[N+4>>2]=c[M+4>>2];c[N+8>>2]=c[M+8>>2];c[N+12>>2]=c[M+12>>2];f=f+1|0}while(1){if(!((g|0)<15&i<<24>>24!=0))break;KM(B,H,c[47275]|0,c[n>>2]|0,f);j=0;while(1){if((j|0)>=(H|0))break;if(+h[B+(j<<5)>>3]==2147483647.0){D=82;break}if(+h[B+(j<<5)+16>>3]==-2147483648.0){D=82;break}j=j+1|0}if((D|0)==82){D=0;N=f<<1;f=N;g=(N|0)>(2147483647/(H|0)|0|0)?15:g}i=(j|0)==(H|0)?0:i;g=g+1|0}if(i<<24>>24){M=KB(c[((c[C>>2]&3|0)==3?C:z)+40>>2]|0)|0;N=KB(c[((c[C>>2]&3|0)==2?C:A)+40>>2]|0)|0;c[K>>2]=M;c[K+4>>2]=N;gA(0,104942,K)|0;c[G>>2]=c[I>>2];c[G+4>>2]=c[I+4>>2];FY(G,J);KM(B,H,c[J>>2]|0,c[J+4>>2]|0,10);U1(c[J>>2]|0)}c[d>>2]=c[n>>2];f=c[47275]|0}else f=0}else f=0}while(0);l=L;return f|0}function JM(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0.0,g=0.0,i=0,j=0,k=0,m=0.0,n=0.0,o=0,p=0.0,q=0.0,r=0.0,s=0.0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0.0,L=0,M=0,N=0,O=0.0,P=0,Q=0,R=0;R=l;l=l+32|0;I=R+16|0;H=R+8|0;k=R;e=0;j=0;while(1){if((j|0)>=(a|0))break;i=b+(j<<5)|0;s=+h[b+(j<<5)+8>>3]-+h[b+(j<<5)+24>>3];if(!((s>=0.0?s:-s)<.01)?(s=+h[i>>3]-+h[b+(j<<5)+16>>3],!((s>=0.0?s:-s)<.01)):0){if((e|0)!=(j|0)){P=b+(e<<5)|0;c[P>>2]=c[i>>2];c[P+4>>2]=c[i+4>>2];c[P+8>>2]=c[i+8>>2];c[P+12>>2]=c[i+12>>2];c[P+16>>2]=c[i+16>>2];c[P+20>>2]=c[i+20>>2];c[P+24>>2]=c[i+24>>2];c[P+28>>2]=c[i+28>>2]}e=e+1|0}j=j+1|0}J=b+16|0;do if(!(+h[b>>3]>+h[J>>3])?(L=b+8|0,N=b+24|0,!(+h[L>>3]>+h[N>>3])):0){P=e+-1|0;M=c[15712]|0;w=0;while(1){if((w|0)>=(P|0))break;D=w+1|0;E=b+(D<<5)|0;f=+h[E>>3];F=b+(D<<5)+16|0;g=+h[F>>3];if(f>g){Q=16;break}A=b+(D<<5)+8|0;m=+h[A>>3];B=b+(D<<5)+24|0;n=+h[B>>3];if(m>n){Q=16;break}G=b+(w<<5)+16|0;v=+h[G>>3]>3]>g;a=u&1;z=b+(w<<5)+24|0;t=+h[z>>3]>3]>n;i=k&1;x=a+e+j+i|0;o=(x|0)!=0;if(!(0==0|o^1)){c[I>>2]=w;c[I+4>>2]=D;w4(M,105142,I)|0;LM(d)}a:do if(o){if(!v)if(!u)if(!t){if(k){k=0;o=e;e=B;i=y;Q=24}}else{k=i;j=0;o=e;e=A;i=z;Q=24}else{k=i;a=0;o=e;e=F;i=C;Q=24}else{k=i;o=0;e=E;i=G;Q=24}if((Q|0)==24){Q=0;w=~~+h[i>>3];h[i>>3]=+h[e>>3];h[e>>3]=+(w|0);i=k;e=o}o=x+-1|0;k=0;while(1){if((k|0)>=(o|0))break a;do if((e|0)!=1){if((a|0)==1){s=+(~~((+h[F>>3]+ +h[C>>3])*.5+.5)|0);h[F>>3]=s;h[C>>3]=s;a=0;break}if((j|0)==1){s=+(~~((+h[A>>3]+ +h[z>>3])*.5+.5)|0);h[A>>3]=s;h[z>>3]=s;j=0;break}if((i|0)==1){s=+(~~((+h[B>>3]+ +h[y>>3])*.5+.5)|0);h[B>>3]=s;h[y>>3]=s;i=0}}else{s=+(~~((+h[E>>3]+ +h[G>>3])*.5+.5)|0);h[E>>3]=s;h[G>>3]=s;e=0}while(0);k=k+1|0}}while(0);p=+h[C>>3];q=+h[G>>3];r=+h[E>>3];s=+h[F>>3];i=MM(~~p,~~q,~~r,~~s)|0;n=+h[y>>3];m=+h[z>>3];g=+h[A>>3];f=+h[B>>3];e=MM(~~n,~~m,~~g,~~f)|0;if(!((i|0)!=0&(e|0)!=0)){w=D;continue}if((i|0)<(e|0)){B=q-p>s-r;w=q>3]=B?(w?r:s):w?q:p;w=D;continue}else{B=m-n>f-g;w=m>3]=B?(w?g:f):w?m:n;w=D;continue}}if((Q|0)==16){c[H>>2]=D;gA(1,105096,H)|0;LM(d);e=1;break}f=+h[d>>3];g=+h[b>>3];if(!(((!(f+h[J>>3]):0)?(K=+h[d+8>>3],!(K<+h[L>>3])):0)?!(K>+h[N>>3]):0)){if(0){U4(105185,42,1,M)|0;LM(d);g=+h[b>>3];f=+h[d>>3]}if(f>3]=g;else g=f;f=+h[J>>3];if(g>f)h[d>>3]=f;e=d+8|0;g=+h[e>>3];f=+h[L>>3];if(g>3]=f;g=f}f=+h[N>>3];if(g>f)h[e>>3]=f}i=d+40|0;f=+h[i>>3];e=b+(P<<5)|0;g=+h[e>>3];if(((!(f+h[b+(P<<5)+16>>3]):0)?(O=+h[d+48>>3],!(O<+h[b+(P<<5)+8>>3])):0)?!(O>+h[b+(P<<5)+24>>3]):0){e=0;break}if(0){U4(105228,39,1,M)|0;LM(d);g=+h[e>>3];f=+h[i>>3]}if(f>3]=g;f=g}g=+h[b+(P<<5)+16>>3];if(f>g)h[i>>3]=g;e=d+48|0;f=+h[e>>3];g=+h[b+(P<<5)+8>>3];if(f>3]=g;else g=f;f=+h[b+(P<<5)+24>>3];if(g>f){h[e>>3]=f;e=0}else e=0}else Q=12;while(0);if((Q|0)==12){gA(1,105051,k)|0;LM(d);e=1}l=R;return e|0}function KM(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0,k=0,l=0,m=0.0,n=0.0,o=0,p=0,q=0,r=0,s=0,t=0.0,u=0,v=0.0,w=0.0,x=0.0,y=0.0,z=0.0;s=O(e,b)|0;t=1.0/+(s|0);e=0;a:while(1){u=e+3|0;if((u|0)>=(d|0))break;o=c+(e<<4)|0;p=c+(e<<4)+8|0;r=e+1|0;q=c+(r<<4)|0;r=c+(r<<4)+8|0;j=e+2|0;i=c+(j<<4)|0;j=c+(j<<4)+8|0;k=c+(u<<4)|0;l=c+(u<<4)+8|0;g=0;while(1){if((g|0)>(s|0)){e=u;continue a}v=t*+(g|0);m=+h[o>>3];n=+h[p>>3];y=+h[q>>3];w=+h[r>>3];z=+h[i>>3];x=+h[j>>3];m=(y-m)*v+m;n=(w-n)*v+n;y=(z-y)*v+y;w=(x-w)*v+w;m=(y-m)*v+m;n=(w-n)*v+n;m=((z-y+(+h[k>>3]-z)*v)*v+y-m)*v+m;n=((x-w+(+h[l>>3]-x)*v)*v+w-n)*v+n;f=0;while(1){if((f|0)>=(b|0))break;if(n<=+h[a+(f<<5)+24>>3]+.0001?n>=+h[a+(f<<5)+8>>3]+-.0001:0){e=a+(f<<5)|0;if(+h[e>>3]>m)h[e>>3]=m;e=a+(f<<5)+16|0;if(+h[e>>3]>3]=m}f=f+1|0}g=g+1|0}}return}function LM(b){b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0,k=0,m=0,n=0.0,o=0.0,p=0.0,q=0.0,r=0;m=l;l=l+112|0;j=m+80|0;k=m+48|0;i=m+8|0;g=m;e=c[15712]|0;f=b+80|0;c[g>>2]=c[f>>2];w4(e,105268,g)|0;g=b+84|0;d=0;while(1){if((d|0)>=(c[f>>2]|0))break;r=c[g>>2]|0;q=+h[r+(d<<5)>>3];p=+h[r+(d<<5)+8>>3];o=+h[r+(d<<5)+16>>3];n=+h[r+(d<<5)+24>>3];c[i>>2]=d;h[i+8>>3]=q;h[i+16>>3]=p;h[i+24>>3]=o;h[i+32>>3]=n;w4(e,105279,i)|0;d=d+1|0}q=+h[b+8>>3];p=+h[b+16>>3];r=a[b+29>>0]|0?105310:105322;h[k>>3]=+h[b>>3];h[k+8>>3]=q;h[k+16>>3]=p;c[k+24>>2]=r;w4(e,105338,k)|0;p=+h[b+48>>3];q=+h[b+56>>3];r=a[b+69>>0]|0?105310:105322;h[j>>3]=+h[b+40>>3];h[j+8>>3]=p;h[j+16>>3]=q;c[j+24>>2]=r;w4(e,105389,j)|0;l=m;return}function MM(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;do if((b|0)>(c|0)&(d|0)>(a|0)){if(!((c|0)>(a|0)|(d|0)<(a|0))){a=d-a|0;break}if((b|0)<(c|0)|(b|0)>(d|0)){b=b-a|0;a=d-c|0;a=(b|0)<(a|0)?b:a;break}else{a=b-c|0;break}}else a=0;while(0);return a|0}function NM(a,b){a=a|0;b=b|0;return IM(a,b,1)|0}function OM(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;j=l;l=l+80|0;g=j;i=1;f=b;while(1){h=f;f=c[(c[f+16>>2]|0)+172>>2]|0;if(!((f|0)!=0&(h|0)!=(f|0)))break;else i=i+1|0}if((i|0)>=21)g=JK(i<<2)|0;h=0;f=b;while(1){if((h|0)>=(i|0))break;c[g+(h<<2)>>2]=f;h=h+1|0;f=c[(c[f+16>>2]|0)+172>>2]|0}PM(a,g,i,d,e);if((i|0)>20)U1(g);l=j;return}function PM(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var i=0,j=0,k=0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0,s=0.0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0.0,M=0.0,N=0.0,P=0,Q=0;K=l;l=l+304|0;A=K+272|0;z=K+208|0;G=K+96|0;H=K+32|0;I=K+16|0;J=K;r=K+192|0;y=K+176|0;i=K+160|0;B=K+296|0;D=K+288|0;j=c[d>>2]|0;w=c[j>>2]&3;k=j+-48|0;E=c[((w|0)==2?j:k)+40>>2]|0;t=G+16|0;w=(c[(c[((w|0)==3?j:j+48|0)+40>>2]|0)+16>>2]|0)+16|0;x=j+16|0;F=(c[x>>2]|0)+16|0;c[z>>2]=c[w>>2];c[z+4>>2]=c[w+4>>2];c[z+8>>2]=c[w+8>>2];c[z+12>>2]=c[w+12>>2];c[A>>2]=c[F>>2];c[A+4>>2]=c[F+4>>2];c[A+8>>2]=c[F+8>>2];c[A+12>>2]=c[F+12>>2];QM(r,z,A);c[G>>2]=c[r>>2];c[G+4>>2]=c[r+4>>2];c[G+8>>2]=c[r+8>>2];c[G+12>>2]=c[r+12>>2];c[t>>2]=c[r>>2];c[t+4>>2]=c[r+4>>2];c[t+8>>2]=c[r+8>>2];c[t+12>>2]=c[r+12>>2];c[I>>2]=c[r>>2];c[I+4>>2]=c[r+4>>2];c[I+8>>2]=c[r+8>>2];c[I+12>>2]=c[r+12>>2];r=G+32|0;F=G+48|0;w=(c[E+16>>2]|0)+16|0;x=(c[x>>2]|0)+56|0;c[z>>2]=c[w>>2];c[z+4>>2]=c[w+4>>2];c[z+8>>2]=c[w+8>>2];c[z+12>>2]=c[w+12>>2];c[A>>2]=c[x>>2];c[A+4>>2]=c[x+4>>2];c[A+8>>2]=c[x+8>>2];c[A+12>>2]=c[x+12>>2];QM(y,z,A);c[F>>2]=c[y>>2];c[F+4>>2]=c[y+4>>2];c[F+8>>2]=c[y+8>>2];c[F+12>>2]=c[y+12>>2];c[r>>2]=c[y>>2];c[r+4>>2]=c[y+4>>2];c[r+8>>2]=c[y+8>>2];c[r+12>>2]=c[y+12>>2];c[J>>2]=c[y>>2];c[J+4>>2]=c[y+4>>2];c[J+8>>2]=c[y+8>>2];c[J+12>>2]=c[y+12>>2];a:do if((e|0)!=1&(a[194954]|0)==0){m=+h[G>>3];n=+h[F>>3];L=m-n;o=+h[G+8>>3];p=+h[G+56>>3];s=o-p;q=s*s;if(q+L*L<1.0e-06){c[t>>2]=c[G>>2];c[t+4>>2]=c[G+4>>2];c[t+8>>2]=c[G+8>>2];c[t+12>>2]=c[G+12>>2];c[r>>2]=c[F>>2];c[r+4>>2]=c[F+4>>2];c[r+8>>2]=c[F+8>>2];c[r+12>>2]=c[F+12>>2];y=G+24|0;x=G+40|0;n=0.0;m=0.0}else{M=n-m;L=+C(+(q+M*M));w=c[(c[(c[b+60>>2]|0)+16>>2]|0)+248>>2]|0;N=+((O(w,e+-1|0)|0)/2|0|0);q=s*N/L;h[t>>3]=q+m;m=M*N/L;y=G+24|0;h[y>>3]=m+o;h[r>>3]=q+n;x=G+40|0;h[x>>3]=p+m;m=+(0-w|0);n=M*m/L;m=s*m/L}f=(f|0)==6;u=D+4|0;v=B+4|0;j=0;while(1){if((j|0)>=(e|0))break a;w=c[d+(j<<2)>>2]|0;k=w+-48|0;b:do if((c[((c[w>>2]&3|0)==2?w:k)+40>>2]|0)==(E|0)){c[I>>2]=c[G>>2];c[I+4>>2]=c[G+4>>2];c[I+8>>2]=c[G+8>>2];c[I+12>>2]=c[G+12>>2];c[J>>2]=c[F>>2];c[J+4>>2]=c[F+4>>2];c[J+8>>2]=c[F+8>>2];c[J+12>>2]=c[F+12>>2];i=0;while(1){if((i|0)==4)break b;P=H+(i<<4)|0;Q=G+(i<<4)|0;c[P>>2]=c[Q>>2];c[P+4>>2]=c[Q+4>>2];c[P+8>>2]=c[Q+8>>2];c[P+12>>2]=c[Q+12>>2];i=i+1|0}}else{c[I>>2]=c[F>>2];c[I+4>>2]=c[F+4>>2];c[I+8>>2]=c[F+8>>2];c[I+12>>2]=c[F+12>>2];c[J>>2]=c[G>>2];c[J+4>>2]=c[G+4>>2];c[J+8>>2]=c[G+8>>2];c[J+12>>2]=c[G+12>>2];i=0;while(1){if((i|0)==4)break b;Q=H+(3-i<<4)|0;P=G+(i<<4)|0;c[Q>>2]=c[P>>2];c[Q+4>>2]=c[P+4>>2];c[Q+8>>2]=c[P+8>>2];c[Q+12>>2]=c[P+12>>2];i=i+1|0}}while(0);if(f){c[u>>2]=4;c[D>>2]=z;i=0;while(1){if((i|0)==4)break;Q=z+(i<<4)|0;P=H+(i<<4)|0;c[Q>>2]=c[P>>2];c[Q+4>>2]=c[P+4>>2];c[Q+8>>2]=c[P+8>>2];c[Q+12>>2]=c[P+12>>2];i=i+1|0}c[A>>2]=c[D>>2];c[A+4>>2]=c[D+4>>2];FY(A,B);dO(w,c[((c[w>>2]&3|0)==2?w:k)+40>>2]|0,c[B>>2]|0,c[v>>2]|0,g)}else dO(w,c[((c[w>>2]&3|0)==2?w:k)+40>>2]|0,H,4,g);c[z>>2]=c[I>>2];c[z+4>>2]=c[I+4>>2];c[z+8>>2]=c[I+8>>2];c[z+12>>2]=c[I+12>>2];c[A>>2]=c[J>>2];c[A+4>>2]=c[J+4>>2];c[A+8>>2]=c[J+8>>2];c[A+12>>2]=c[J+12>>2];yO(b,w,z,A);h[t>>3]=+h[t>>3]+m;h[y>>3]=+h[y>>3]+n;h[r>>3]=+h[r>>3]+m;h[x>>3]=+h[x>>3]+n;j=j+1|0}}else{if((f|0)==4){RM(i,b);c[A>>2]=c[i>>2];c[A+4>>2]=c[i+4>>2];c[A+8>>2]=c[i+8>>2];c[A+12>>2]=c[i+12>>2];SM(G,A)}dO(j,c[((c[j>>2]&3|0)==2?j:k)+40>>2]|0,G,4,g);c[z>>2]=c[I>>2];c[z+4>>2]=c[I+4>>2];c[z+8>>2]=c[I+8>>2];c[z+12>>2]=c[I+12>>2];c[A>>2]=c[J>>2];c[A+4>>2]=c[J+4>>2];c[A+8>>2]=c[J+8>>2];c[A+12>>2]=c[J+12>>2];yO(b,j,z,A)}while(0);l=K;return}function QM(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0;d=+h[c+8>>3]+ +h[b+8>>3];h[a>>3]=+h[c>>3]+ +h[b>>3];h[a+8>>3]=d;return}function RM(a,b){a=a|0;b=b|0;b=c[b+16>>2]|0;h[23305]=(+h[b+32>>3]+ +h[b+16>>3])*.5;h[23306]=(+h[b+40>>3]+ +h[b+24>>3])*.5;c[a>>2]=c[46610];c[a+4>>2]=c[46611];c[a+8>>2]=c[46612];c[a+12>>2]=c[46613];return}function SM(a,b){a=a|0;b=b|0;var c=0.0,d=0.0,e=0.0,f=0.0,g=0.0,i=0.0;f=+h[a>>3];d=+h[a+48>>3];i=(d+f)*.5;g=+h[a+8>>3];c=+h[a+56>>3];e=(c+g)*.5;f=d-f;g=c-g;f=+C(+(g*g+f*f))*.2;g=+h[b>>3]-i;c=+h[b+8>>3]-e;d=+C(+(c*c+g*g));if(!(d==0.0)){g=i-g/d*f;i=e-c/d*f;h[a+32>>3]=g;h[a+16>>3]=g;h[a+40>>3]=i;h[a+24>>3]=i}return}function TM(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,i=0,j=0,k=0,m=0.0,n=0,o=0.0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,D=0,E=0,F=0.0,G=0,H=0.0,I=0.0,J=0.0;E=l;l=l+208|0;t=E+192|0;s=E+176|0;B=E+32|0;w=E+16|0;x=E;y=E+160|0;z=E+144|0;u=E+128|0;v=E+112|0;g=e&2130706432;A=(e&8|0)==0?((g|0)==0?4:g):8;if((A|0)==436207616)UM(a,b,d,f);else{D=JK((d<<6)+64|0)|0;p=d+-1|0;q=x+8|0;r=w+8|0;o=12.0;e=0;while(1){if((e|0)>=(d|0))break;n=b+(e<<4)|0;c[w>>2]=c[n>>2];c[w+4>>2]=c[n+4>>2];c[w+8>>2]=c[n+8>>2];c[w+12>>2]=c[n+12>>2];if((e|0)<(p|0)){e=e+1|0;n=b+(e<<4)|0;c[x>>2]=c[n>>2];c[x+4>>2]=c[n+4>>2];c[x+8>>2]=c[n+8>>2];c[x+12>>2]=c[n+12>>2]}else{c[x>>2]=c[b>>2];c[x+4>>2]=c[b+4>>2];c[x+8>>2]=c[b+8>>2];c[x+12>>2]=c[b+12>>2];e=e+1|0}m=+h[x>>3]-+h[w>>3];F=+h[q>>3]-+h[r>>3];m=+C(+(F*F+m*m))*.3333333333333333;o=o=(d|0))break;g=b+(i<<4)|0;c[w>>2]=c[g>>2];c[w+4>>2]=c[g+4>>2];c[w+8>>2]=c[g+8>>2];c[w+12>>2]=c[g+12>>2];if((i|0)<(p|0)){g=b+(i+1<<4)|0;c[x>>2]=c[g>>2];c[x+4>>2]=c[g+4>>2];c[x+8>>2]=c[g+8>>2];c[x+12>>2]=c[g+12>>2]}else{c[x>>2]=c[b>>2];c[x+4>>2]=c[b+4>>2];c[x+8>>2]=c[b+8>>2];c[x+12>>2]=c[b+12>>2]}m=+h[x>>3]-+h[w>>3];F=+h[q>>3]-+h[r>>3];m=o/+C(+(F*F+m*m));m=k?m*.3333333333333333:j?m*.5:m;g=D+(e<<4)|0;if(n){c[s>>2]=c[w>>2];c[s+4>>2]=c[w+4>>2];c[s+8>>2]=c[w+8>>2];c[s+12>>2]=c[w+12>>2];c[t>>2]=c[x>>2];c[t+4>>2]=c[x+4>>2];c[t+8>>2]=c[x+8>>2];c[t+12>>2]=c[x+12>>2];VM(y,m*.5,s,t);c[g>>2]=c[y>>2];c[g+4>>2]=c[y+4>>2];c[g+8>>2]=c[y+8>>2];c[g+12>>2]=c[y+12>>2]}else{c[g>>2]=c[w>>2];c[g+4>>2]=c[w+4>>2];c[g+8>>2]=c[w+8>>2];c[g+12>>2]=c[w+12>>2]}g=D+(e+1<<4)|0;c[s>>2]=c[w>>2];c[s+4>>2]=c[w+4>>2];c[s+8>>2]=c[w+8>>2];c[s+12>>2]=c[w+12>>2];c[t>>2]=c[x>>2];c[t+4>>2]=c[x+4>>2];c[t+8>>2]=c[x+8>>2];c[t+12>>2]=c[x+12>>2];VM(z,m,s,t);c[g>>2]=c[z>>2];c[g+4>>2]=c[z+4>>2];c[g+8>>2]=c[z+8>>2];c[g+12>>2]=c[z+12>>2];g=e+3|0;G=D+(e+2<<4)|0;c[s>>2]=c[w>>2];c[s+4>>2]=c[w+4>>2];c[s+8>>2]=c[w+8>>2];c[s+12>>2]=c[w+12>>2];c[t>>2]=c[x>>2];c[t+4>>2]=c[x+4>>2];c[t+8>>2]=c[x+8>>2];c[t+12>>2]=c[x+12>>2];VM(u,1.0-m,s,t);c[G>>2]=c[u>>2];c[G+4>>2]=c[u+4>>2];c[G+8>>2]=c[u+8>>2];c[G+12>>2]=c[u+12>>2];if(n){G=D+(g<<4)|0;c[s>>2]=c[w>>2];c[s+4>>2]=c[w+4>>2];c[s+8>>2]=c[w+8>>2];c[s+12>>2]=c[w+12>>2];c[t>>2]=c[x>>2];c[t+4>>2]=c[x+4>>2];c[t+8>>2]=c[x+8>>2];c[t+12>>2]=c[x+12>>2];VM(v,1.0-m*.5,s,t);c[G>>2]=c[v>>2];c[G+4>>2]=c[v+4>>2];c[G+8>>2]=c[v+8>>2];c[G+12>>2]=c[v+12>>2];e=e+4|0}else e=g;i=i+1|0}k=D+(e<<4)|0;c[k>>2]=c[D>>2];c[k+4>>2]=c[D+4>>2];c[k+8>>2]=c[D+8>>2];c[k+12>>2]=c[D+12>>2];k=D+(e+1<<4)|0;j=D+16|0;c[k>>2]=c[j>>2];c[k+4>>2]=c[j+4>>2];c[k+8>>2]=c[j+8>>2];c[k+12>>2]=c[j+12>>2];e=D+(e+2<<4)|0;k=D+32|0;c[e>>2]=c[k>>2];c[e+4>>2]=c[k+4>>2];c[e+8>>2]=c[k+8>>2];c[e+12>>2]=c[k+12>>2];e=A&2147483647;a:do if((e|0)<201326592){if((e|0)>=83886080){if((e|0)<134217728){if((e|0)<100663296){switch(e|0){case 83886080:break;default:break a}if((d|0)==4){G=JK(192)|0;c[G>>2]=c[b>>2];c[G+4>>2]=c[b+4>>2];c[G+8>>2]=c[b+8>>2];c[G+12>>2]=c[b+12>>2];p=G+16|0;t=b+16|0;c[p>>2]=c[t>>2];c[p+4>>2]=c[t+4>>2];c[p+8>>2]=c[t+8>>2];c[p+12>>2]=c[t+12>>2];p=D+48|0;t=D+64|0;o=+h[t>>3];n=G+32|0;h[n>>3]=o;q=D+56|0;r=D+72|0;H=+h[r>>3];z=G+40|0;h[z>>3]=H;F=+h[p>>3]+o-+h[k>>3];u=G+48|0;h[u>>3]=F;J=+h[q>>3]+H-+h[D+40>>3];x=G+56|0;h[x>>3]=J;I=+h[t>>3]+F-+h[p>>3];p=G+64|0;h[p>>3]=I;m=+h[r>>3]+J-+h[q>>3];q=G+72|0;h[q>>3]=m;r=G+80|0;h[r>>3]=o+I-F;h[G+88>>3]=H+m-J;t=D+96|0;v=D+80|0;J=+h[v>>3];d=G+144|0;h[d>>3]=J;w=D+104|0;s=D+88|0;m=+h[s>>3];h[G+152>>3]=m;H=+h[t>>3]+J-+h[D+112>>3];y=G+128|0;h[y>>3]=H;F=+h[w>>3]+m-+h[D+120>>3];A=G+136|0;h[A>>3]=F;I=+h[v>>3]+H-+h[t>>3];t=G+112|0;h[t>>3]=I;o=+h[s>>3]+F-+h[w>>3];w=G+120|0;h[w>>3]=o;s=G+96|0;h[s>>3]=J+I-H;v=G+104|0;h[v>>3]=m+o-F;k=G+160|0;j=b+32|0;c[k>>2]=c[j>>2];c[k+4>>2]=c[j+4>>2];c[k+8>>2]=c[j+8>>2];c[k+12>>2]=c[j+12>>2];k=G+176|0;b=b+48|0;c[k>>2]=c[b>>2];c[k+4>>2]=c[b+4>>2];c[k+8>>2]=c[b+8>>2];c[k+12>>2]=c[b+12>>2];nS(a,G,12,f);c[B>>2]=c[n>>2];c[B+4>>2]=c[n+4>>2];c[B+8>>2]=c[n+8>>2];c[B+12>>2]=c[n+12>>2];F=+h[n>>3];o=+h[u>>3];F=F+F-o;u=B+16|0;h[u>>3]=F;m=+h[z>>3];H=+h[x>>3];m=m+m-H;x=B+24|0;h[x>>3]=m;z=B+32|0;h[z>>3]=+h[p>>3]+F-o;b=B+40|0;h[b>>3]=+h[q>>3]+m-H;f=B+48|0;c[f>>2]=c[r>>2];c[f+4>>2]=c[r+4>>2];c[f+8>>2]=c[r+8>>2];c[f+12>>2]=c[r+12>>2];qS(a,B,4);c[B>>2]=c[s>>2];c[B+4>>2]=c[s+4>>2];c[B+8>>2]=c[s+8>>2];c[B+12>>2]=c[s+12>>2];H=+h[s>>3];m=+h[t>>3];H=H-(m-H);h[u>>3]=H;o=+h[v>>3];F=+h[w>>3];o=o-(F-o);h[x>>3]=o;h[z>>3]=+h[y>>3]+H-m;h[b>>3]=+h[A>>3]+o-F;c[f>>2]=c[d>>2];c[f+4>>2]=c[d+4>>2];c[f+8>>2]=c[d+8>>2];c[f+12>>2]=c[d+12>>2];qS(a,B,4);U1(G);break}else qa(105438,105449,737,105458)}if((e|0)<117440512){switch(e|0){case 100663296:break;default:break a}y=d+5|0;G=JK(y<<4)|0;z=b+16|0;H=+h[z>>3];H=(+h[b>>3]-H)*.625+H;h[G>>3]=H;A=b+40|0;J=+h[A>>3];d=b+24|0;v=D+48|0;w=D+56|0;x=D+72|0;J=(+h[d>>3]-J)*.5+J+(+h[w>>3]-+h[x>>3])*1.5;h[G+8>>3]=J;I=+h[z>>3];I=(+h[b>>3]-I)*.25+I;h[G+16>>3]=I;h[G+24>>3]=J;h[G+32>>3]=I;F=+h[A>>3];h[G+40>>3]=(+h[d>>3]-F)*.5+F;I=(+h[k>>3]-+h[v>>3])*.5+I;h[G+48>>3]=I;F=+h[A>>3];h[G+56>>3]=(+h[d>>3]-F)*.5+F;h[G+64>>3]=I;I=+h[A>>3];I=(+h[d>>3]-I)*.5+I+(+h[w>>3]-+h[x>>3]);h[G+72>>3]=I;h[G+80>>3]=H;h[G+88>>3]=I;h[G+96>>3]=H;I=I-(+h[w>>3]-+h[x>>3])*.25;h[G+104>>3]=I;h[G+112>>3]=+h[k>>3]+H-+h[v>>3];h[G+120>>3]=(+h[w>>3]-+h[x>>3])*.5+I;h[G+128>>3]=+h[G>>3];h[G+136>>3]=(+h[w>>3]-+h[x>>3])*.25+J;nS(a,G,y,f);h[B>>3]=+h[z>>3];J=+h[A>>3];h[B+8>>3]=(+h[d>>3]-J)*.5+J;h[B+16>>3]=+h[b>>3];h[B+24>>3]=(+h[b+8>>3]-+h[b+56>>3])*.5+J;qS(a,B,2);U1(G);break}else{switch(e|0){case 117440512:break;default:break a}d=d+1|0;G=JK(d<<4)|0;h[G>>3]=+h[j>>3];z=D+56|0;A=D+72|0;h[G+8>>3]=+h[D+24>>3]-(+h[z>>3]-+h[A>>3])*.5;h[G+16>>3]=+h[D+48>>3];J=+h[z>>3];h[G+24>>3]=J-(J-+h[A>>3])*.5;h[G+32>>3]=+h[b+32>>3];B=b+40|0;h[G+40>>3]=(+h[z>>3]-+h[A>>3])*.5+ +h[B>>3];h[G+48>>3]=+h[j>>3];h[G+56>>3]=(+h[z>>3]-+h[A>>3])*.5+ +h[B>>3];J=+h[b+8>>3];h[G+72>>3]=J-(J-+h[b+56>>3])*.5;h[G+64>>3]=+h[b>>3];nS(a,G,d,f);U1(G);break}}if((e|0)<1342177280)if((e|0)<150994944){switch(e|0){case 134217728:break;default:break a}y=d+4|0;G=JK(y<<4)|0;z=b+16|0;F=+h[z>>3];x=D+48|0;F=(+h[b>>3]-F)*.5+F+(+h[k>>3]-+h[x>>3])*.25;h[G>>3]=F;A=b+40|0;J=+h[A>>3];d=b+24|0;J=(+h[d>>3]-J)*.5+J;h[G+8>>3]=J;h[G+16>>3]=F;v=D+56|0;w=D+72|0;H=(+h[v>>3]-+h[w>>3])*.5+J;h[G+24>>3]=H;F=(+h[k>>3]-+h[x>>3])*.5+F;h[G+32>>3]=F;h[G+40>>3]=H;h[G+48>>3]=F;F=(+h[v>>3]-+h[w>>3])*.5+H;h[G+56>>3]=F;I=+h[z>>3];I=(+h[b>>3]-I)*.5+I+(+h[k>>3]-+h[x>>3])*-.75;h[G+64>>3]=I;h[G+72>>3]=F;h[G+80>>3]=I;h[G+88>>3]=H;I=+h[z>>3];I=(+h[b>>3]-I)*.5+I+(+h[k>>3]-+h[x>>3])*-.25;h[G+96>>3]=I;h[G+104>>3]=H;h[G+112>>3]=I;h[G+120>>3]=J;nS(a,G,y,f);h[B>>3]=+h[z>>3];J=+h[A>>3];h[B+8>>3]=(+h[d>>3]-J)*.5+J;h[B+16>>3]=+h[b>>3];h[B+24>>3]=(+h[b+8>>3]-+h[b+56>>3])*.5+J;qS(a,B,2);U1(G);break}else{switch(e|0){case 150994944:break;default:break a}y=d+2|0;G=JK(y<<4)|0;z=b+16|0;H=+h[z>>3];x=D+48|0;H=(+h[b>>3]-H)*.5+H+(+h[k>>3]-+h[x>>3])*.75;h[G>>3]=H;A=b+40|0;J=+h[A>>3];d=b+24|0;J=(+h[d>>3]-J)*.5+J;h[G+8>>3]=J;h[G+16>>3]=H;v=D+56|0;w=D+72|0;H=(+h[v>>3]-+h[w>>3])*.25+J;h[G+24>>3]=H;I=+h[z>>3];h[G+32>>3]=(+h[b>>3]-I)*.5+I+(+h[k>>3]-+h[x>>3])*.25;I=(+h[v>>3]-+h[w>>3])*.5+H;h[G+40>>3]=I;F=+h[z>>3];h[G+48>>3]=(+h[b>>3]-F)*.5+F+(+h[k>>3]-+h[x>>3])*-.25;h[G+56>>3]=I;I=+h[z>>3];I=(+h[b>>3]-I)*.5+I+(+h[k>>3]-+h[x>>3])*-.75;h[G+64>>3]=I;h[G+72>>3]=H;h[G+80>>3]=I;h[G+88>>3]=J;nS(a,G,y,f);h[B>>3]=+h[z>>3];J=+h[A>>3];h[B+8>>3]=(+h[d>>3]-J)*.5+J;h[B+16>>3]=+h[b>>3];h[B+24>>3]=(+h[b+8>>3]-+h[b+56>>3])*.5+J;qS(a,B,2);U1(G);break}else if((e|0)<184549376){switch(e|0){case 1342177280:break;default:break a}y=d+1|0;G=JK(y<<4)|0;z=b+16|0;H=+h[z>>3];v=D+48|0;H=+h[k>>3]+H+(+h[b>>3]-H)*.5-+h[v>>3];h[G>>3]=H;A=b+40|0;J=+h[A>>3];d=b+24|0;w=D+56|0;x=D+72|0;J=(+h[d>>3]-J)*.5+J+(+h[w>>3]-+h[x>>3])*.25;h[G+8>>3]=J;H=H-+h[k>>3]+ +h[v>>3];h[G+16>>3]=H;h[G+24>>3]=+h[w>>3]+J-+h[x>>3];h[G+32>>3]=H;H=(+h[w>>3]-+h[x>>3])*.5+J;h[G+40>>3]=H;I=+h[z>>3];I=(+h[b>>3]-I)*.25+I;h[G+48>>3]=I;h[G+56>>3]=H;h[G+64>>3]=I;h[G+72>>3]=J;nS(a,G,y,f);h[B>>3]=+h[z>>3];J=+h[A>>3];h[B+8>>3]=(+h[d>>3]-J)*.5+J;h[B+16>>3]=+h[b>>3];h[B+24>>3]=(+h[b+8>>3]-+h[b+56>>3])*.5+J;qS(a,B,2);U1(G);break}else{switch(e|0){case 184549376:break;default:break a}z=d+4|0;G=JK(z<<4)|0;y=b+16|0;H=+h[y>>3];I=+h[b>>3]-H;u=D+48|0;I=I*.125+H+(+h[k>>3]-+h[u>>3]+I)*.5;h[G>>3]=I;w=b+40|0;H=+h[w>>3];x=b+24|0;d=D+56|0;v=D+72|0;H=(+h[x>>3]-H)*.5+H+(+h[d>>3]-+h[v>>3])*.25;h[G+8>>3]=H;J=+h[y>>3];J=(+h[b>>3]-J)*.375+J;h[G+16>>3]=J;h[G+24>>3]=H;h[G+32>>3]=J;H=(+h[d>>3]-+h[v>>3])*.5+H;h[G+40>>3]=H;J=J-(+h[k>>3]-+h[u>>3])*.5;h[G+48>>3]=J;h[G+56>>3]=H;A=G+64|0;h[A>>3]=J;J=+h[w>>3];J=(+h[x>>3]-J)*.5+J+(+h[d>>3]-+h[v>>3])*-.25;h[G+72>>3]=J;H=I-(+h[k>>3]-+h[u>>3])*.5;h[G+80>>3]=H;h[G+88>>3]=J;h[G+96>>3]=H;J=J-(+h[d>>3]-+h[v>>3])*.5;h[G+104>>3]=J;v=G+112|0;h[v>>3]=I;h[G+120>>3]=J;nS(a,G,z,f);h[B>>3]=+h[y>>3];J=+h[w>>3];y=B+8|0;h[y>>3]=(+h[x>>3]-J)*.5+J;z=B+16|0;h[z>>3]=+h[A>>3];A=b+8|0;d=b+56|0;f=B+24|0;h[f>>3]=(+h[A>>3]-+h[d>>3])*.5+J;qS(a,B,2);h[B>>3]=+h[v>>3];J=+h[w>>3];h[y>>3]=(+h[x>>3]-J)*.5+J;h[z>>3]=+h[b>>3];h[f>>3]=(+h[A>>3]-+h[d>>3])*.5+J;qS(a,B,2);U1(G);break}}if((e|0)<33554432){if((e|0)<8){switch(e|0){case 4:break;default:break a}i=KK((d*96|0)+32|0)|0;e=0;g=0;while(1){j=g|1;k=i+(g<<4)|0;if((e|0)>=(d|0))break;b=e<<2;G=D+(b<<4)|0;c[k>>2]=c[G>>2];c[k+4>>2]=c[G+4>>2];c[k+8>>2]=c[G+8>>2];c[k+12>>2]=c[G+12>>2];G=i+(j<<4)|0;B=D+((b|1)<<4)|0;c[G>>2]=c[B>>2];c[G+4>>2]=c[B+4>>2];c[G+8>>2]=c[B+8>>2];c[G+12>>2]=c[B+12>>2];G=i+(g+2<<4)|0;c[G>>2]=c[B>>2];c[G+4>>2]=c[B+4>>2];c[G+8>>2]=c[B+8>>2];c[G+12>>2]=c[B+12>>2];G=i+(g+3<<4)|0;B=D+((b|2)<<4)|0;c[G>>2]=c[B>>2];c[G+4>>2]=c[B+4>>2];c[G+8>>2]=c[B+8>>2];c[G+12>>2]=c[B+12>>2];G=i+(g+4<<4)|0;c[G>>2]=c[B>>2];c[G+4>>2]=c[B+4>>2];c[G+8>>2]=c[B+8>>2];c[G+12>>2]=c[B+12>>2];G=i+(g+5<<4)|0;b=D+((b|3)<<4)|0;c[G>>2]=c[b>>2];c[G+4>>2]=c[b+4>>2];c[G+8>>2]=c[b+8>>2];c[G+12>>2]=c[b+12>>2];e=e+1|0;g=g+6|0}c[k>>2]=c[i>>2];c[k+4>>2]=c[i+4>>2];c[k+8>>2]=c[i+8>>2];c[k+12>>2]=c[i+12>>2];d=i+(j<<4)|0;G=i+16|0;c[d>>2]=c[G>>2];c[d+4>>2]=c[G+4>>2];c[d+8>>2]=c[G+8>>2];c[d+12>>2]=c[G+12>>2];pS(a,G,j,0,0,f&255);U1(i);break}if((e|0)<134217728){switch(e|0){case 8:break;default:break a}nS(a,b,d,f);g=B+16|0;e=0;while(1){if((e|0)>=(d|0))break a;G=e*3|0;f=D+(G+2<<4)|0;c[B>>2]=c[f>>2];c[B+4>>2]=c[f+4>>2];c[B+8>>2]=c[f+8>>2];c[B+12>>2]=c[f+12>>2];G=D+(G+4<<4)|0;c[g>>2]=c[G>>2];c[g+4>>2]=c[G+4>>2];c[g+8>>2]=c[G+8>>2];c[g+12>>2]=c[G+12>>2];qS(a,B,2);e=e+1|0}}switch(e|0){case 134217728:break;default:break a}g=d+1|0;i=JK(g<<4)|0;e=1;while(1){if((e|0)>=(d|0))break;G=i+(e<<4)|0;A=b+(e<<4)|0;c[G>>2]=c[A>>2];c[G+4>>2]=c[A+4>>2];c[G+8>>2]=c[A+8>>2];c[G+12>>2]=c[A+12>>2];e=e+1|0}b=d*3|0;A=D+(b+1<<4)|0;c[i>>2]=c[A>>2];c[i+4>>2]=c[A+4>>2];c[i+8>>2]=c[A+8>>2];c[i+12>>2]=c[A+12>>2];d=i+(d<<4)|0;G=D+(b+-1<<4)|0;c[d>>2]=c[G>>2];c[d+4>>2]=c[G+4>>2];c[d+8>>2]=c[G+8>>2];c[d+12>>2]=c[G+12>>2];nS(a,i,g,f);U1(i);c[B>>2]=c[G>>2];c[B+4>>2]=c[G+4>>2];c[B+8>>2]=c[G+8>>2];c[B+12>>2]=c[G+12>>2];G=B+16|0;c[G>>2]=c[A>>2];c[G+4>>2]=c[A+4>>2];c[G+8>>2]=c[A+8>>2];c[G+12>>2]=c[A+12>>2];f=B+32|0;h[f>>3]=+h[B>>3]+ +h[G>>3]-+h[D+(b<<4)>>3];h[B+40>>3]=+h[B+8>>3]+ +h[B+24>>3]-+h[D+(b<<4)+8>>3];qS(a,G,2);c[G>>2]=c[f>>2];c[G+4>>2]=c[f+4>>2];c[G+8>>2]=c[f+8>>2];c[G+12>>2]=c[f+12>>2];qS(a,B,2);break}else{if((e|0)<50331648){switch(e|0){case 33554432:break;default:break a}g=d+2|0;i=JK(g<<4)|0;c[i>>2]=c[b>>2];c[i+4>>2]=c[b+4>>2];c[i+8>>2]=c[b+8>>2];c[i+12>>2]=c[b+12>>2];j=i+16|0;c[j>>2]=c[k>>2];c[j+4>>2]=c[k+4>>2];c[j+8>>2]=c[k+8>>2];c[j+12>>2]=c[k+12>>2];j=D+48|0;d=D+64|0;h[i+32>>3]=(+h[j>>3]-+h[d>>3])*.3333333333333333+ +h[k>>3];G=D+56|0;e=D+72|0;h[i+40>>3]=(+h[G>>3]-+h[e>>3])*.3333333333333333+ +h[D+40>>3];J=+h[j>>3];h[i+48>>3]=(J-+h[d>>3])*.3333333333333333+J;J=+h[G>>3];h[i+56>>3]=(J-+h[e>>3])*.3333333333333333+J;e=4;while(1){if((e|0)>=(g|0))break;G=i+(e<<4)|0;d=b+(e+-2<<4)|0;c[G>>2]=c[d>>2];c[G+4>>2]=c[d+4>>2];c[G+8>>2]=c[d+8>>2];c[G+12>>2]=c[d+12>>2];e=e+1|0}nS(a,i,g,f);U1(i);c[B>>2]=c[j>>2];c[B+4>>2]=c[j+4>>2];c[B+8>>2]=c[j+8>>2];c[B+12>>2]=c[j+12>>2];G=B+16|0;c[G>>2]=c[k>>2];c[G+4>>2]=c[k+4>>2];c[G+8>>2]=c[k+8>>2];c[G+12>>2]=c[k+12>>2];qS(a,B,2);break}if((e|0)>=67108864){switch(e|0){case 67108864:break;default:break a}if((d|0)==4){G=JK(96)|0;c[G>>2]=c[b>>2];c[G+4>>2]=c[b+4>>2];c[G+8>>2]=c[b+8>>2];c[G+12>>2]=c[b+12>>2];d=G+16|0;c[d>>2]=c[k>>2];c[d+4>>2]=c[k+4>>2];c[d+8>>2]=c[k+8>>2];c[d+12>>2]=c[k+12>>2];d=G+32|0;A=D+64|0;c[d>>2]=c[A>>2];c[d+4>>2]=c[A+4>>2];c[d+8>>2]=c[A+8>>2];c[d+12>>2]=c[A+12>>2];d=G+48|0;b=b+32|0;c[d>>2]=c[b>>2];c[d+4>>2]=c[b+4>>2];c[d+8>>2]=c[b+8>>2];c[d+12>>2]=c[b+12>>2];b=G+64|0;d=D+128|0;c[b>>2]=c[d>>2];c[b+4>>2]=c[d+4>>2];c[b+8>>2]=c[d+8>>2];c[b+12>>2]=c[d+12>>2];b=G+80|0;z=D+160|0;c[b>>2]=c[z>>2];c[b+4>>2]=c[z+4>>2];c[b+8>>2]=c[z+8>>2];c[b+12>>2]=c[z+12>>2];nS(a,G,6,f);U1(G);h[B>>3]=+h[D+176>>3]+ +h[j>>3]-+h[D>>3];h[B+8>>3]=+h[D+184>>3]+ +h[D+24>>3]-+h[D+8>>3];G=B+16|0;c[G>>2]=c[A>>2];c[G+4>>2]=c[A+4>>2];c[G+8>>2]=c[A+8>>2];c[G+12>>2]=c[A+12>>2];qS(a,B,2);c[G>>2]=c[d>>2];c[G+4>>2]=c[d+4>>2];c[G+8>>2]=c[d+8>>2];c[G+12>>2]=c[d+12>>2];qS(a,B,2);c[G>>2]=c[D>>2];c[G+4>>2]=c[D+4>>2];c[G+8>>2]=c[D+8>>2];c[G+12>>2]=c[D+12>>2];qS(a,B,2);break}else qa(105438,105449,714,105458)}switch(e|0){case 50331648:break;default:break a}g=d+3|0;i=JK(g<<4)|0;c[i>>2]=c[b>>2];c[i+4>>2]=c[b+4>>2];c[i+8>>2]=c[b+8>>2];c[i+12>>2]=c[b+12>>2];J=+h[b>>3];h[i+16>>3]=J-(J-+h[j>>3])*.25;e=D+56|0;J=(+h[e>>3]-+h[D+72>>3])*.3333333333333333+ +h[b+8>>3];h[i+24>>3]=J;I=+h[b>>3];h[i+32>>3]=I-(I-+h[j>>3])*2.0;h[i+40>>3]=J;J=+h[b>>3];h[i+48>>3]=J-(J-+h[j>>3])*2.25;h[i+56>>3]=+h[e>>3];h[i+64>>3]=+h[D+48>>3];h[i+72>>3]=+h[e>>3];e=4;while(1){if((e|0)>=(g|0))break;G=i+(e<<4)|0;d=b+(e+-3<<4)|0;c[G>>2]=c[d>>2];c[G+4>>2]=c[d+4>>2];c[G+8>>2]=c[d+8>>2];c[G+12>>2]=c[d+12>>2];e=e+1|0}nS(a,i,g,f);U1(i);break}}else if((e|0)<318767104){if((e|0)<251658240){if((e|0)<218103808){switch(e|0){case 201326592:break;default:break a}G=d<<4;u=JK(G)|0;v=b+16|0;J=+h[v>>3];h[u>>3]=J;z=b+40|0;I=+h[z>>3];A=b+24|0;y=D+48|0;w=D+56|0;x=D+72|0;I=(+h[A>>3]-I)*.5+I+(+h[w>>3]-+h[x>>3])*.125;h[u+8>>3]=I;H=(+h[k>>3]-+h[y>>3])*2.0+J;h[u+16>>3]=H;h[u+24>>3]=I;h[u+32>>3]=H;I=(+h[w>>3]-+h[x>>3])*.5+I;h[u+40>>3]=I;h[u+48>>3]=J;h[u+56>>3]=I;nS(a,u,d,f);U1(u);G=JK(G)|0;I=+h[k>>3]+ +h[v>>3]-+h[y>>3];h[G>>3]=I;J=+h[z>>3];J=(+h[A>>3]-J)*.5+J+(+h[w>>3]-+h[x>>3])*-.625;h[G+8>>3]=J;H=+h[k>>3]-+h[y>>3]+I;y=G+16|0;h[y>>3]=H;h[G+24>>3]=J;h[G+32>>3]=H;J=(+h[w>>3]-+h[x>>3])*.5+J;h[G+40>>3]=J;h[G+48>>3]=I;h[G+56>>3]=J;nS(a,G,d,f);h[B>>3]=+h[y>>3];J=+h[z>>3];h[B+8>>3]=(+h[A>>3]-J)*.5+J;h[B+16>>3]=+h[b>>3];h[B+24>>3]=(+h[b+8>>3]-+h[b+56>>3])*.5+J;qS(a,B,2);U1(G);break}if((e|0)<234881024){switch(e|0){case 218103808:break;default:break a}G=d<<4;w=JK(G)|0;J=+h[b>>3];h[w>>3]=J;y=b+40|0;I=+h[y>>3];z=b+24|0;x=D+56|0;A=D+72|0;I=(+h[z>>3]-I)*.5+I+(+h[x>>3]-+h[A>>3])*.125;h[w+8>>3]=I;h[w+16>>3]=J;H=(+h[x>>3]-+h[A>>3])*.5+I;h[w+24>>3]=H;J=J-(+h[x>>3]-+h[A>>3])*2.0;h[w+32>>3]=J;h[w+40>>3]=H;h[w+48>>3]=J;h[w+56>>3]=I;nS(a,w,d,f);U1(w);G=JK(G)|0;I=+h[b>>3]-+h[k>>3]+ +h[D+48>>3];h[G>>3]=I;J=+h[y>>3];J=(+h[z>>3]-J)*.5+J+(+h[x>>3]-+h[A>>3])*-.625;h[G+8>>3]=J;h[G+16>>3]=I;H=(+h[x>>3]-+h[A>>3])*.5+J;h[G+24>>3]=H;I=I-(+h[x>>3]-+h[A>>3]);h[G+32>>3]=I;h[G+40>>3]=H;A=G+48|0;h[A>>3]=I;h[G+56>>3]=J;nS(a,G,d,f);h[B>>3]=+h[b+16>>3];J=+h[y>>3];h[B+8>>3]=(+h[z>>3]-J)*.5+J;h[B+16>>3]=+h[A>>3];h[B+24>>3]=(+h[b+8>>3]-+h[b+56>>3])*.5+J;qS(a,B,2);U1(G);break}else{switch(e|0){case 234881024:break;default:break a}G=d<<4;y=JK(G)|0;u=b+16|0;I=+h[u>>3];v=D+48|0;I=(+h[b>>3]-I)*.5+I+(+h[k>>3]-+h[v>>3])*-1.125;h[y>>3]=I;w=b+40|0;J=+h[w>>3];x=b+24|0;A=D+56|0;z=D+72|0;J=(+h[x>>3]-J)*.5+J+(+h[A>>3]-+h[z>>3])*.125;h[y+8>>3]=J;H=+h[k>>3]-+h[v>>3]+I;h[y+16>>3]=H;h[y+24>>3]=J;h[y+32>>3]=H;J=(+h[A>>3]-+h[z>>3])*.5+J;h[y+40>>3]=J;h[y+48>>3]=I;h[y+56>>3]=J;nS(a,y,d,f);U1(y);y=JK(G)|0;J=+h[u>>3];J=(+h[b>>3]-J)*.5+J+(+h[k>>3]-+h[v>>3])*-1.125;h[y>>3]=J;I=+h[w>>3];I=(+h[x>>3]-I)*.5+I+(+h[A>>3]-+h[z>>3])*-.625;h[y+8>>3]=I;H=+h[k>>3]-+h[v>>3]+J;h[y+16>>3]=H;h[y+24>>3]=I;h[y+32>>3]=H;I=(+h[A>>3]-+h[z>>3])*.5+I;h[y+40>>3]=I;h[y+48>>3]=J;h[y+56>>3]=I;nS(a,y,d,f);U1(y);y=JK(G)|0;I=+h[u>>3];I=(+h[b>>3]-I)*.5+I+(+h[k>>3]-+h[v>>3])*.125;h[y>>3]=I;J=+h[w>>3];J=(+h[x>>3]-J)*.5+J+(+h[A>>3]-+h[z>>3])*-.625;h[y+8>>3]=J;H=+h[k>>3]-+h[v>>3]+I;h[y+16>>3]=H;h[y+24>>3]=J;h[y+32>>3]=H;J=(+h[A>>3]-+h[z>>3])*.5+J;h[y+40>>3]=J;h[y+48>>3]=I;h[y+56>>3]=J;nS(a,y,d,f);U1(y);G=JK(G)|0;J=+h[u>>3];J=(+h[b>>3]-J)*.5+J+(+h[k>>3]-+h[v>>3])*.125;h[G>>3]=J;I=+h[w>>3];I=(+h[x>>3]-I)*.5+I+(+h[A>>3]-+h[z>>3])*.125;h[G+8>>3]=I;H=+h[k>>3]-+h[v>>3]+J;y=G+16|0;h[y>>3]=H;h[G+24>>3]=I;h[G+32>>3]=H;I=(+h[A>>3]-+h[z>>3])*.5+I;h[G+40>>3]=I;h[G+48>>3]=J;h[G+56>>3]=I;nS(a,G,d,f);h[B>>3]=+h[y>>3];I=+h[w>>3];y=B+8|0;h[y>>3]=(+h[x>>3]-I)*.5+I;z=B+16|0;h[z>>3]=+h[b>>3];A=b+8|0;d=b+56|0;f=B+24|0;h[f>>3]=(+h[A>>3]-+h[d>>3])*.5+I;qS(a,B,2);I=+h[u>>3];h[B>>3]=(+h[b>>3]-I)*.5+I+(+h[k>>3]-+h[v>>3])*-1.125;J=+h[w>>3];h[y>>3]=(+h[x>>3]-J)*.5+J;h[z>>3]=I;h[f>>3]=(+h[A>>3]-+h[d>>3])*.5+J;qS(a,B,2);U1(G);break}}if((e|0)<285212672)if((e|0)<268435456){switch(e|0){case 251658240:break;default:break a}G=d<<4;u=JK(G)|0;v=b+16|0;J=+h[v>>3];y=D+48|0;J=J-+h[k>>3]+(+h[b>>3]-J)*.5+ +h[y>>3];h[u>>3]=J;w=b+40|0;I=+h[w>>3];x=b+24|0;A=D+56|0;z=D+72|0;I=(+h[x>>3]-I)*.5+I+(+h[A>>3]-+h[z>>3])*.125;h[u+8>>3]=I;H=(+h[k>>3]-+h[y>>3])*2.0+J;h[u+16>>3]=H;h[u+24>>3]=I;h[u+32>>3]=H;I=(+h[A>>3]-+h[z>>3])*.5+I;h[u+40>>3]=I;h[u+48>>3]=J;h[u+56>>3]=I;nS(a,u,d,f);U1(u);G=JK(G)|0;I=+h[v>>3];I=I-+h[k>>3]+(+h[b>>3]-I)*.5+ +h[y>>3];h[G>>3]=I;J=+h[w>>3];J=(+h[x>>3]-J)*.5+J+(+h[A>>3]-+h[z>>3])*-.625;h[G+8>>3]=J;H=(+h[k>>3]-+h[y>>3])*2.0+I;y=G+16|0;h[y>>3]=H;h[G+24>>3]=J;h[G+32>>3]=H;J=(+h[A>>3]-+h[z>>3])*.5+J;h[G+40>>3]=J;h[G+48>>3]=I;h[G+56>>3]=J;nS(a,G,d,f);h[B>>3]=+h[y>>3];J=+h[w>>3];y=B+8|0;h[y>>3]=(+h[x>>3]-J)*.5+J;z=B+16|0;h[z>>3]=+h[b>>3];A=b+8|0;d=b+56|0;f=B+24|0;h[f>>3]=(+h[A>>3]-+h[d>>3])*.5+J;qS(a,B,2);h[B>>3]=+h[v>>3];J=+h[w>>3];h[y>>3]=(+h[x>>3]-J)*.5+J;h[z>>3]=+h[G>>3];h[f>>3]=(+h[A>>3]-+h[d>>3])*.5+J;qS(a,B,2);U1(G);break}else{switch(e|0){case 268435456:break;default:break a}G=JK(d<<4)|0;h[G>>3]=+h[b>>3];v=D+48|0;x=D+56|0;y=D+72|0;h[G+8>>3]=+h[D+24>>3]-(+h[x>>3]-+h[y>>3])*.5;h[G+16>>3]=+h[v>>3];J=+h[x>>3];h[G+24>>3]=J-(J-+h[y>>3])*.5;h[G+32>>3]=+h[b+32>>3];z=b+40|0;h[G+40>>3]=(+h[x>>3]-+h[y>>3])*.5+ +h[z>>3];h[G+48>>3]=+h[b>>3];h[G+56>>3]=(+h[x>>3]-+h[y>>3])*.5+ +h[z>>3];nS(a,G,d,f);w=b+16|0;J=(+h[k>>3]-+h[v>>3])*.25;I=J+ +h[w>>3];h[B>>3]=I;H=+h[z>>3];u=b+24|0;F=+h[x>>3]-+h[y>>3];H=(+h[u>>3]-H)*.5+H+F*.125;A=B+8|0;h[A>>3]=H;d=B+16|0;h[d>>3]=J+I;f=B+24|0;h[f>>3]=H-F*.25;qS(a,B,2);F=(+h[k>>3]-+h[v>>3])*.25;H=F+ +h[w>>3];h[B>>3]=H;I=+h[z>>3];J=+h[x>>3]-+h[y>>3];I=(+h[u>>3]-I)*.5+I+J*-.125;h[A>>3]=I;h[d>>3]=F+H;h[f>>3]=J*.25+I;qS(a,B,2);I=(+h[k>>3]-+h[v>>3])*.25;h[B>>3]=I+ +h[w>>3];J=(+h[x>>3]-+h[y>>3])*.75+ +h[z>>3];h[A>>3]=J;h[d>>3]=+h[b>>3]-I;h[f>>3]=J;qS(a,B,2);U1(G);break}else if((e|0)<301989888){switch(e|0){case 285212672:break;default:break a}y=JK(d<<4)|0;v=b+16|0;I=+h[v>>3];z=D+48|0;I=(+h[k>>3]-+h[z>>3]+(+h[b>>3]-I))*.5+I;h[y>>3]=I;w=b+40|0;F=+h[w>>3];x=b+24|0;F=(+h[k>>3]-+h[z>>3]+(+h[x>>3]-F))*.5+F;h[y+8>>3]=F;h[y+16>>3]=I;I=+h[w>>3];o=+h[k>>3]-+h[z>>3];I=(+h[x>>3]-I-o)*.5+I;h[y+24>>3]=I;J=+h[v>>3];J=(+h[b>>3]-J-o)*.5+J;h[y+32>>3]=J;h[y+40>>3]=I;h[y+48>>3]=J;h[y+56>>3]=F;nS(a,y,d,f);U1(y);F=+h[v>>3];F=(+h[b>>3]-F)*.5+F;J=+h[k>>3]-+h[z>>3];I=J*.75;o=F+I;h[B>>3]=o;H=+h[w>>3];H=(+h[x>>3]-H)*.5+H;I=H+I;y=B+8|0;h[y>>3]=I;A=B+16|0;h[A>>3]=o;J=J*-.75;H=H+J;G=B+24|0;h[G>>3]=H;J=F+J;h[B+32>>3]=J;h[B+40>>3]=H;h[B+48>>3]=J;h[B+56>>3]=I;d=B+64|0;c[d>>2]=c[B>>2];c[d+4>>2]=c[B+4>>2];c[d+8>>2]=c[B+8>>2];c[d+12>>2]=c[B+12>>2];qS(a,B,5);I=+h[v>>3];J=+h[b>>3];h[B>>3]=(J-I)*.5+I+(+h[k>>3]-+h[z>>3])*.75;I=+h[w>>3];h[y>>3]=(+h[x>>3]-I)*.5+I;h[A>>3]=J;d=b+8|0;f=b+56|0;h[G>>3]=(+h[d>>3]-+h[f>>3])*.5+I;qS(a,B,2);I=+h[v>>3];h[B>>3]=I;J=+h[w>>3];h[y>>3]=(+h[x>>3]-J)*.5+J;h[A>>3]=(+h[b>>3]-I)*.5+I+(+h[k>>3]-+h[z>>3])*-.75;h[G>>3]=(+h[d>>3]-+h[f>>3])*.5+J;qS(a,B,2);break}else{switch(e|0){case 301989888:break;default:break a}A=d+12|0;G=JK(A<<4)|0;x=b+16|0;m=+h[x>>3];s=D+48|0;m=(+h[b>>3]-m)*.5+m+(+h[k>>3]-+h[s>>3])*.25;h[G>>3]=m;y=b+40|0;F=+h[y>>3];z=b+24|0;v=D+56|0;w=D+72|0;F=(+h[v>>3]-+h[w>>3]+(+h[z>>3]-F))*.5+F;u=G+8|0;h[u>>3]=F;h[G+16>>3]=m;F=(+h[v>>3]-+h[w>>3])*.125+F;t=G+24|0;h[t>>3]=F;H=m-(+h[k>>3]-+h[s>>3])*.125;d=G+32|0;h[d>>3]=H;o=(+h[v>>3]-+h[w>>3])*.125+F;h[G+40>>3]=o;h[G+48>>3]=m;I=(+h[v>>3]-+h[w>>3])*.125+o;h[G+56>>3]=I;h[G+64>>3]=m;m=(+h[v>>3]-+h[w>>3])*.125+I;h[G+72>>3]=m;h[G+80>>3]=H;h[G+88>>3]=m;H=+h[x>>3];H=(+h[b>>3]-H)*.5+H;h[G+96>>3]=H;h[G+104>>3]=I;J=H-(+h[k>>3]-+h[s>>3])*.125;h[G+112>>3]=J;h[G+120>>3]=m;J=J-(+h[k>>3]-+h[s>>3])*.125;h[G+128>>3]=J;h[G+136>>3]=m;h[G+144>>3]=J;h[G+152>>3]=I;I=(+h[k>>3]-+h[s>>3])*.125+J;h[G+160>>3]=I;h[G+168>>3]=o;h[G+176>>3]=J;h[G+184>>3]=F;h[G+192>>3]=J;J=+h[u>>3];h[G+200>>3]=J;h[G+208>>3]=I;h[G+216>>3]=J;u=G+224|0;h[u>>3]=H;h[G+232>>3]=+h[t>>3];h[G+240>>3]=+h[d>>3];h[G+248>>3]=J;nS(a,G,A,f);J=+h[u>>3];h[B>>3]=J;H=+h[y>>3];H=(+h[z>>3]-H)*.5+H;A=B+8|0;h[A>>3]=H;d=B+16|0;h[d>>3]=J;f=B+24|0;h[f>>3]=(+h[v>>3]-+h[w>>3])*.125+H;qS(a,B,2);H=+h[u>>3];h[B>>3]=H;J=+h[y>>3];I=+h[v>>3]-+h[w>>3];J=(+h[z>>3]-J)*.5+J+I*.25;h[A>>3]=J;h[d>>3]=H;h[f>>3]=I*.125+J;qS(a,B,2);h[B>>3]=+h[x>>3];J=+h[y>>3];h[A>>3]=(+h[z>>3]-J)*.5+J;h[d>>3]=+h[b>>3];h[f>>3]=(+h[b+8>>3]-+h[b+56>>3])*.5+J;qS(a,B,2);U1(G);break}}else{if((e|0)<369098752){if((e|0)<335544320){switch(e|0){case 318767104:break;default:break a}A=d+4|0;G=JK(A<<4)|0;x=b+16|0;H=+h[x>>3];d=D+48|0;H=(+h[b>>3]-H)*.5+H+(+h[k>>3]-+h[d>>3])*.125;h[G>>3]=H;y=b+40|0;J=+h[y>>3];z=b+24|0;v=D+56|0;w=D+72|0;J=(+h[v>>3]-+h[w>>3]+(+h[z>>3]-J))*.5+J;h[G+8>>3]=J;o=(+h[k>>3]-+h[d>>3])*.125+H;h[G+16>>3]=o;I=(+h[v>>3]-+h[w>>3])*.125+J;h[G+24>>3]=I;h[G+32>>3]=o;o=(+h[v>>3]-+h[w>>3])*.25+I;h[G+40>>3]=o;h[G+48>>3]=H;F=(+h[v>>3]-+h[w>>3])*.125+o;h[G+56>>3]=F;H=H-(+h[k>>3]-+h[d>>3])*.25;h[G+64>>3]=H;h[G+72>>3]=F;F=H-(+h[k>>3]-+h[d>>3])*.125;h[G+80>>3]=F;h[G+88>>3]=o;h[G+96>>3]=F;h[G+104>>3]=I;h[G+112>>3]=H;h[G+120>>3]=J;nS(a,G,A,f);J=+h[x>>3];J=(+h[b>>3]-J)*.5+J;h[B>>3]=J;H=+h[y>>3];H=(+h[z>>3]-H)*.5+H;A=B+8|0;h[A>>3]=H;d=B+16|0;h[d>>3]=J;f=B+24|0;h[f>>3]=(+h[v>>3]-+h[w>>3])*.125+H;qS(a,B,2);H=+h[x>>3];H=(+h[b>>3]-H)*.5+H;h[B>>3]=H;J=+h[y>>3];I=+h[v>>3]-+h[w>>3];J=(+h[z>>3]-J)*.5+J+I*.25;h[A>>3]=J;h[d>>3]=H;h[f>>3]=I*.125+J;qS(a,B,2);h[B>>3]=+h[x>>3];J=+h[y>>3];h[A>>3]=(+h[z>>3]-J)*.5+J;h[d>>3]=+h[b>>3];h[f>>3]=(+h[b+8>>3]-+h[b+56>>3])*.5+J;qS(a,B,2);U1(G);break}if((e|0)<352321536){switch(e|0){case 335544320:break;default:break a}x=d+12|0;G=JK(x<<4)|0;y=b+16|0;m=+h[y>>3];u=D+48|0;m=(+h[b>>3]-m)*.5+m+(+h[k>>3]-+h[u>>3])*.25;h[G>>3]=m;z=b+40|0;F=+h[z>>3];A=b+24|0;s=D+56|0;t=D+72|0;F=(+h[s>>3]-+h[t>>3]+(+h[A>>3]-F))*.5+F;d=G+8|0;h[d>>3]=F;h[G+16>>3]=m;F=(+h[s>>3]-+h[t>>3])*.125+F;v=G+24|0;h[v>>3]=F;I=m-(+h[k>>3]-+h[u>>3])*.125;w=G+32|0;h[w>>3]=I;o=(+h[s>>3]-+h[t>>3])*.125+F;h[G+40>>3]=o;h[G+48>>3]=m;H=(+h[s>>3]-+h[t>>3])*.125+o;h[G+56>>3]=H;h[G+64>>3]=m;m=(+h[s>>3]-+h[t>>3])*.125+H;h[G+72>>3]=m;h[G+80>>3]=I;h[G+88>>3]=m;I=+h[y>>3];I=(+h[b>>3]-I)*.5+I;h[G+96>>3]=I;h[G+104>>3]=H;J=I-(+h[k>>3]-+h[u>>3])*.125;h[G+112>>3]=J;h[G+120>>3]=m;J=J-(+h[k>>3]-+h[u>>3])*.125;h[G+128>>3]=J;h[G+136>>3]=m;h[G+144>>3]=J;h[G+152>>3]=H;H=(+h[k>>3]-+h[u>>3])*.125+J;h[G+160>>3]=H;h[G+168>>3]=o;h[G+176>>3]=J;h[G+184>>3]=F;h[G+192>>3]=J;J=+h[d>>3];h[G+200>>3]=J;h[G+208>>3]=H;h[G+216>>3]=J;d=G+224|0;h[d>>3]=I;h[G+232>>3]=+h[v>>3];h[G+240>>3]=+h[w>>3];h[G+248>>3]=J;nS(a,G,x,f);c[B>>2]=c[d>>2];c[B+4>>2]=c[d+4>>2];c[B+8>>2]=c[d+8>>2];c[B+12>>2]=c[d+12>>2];d=B+16|0;h[d>>3]=+h[B>>3];J=+h[z>>3];f=B+24|0;h[f>>3]=(+h[A>>3]-J)*.5+J;qS(a,B,2);h[B>>3]=+h[y>>3];J=+h[z>>3];h[B+8>>3]=(+h[A>>3]-J)*.5+J;h[d>>3]=+h[b>>3];h[f>>3]=(+h[b+8>>3]-+h[b+56>>3])*.5+J;qS(a,B,2);U1(G);break}else{switch(e|0){case 352321536:break;default:break a}A=d+4|0;G=JK(A<<4)|0;x=b+16|0;I=+h[x>>3];w=D+48|0;I=(+h[b>>3]-I)*.5+I+(+h[k>>3]-+h[w>>3])*.125;h[G>>3]=I;y=b+40|0;J=+h[y>>3];z=b+24|0;u=D+56|0;v=D+72|0;J=(+h[u>>3]-+h[v>>3]+(+h[z>>3]-J))*.5+J;d=G+8|0;h[d>>3]=J;o=(+h[k>>3]-+h[w>>3])*.125+I;h[G+16>>3]=o;H=(+h[u>>3]-+h[v>>3])*.125+J;h[G+24>>3]=H;h[G+32>>3]=o;o=(+h[u>>3]-+h[v>>3])*.25+H;h[G+40>>3]=o;h[G+48>>3]=I;F=(+h[u>>3]-+h[v>>3])*.125+o;h[G+56>>3]=F;I=I-(+h[k>>3]-+h[w>>3])*.25;h[G+64>>3]=I;h[G+72>>3]=F;F=I-(+h[k>>3]-+h[w>>3])*.125;h[G+80>>3]=F;h[G+88>>3]=o;h[G+96>>3]=F;h[G+104>>3]=H;h[G+112>>3]=I;h[G+120>>3]=J;nS(a,G,A,f);J=+h[x>>3];J=(+h[b>>3]-J)*.5+J;h[B>>3]=J;A=B+8|0;h[A>>3]=+h[d>>3];d=B+16|0;h[d>>3]=J;J=+h[y>>3];f=B+24|0;h[f>>3]=(+h[z>>3]-J)*.5+J;qS(a,B,2);h[B>>3]=+h[x>>3];J=+h[y>>3];h[A>>3]=(+h[z>>3]-J)*.5+J;h[d>>3]=+h[b>>3];h[f>>3]=(+h[b+8>>3]-+h[b+56>>3])*.5+J;qS(a,B,2);U1(G);break}}if((e|0)<402653184)if((e|0)<385875968){switch(e|0){case 369098752:break;default:break a}d=d+5|0;G=JK(d<<4)|0;B=D+48|0;h[G>>3]=+h[j>>3]-(+h[k>>3]-+h[B>>3])*.5;y=D+56|0;A=D+72|0;h[G+8>>3]=+h[D+24>>3]-(+h[y>>3]-+h[A>>3])*.5;h[G+16>>3]=+h[B>>3];J=+h[y>>3];h[G+24>>3]=J-(J-+h[A>>3])*.5;h[G+32>>3]=+h[b+32>>3];z=b+40|0;h[G+40>>3]=+h[z>>3];J=+h[k>>3];h[G+48>>3]=(J-+h[B>>3])*.5+J;h[G+56>>3]=+h[z>>3];J=+h[k>>3];h[G+64>>3]=(J-+h[B>>3])*.5+J;h[G+72>>3]=(+h[y>>3]-+h[A>>3])*.5+ +h[z>>3];h[G+80>>3]=+h[j>>3]-(+h[k>>3]-+h[B>>3])*.5;h[G+88>>3]=(+h[y>>3]-+h[A>>3])*.5+ +h[z>>3];h[G+96>>3]=+h[j>>3]-(+h[k>>3]-+h[B>>3])*.5;z=b+56|0;h[G+104>>3]=+h[z>>3];A=b+8|0;J=+h[A>>3];h[G+120>>3]=J-(J-+h[z>>3])*.5;h[G+112>>3]=+h[b>>3];h[G+136>>3]=+h[A>>3];h[G+128>>3]=+h[j>>3]-(+h[k>>3]-+h[B>>3])*.5;nS(a,G,d,f);U1(G);break}else{switch(e|0){case 385875968:break;default:break a}d=d+3|0;G=JK(d<<4)|0;B=D+48|0;h[G>>3]=+h[j>>3]-(+h[k>>3]-+h[B>>3])*.5;y=D+56|0;A=D+72|0;h[G+8>>3]=+h[D+24>>3]-(+h[y>>3]-+h[A>>3])*.5;h[G+16>>3]=+h[B>>3];J=+h[y>>3];h[G+24>>3]=J-(J-+h[A>>3])*.5;h[G+32>>3]=+h[b+32>>3];z=b+40|0;h[G+40>>3]=(+h[y>>3]-+h[A>>3])*.5+ +h[z>>3];h[G+48>>3]=+h[j>>3]-(+h[k>>3]-+h[B>>3])*.5;h[G+56>>3]=(+h[y>>3]-+h[A>>3])*.5+ +h[z>>3];h[G+64>>3]=+h[j>>3]-(+h[k>>3]-+h[B>>3])*.5;z=b+56|0;h[G+72>>3]=+h[z>>3];A=b+8|0;J=+h[A>>3];h[G+88>>3]=J-(J-+h[z>>3])*.5;h[G+80>>3]=+h[b>>3];h[G+104>>3]=+h[A>>3];h[G+96>>3]=+h[j>>3]-(+h[k>>3]-+h[B>>3])*.5;nS(a,G,d,f);U1(G);break}else if((e|0)<419430400){switch(e|0){case 402653184:break;default:break a}d=d+3|0;G=JK(d<<4)|0;h[G>>3]=+h[b>>3];y=b+8|0;z=D+48|0;A=D+56|0;B=D+72|0;h[G+8>>3]=+h[y>>3]-(+h[A>>3]-+h[B>>3])*.5;J=+h[k>>3];h[G+16>>3]=(J-+h[z>>3])*.5+J;h[G+24>>3]=+h[y>>3]-(+h[A>>3]-+h[B>>3])*.5;J=+h[k>>3];h[G+32>>3]=(J-+h[z>>3])*.5+J;h[G+40>>3]=+h[D+40>>3];h[G+48>>3]=+h[b+16>>3];J=+h[b+24>>3];y=b+40|0;h[G+56>>3]=J-(J-+h[y>>3])*.5;J=+h[k>>3];h[G+64>>3]=(J-+h[z>>3])*.5+J;h[G+72>>3]=+h[y>>3];h[G+88>>3]=(+h[A>>3]-+h[B>>3])*.5+ +h[y>>3];J=+h[k>>3];h[G+80>>3]=(J-+h[z>>3])*.5+J;h[G+104>>3]=(+h[A>>3]-+h[B>>3])*.5+ +h[b+56>>3];h[G+96>>3]=+h[b>>3];nS(a,G,d,f);U1(G);break}else{switch(e|0){case 419430400:break;default:break a}d=d+5|0;G=JK(d<<4)|0;h[G>>3]=+h[b>>3];B=b+8|0;A=D+48|0;y=D+56|0;z=D+72|0;h[G+8>>3]=+h[B>>3]-(+h[y>>3]-+h[z>>3])*.5;J=+h[k>>3];h[G+16>>3]=(J-+h[A>>3])*.5+J;h[G+24>>3]=+h[B>>3]-(+h[y>>3]-+h[z>>3])*.5;J=+h[k>>3];h[G+32>>3]=(J-+h[A>>3])*.5+J;h[G+40>>3]=+h[D+40>>3];h[G+48>>3]=+h[b+16>>3];J=+h[b+24>>3];B=b+40|0;h[G+56>>3]=J-(J-+h[B>>3])*.5;J=+h[k>>3];h[G+64>>3]=(J-+h[A>>3])*.5+J;h[G+72>>3]=+h[B>>3];h[G+88>>3]=(+h[y>>3]-+h[z>>3])*.5+ +h[B>>3];J=+h[k>>3];h[G+80>>3]=(J-+h[A>>3])*.5+J;B=b+56|0;h[G+104>>3]=(+h[y>>3]-+h[z>>3])*.5+ +h[B>>3];h[G+96>>3]=+h[j>>3]-(+h[k>>3]-+h[A>>3])*.5;h[G+112>>3]=+h[j>>3]-(+h[k>>3]-+h[A>>3])*.5;h[G+120>>3]=+h[B>>3];h[G+128>>3]=+h[b+48>>3];h[G+136>>3]=+h[B>>3];nS(a,G,d,f);U1(G);break}}while(0);U1(D)}l=E;return}function UM(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0,k=0.0;f=l;l=l+112|0;g=f;k=+h[b+8>>3]*2.0;c[g>>2]=c[b>>2];c[g+4>>2]=c[b+4>>2];c[g+8>>2]=c[b+8>>2];c[g+12>>2]=c[b+12>>2];h[g+16>>3]=+h[b+16>>3];h[g+24>>3]=k-+h[b+24>>3];h[g+32>>3]=+h[b+32>>3];h[g+40>>3]=k-+h[b+40>>3];h[g+48>>3]=+h[b+48>>3];h[g+56>>3]=k-+h[b+56>>3];h[g+64>>3]=+h[b+64>>3];h[g+72>>3]=k-+h[b+72>>3];h[g+80>>3]=+h[b+80>>3];h[g+88>>3]=k-+h[b+88>>3];i=g+96|0;j=b+96|0;c[i>>2]=c[j>>2];c[i+4>>2]=c[j+4>>2];c[i+8>>2]=c[j+8>>2];c[i+12>>2]=c[j+12>>2];pS(a,b,d,0,0,e&255);pS(a,g,7,0,0,0);l=f;return}function VM(a,b,c,d){a=a|0;b=+b;c=c|0;d=d|0;var e=0.0,f=0.0;f=+h[c>>3];e=+h[c+8>>3];e=(+h[d+8>>3]-e)*b+e;h[a>>3]=(+h[d>>3]-f)*b+f;h[a+8>>3]=e;return}function WM(a){a=a|0;a=c[(c[a+16>>2]|0)+8>>2]|0;if(a){a=c[c[a+4>>2]>>2]|0;if((a|0)!=91)if((a|0)==94)a=2;else return ((a|0)==93?3:(a|0)==96?4:0)|0;else a=1}else a=0;return a|0}function XM(b){b=b|0;var d=0,e=0,f=0.0,g=0,i=0,j=0,k=0.0,m=0.0,n=0.0,o=0.0,p=0,q=0.0,r=0.0,s=0.0,t=0.0,u=0.0,v=0.0,w=0.0,x=0.0,y=0.0,z=0.0,A=0,D=0,G=0,H=0,I=0,J=0,L=0,M=0,N=0,P=0.0,Q=0.0,R=0,S=0,T=0.0,U=0.0,V=0.0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0.0;aa=l;l=l+144|0;J=aa+112|0;N=aa+104|0;G=aa+96|0;H=aa+88|0;i=aa+80|0;Y=aa+64|0;_=aa+48|0;R=aa+40|0;S=aa+32|0;j=aa+24|0;p=aa+16|0;D=aa+136|0;A=aa+128|0;L=aa;$=JK(48)|0;Z=b+16|0;W=c[(c[(c[Z>>2]|0)+8>>2]|0)+8>>2]|0;g=(W|0)==1616;X=c[W>>2]|0;d=c[W+4>>2]|0;e=c[W+8>>2]|0;m=+h[W+16>>3];n=+h[W+32>>3];o=+h[W+24>>3];X=X|(dP(QA(b,105511)|0)|0)&255;do if(!g){if(!X){W=c[Z>>2]|0;k=+h[W+32>>3]*72.0;f=+h[W+40>>3]*72.0;f=+(~~(f+(f>=0.0?.5:-.5))|0);k=+(~~(k+(k>=0.0?.5:-.5))|0);break}k=+fN(b);if(k>0.0)f=k;else{W=c[Z>>2]|0;f=+h[W+32>>3];k=+h[W+40>>3];k=(f=0.0?.5:-.5))|0);f=k}}else{f=0.0;k=0.0}while(0);W=ZO(b,c[47160]|0,d,0)|0;V=+_O(b,c[47162]|0,0.0,-360.0)+m;if(!e){U=+_O(b,c[47163]|0,0.0,-100.0);I=ZO(b,c[47159]|0,4,0)|0;T=+_O(b,c[47164]|0,0.0,-100.0)}else{I=e;U=n;T=o}d=c[(c[Z>>2]|0)+104>>2]|0;e=d+24|0;c[Y>>2]=c[e>>2];c[Y+4>>2]=c[e+4>>2];c[Y+8>>2]=c[e+8>>2];c[Y+12>>2]=c[e+12>>2];q=+h[Y>>3];if(q>0.0){if(!g)M=11}else if(!(g|!(+h[Y+8>>3]>0.0)))M=11;if((M|0)==11){d=QA(b,105496)|0;do if(d){h[p>>3]=0.0;h[j>>3]=0.0;c[i>>2]=j;c[i+4>>2]=p;d=b5(d,105503,i)|0;m=+h[j>>3];if(m<0.0){h[j>>3]=0.0;m=0.0}n=+h[p>>3];if(n<0.0){h[p>>3]=0.0;o=0.0}else o=n;if((d|0)<=0){n=q+16.0;h[Y>>3]=n;m=8.0;break}m=m*72.0;m=+(~~(m+(m>=0.0?.5:-.5))<<1|0);n=q+m;h[Y>>3]=n;if((d|0)!=1){m=o*72.0;m=+(~~(m+(m>=0.0?.5:-.5))<<1|0)}}else{n=q+16.0;h[Y>>3]=n;m=8.0}while(0);d=Y+8|0;h[d>>3]=+h[d>>3]+m;d=c[(c[Z>>2]|0)+104>>2]|0;q=n}s=+h[d+24>>3];m=+h[c[(c[(xC(b)|0)+16>>2]|0)+8>>2]>>3];if(m>0.0){P=m*72.0;P=+(~~(P+(P>=0.0?.5:-.5))|0);Q=+gN(q,P);h[Y>>3]=Q;p=Y+8|0;h[p>>3]=+gN(+h[p>>3],P)}else Q=q;d=c[(c[Z>>2]|0)+8>>2]|0;do if(!(a[d+12>>0]|0)){e=QA(b,109025)|0;if((e|0)!=0?(a[e>>0]|0)!=0:0){RF(A,xC(b)|0,e);d=c[A>>2]|0;g=c[A+4>>2]|0;if((g&d|0)==-1){d=KB(b)|0;c[G>>2]=e;c[G+4>>2]=d;gA(0,105587,G)|0;e=0;d=0;break}else{a[(c[(xC(b)|0)+16>>2]|0)+114>>0]=1;e=d+2|0;d=g+2|0;break}}else{e=0;d=0}}else{d=c[d>>2]|0;if((a[d>>0]|0)==99?(s2(d,105519)|0)==0:0){e=QA(b,105526)|0;RF(D,xC(b)|0,e);d=c[D>>2]|0;g=c[D+4>>2]|0;if((g&d|0)==-1){d=KB(b)|0;c[H>>2]=e|0?e:105536;c[H+4>>2]=d;gA(0,105542,H)|0;e=0;d=0;break}else{a[(c[(xC(b)|0)+16>>2]|0)+114>>0]=1;e=d+2|0;d=g+2|0;break}}else{e=0;d=0}}while(0);P=+(e|0);h[_>>3]=Q>P?Q:P;P=+h[Y+8>>3];r=+(d|0);d=_+8|0;h[d>>3]=P>r?P:r;e=(I|0)<3&(T!=0.0|U!=0.0)?120:I;g=QA(b,105628)|0;if(!g)i=99;else{i=a[g>>0]|0;i=i<<24>>24==116?116:i<<24>>24==98?98:99}g=c[Z>>2]|0;a[(c[g+104>>2]|0)+80>>0]=i;if((e|0)==4?(T==0.0?((~~(V+(V>=0.0?.5:-.5))|0)%90|0|0)==0:0)&U==0.0:0)p=1;else M=39;do if((M|0)==39){g=c[(c[(c[g+8>>2]|0)+8>>2]|0)+44>>2]|0;if(g|0){p=c[g>>2]|0;c[J>>2]=c[_>>2];c[J+4>>2]=c[_+4>>2];c[J+8>>2]=c[_+8>>2];c[J+12>>2]=c[_+12>>2];ub[p&63](L,J);c[_>>2]=c[L>>2];c[_+4>>2]=c[L+4>>2];c[_+8>>2]=c[L+8>>2];c[_+12>>2]=c[L+12>>2];p=0;break}m=+h[d>>3];n=m*1.4142135623730951;if(f>n&i<<24>>24==99){o=m/f;o=+C(+(1.0/(1.0-o*o)));o=+h[_>>3]*o;h[_>>3]=o}else{o=+h[_>>3]*1.4142135623730951;h[_>>3]=o;h[d>>3]=n;m=n}if((e|0)>2){z=+E(+(3.141592653589793/+(e|0)));h[_>>3]=o/z;h[d>>3]=m/z;p=0}else p=0}while(0);m=+h[d>>3];g=aP(b,c[47165]|0,137308)|0;if((a[g>>0]|0)==115?(s2(g,108230)|0)==0:0){h[_>>3]=k;h[d>>3]=f;N=$+40|0;c[N>>2]=c[N>>2]|2048}else{if(!((dP(g)|0)<<24>>24)){z=+h[_>>3];k=k>z?k:z;h[_>>3]=k;z=+h[d>>3];f=f>z?f:z}else{M=c[(c[Z>>2]|0)+104>>2]|0;if(!(!(k<+h[M+24>>3])?!(f<+h[M+32>>3]):0)){L=KB(b)|0;M=KB(xC(b)|0)|0;c[N>>2]=L;c[N+4>>2]=M;gA(0,105637,N)|0}h[_>>3]=k}h[d>>3]=f}if(!X){z=f;y=k}else{y=k>f?k:f;h[d>>3]=y;h[_>>3]=y;z=y}do if(!((dP(aP(b,c[47156]|0,137308)|0)|0)<<24>>24)){if(p){f=+h[(Q>+h[_>>3]?Y:_)>>3];break}f=+h[d>>3];if(P>3]*+C(+(1.0-P*P/(f*f)));f=Q>f?Q:f}else f=Q}else f=Q;while(0);g=c[(c[Z>>2]|0)+104>>2]|0;h[g+40>>3]=s-q+f;A=$+40|0;if(!(c[A>>2]&2048)){x=+h[d>>3]-m;h[g+48>>3]=(P1;g=j?W:1;a:do if((e|0)<3){g=JK(g<<5)|0;k=+h[_>>3]*.5;f=+h[d>>3]*.5;h[g>>3]=-k;h[g+8>>3]=-f;h[g+16>>3]=k;h[g+24>>3]=f;if(j){e=1;i=2;while(1){if((e|0)==(W|0))break;y=k+4.0;z=f+4.0;h[g+(i<<4)>>3]=-y;h[g+(i<<4)+8>>3]=-z;S=i|1;h[g+(S<<4)>>3]=y;h[g+(S<<4)+8>>3]=z;e=e+1|0;i=i+2|0;k=y;f=z}h[_>>3]=k*2.0;h[d>>3]=f*2.0;e=2}else e=2}else{g=JK(O(g<<4,e)|0)|0;i=c[(c[(c[(c[Z>>2]|0)+8>>2]|0)+8>>2]|0)+44>>2]|0;b:do if(!i){q=6.283185307179586/+(e|0);t=q*.5;r=+F(+t);s=+L2(+B(+U)+ +B(+T),1.0);t=T*1.4142135623730951/+E(+t);u=U*.5;N2((q+-3.141592653589793)*.5,R,S);v=V*.017453292519943295;k=0.0;f=0.0;m=0.0;i=0;n=+h[S>>3]*.5;o=+h[R>>3]*.5;while(1){if((i|0)>=(e|0))break b;m=m+q;N2(m,R,S);n=+h[S>>3]*r+n;o=+h[R>>3]*r+o;x=(o*t+s)*n+u*o;N2(+K(+o,+x)+v,R,S);x=+L2(x,o);w=+h[S>>3]*x*+h[_>>3];x=+h[R>>3]*x*+h[d>>3];ba=+B(+w);f=ba>f?ba:f;ba=+B(+x);k=ba>k?ba:k;h[g+(i<<4)>>3]=w;h[g+(i<<4)+8>>3]=x;if(p)break;else i=i+1|0}ba=-w;h[g+16>>3]=ba;h[g+24>>3]=x;h[g+32>>3]=ba;ba=-x;h[g+40>>3]=ba;h[g+48>>3]=w;h[g+56>>3]=ba}else{ub[c[i+4>>2]&63](g,_);k=+h[d>>3]*.5;f=+h[_>>3]*.5}while(0);f=f*2.0;k=k*2.0;y=y>f?y:f;h[_>>3]=y;ba=z>k?z:k;h[d>>3]=ba;f=y/f;k=ba/k;i=0;while(1){if((i|0)>=(e|0))break;N=g+(i<<4)|0;b=g+(i<<4)+8|0;ba=+h[b>>3]*k;h[N>>3]=+h[N>>3]*f;h[b>>3]=ba;i=i+1|0}if(j){j=e+-1|0;k=+h[g>>3];m=+h[g+8>>3];f=+K(+(m-+h[g+(j<<4)+8>>3]),+(k-+h[g+(j<<4)>>3]));j=0;c:while(1){if((j|0)>=(e|0))break;p=j+1|0;i=(p|0)%(e|0)|0;n=+h[g+(i<<4)>>3];o=+h[g+(i<<4)+8>>3];q=+K(+(o-m),+(n-k));z=(f+3.141592653589793-q)*.5;ba=4.0/+F(+z);N2(f-z,R,S);h[R>>3]=+h[R>>3]*ba;h[S>>3]=+h[S>>3]*ba;i=1;f=m;while(1){if((i|0)==(W|0)){f=q;j=p;k=n;m=o;continue c}z=+h[S>>3]+k;ba=+h[R>>3]+f;b=(O(i,e)|0)+j|0;h[g+(b<<4)>>3]=z;h[g+(b<<4)+8>>3]=ba;i=i+1|0;k=z;f=ba}}j=O(e,W+-1|0)|0;i=0;while(1){if((i|0)>=(e|0))break a;S=i+j|0;z=+h[g+(S<<4)+8>>3];y=+B(+(+h[g+(S<<4)>>3]))*2.0;ba=+h[_>>3];h[_>>3]=y>ba?y:ba;z=+B(+z)*2.0;ba=+h[d>>3];h[d>>3]=z>ba?z:ba;i=i+1|0}}}while(0);c[$>>2]=X;c[$+4>>2]=W;c[$+8>>2]=e;h[$+16>>3]=V;h[$+32>>3]=U;h[$+24>>3]=T;c[$+44>>2]=g;f=+h[_>>3];if(!(c[A>>2]&2048)){e=c[Z>>2]|0;h[e+32>>3]=f*.013888888888888888}else{e=c[Z>>2]|0;h[e+32>>3]=+h[(Q>f?Y:_)>>3]*.013888888888888888;d=(P>+h[d>>3]?Y:_)+8|0}h[e+40>>3]=+h[d>>3]*.013888888888888888;c[e+12>>2]=$;l=aa;return}function YM(a){a=a|0;var b=0,d=0,e=0,f=0,g=0.0,i=0.0,j=0,k=0,m=0,n=0,o=0;o=l;l=l+64|0;j=o+40|0;e=o+32|0;k=o+16|0;n=o;d=(c[(c[(xC(a)|0)+16>>2]|0)+116>>2]|0)>>>2&1^1;m=a+16|0;f=c[c[(c[m>>2]|0)+104>>2]>>2]|0;c[47282]=f;f=l2(f)|0;f=JK(((f|0)>1?f:1)+1|0)|0;b=_M(a,d,1,f)|0;if(!b){c[e>>2]=c[c[(c[m>>2]|0)+104>>2]>>2];gA(1,105472,e)|0;c[47282]=105493;b=_M(a,d,1,f)|0}U1(f);$M(j,a,b);d=c[m>>2]|0;i=+h[d+32>>3]*72.0;i=+(~~(i+(i>=0.0?.5:-.5))|0);h[n>>3]=i;g=+h[d+40>>3]*72.0;g=+(~~(g+(g>=0.0?.5:-.5))|0);d=n+8|0;h[d>>3]=g;if(!((dP(aP(a,c[47165]|0,137308)|0)|0)<<24>>24)){i=+h[(+h[b>>3]>i?b:n)>>3];h[n>>3]=i;e=b+8|0;g=+h[(+h[e>>3]>g?b:n)+8>>3];h[d>>3]=g;d=e;e=b}else{d=b+8|0;e=b}a=(dP(aP(a,c[47156]|0,137308)|0)|0)&255;c[j>>2]=c[n>>2];c[j+4>>2]=c[n+4>>2];c[j+8>>2]=c[n+8>>2];c[j+12>>2]=c[n+12>>2];aN(b,j,a);bN(k,i*-.5,g*.5);c[j>>2]=c[k>>2];c[j+4>>2]=c[k+4>>2];c[j+8>>2]=c[k+8>>2];c[j+12>>2]=c[k+12>>2];cN(b,j,15);n=c[m>>2]|0;h[n+32>>3]=+h[e>>3]*.013888888888888888;h[n+40>>3]=(+h[d>>3]+1.0)*.013888888888888888;c[n+12>>2]=b;l=o;return}function ZM(a){a=a|0;var b=0.0,d=0,e=0.0,f=0.0,g=0,i=0,j=0,k=0,l=0.0,m=0;j=JK(48)|0;k=a+16|0;g=c[(c[(c[(c[k>>2]|0)+8>>2]|0)+8>>2]|0)+4>>2]|0;f=+_O(a,c[47146]|0,1797693134862315708145274.0e284,0.0);b=+_O(a,c[47145]|0,1797693134862315708145274.0e284,0.0);f=f0.0?(f>.0003?f:.0003):f;i=c[k>>2]|0;h[i+40>>3]=f;h[i+32>>3]=f;b=f*72.0;g=ZO(a,c[47160]|0,g,0)|0;i=JK((g|0)<1?32:g<<5)|0;f=f*36.0;e=-f;h[i>>3]=e;h[i+8>>3]=e;h[i+16>>3]=f;h[i+24>>3]=f;if((g|0)>1){a=1;d=2;e=f;b=f;while(1){if((a|0)==(g|0))break;l=e+4.0;f=b+4.0;h[i+(d<<4)>>3]=-l;h[i+(d<<4)+8>>3]=-f;m=d|1;h[i+(m<<4)>>3]=l;h[i+(m<<4)+8>>3]=f;a=a+1|0;d=d+2|0;e=l;b=f}b=e*2.0}c[j>>2]=1;c[j+4>>2]=g;c[j+8>>2]=2;m=j+16|0;c[m>>2]=0;c[m+4>>2]=0;c[m+8>>2]=0;c[m+12>>2]=0;c[m+16>>2]=0;c[m+20>>2]=0;c[j+44>>2]=i;l=b*.013888888888888888;m=c[k>>2]|0;h[m+32>>3]=l;h[m+40>>3]=l;c[m+12>>2]=j;return}function _M(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0;g=JK(72)|0;n=c[(c[b+16>>2]|0)+104>>2]|0;m=0;i=1;j=c[47282]|0;a:while(1){k=a[j>>0]|0;switch(k<<24>>24){case 0:break a;case 92:{j=j+1|0;k=a[j>>0]|0;switch(k<<24>>24){case 124:case 125:case 123:case 92:{l=m;break}default:E=4}break}default:E=4}if((E|0)==4){E=0;switch(k<<24>>24){case 123:{l=m+1|0;break}case 125:{l=m+-1|0;break}default:{l=m;i=i+((m|0)==0&k<<24>>24==124&1)|0}}if((l|0)<0)break}m=l;j=j+1|0}B=g+56|0;c[B>>2]=JK(i<<2)|0;a[g+64>>0]=d;y=(d|0)==0&1;z=n+82|0;A=f+1|0;v=(e|0)!=0;w=n+16|0;x=n+4|0;u=n+8|0;k=0;m=0;d=0;t=0;l=0;e=0;n=f;i=0;j=0;b:while(1){p=k;k=0;c:while(1){d:while(1){s=e;e:while(1){r=k;o=i;f:while(1){q=m;g:while(1){while(1){if(t){E=78;break b}m=c[47282]|0;i=a[m>>0]|0;if((i+-1&255)>=31)break;c[47282]=m+1}switch(i<<24>>24|0){case 92:{E=53;break d}case 0:case 124:case 125:break e;case 60:break f;case 62:break g;case 123:break;default:{k=d;i=m;break d}}i=m+1|0;c[47282]=i;if(l|0){E=34;break b}if(!(a[i>>0]|0)){E=34;break b}e=_M(b,y,0,f)|0;c[(c[B>>2]|0)+(q<<2)>>2]=e;if(!e){E=36;break b}else{q=q+1|0;l=4}}if(a[z>>0]|0){k=d;i=m;break d}if(!(l&16)){E=27;break b}if(o>>>0>A>>>0?(C=o+-1|0,(C|0)!=(s|0)):0)i=(a[C>>0]|0)==32?C:o;else i=o;a[i>>0]=0;r=D4(f)|0;c[47282]=(c[47282]|0)+1;m=q;l=l&-17;o=i}if(l&6|0){E=22;break b}if(a[z>>0]|0){k=d;i=m;break d}c[47282]=m+1;m=q;l=l|18;k=r;s=f;i=f}if(!((l&16|0)==0&(v|i<<24>>24!=0))){E=38;break b}if(!(l&4)){k=JK(72)|0;c[(c[B>>2]|0)+(q<<2)>>2]=k;m=q+1|0}else{k=p;m=q}if(r|0)c[k+60>>2]=r;if(!(l&5)){a[f+j>>0]=32;l=l|1;j=j+1|0}i=f+j|0;if(l&1){if((j|0)>1?(D=i+-1|0,(D|0)!=(n|0)):0)i=(a[D>>0]|0)==32?D:i;a[i>>0]=0;n=D4(f)|0;c[k+52>>2]=zK(b,n,a[z>>0]|0?2:0,+h[w>>3],c[x>>2]|0,c[u>>2]|0)|0;a[k+64>>0]=1;n=f;j=0}i=c[47282]|0;switch(a[i>>0]|0){case 0:{t=1;e=s;i=o;continue b}case 125:{E=51;break b}default:{}}c[47282]=i+1;p=k;l=0;k=0;e=s;i=o}h:do if((E|0)==53){E=0;k=f+j|0;i=m+1|0;switch(a[i>>0]|0){case 0:{k=d;i=m;break h}case 62:case 60:case 124:case 125:case 123:{k=d;break}case 32:{if(!(a[z>>0]|0))k=1;else E=55;break}default:E=55}if((E|0)==55){E=0;a[k>>0]=92;k=d;l=l|9;j=j+1|0}c[47282]=i}while(0);d=f+j|0;if(l&4|0?(a[i>>0]|0)!=32:0){E=59;break b}if(!(l&24))l=(a[i>>0]|0)==32?l:l|9;if(!(l&8))if(!(l&16))e=s;else{m=a[i>>0]|0;d=(k|0)!=0;if(!(d|m<<24>>24!=32))if((o|0)!=(f|0))if((a[o+-1>>0]|0)==32)m=o;else E=73;else m=f;else E=73;if((E|0)==73){E=0;a[o>>0]=m;m=o+1|0;i=c[47282]|0}e=d?m+-1|0:s;o=m}else{m=a[i>>0]|0;e=(k|0)!=0;if(!((!(e|m<<24>>24!=32)?(a[d+-1>>0]|0)==32:0)?(a[z>>0]|0)==0:0)){a[d>>0]=m;j=j+1|0}if(e){e=s;n=f+j+-1|0}else e=s}i=i+1|0;c[47282]=i;while(1){if((a[i>>0]|0)>=0){m=q;d=k;k=r;i=o;continue c}s=i+1|0;c[47282]=s;a[f+j>>0]=a[i>>0]|0;j=j+1|0;i=s}}}if((E|0)==22){dN(g,r);g=0}else if((E|0)==27){dN(g,r);g=0}else if((E|0)==34){dN(g,r);g=0}else if((E|0)==36){dN(g,r);g=0}else if((E|0)==38){dN(g,r);g=0}else if((E|0)==51){c[47282]=i+1;c[g+48>>2]=m}else if((E|0)==59){dN(g,r);g=0}else if((E|0)==78)c[g+48>>2]=q;return g|0}function $M(b,d,e){b=b|0;d=d|0;e=e|0;var f=0.0,g=0.0,i=0.0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;u=l;l=l+64|0;k=u+48|0;m=u+40|0;n=u+32|0;t=u+16|0;s=u;j=c[e+52>>2]|0;a:do if(!j){n=t+8|0;o=e+48|0;p=e+56|0;q=e+64|0;r=s+8|0;c[t>>2]=0;c[t+4>>2]=0;c[t+8>>2]=0;c[t+12>>2]=0;j=0;while(1){if((j|0)>=(c[o>>2]|0))break a;$M(s,d,c[(c[p>>2]|0)+(j<<2)>>2]|0);if(!(a[q>>0]|0)){h[n>>3]=+h[n>>3]+ +h[r>>3];k=t;m=+h[t>>3]>+h[s>>3]?t:s}else{h[t>>3]=+h[t>>3]+ +h[s>>3];k=n;m=(+h[n>>3]>+h[r>>3]?t:s)+8|0}h[k>>3]=+h[m>>3];j=j+1|0}}else{g=+h[j+24>>3];f=+h[j+32>>3];if(g>0.0|f>0.0){j=QA(d,105496)|0;do if(j){c[k>>2]=m;c[k+4>>2]=n;j=b5(j,105503,k)|0;if((j|0)<=0){i=8.0;g=g+16.0;break}i=+h[m>>3]*72.0;i=+(~~(i+(i>=0.0?.5:-.5))<<1|0);g=g+i;if((j|0)!=1){i=+h[n>>3]*72.0;i=+(~~(i+(i>=0.0?.5:-.5))<<1|0)}}else{i=8.0;g=g+16.0}while(0);f=i+f}h[t>>3]=g;h[t+8>>3]=f}while(0);c[e>>2]=c[t>>2];c[e+4>>2]=c[t+4>>2];c[e+8>>2]=c[t+8>>2];c[e+12>>2]=c[t+12>>2];c[b>>2]=c[t>>2];c[b+4>>2]=c[t+4>>2];c[b+8>>2]=c[t+8>>2];c[b+12>>2]=c[t+12>>2];l=u;return}function aN(b,d,e){b=b|0;d=d|0;e=e|0;var f=0.0,g=0,i=0.0,j=0,k=0,m=0,n=0,o=0,p=0,q=0.0,r=0.0,s=0;s=l;l=l+32|0;o=s+16|0;p=s;q=+h[d>>3];i=q-+h[b>>3];r=+h[d+8>>3];f=r-+h[b+8>>3];c[b>>2]=c[d>>2];c[b+4>>2]=c[d+4>>2];c[b+8>>2]=c[d+8>>2];c[b+12>>2]=c[d+12>>2];d=c[b+52>>2]|0;if(!((e|0)!=0|(d|0)==0)){n=d+40|0;h[n>>3]=+h[n>>3]+i;n=d+48|0;h[n>>3]=+h[n>>3]+f}m=b+48|0;d=c[m>>2]|0;a:do if(d|0){n=b+64|0;f=((a[n>>0]|0)==0?f:i)/+(d|0);k=b+56|0;j=0;while(1){if((j|0)>=(d|0))break a;b=c[(c[k>>2]|0)+(j<<2)>>2]|0;g=j+1|0;d=~~(f*+(g|0))-~~(f*+(j|0))|0;if(!(a[n>>0]|0))bN(p,q,+h[b+8>>3]+ +(d|0));else bN(p,+h[b>>3]+ +(d|0),r);c[o>>2]=c[p>>2];c[o+4>>2]=c[p+4>>2];c[o+8>>2]=c[p+8>>2];c[o+12>>2]=c[p+12>>2];aN(b,o,e);j=g;d=c[m>>2]|0}}while(0);l=s;return}function bN(a,b,c){a=a|0;b=+b;c=+c;h[a>>3]=b;h[a+8>>3]=c;return}function cN(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0.0,s=0.0;q=l;l=l+48|0;j=q+32|0;n=q+16|0;m=q;a[b+65>>0]=e;k=b+16|0;s=+h[d>>3];p=d+8|0;r=+h[p>>3];bN(n,s,r-+h[b+8>>3]);c[k>>2]=c[n>>2];c[k+4>>2]=c[n+4>>2];c[k+8>>2]=c[n+8>>2];c[k+12>>2]=c[n+12>>2];k=b+32|0;bN(m,+h[b>>3]+s,r);c[k>>2]=c[m>>2];c[k+4>>2]=c[m+4>>2];c[k+8>>2]=c[m+8>>2];c[k+12>>2]=c[m+12>>2];k=c[b+48>>2]|0;m=k+-1|0;n=(e|0)==0;o=b+56|0;i=b+64|0;g=0;while(1){if((g|0)>=(k|0))break;do if(!n){b=(g|0)==0;f=(g|0)==(m|0);if(!(a[i>>0]|0))if(b){b=f?15:14;break}else{b=f?11:10;break}else if(b){b=f?15:13;break}else{b=f?7:5;break}}else b=0;while(0);f=c[(c[o>>2]|0)+(g<<2)>>2]|0;c[j>>2]=c[d>>2];c[j+4>>2]=c[d+4>>2];c[j+8>>2]=c[d+8>>2];c[j+12>>2]=c[d+12>>2];cN(f,j,b&e);if(!(a[i>>0]|0))h[p>>3]=+h[p>>3]-+h[(c[(c[o>>2]|0)+(g<<2)>>2]|0)+8>>3];else h[d>>3]=+h[c[(c[o>>2]|0)+(g<<2)>>2]>>3]+ +h[d>>3];g=g+1|0}l=q;return}function dN(a,b){a=a|0;b=b|0;eN(a);U1(b);return}function eN(a){a=a|0;var b=0,d=0,e=0;d=a+48|0;e=a+56|0;b=0;while(1){if((b|0)>=(c[d>>2]|0))break;eN(c[(c[e>>2]|0)+(b<<2)>>2]|0);b=b+1|0}U1(c[a+60>>2]|0);CK(c[a+52>>2]|0);U1(c[e>>2]|0);U1(a);return}function fN(a){a=a|0;var b=0.0,d=0.0;d=+_O(a,c[47146]|0,0.0,.01);b=+_O(a,c[47145]|0,0.0,.02);b=(d>b?d:b)*72.0;return +(+(~~(b+(b>=0.0?.5:-.5))|0))}function gN(a,b){a=+a;b=+b;var c=0;c=~~(a/b);return +(+((+(c|0)*b+1.0e-05>2]|0)+8>>2]|0;if(!a)a=0;else a=(c[c[a+4>>2]>>2]|0)==91&1;return a|0}function iN(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;f=c[47283]|0;a:do if(!f)d=0;else{g=c[47284]|0;e=0;while(1){if((e|0)>=(g|0)){d=0;break a}d=c[f+(e<<2)>>2]|0;h=c[d>>2]|0;if((a[h>>0]|0)==(a[b>>0]|0)?(s2(h,b)|0)==0:0)break a;e=e+1|0}}while(0);return d|0}function jN(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;if(mP(QA(d,105526)|0)|0)if((a[b>>0]|0)==101?(s2(b,105685)|0)==0:0){d=101;g=6}else{b=105519;g=4}else g=4;if((g|0)==4){d=a[b>>0]|0;if(d<<24>>24==99)if(!(s2(b,105519)|0))g=11;else{d=99;g=6}else g=6}a:do if((g|0)==6){e=20848;while(1){f=c[e>>2]|0;if(!f){g=11;break a}if((a[f>>0]|0)==d<<24>>24?(s2(f,b)|0)==0:0){b=e;break a}e=e+16|0}}while(0);if((g|0)==11)b=kN(b)|0;return b|0}function kN(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;h=l;l=l+16|0;g=h;d=iN(b)|0;if(!d){f=c[47284]|0;d=f+1|0;c[47284]=d;e=c[47283]|0;if(!e)d=KK(d<<2)|0;else d=MK(e,d<<2)|0;c[47283]=d;d=JK(16)|0;c[(c[47283]|0)+(f<<2)>>2]=d;c[d>>2]=c[5212];c[d+4>>2]=c[5213];c[d+8>>2]=c[5214];c[d+12>>2]=c[5215];e=D4(b)|0;c[d>>2]=e;do if(!0){if((a[b>>0]|0)==99?(s2(b,105519)|0)==0:0){e=1;break}c[g>>2]=c[5212];c[g+4>>2]=e;gA(0,105690,g)|0;e=0}else e=1;while(0);a[d+12>>0]=e}l=h;return d|0}function lN(a,b){a=a|0;b=b|0;var c=0.0,d=0.0;d=+h[b>>3]*.5257311121191336;c=+h[b+8>>3]*.8944271909999159;c=d>c?d:c;h[a>>3]=c*4.97979656976556;h[a+8>>3]=c*4.73606797749979;return}function mN(a,b){a=a|0;b=b|0;var c=0.0,d=0.0,e=0.0,f=0,g=0.0,i=0.0,j=0.0,k=0,l=0,m=0.0;d=+h[b>>3];k=b+8|0;e=+h[k>>3];c=e/d;if(!(c>.9510565162951536))if(c<.9510565162951536){j=d;e=d*.9510565162951536}else j=d;else j=e*1.0514622242382672;d=j*.5257311121191336;g=j*.20081141588622725;i=j*.05020285397155681;c=.3141592653589793;f=0;while(1){if((f|0)>=10)break;h[a+(f<<4)>>3]=+E(+c)*d;h[a+(f<<4)+8>>3]=+F(+c)*d-i;m=c+.6283185307179586;l=f|1;h[a+(l<<4)>>3]=+E(+m)*g;h[a+(l<<4)+8>>3]=+F(+m)*g-i;c=c+1.2566370614359172;f=f+2|0}h[b>>3]=j;h[k>>3]=e;return}function nN(a){a=a|0;a=c[(c[a+16>>2]|0)+12>>2]|0;if(a|0){U1(c[a+44>>2]|0);U1(a)}return}function oN(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;o=l;l=l+80|0;k=o+40|0;g=o;n=o+64|0;h=o+56|0;if(!(a[e>>0]|0)){g=4208;h=b+40|0;do{c[b>>2]=c[g>>2];b=b+4|0;g=g+4|0}while((b|0)<(h|0))}else{i=(f|0)==0?106356:f;c[n>>2]=15;j=d+16|0;f=c[j>>2]|0;do if(a[(c[f+104>>2]|0)+82>>0]|0){f=pU(d,e,n)|0;if(!f){f=c[j>>2]|0;m=8;break}if(CN(d,f,g,i,c[n>>2]|0,0)|0){c[k>>2]=KB(d)|0;c[k+4>>2]=e;c[k+8>>2]=i;gA(0,106358,k)|0}}else m=8;while(0);if((m|0)==8){if((c[(c[f+8>>2]|0)+8>>2]|0)==1664)h=0;else{c[h>>2]=d;c[h+4>>2]=0}if(CN(d,0,g,e,c[n>>2]|0,h)|0)DN(d,e)}c[g+36>>2]=0;h=b+40|0;do{c[b>>2]=c[g>>2];b=b+4|0;g=g+4|0}while((b|0)<(h|0))}l=o;return}function pN(a,b){a=a|0;b=b|0;var d=0.0,e=0.0,f=0,g=0,i=0,j=0.0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0.0,t=0;r=l;l=l+112|0;n=r+96|0;m=r+80|0;p=r+64|0;k=r+48|0;q=r+32|0;o=r;f=r+16|0;if(!a){c[47287]=0;a=0}else{g=c[a+4>>2]|0;a=c[a>>2]|0;i=(c[(c[(xC(a)|0)+16>>2]|0)+116>>2]&3)*90|0;c[n>>2]=c[b>>2];c[n+4>>2]=c[b+4>>2];c[n+8>>2]=c[b+8>>2];c[n+12>>2]=c[b+12>>2];mK(f,n,i);c[q>>2]=c[f>>2];c[q+4>>2]=c[f+4>>2];c[q+8>>2]=c[f+8>>2];c[q+12>>2]=c[f+12>>2];a:do if(g){d=+h[g+8>>3];e=+h[g+24>>3];s=+h[q>>3];if((+h[g>>3]<=s?s<=+h[g+16>>3]:0)?(j=+h[q+8>>3],d<=j):0)a=j<=e&1;else a=0}else{if((a|0)==(c[47287]|0)){f=c[47288]|0;g=c[47290]|0;i=c[47289]|0}else{g=c[(c[a+16>>2]|0)+12>>2]|0;c[47291]=g;i=c[g+44>>2]|0;c[47289]=i;f=c[g+8>>2]|0;c[47288]=f;g=O((c[g+4>>2]|0)+-1|0,f)|0;g=(g|0)>0?g:0;c[47290]=g;c[47287]=a}a=0;b=0;while(1){if((a|0)>=(f|0)){a=1;break a}t=i+(g+a<<4)|0;c[o>>2]=c[t>>2];c[o+4>>2]=c[t+4>>2];c[o+8>>2]=c[t+8>>2];c[o+12>>2]=c[t+12>>2];t=i+(g+((a+4|0)%(f|0)|0)<<4)|0;c[k>>2]=c[q>>2];c[k+4>>2]=c[q+4>>2];c[k+8>>2]=c[q+8>>2];c[k+12>>2]=c[q+12>>2];c[p>>2]=c[46614];c[p+4>>2]=c[46615];c[p+8>>2]=c[46616];c[p+12>>2]=c[46617];c[m>>2]=c[o>>2];c[m+4>>2]=c[o+4>>2];c[m+8>>2]=c[o+8>>2];c[m+12>>2]=c[o+12>>2];c[n>>2]=c[t>>2];c[n+4>>2]=c[t+4>>2];c[n+8>>2]=c[t+8>>2];c[n+12>>2]=c[t+12>>2];b=b+((BN(k,p,m,n)|0)==0&1)|0;if((b|0)==2){a=0;break}else a=a+2|0}}while(0)}l=r;return a|0}function qN(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;e=c[b+16>>2]|0;if((a[(c[e+104>>2]|0)+82>>0]|0)!=0?(a[e+145>>0]|0)!=0:0)b=sU(b,d,0,f,g)|0;else b=0;return b|0}function rN(e,f){e=e|0;f=f|0;var i=0,j=0,k=0.0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0.0,C=0.0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,P=0,Q=0,R=0;P=l;l=l+48|0;H=P+24|0;G=P+16|0;A=P+8|0;z=P;L=P+32|0;n=P+28|0;M=c[e+16>>2]|0;N=M+208|0;i=c[N>>2]|0;if((i|0)==0?(b[M+260>>1]&1)==0:0)J=0;else E=4;if((E|0)==4)if(!(c[e+152>>2]&4)){cS(e,i,c[M+228>>2]|0,c[M+244>>2]|0,c[M+212>>2]|0);J=1}else J=1;I=f+16|0;i=c[I>>2]|0;r=c[i+12>>2]|0;F=c[r+44>>2]|0;K=c[r+8>>2]|0;r=c[r+4>>2]|0;if((c[47285]|0)<(K|0)){i=K+5|0;c[47285]=i;j=c[47286]|0;if(!j)i=KK(i<<4)|0;else i=MK(j,i<<4)|0;c[47286]=i;i=c[I>>2]|0}D=(c[i+104>>2]|0)+56|0;i=i+16|0;c[D>>2]=c[i>>2];c[D+4>>2]=c[i+4>>2];c[D+8>>2]=c[i+8>>2];c[D+12>>2]=c[i+12>>2];D=c[I>>2]|0;B=+h[D+32>>3]*72.0;B=(+h[D+96>>3]+ +h[D+88>>3])/+(~~(B+(B>=0.0?.5:-.5))|0);C=+h[D+40>>3]*72.0;C=+h[D+80>>3]/+(~~(C+(C>=0.0?.5:-.5))|0);D=sN(e,f)|0;c[L>>2]=0;i=d[(c[I>>2]|0)+117>>0]|0;do if(!(i&1)){if(i&2|0){s=bP(f,0,106256)|0;hS(e,s);jS(e,bP(f,0,106264)|0);j=0;i=1;break}if(i&8|0){s=bP(f,0,106272)|0;hS(e,s);jS(e,bP(f,0,106280)|0);j=0;i=1;break}if(i&4|0){s=bP(f,0,106288)|0;hS(e,s);jS(e,bP(f,0,106296)|0);j=0;i=1;break}if(!(D&1))if(!(D&576)){j=0;i=0}else{j=tN(f)|0;i=1}else{j=tN(f)|0;if(!((JJ(j,L,n)|0)<<24>>24)){jS(e,j);i=1}else{jS(e,c[L>>2]|0);i=c[L+4>>2]|0;m=ZO(f,c[47173]|0,0,0)|0;k=+g[n>>2];if(!i)kS(e,137314,m,k);else kS(e,i,m,k);i=(D&2)>>>1|2}}s=uN(e,f)|0}else{s=bP(f,0,106240)|0;hS(e,s);jS(e,bP(f,0,106248)|0);j=0;i=1}while(0);m=c[(c[I>>2]|0)+8>>2]|0;if(a[m+12>>0]|0){m=c[m>>2]|0;if((a[m>>0]|0)==99){m=(s2(m,105519)|0)==0;E=33}else u=1}else{m=1;E=33}if((E|0)==33){m=m^1;if((r|0)!=0|i<<24>>24==0|m)u=m;else{hS(e,137379);r=1;u=0}}v=(K|0)<3;w=(D&512|0)!=0;y=(D&8|0)==0;x=(D&64|0)==0;p=(D&1024|0)==0;q=(D&2130706444|0)==0;t=0;while(1){if((t|0)>=(r|0))break;n=O(t,K)|0;o=c[47286]|0;m=0;while(1){if((m|0)>=(K|0))break;R=m+n|0;k=+h[F+(R<<4)+8>>3];Q=c[I>>2]|0;h[o+(m<<4)>>3]=+h[Q+16>>3]+ +h[F+(R<<4)>>3]*B;h[o+(m<<4)+8>>3]=+h[Q+24>>3]+k*C;m=m+1|0}do if(v){if(w&(t|0)==0?(R2(j,58)|0)!=0:0)if((fI(e,o,j)|0)>1){c[z>>2]=KB(f)|0;gA(3,106304,z)|0;i=0}else i=0;mS(e,c[47286]|0,K,i&255);if(!y)vN(e,f)}else{if(!x){if((t|0)==0?(jI(e,o,j,1)|0)>1:0){c[A>>2]=KB(f)|0;gA(3,106304,A)|0}nS(e,c[47286]|0,K,0);break}if(!p){hS(e,137379);nS(e,c[47286]|0,K,i&255);hS(e,s);qS(e,(c[47286]|0)+32|0,2);break}i=i&255;if(q){nS(e,o,K,i);break}else{TM(e,o,K,D,i);break}}while(0);t=t+1|0;i=0}m=c[(c[I>>2]|0)+8>>2]|0;if(!(a[m+12>>0]|0)){m=QA(f,109025)|0;if(m|0?a[m>>0]|0:0){o=m;E=65}}else{m=c[m>>2]|0;if((a[m>>0]|0)==99?(s2(m,105519)|0)==0:0){m=QA(f,105526)|0;if(m|0?a[m>>0]|0:0){o=m;E=65}}else{o=m;E=65}}if((E|0)==65){n=c[47286]|0;m=0;while(1){if((m|0)>=(K|0))break;k=+h[F+(m<<4)+8>>3];R=c[I>>2]|0;h[n+(m<<4)>>3]=+h[R+16>>3]+ +h[F+(m<<4)>>3]*B;h[n+(m<<4)+8>>3]=+h[R+24>>3]+k*C;m=m+1|0}m=i&255;do if(!(u|i<<24>>24==0)){if(v){if(w&(t|0)==0?(R2(j,58)|0)!=0:0)if((fI(e,n,j)|0)>1){c[G>>2]=KB(f)|0;gA(3,106304,G)|0;i=0}else i=0;mS(e,c[47286]|0,K,i&255);if(y)break;vN(e,f);break}if(x)if(!(D&12)){nS(e,n,K,m);break}else{TM(e,n,K,D,m);break}else{if((jI(e,n,j,1)|0)>1){c[H>>2]=KB(f)|0;gA(3,106304,H)|0}nS(e,c[47286]|0,K,0);break}}while(0);R=c[47286]|0;sS(e,o,R,K,i,aP(f,c[47166]|0,137308)|0)}U1(c[L>>2]|0);DK(e,10,c[(c[I>>2]|0)+104>>2]|0);if(J){if(c[e+152>>2]&4|0)cS(e,c[N>>2]|0,c[M+228>>2]|0,c[M+244>>2]|0,c[M+212>>2]|0);dS(e)}l=P;return}function sN(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=l;l=l+16|0;f=h;e=yN(d,f)|0;if(e|0)lS(b,e);e=c[47172]|0;if((e|0?(g=RA(d,e)|0,g|0):0)?a[g>>0]|0:0)uS(b,+_O(d,c[47172]|0,1.0,0.0));l=h;return c[f>>2]|0}function tN(a){a=a|0;return xN(a,134800)|0}function uN(b,d){b=b|0;d=d|0;d=bP(d,c[47148]|0,195059)|0;d=a[d>>0]|0?d:137314;hS(b,d);return d|0}function vN(a,b){a=a|0;b=b|0;var d=0,e=0,f=0.0,g=0,i=0.0,j=0,k=0,m=0;d=l;l=l+96|0;j=d+80|0;k=d+64|0;e=d+32|0;m=d+16|0;g=d;b=c[b+16>>2]|0;f=+h[b+80>>3];h[m+8>>3]=f*.375;i=+h[b+96>>3];h[m>>3]=i*.6614;b=b+16|0;c[k>>2]=c[m>>2];c[k+4>>2]=c[m+4>>2];c[k+8>>2]=c[m+8>>2];c[k+12>>2]=c[m+12>>2];c[j>>2]=c[b>>2];c[j+4>>2]=c[b+4>>2];c[j+8>>2]=c[b+8>>2];c[j+12>>2]=c[b+12>>2];wN(g,k,j);c[e>>2]=c[g>>2];c[e+4>>2]=c[g+4>>2];c[e+8>>2]=c[g+8>>2];c[e+12>>2]=c[g+12>>2];g=e+8|0;b=e+24|0;h[b>>3]=+h[g>>3];h[e+16>>3]=+h[e>>3]-i*1.3228;qS(a,e,2);f=+h[g>>3]-f*.75;h[g>>3]=f;h[b>>3]=f;qS(a,e,2);l=d;return}function wN(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0;d=+h[c+8>>3]+ +h[b+8>>3];h[a>>3]=+h[c>>3]+ +h[b>>3];h[a+8>>3]=d;return}function xN(b,d){b=b|0;d=d|0;var e=0;e=bP(b,c[47149]|0,195059)|0;if(!(a[e>>0]|0)){e=bP(b,c[47148]|0,195059)|0;return ((a[e>>0]|0)==0?d:e)|0}else return e|0;return 0}function yN(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;e=bP(b,c[47157]|0,195059)|0;a:do if(!(a[e>>0]|0)){g=0;e=0}else{g=PI(e)|0;h=g;e=0;b:while(1){f=c[h>>2]|0;if(!f)break a;switch(a[f>>0]|0){case 102:{if(!(s2(f,111101)|0)){h=h+4|0;e=e|1;continue b}break}case 114:{if(!(s2(f,106316)|0)){f=h;do{j=f;f=f+4|0;i=c[f>>2]|0;c[j>>2]=i}while((i|0)!=0);j=h;e=e|4;h=j;continue b}if(!(s2(f,106334)|0)){f=h;do{i=f;f=f+4|0;j=c[f>>2]|0;c[i>>2]=j}while((j|0)!=0);j=h;e=e|3;h=j;continue b}break}case 100:{if(!(s2(f,106324)|0)){f=h;do{i=f;f=f+4|0;j=c[f>>2]|0;c[i>>2]=j}while((j|0)!=0);j=h;e=e|8;h=j;continue b}break}case 105:{if(!(s2(f,134335)|0)){h=h+4|0;e=e|32;continue b}break}case 115:{if((s2(f,106341)|0)==0?zN(b)|0:0){f=h;do{i=f;f=f+4|0;j=c[f>>2]|0;c[i>>2]=j}while((j|0)!=0);j=h;e=e|64;h=j;continue b}break}case 119:{if((s2(f,106349)|0)==0?AN(b)|0:0){f=h;do{i=f;f=f+4|0;j=c[f>>2]|0;c[i>>2]=j}while((j|0)!=0);j=h;e=e|512;h=j;continue b}break}default:{}}h=h+4|0}}while(0);f=c[(c[(c[b+16>>2]|0)+8>>2]|0)+8>>2]|0;if(f)e=c[f+40>>2]|e;c[d>>2]=e;return g|0}function zN(a){a=a|0;var b=0.0;a=c[(c[(c[a+16>>2]|0)+8>>2]|0)+8>>2]|0;if((((a|0)!=0?(c[a+8>>2]|0)==4:0)?(b=+h[a+16>>3],((~~(b+(b>=0.0?.5:-.5))|0)%90|0|0)==0):0)?+h[a+24>>3]==0.0:0)a=+h[a+32>>3]==0.0&1;else a=0;return a|0}function AN(a){a=a|0;a=c[(c[(c[a+16>>2]|0)+8>>2]|0)+8>>2]|0;if(!a)a=0;else a=(c[a+8>>2]|0)<3&1;return a|0}function BN(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0.0,f=0.0,g=0.0,i=0.0;i=+h[c+8>>3];g=-(+h[d+8>>3]-i);f=+h[c>>3];e=+h[d>>3]-f;f=e*i+f*g;return (+h[a+8>>3]*e+ +h[a>>3]*g-f>=0.0^+h[b>>3]*g-f+ +h[b+8>>3]*e>=0.0^1)&1|0}function CN(b,d,e,f,g,i){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;i=i|0;var j=0.0,k=0.0,m=0,n=0,o=0,p=0,q=0.0,r=0.0,s=0.0,t=0.0,u=0.0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0;G=l;l=l+192|0;B=G+176|0;E=G+160|0;m=G+144|0;z=G+128|0;A=G+112|0;n=G+96|0;o=G+80|0;p=G+64|0;v=G+48|0;w=G+32|0;x=G+16|0;D=G;if(!d){c[E>>2]=0;c[E+4>>2]=0;c[E+8>>2]=0;c[E+12>>2]=0;m=(c[(c[(xC(b)|0)+16>>2]|0)+116>>2]&1|0)==0;C=c[b+16>>2]|0;q=+h[C+80>>3]*.5;j=+h[C+88>>3];t=m?q:j;q=m?j:q;m=0;C=E;j=0.0;k=-q;r=t;F=E+8|0;s=0.0;t=-t}else{k=+h[d>>3];t=+h[d+8>>3];q=+h[d+16>>3];r=+h[d+24>>3];bN(m,(q+k)*.5,(r+t)*.5);c[E>>2]=c[m>>2];c[E+4>>2]=c[m+4>>2];c[E+8>>2]=c[m+8>>2];c[E+12>>2]=c[m+12>>2];H=E+8|0;m=1;C=E;j=+h[E>>3];F=H;s=+h[H>>3]}u=(q>r?q:r)*4.0;a:do if((f|0)!=0?(y=a[f>>0]|0,y<<24>>24!=0):0){f=f+1|0;switch(y<<24>>24|0){case 99:{p=1;g=0;f=0;n=0;j=0.0;o=0;break a}case 101:{if(a[f>>0]|0){p=1;g=0;f=0;n=0;j=0.0;o=1;break a}if(!i)h[C>>3]=q;else{EN(z,i,s,u);c[E>>2]=c[z>>2];c[E+4>>2]=c[z+4>>2];c[E+8>>2]=c[z+8>>2];c[E+12>>2]=c[z+12>>2]}p=0;g=g&2;f=0;n=1;j=0.0;o=0;m=1;break a}case 115:{h[F>>3]=t;switch(a[f>>0]|0){case 0:{if(!i)h[C>>3]=j;else{EN(A,i,-u,j);c[E>>2]=c[A>>2];c[E+4>>2]=c[A+4>>2];c[E+8>>2]=c[A+8>>2];c[E+12>>2]=c[A+12>>2]}p=0;g=g&1;f=0;n=1;j=-1.5707963267948966;o=0;m=1;break a}case 101:{if(!i)h[C>>3]=q;else{EN(n,i,-u,u);c[E>>2]=c[n>>2];c[E+4>>2]=c[n+4>>2];c[E+8>>2]=c[n+8>>2];c[E+12>>2]=c[n+12>>2]}p=0;g=g&3;f=0;n=1;j=-.7853981633974483;o=0;m=1;break a}case 119:{if(!i)h[C>>3]=k;else{u=-u;EN(o,i,u,u);c[E>>2]=c[o>>2];c[E+4>>2]=c[o+4>>2];c[E+8>>2]=c[o+8>>2];c[E+12>>2]=c[o+12>>2]}p=0;g=g&9;f=0;n=1;j=-2.356194490192345;o=0;m=1;break a}default:{h[F>>3]=s;p=1;g=0;f=0;n=0;j=0.0;o=1;break a}}}case 119:{if(a[f>>0]|0){p=1;g=0;f=0;n=0;j=0.0;o=1;break a}if(!i)h[C>>3]=k;else{EN(p,i,s,-u);c[E>>2]=c[p>>2];c[E+4>>2]=c[p+4>>2];c[E+8>>2]=c[p+8>>2];c[E+12>>2]=c[p+12>>2]}p=0;g=g&8;f=0;n=1;j=3.141592653589793;o=0;m=1;break a}case 110:{h[F>>3]=r;switch(a[f>>0]|0){case 0:{if(!i)h[C>>3]=j;else{EN(v,i,u,j);c[E>>2]=c[v>>2];c[E+4>>2]=c[v+4>>2];c[E+8>>2]=c[v+8>>2];c[E+12>>2]=c[v+12>>2]}p=0;g=g&4;f=0;n=1;j=1.5707963267948966;o=0;m=1;break a}case 101:{if(!i)h[C>>3]=q;else{EN(w,i,u,u);c[E>>2]=c[w>>2];c[E+4>>2]=c[w+4>>2];c[E+8>>2]=c[w+8>>2];c[E+12>>2]=c[w+12>>2]}p=0;g=g&6;f=0;n=1;j=.7853981633974483;o=0;m=1;break a}case 119:{if(!i)h[C>>3]=k;else{EN(x,i,u,-u);c[E>>2]=c[x>>2];c[E+4>>2]=c[x+4>>2];c[E+8>>2]=c[x+8>>2];c[E+12>>2]=c[x+12>>2]}p=0;g=g&12;f=0;n=1;j=2.356194490192345;o=0;m=1;break a}default:{h[F>>3]=s;p=1;g=0;f=0;n=0;j=0.0;o=1;break a}}}case 95:{p=1;f=1;n=0;j=0.0;o=0;break a}default:{p=1;g=0;f=0;n=0;j=0.0;o=1;break a}}}else{p=1;g=0;f=0;n=0;j=0.0;o=0}while(0);H=(c[(c[(xC(b)|0)+16>>2]|0)+116>>2]&3)*90|0;c[B>>2]=c[E>>2];c[B+4>>2]=c[E+4>>2];c[B+8>>2]=c[E+8>>2];c[B+12>>2]=c[E+12>>2];lK(D,B,H);c[E>>2]=c[D>>2];c[E+4>>2]=c[D+4>>2];c[E+8>>2]=c[D+8>>2];c[E+12>>2]=c[D+12>>2];if(!(f<<24>>24))g=FN(g,c[(c[(xC(b)|0)+16>>2]|0)+116>>2]&3)|0;a[e+33>>0]=g;c[e+24>>2]=d;k=+h[C>>3];h[e>>3]=+(~~(k+(k>=0.0?.5:-.5))|0);k=+h[F>>3];h[e+8>>3]=+(~~(k+(k>=0.0?.5:-.5))|0);h[e+16>>3]=+GN(j,c[(c[(xC(b)|0)+16>>2]|0)+116>>2]&3);k=+h[C>>3];j=+h[F>>3];if(k==0.0&j==0.0)g=-128;else{u=+K(+j,+k);t=u+4.71238898038469;g=~~((!(t>=6.283185307179586)?t:u+-1.5707963267948966)*40.74366543152521)&255}a[e+32>>0]=g;a[e+29>>0]=n;a[e+28>>0]=m;a[e+30>>0]=p;a[e+31>>0]=f;l=G;return o|0}function DN(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=KB(a)|0;c[e+4>>2]=b;gA(0,106419,e)|0;l=d;return}function EN(a,b,d,e){a=a|0;b=b|0;d=+d;e=+e;var f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;p=l;l=l+128|0;g=p+112|0;j=p+48|0;k=p+16|0;m=p+32|0;n=p;o=c[b>>2]|0;i=c[(c[(xC(o)|0)+16>>2]|0)+116>>2]&3;h[k>>3]=e;h[k+8>>3]=d;f=(i|0)!=0;if(f){c[g>>2]=c[k>>2];c[g+4>>2]=c[k+4>>2];c[g+8>>2]=c[k+8>>2];c[g+12>>2]=c[k+12>>2];lK(m,g,i*90|0);c[k>>2]=c[m>>2];c[k+4>>2]=c[m+4>>2];c[k+8>>2]=c[m+8>>2];c[k+12>>2]=c[m+12>>2]}m=j+48|0;q=j+32|0;c[j>>2]=0;c[j+4>>2]=0;c[j+8>>2]=0;c[j+12>>2]=0;c[j+16>>2]=0;c[j+20>>2]=0;c[j+24>>2]=0;c[j+28>>2]=0;c[q>>2]=c[k>>2];c[q+4>>2]=c[k+4>>2];c[q+8>>2]=c[k+8>>2];c[q+12>>2]=c[k+12>>2];c[m>>2]=c[k>>2];c[m+4>>2]=c[k+4>>2];c[m+8>>2]=c[k+8>>2];c[m+12>>2]=c[k+12>>2];$N(b,c[(c[(c[(c[o+16>>2]|0)+8>>2]|0)+4>>2]|0)+12>>2]|0,j,1);if(f){c[g>>2]=c[j>>2];c[g+4>>2]=c[j+4>>2];c[g+8>>2]=c[j+8>>2];c[g+12>>2]=c[j+12>>2];mK(n,g,i*90|0);c[j>>2]=c[n>>2];c[j+4>>2]=c[n+4>>2];c[j+8>>2]=c[n+8>>2];c[j+12>>2]=c[n+12>>2]};c[a>>2]=c[j>>2];c[a+4>>2]=c[j+4>>2];c[a+8>>2]=c[j+8>>2];c[a+12>>2]=c[j+12>>2];l=p;return}function FN(a,b){a=a|0;b=b|0;a:do switch(b|0){case 3:switch(a|0){case 4:{a=2;break a}case 1:{a=8;break a}case 8:{a=1;break a}case 2:{a=4;break a}default:break a}case 2:switch(a|0){case 4:{a=1;break a}case 1:{a=4;break a}default:break a}case 1:switch(a|0){case 4:{a=2;break a}case 1:{a=8;break a}case 8:{a=4;break a}case 2:{a=1;break a}default:break a}default:{}}while(0);return a|0}function GN(a,b){a=+a;b=b|0;switch(b|0){case 3:{if(!(a==3.141592653589793))if(!(a==2.356194490192345))if(!(a==1.5707963267948966))if(!(a==0.0))if(!(a==-.7853981633974483)){if(a==-1.5707963267948966)a=3.141592653589793}else a=2.356194490192345;else a=1.5707963267948966;else a=0.0;else a=-.7853981633974483;else a=-1.5707963267948966;break}case 2:{a=-a;break}case 1:{a=a+-1.5707963267948966;break}default:{}}return +a}function HN(a,b){a=a|0;b=b|0;var d=0.0,e=0,f=0.0,g=0.0,i=0,j=0,k=0;e=l;l=l+32|0;k=e+16|0;i=e;a=c[a>>2]|0;j=(c[(c[(xC(a)|0)+16>>2]|0)+116>>2]&3)*90|0;c[k>>2]=c[b>>2];c[k+4>>2]=c[b+4>>2];c[k+8>>2]=c[b+8>>2];c[k+12>>2]=c[b+12>>2];mK(i,k,j);d=+h[i>>3];g=+h[i+8>>3];a=c[a+16>>2]|0;f=+h[a+80>>3]*.5;if(!(!(g>=-f)|!(g<=f))?d>=-+h[a+88>>3]:0)a=d<=+h[a+96>>3]&1;else a=0;l=e;return a|0}function IN(a,d){a=a|0;d=d|0;var e=0,f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0.0;n=l;l=l+32|0;m=n;i=c[a+16>>2]|0;j=i+208|0;g=c[j>>2]|0;if(!g)k=(b[i+260>>1]&1)!=0;else k=1;e=d+16|0;d=c[e>>2]|0;f=c[d+12>>2]|0;if(f|0){if(k?(c[a+152>>2]&4|0)==0:0){cS(a,g,c[i+228>>2]|0,c[i+244>>2]|0,c[i+212>>2]|0);d=c[e>>2]|0}g=c[a+36>>2]|0;p=+h[d+24>>3]+ +(c[f+8>>2]|0);o=c[f>>2]|0;h[m>>3]=+h[d+16>>3]+ +(c[f+4>>2]|0);h[m+8>>3]=p;c[m+16>>2]=o;w4(g,106450,m)|0;g=c[e>>2]|0;m=(c[g+104>>2]|0)+56|0;g=g+16|0;c[m>>2]=c[g>>2];c[m+4>>2]=c[g+4>>2];c[m+8>>2]=c[g+8>>2];c[m+12>>2]=c[g+12>>2];DK(a,10,c[(c[e>>2]|0)+104>>2]|0);if(k){if(c[a+152>>2]&4|0)cS(a,c[j>>2]|0,c[i+228>>2]|0,c[i+244>>2]|0,c[i+212>>2]|0);dS(a)}}l=n;return}function JN(a){a=a|0;eN(c[(c[a+16>>2]|0)+12>>2]|0);return}function KN(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0;m=l;l=l+64|0;k=m+40|0;h=m;if(!(a[f>>0]|0)){h=4208;g=b+40|0;do{c[b>>2]=c[h>>2];b=b+4|0;h=h+4|0}while((b|0)<(g|0))}else{g=(g|0)==0?106356:g;i=c[(c[e+16>>2]|0)+12>>2]|0;j=QN(i,f)|0;if(!j){if(CN(e,i+16|0,h,f,15,0)|0)DN(e,f)}else if(CN(e,j+16|0,h,g,d[j+65>>0]|0,0)|0){c[k>>2]=KB(e)|0;c[k+4>>2]=f;c[k+8>>2]=g;gA(0,106358,k)|0}g=b+40|0;do{c[b>>2]=c[h>>2];b=b+4|0;h=h+4|0}while((b|0)<(g|0))}l=m;return}function LN(a,b){a=a|0;b=b|0;var d=0.0,e=0.0,f=0,g=0,i=0,j=0.0,k=0,m=0,n=0.0;k=l;l=l+32|0;m=k+16|0;i=k;f=c[a+4>>2]|0;a=c[a>>2]|0;g=(c[(c[(xC(a)|0)+16>>2]|0)+116>>2]&3)*90|0;c[m>>2]=c[b>>2];c[m+4>>2]=c[b+4>>2];c[m+8>>2]=c[b+8>>2];c[m+12>>2]=c[b+12>>2];mK(i,m,g);c[b>>2]=c[i>>2];c[b+4>>2]=c[i+4>>2];c[b+8>>2]=c[i+8>>2];c[b+12>>2]=c[i+12>>2];if(!f){f=c[(c[a+16>>2]|0)+12>>2]|0;g=f+16|0;a=f+24|0;i=f+32|0;f=f+40|0}else{g=f;a=f+8|0;i=f+16|0;f=f+24|0}e=+h[a>>3];d=+h[f>>3];n=+h[b>>3];if((+h[g>>3]<=n?n<=+h[i>>3]:0)?(j=+h[b+8>>3],e<=j):0)a=j<=d&1;else a=0;l=k;return a|0}function MN(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var i=0.0,j=0.0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0.0,t=0,u=0,v=0.0;u=l;l=l+80|0;r=u+64|0;q=u+32|0;t=u;a:do if(!(a[d+28>>0]|0))e=0;else{i=+h[d>>3];p=b+16|0;m=c[(c[p>>2]|0)+12>>2]|0;k=m+48|0;m=m+56|0;d=0;while(1){if((d|0)>=(c[k>>2]|0))break a;n=(c[(c[(xC(b)|0)+16>>2]|0)+116>>2]&1|0)==0;o=c[(c[m>>2]|0)+(d<<2)>>2]|0;j=+(~~+h[(n?o+16|0:o+24|0)>>3]|0);if(i>=j?(s=+(~~+h[(n?o+32|0:o+40|0)>>3]|0),i<=s):0)break;d=d+1|0}if(!(c[(c[(xC(b)|0)+16>>2]|0)+116>>2]&1)){t=c[p>>2]|0;v=+h[t+16>>3];h[f>>3]=v+j;j=+h[t+24>>3];i=+h[t+80>>3];h[f+8>>3]=j-i*.5;h[f+16>>3]=v+s}else{o=(c[(c[m>>2]|0)+(d<<2)>>2]|0)+16|0;b=(c[p>>2]|0)+16|0;c[q>>2]=c[o>>2];c[q+4>>2]=c[o+4>>2];c[q+8>>2]=c[o+8>>2];c[q+12>>2]=c[o+12>>2];c[q+16>>2]=c[o+16>>2];c[q+20>>2]=c[o+20>>2];c[q+24>>2]=c[o+24>>2];c[q+28>>2]=c[o+28>>2];c[r>>2]=c[b>>2];c[r+4>>2]=c[b+4>>2];c[r+8>>2]=c[b+8>>2];c[r+12>>2]=c[b+12>>2];nK(t,q,r);c[f>>2]=c[t>>2];c[f+4>>2]=c[t+4>>2];c[f+8>>2]=c[t+8>>2];c[f+12>>2]=c[t+12>>2];c[f+16>>2]=c[t+16>>2];c[f+20>>2]=c[t+20>>2];c[f+24>>2]=c[t+24>>2];c[f+28>>2]=c[t+28>>2];t=c[p>>2]|0;i=+h[t+80>>3];j=+h[t+24>>3]}h[f+24>>3]=i*.5+j;c[g>>2]=1}while(0);l=u;return e|0}function NN(d,e){d=d|0;e=e|0;var f=0,i=0,j=0,k=0.0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0.0;w=l;l=l+144|0;n=w+96|0;p=w+64|0;r=w;s=w+128|0;t=c[d+16>>2]|0;u=t+208|0;f=c[u>>2]|0;if(!f)v=(b[t+260>>1]&1)!=0;else v=1;m=e+16|0;q=c[m>>2]|0;o=c[q+12>>2]|0;j=o+16|0;c[p>>2]=c[j>>2];c[p+4>>2]=c[j+4>>2];c[p+8>>2]=c[j+8>>2];c[p+12>>2]=c[j+12>>2];c[p+16>>2]=c[j+16>>2];c[p+20>>2]=c[j+20>>2];c[p+24>>2]=c[j+24>>2];c[p+28>>2]=c[j+28>>2];x=+h[q+16>>3];h[p>>3]=+h[p>>3]+x;k=+h[q+24>>3];q=p+8|0;h[q>>3]=+h[q>>3]+k;q=p+16|0;h[q>>3]=+h[q>>3]+x;j=p+24|0;h[j>>3]=+h[j>>3]+k;if(v?(c[d+152>>2]&4|0)==0:0)cS(d,f,c[t+228>>2]|0,c[t+244>>2]|0,c[t+212>>2]|0);f=sN(d,e)|0;uN(d,e)|0;c[s>>2]=0;if(!(f&1))i=0;else{i=tN(e)|0;if(!((JJ(i,s,n)|0)<<24>>24)){jS(d,i);i=1}else{jS(d,c[s>>2]|0);i=c[s+4>>2]|0;j=ZO(e,c[47173]|0,0,0)|0;k=+g[n>>2];if(!i)kS(d,137314,j,k);else kS(d,i,j,k);i=f>>>1&1|2}}j=c[c[(c[m>>2]|0)+8>>2]>>2]|0;if((a[j>>0]|0)==77){m=(s2(j,106227)|0)==0;f=m?f|4:f}if(!(f&2130706444)){c[n>>2]=c[p>>2];c[n+4>>2]=c[p+4>>2];c[n+8>>2]=c[p+8>>2];c[n+12>>2]=c[p+12>>2];c[n+16>>2]=c[p+16>>2];c[n+20>>2]=c[p+20>>2];c[n+24>>2]=c[p+24>>2];c[n+28>>2]=c[p+28>>2];oS(d,n,i)}else{c[r>>2]=c[p>>2];c[r+4>>2]=c[p+4>>2];c[r+8>>2]=c[p+8>>2];c[r+12>>2]=c[p+12>>2];p=r+32|0;c[p>>2]=c[q>>2];c[p+4>>2]=c[q+4>>2];c[p+8>>2]=c[q+8>>2];c[p+12>>2]=c[q+12>>2];h[r+16>>3]=+h[p>>3];h[r+24>>3]=+h[r+8>>3];h[r+48>>3]=+h[r>>3];h[r+56>>3]=+h[r+40>>3];TM(d,r,4,f,i)}ON(d,e,o);U1(c[s>>2]|0);if(v){if(c[d+152>>2]&4|0)cS(d,c[u>>2]|0,c[t+228>>2]|0,c[t+244>>2]|0,c[t+212>>2]|0);dS(d)}l=w;return}function ON(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;u=l;l=l+144|0;p=u+128|0;o=u+112|0;q=u+16|0;r=u;g=u+96|0;i=u+80|0;s=u+64|0;t=u+48|0;j=e+52|0;f=c[j>>2]|0;if(!f)f=d+16|0;else{n=f+56|0;m=e+16|0;f=e+32|0;c[o>>2]=c[m>>2];c[o+4>>2]=c[m+4>>2];c[o+8>>2]=c[m+8>>2];c[o+12>>2]=c[m+12>>2];c[p>>2]=c[f>>2];c[p+4>>2]=c[f+4>>2];c[p+8>>2]=c[f+8>>2];c[p+12>>2]=c[f+12>>2];PN(g,o,p);f=d+16|0;m=(c[f>>2]|0)+16|0;c[o>>2]=c[g>>2];c[o+4>>2]=c[g+4>>2];c[o+8>>2]=c[g+8>>2];c[o+12>>2]=c[g+12>>2];c[p>>2]=c[m>>2];c[p+4>>2]=c[m+4>>2];c[p+8>>2]=c[m+8>>2];c[p+12>>2]=c[m+12>>2];wN(i,o,p);c[n>>2]=c[i>>2];c[n+4>>2]=c[i+4>>2];c[n+8>>2]=c[i+8>>2];c[n+12>>2]=c[i+12>>2];DK(b,10,c[j>>2]|0);uN(b,d)|0}k=(c[f>>2]|0)+16|0;c[r>>2]=c[k>>2];c[r+4>>2]=c[k+4>>2];c[r+8>>2]=c[k+8>>2];c[r+12>>2]=c[k+12>>2];k=e+48|0;m=e+64|0;n=q+16|0;j=e+56|0;e=q+16|0;i=0;while(1){if((i|0)>=(c[k>>2]|0))break;if((i|0)>0){f=(c[j>>2]|0)+(i<<2)|0;g=c[f>>2]|0;if(!(a[m>>0]|0)){g=g+32|0;c[n>>2]=c[g>>2];c[n+4>>2]=c[g+4>>2];c[n+8>>2]=c[g+8>>2];c[n+12>>2]=c[g+12>>2];h[q>>3]=+h[(c[f>>2]|0)+16>>3];f=n;g=0}else{g=g+16|0;c[q>>2]=c[g>>2];c[q+4>>2]=c[g+4>>2];c[q+8>>2]=c[g+8>>2];c[q+12>>2]=c[g+12>>2];h[e>>3]=+h[q>>3];f=(c[f>>2]|0)+32|0;g=1}h[q+(g<<4)+8>>3]=+h[f+8>>3];c[o>>2]=c[q>>2];c[o+4>>2]=c[q+4>>2];c[o+8>>2]=c[q+8>>2];c[o+12>>2]=c[q+12>>2];c[p>>2]=c[r>>2];c[p+4>>2]=c[r+4>>2];c[p+8>>2]=c[r+8>>2];c[p+12>>2]=c[r+12>>2];wN(s,o,p);c[q>>2]=c[s>>2];c[q+4>>2]=c[s+4>>2];c[q+8>>2]=c[s+8>>2];c[q+12>>2]=c[s+12>>2];c[o>>2]=c[n>>2];c[o+4>>2]=c[n+4>>2];c[o+8>>2]=c[n+8>>2];c[o+12>>2]=c[n+12>>2];c[p>>2]=c[r>>2];c[p+4>>2]=c[r+4>>2];c[p+8>>2]=c[r+8>>2];c[p+12>>2]=c[r+12>>2];wN(t,o,p);c[n>>2]=c[t>>2];c[n+4>>2]=c[t+4>>2];c[n+8>>2]=c[t+8>>2];c[n+12>>2]=c[t+12>>2];qS(b,q,2)}ON(b,d,c[(c[j>>2]|0)+(i<<2)>>2]|0);i=i+1|0}l=u;return}function PN(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0;d=(+h[c+8>>3]+ +h[b+8>>3])*.5;h[a>>3]=(+h[c>>3]+ +h[b>>3])*.5;h[a+8>>3]=d;return}function QN(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;e=c[b+60>>2]|0;if(!(((e|0)!=0?(a[e>>0]|0)==(a[d>>0]|0):0)?(s2(e,d)|0)==0:0))f=4;a:do if((f|0)==4){g=b+56|0;f=c[b+48>>2]|0;e=0;while(1){if((e|0)>=(f|0)){b=0;break a}b=QN(c[(c[g>>2]|0)+(e<<2)>>2]|0,d)|0;if(!b)e=e+1|0;else break}}while(0);return b|0}function RN(a,b){a=a|0;b=b|0;var d=0;d=b+8|0;h[d>>3]=+h[d>>3]*1.375;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];return}function SN(a,b){a=a|0;b=b|0;var d=0,e=0.0,f=0.0,g=0.0,i=0.0,j=0.0,k=0.0,l=0.0,m=0.0;k=+h[b>>3];f=k*.5;m=+h[b+8>>3];i=m*.5;h[a>>3]=f;e=m*.40909090909090906;h[a+8>>3]=e;h[a+16>>3]=f;g=m*.4592530909090909;h[a+24>>3]=g;j=k*.275892;h[a+32>>3]=j;h[a+40>>3]=i;h[a+48>>3]=0.0;h[a+56>>3]=i;k=k*-.275892;h[a+64>>3]=k;h[a+72>>3]=i;l=-f;h[a+80>>3]=l;h[a+88>>3]=g;d=a+96|0;h[d>>3]=l;h[a+104>>3]=e;b=a+112|0;c[b>>2]=c[d>>2];c[b+4>>2]=c[d+4>>2];c[b+8>>2]=c[d+8>>2];c[b+12>>2]=c[d+12>>2];b=a+128|0;h[b>>3]=l;h[a+136>>3]=m*-.40909090909090906;d=a+144|0;c[d>>2]=c[b>>2];c[d+4>>2]=c[b+4>>2];c[d+8>>2]=c[b+8>>2];c[d+12>>2]=c[b+12>>2];h[a+160>>3]=l;g=-g;h[a+168>>3]=g;h[a+176>>3]=k;i=-i;h[a+184>>3]=i;h[a+192>>3]=0.0;h[a+200>>3]=i;h[a+208>>3]=j;h[a+216>>3]=i;h[a+224>>3]=f;h[a+232>>3]=g;d=a+240|0;h[d>>3]=f;h[a+248>>3]=-e;b=a+256|0;c[b>>2]=c[d>>2];c[b+4>>2]=c[d+4>>2];c[b+8>>2]=c[d+8>>2];c[b+12>>2]=c[d+12>>2];b=a+288|0;d=a+272|0;c[d>>2]=c[a>>2];c[d+4>>2]=c[a+4>>2];c[d+8>>2]=c[a+8>>2];c[d+12>>2]=c[a+12>>2];c[b>>2]=c[a>>2];c[b+4>>2]=c[a+4>>2];c[b+8>>2]=c[a+8>>2];c[b+12>>2]=c[a+12>>2];return}function TN(a,b){a=a|0;b=b|0;var d=0.0,e=0.0,f=0.0,g=0,i=0.0,j=0,k=0,m=0,n=0,o=0,p=0.0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;x=l;l=l+144|0;u=x+112|0;t=x+96|0;v=x+80|0;s=x+64|0;w=x+32|0;q=x+16|0;r=x;g=x+48|0;do if(a){j=c[a+4>>2]|0;k=c[a>>2]|0;o=(c[(c[(xC(k)|0)+16>>2]|0)+116>>2]&3)*90|0;c[u>>2]=c[b>>2];c[u+4>>2]=c[b+4>>2];c[u+8>>2]=c[b+8>>2];c[u+12>>2]=c[b+12>>2];mK(g,u,o);c[w>>2]=c[g>>2];c[w+4>>2]=c[g+4>>2];c[w+8>>2]=c[g+8>>2];c[w+12>>2]=c[g+12>>2];if(j|0){d=+h[w>>3];if(!(+h[j>>3]<=d)){a=0;break}if(!(d<=+h[j+16>>3])){a=0;break}d=+h[w+8>>3];if(!(+h[j+8>>3]<=d)){a=0;break}a=d<=+h[j+24>>3];break}if((k|0)==(c[47292]|0)){d=+h[23309];e=+h[23310];i=+h[23311]}else{a=k+16|0;b=c[(c[a>>2]|0)+12>>2]|0;c[47293]=b;c[47294]=c[b+44>>2];c[47295]=c[b+8>>2];if(!(c[b+40>>2]&2048)){n=(c[(c[(xC(k)|0)+16>>2]|0)+116>>2]&1|0)==0;o=c[a>>2]|0;h[(n?186496:186504)>>3]=+h[o+96>>3]+ +h[o+88>>3];h[(n?186504:186496)>>3]=+h[o+80>>3];i=+h[o+32>>3]*72.0;f=+h[o+40>>3]*72.0;f=+(~~(f+(f>=0.0?.5:-.5))|0);i=+(~~(i+(i>=0.0?.5:-.5))|0)}else{yP(u,b);i=+h[u+16>>3]-+h[u>>3];f=+h[u+24>>3]-+h[u+8>>3];o=(c[(c[(xC(k)|0)+16>>2]|0)+116>>2]&1|0)==0;h[(o?186496:186504)>>3]=i;h[(o?186504:186496)>>3]=f}d=+h[23312];if(d==0.0){h[23312]=1.0;d=1.0}e=+h[23313];if(e==0.0){h[23313]=1.0;e=1.0}d=i/d;h[23309]=d;e=f/e;h[23310]=e;i=i*.5;h[23311]=i;h[23314]=f*.5;o=O((c[(c[47293]|0)+4>>2]|0)+-1|0,c[47295]|0)|0;c[47296]=(o|0)>0?o:0;c[47292]=k}f=+h[w>>3]*d;h[w>>3]=f;o=w+8|0;d=+h[o>>3]*e;h[o>>3]=d;if(!(+B(+f)>i)?(e=+B(+d),p=+h[23314],!(e>p)):0){o=c[47295]|0;if((o|0)<3){a=+L2(f/i,d/p)<1.0;break}b=(c[47297]|0)%(o|0)|0;a=(b+1|0)%(o|0)|0;k=c[47294]|0;m=c[47296]|0;n=k+(m+b<<4)|0;c[q>>2]=c[n>>2];c[q+4>>2]=c[n+4>>2];c[q+8>>2]=c[n+8>>2];c[q+12>>2]=c[n+12>>2];n=k+(m+a<<4)|0;c[r>>2]=c[n>>2];c[r+4>>2]=c[n+4>>2];c[r+8>>2]=c[n+8>>2];c[r+12>>2]=c[n+12>>2];c[s>>2]=c[w>>2];c[s+4>>2]=c[w+4>>2];c[s+8>>2]=c[w+8>>2];c[s+12>>2]=c[w+12>>2];c[v>>2]=c[46630];c[v+4>>2]=c[46631];c[v+8>>2]=c[46632];c[v+12>>2]=c[46633];c[t>>2]=c[q>>2];c[t+4>>2]=c[q+4>>2];c[t+8>>2]=c[q+8>>2];c[t+12>>2]=c[q+12>>2];c[u>>2]=c[n>>2];c[u+4>>2]=c[n+4>>2];c[u+8>>2]=c[n+8>>2];c[u+12>>2]=c[n+12>>2];if(BN(s,v,t,u)|0){c[s>>2]=c[w>>2];c[s+4>>2]=c[w+4>>2];c[s+8>>2]=c[w+8>>2];c[s+12>>2]=c[w+12>>2];c[v>>2]=c[q>>2];c[v+4>>2]=c[q+4>>2];c[v+8>>2]=c[q+8>>2];c[v+12>>2]=c[q+12>>2];c[t>>2]=c[r>>2];c[t+4>>2]=c[r+4>>2];c[t+8>>2]=c[r+8>>2];c[t+12>>2]=c[r+12>>2];c[u>>2]=c[46630];c[u+4>>2]=c[46631];c[u+8>>2]=c[46632];c[u+12>>2]=c[46633];n=(BN(s,v,t,u)|0)!=0;if(n?(c[s>>2]=c[w>>2],c[s+4>>2]=c[w+4>>2],c[s+8>>2]=c[w+8>>2],c[s+12>>2]=c[w+12>>2],c[v>>2]=c[r>>2],c[v+4>>2]=c[r+4>>2],c[v+8>>2]=c[r+8>>2],c[v+12>>2]=c[r+12>>2],c[t>>2]=c[46630],c[t+4>>2]=c[46631],c[t+8>>2]=c[46632],c[t+12>>2]=c[46633],c[u>>2]=c[q>>2],c[u+4>>2]=c[q+4>>2],c[u+8>>2]=c[q+8>>2],c[u+12>>2]=c[q+12>>2],(BN(s,v,t,u)|0)!=0):0){a=1;break}else{j=b;b=1}while(1){if((b|0)>=(o|0)){b=31;break}if(n){g=a;a=(a+1|0)%(o|0)|0}else{g=(j+-1+o|0)%(o|0)|0;a=j}q=k+(m+g<<4)|0;r=k+(m+a<<4)|0;c[s>>2]=c[w>>2];c[s+4>>2]=c[w+4>>2];c[s+8>>2]=c[w+8>>2];c[s+12>>2]=c[w+12>>2];c[v>>2]=c[46630];c[v+4>>2]=c[46631];c[v+8>>2]=c[46632];c[v+12>>2]=c[46633];c[t>>2]=c[q>>2];c[t+4>>2]=c[q+4>>2];c[t+8>>2]=c[q+8>>2];c[t+12>>2]=c[q+12>>2];c[u>>2]=c[r>>2];c[u+4>>2]=c[r+4>>2];c[u+8>>2]=c[r+8>>2];c[u+12>>2]=c[r+12>>2];if(!(BN(s,v,t,u)|0)){b=30;break}else{j=g;b=b+1|0}}if((b|0)==30){c[47297]=g;a=0;break}else if((b|0)==31){c[47297]=j;a=1;break}}else a=0}else a=0}else{c[47292]=0;a=0}while(0);l=x;return a&1|0}function UN(a,b){a=a|0;b=b|0;var d=0.0,e=0.0,f=0,g=0.0,i=0,j=0,k=0;j=l;l=l+32|0;f=j+16|0;i=j;if(a){a=c[a>>2]|0;k=(c[(c[(xC(a)|0)+16>>2]|0)+116>>2]&3)*90|0;c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];mK(i,f,k);g=+h[i>>3];e=+h[i+8>>3];if((a|0)==(c[47300]|0))d=+h[23317];else{i=c[(c[a+16>>2]|0)+12>>2]|0;k=(c[i+4>>2]<<1)+-2|0;d=+h[(c[i+44>>2]|0)+((((k|0)>0?k:0)|1)<<4)>>3];h[23317]=d;c[47300]=a}if(+B(+g)>d|+B(+e)>d)a=0;else a=+L2(g,e)<=d&1}else{c[47300]=0;a=0}l=j;return a|0}function VN(e,f){e=e|0;f=f|0;var g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0.0,v=0,w=0;t=l;l=l+16|0;j=t;r=c[e+16>>2]|0;s=r+208|0;g=c[s>>2]|0;if((g|0)==0?(b[r+260>>1]&1)==0:0)q=0;else if(!(c[e+152>>2]&4)){cS(e,g,c[r+228>>2]|0,c[r+244>>2]|0,c[r+212>>2]|0);q=1}else q=1;n=f+16|0;k=c[(c[n>>2]|0)+12>>2]|0;o=c[k+44>>2]|0;p=c[k+8>>2]|0;k=c[k+4>>2]|0;if((c[47298]|0)<(p|0)){g=p+2|0;c[47298]=g;i=c[47299]|0;if(!i)g=KK(g<<4)|0;else g=MK(i,g<<4)|0;c[47299]=g}yN(f,j)|0;if(!(c[j>>2]&32))lS(e,22020);else lS(e,22016);g=c[47172]|0;if(g|0)uS(e,+_O(f,g,1.0,0.0));g=d[(c[n>>2]|0)+117>>0]|0;do if(!(g&1)){if(g&2|0){hS(e,bP(f,0,106256)|0);g=bP(f,0,106264)|0;jS(e,g);break}if(g&8|0){hS(e,bP(f,0,106272)|0);g=bP(f,0,106280)|0;jS(e,g);break}if(!(g&4)){g=xN(f,137314)|0;jS(e,g);uN(e,f)|0;break}else{hS(e,bP(f,0,106288)|0);g=bP(f,0,106296)|0;jS(e,g);break}}else{hS(e,bP(f,0,106240)|0);g=bP(f,0,106248)|0;jS(e,g)}while(0);if(!k)if(!(a[g>>0]|0))i=1;else{hS(e,g);i=1}else i=k;j=1;f=0;while(1){if((f|0)>=(i|0))break;k=O(f,p)|0;m=c[47299]|0;g=0;while(1){if((g|0)>=(p|0))break;w=g+k|0;u=+h[o+(w<<4)+8>>3];v=c[n>>2]|0;h[m+(g<<4)>>3]=+h[v+16>>3]+ +h[o+(w<<4)>>3];h[m+(g<<4)+8>>3]=+h[v+24>>3]+u;g=g+1|0}mS(e,m,p,j);j=0;f=f+1|0}if(q){if(c[e+152>>2]&4|0)cS(e,c[s>>2]|0,c[r+228>>2]|0,c[r+244>>2]|0,c[r+212>>2]|0);dS(e)}l=t;return}function WN(a,b,e,f){a=a|0;b=b|0;e=e|0;f=f|0;var g=0,h=0;g=l;l=l+48|0;h=g;e=XN(b,e,f)|0;c[h+36>>2]=c[f+36>>2];CN(b,c[f+24>>2]|0,h,e,d[f+33>>0]|0,0)|0;b=h;e=a+40|0;do{c[a>>2]=c[b>>2];a=a+4|0;b=b+4|0}while((a|0)<(e|0));l=g;return}function XN(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0.0,j=0.0,k=0,m=0.0,n=0.0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0.0,B=0.0,C=0;z=l;l=l+32|0;y=z;g=z+24|0;k=z+16|0;x=c[(c[(c[(xC(b)|0)+60>>2]|0)+16>>2]|0)+116>>2]&3;f=b+16|0;w=(c[f>>2]|0)+16|0;c[y>>2]=c[w>>2];c[y+4>>2]=c[w+4>>2];c[y+8>>2]=c[w+8>>2];c[y+12>>2]=c[w+12>>2];YN(g,y,x);w=(c[d+16>>2]|0)+16|0;c[y>>2]=c[w>>2];c[y+4>>2]=c[w+4>>2];c[y+8>>2]=c[w+8>>2];c[y+12>>2]=c[w+12>>2];YN(k,y,x);x=a[e+33>>0]|0;y=x&255;a:do switch(x<<24>>24){case 0:case 15:{d=0;break}default:{d=c[e+24>>2]|0;if(!d){x=(c[(c[(xC(b)|0)+16>>2]|0)+116>>2]&1|0)==0;w=c[f>>2]|0;B=+h[w+80>>3]*.5;A=-B;m=+h[w+88>>3];j=-m;n=x?j:A;i=x?m:B;m=x?B:m;j=x?A:j}else{n=+h[d>>3];i=+h[d+16>>3];m=+h[d+24>>3];j=+h[d+8>>3]}x=c[g>>2]|0;v=c[g+4>>2]|0;w=c[k>>2]|0;s=c[k+4>>2]|0;t=~~j;u=~~((i+n)*.5);r=~~i;q=~~((m+j)*.5);p=~~m;o=~~n;g=0;k=0;d=0;e=0;b=0;while(1){if((k|0)==4)break a;if(1<>2]|0;else f=g}else f=g;g=f;k=k+1|0}}}while(0);l=z;return d|0}function YN(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0.0;switch(d|0){case 0:{f=+h[b>>3];e=+h[b+8>>3];break}case 2:{f=+h[b>>3];e=-+h[b+8>>3];break}case 1:{f=-+h[b+8>>3];e=+h[b>>3];break}case 3:{f=+h[b+8>>3];e=+h[b>>3];break}default:{f=0.0;e=0.0}}c[a>>2]=~~(f+(f>=0.0?.5:-.5));c[a+4>>2]=~~(e+(e>=0.0?.5:-.5));return}function ZN(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=l;l=l+80|0;f=i+40|0;h=i;g=b+16|0;e=c[g>>2]|0;d=e+16|0;if(a[e+47>>0]|0){e=c[b>>2]&3;WN(f,c[((e|0)==3?b:b+48|0)+40>>2]|0,c[((e|0)==2?b:b+-48|0)+40>>2]|0,d);e=f;f=d+40|0;do{c[d>>2]=c[e>>2];d=d+4|0;e=e+4|0}while((d|0)<(f|0));e=c[g>>2]|0}d=e+56|0;if(a[e+87>>0]|0){e=c[b>>2]&3;WN(h,c[((e|0)==2?b:b+-48|0)+40>>2]|0,c[((e|0)==3?b:b+48|0)+40>>2]|0,d);e=h;f=d+40|0;do{c[d>>2]=c[e>>2];d=d+4|0;e=e+4|0}while((d|0)<(f|0))}l=i;return}function _N(){var a=0,b=0,d=0;a=l;l=l+32|0;b=a+16|0;d=a;c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=0;c[b>>2]=c[d>>2];c[b+4>>2]=c[d+4>>2];c[b+8>>2]=c[d+8>>2];c[b+12>>2]=c[d+12>>2];TN(0,b)|0;c[b>>2]=c[d>>2];c[b+4>>2]=c[d+4>>2];c[b+8>>2]=c[d+8>>2];c[b+12>>2]=c[d+12>>2];UN(0,b)|0;c[b>>2]=c[d>>2];c[b+4>>2]=c[d+4>>2];c[b+8>>2]=c[d+8>>2];c[b+12>>2]=c[d+12>>2];pN(0,b)|0;l=a;return}function $N(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,g=0.0,i=0.0,j=0,k=0,m=0,n=0,o=0,p=0.0,q=0,r=0.0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;z=l;l=l+192|0;s=z+176|0;x=z+112|0;y=z+48|0;t=z+32|0;u=z+24|0;v=z+16|0;w=z;if(!(e<<24>>24)){k=d+48|0;c[t>>2]=c[k>>2];c[t+4>>2]=c[k+4>>2];c[t+8>>2]=c[k+8>>2];c[t+12>>2]=c[k+12>>2];k=u;m=v;n=x;o=0}else{c[t>>2]=c[d>>2];c[t+4>>2]=c[d+4>>2];c[t+8>>2]=c[d+8>>2];c[t+12>>2]=c[d+12>>2];k=v;m=u;n=0;o=x}h[u>>3]=0.0;h[v>>3]=1.0;q=t+8|0;f=0.0;g=1.0;j=0;p=+h[t>>3];while(1){r=+h[q>>3];f=(f+g)*.5;kP(w,d,3,f,n,o);c[t>>2]=c[w>>2];c[t+4>>2]=c[w+4>>2];c[t+8>>2]=c[w+8>>2];c[t+12>>2]=c[w+12>>2];c[s>>2]=c[w>>2];c[s+4>>2]=c[w+4>>2];c[s+8>>2]=c[w+8>>2];c[s+12>>2]=c[w+12>>2];a:do if(!((lb[b&127](a,s)|0)<<24>>24)){e=0;while(1){if((e|0)==4){e=k;j=1;break a}j=y+(e<<4)|0;A=x+(e<<4)|0;c[j>>2]=c[A>>2];c[j+4>>2]=c[A+4>>2];c[j+8>>2]=c[A+8>>2];c[j+12>>2]=c[A+12>>2];e=e+1|0}}else e=m;while(0);h[e>>3]=f;i=+h[t>>3];p=p-i;if(!((p>=0.0?p:-p)>.5)?(r=r-+h[q>>3],!((r>=0.0?r:-r)>.5)):0)break;f=+h[u>>3];g=+h[v>>3];p=i}b:do if(!(j<<24>>24)){e=0;while(1){if((e|0)==4)break b;A=d+(e<<4)|0;y=x+(e<<4)|0;c[A>>2]=c[y>>2];c[A+4>>2]=c[y+4>>2];c[A+8>>2]=c[y+8>>2];c[A+12>>2]=c[y+12>>2];e=e+1|0}}else{e=0;while(1){if((e|0)==4)break b;A=d+(e<<4)|0;x=y+(e<<4)|0;c[A>>2]=c[x>>2];c[A+4>>2]=c[x+4>>2];c[A+8>>2]=c[x+8>>2];c[A+12>>2]=c[x+12>>2];e=e+1|0}}while(0);l=z;return}function aO(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0,k=0,m=0,n=0.0;m=l;l=l+48|0;d=m+16|0;e=m;f=m+32|0;g=a+16|0;i=c[g>>2]|0;j=c[i+8>>2]|0;if(j|0?(k=j+4|0,c[(c[k>>2]|0)+12>>2]|0):0){c[f>>2]=a;c[f+4>>2]=0;n=+h[i+96>>3];h[e>>3]=+h[b>>3]-+h[i+16>>3];h[e+8>>3]=+h[b+8>>3]-+h[i+24>>3];k=c[(c[k>>2]|0)+12>>2]|0;c[d>>2]=c[e>>2];c[d+4>>2]=c[e+4>>2];c[d+8>>2]=c[e+8>>2];c[d+12>>2]=c[e+12>>2];k=lb[k&127](f,d)|0;h[(c[g>>2]|0)+96>>3]=n;bO(f,a,b,k)}l=m;return}function bO(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0,k=0.0,m=0,n=0;n=l;l=l+64|0;m=n;j=b+16|0;g=c[j>>2]|0;k=+h[g+96>>3];i=g+16|0;f=g+24|0;b=0;while(1){if((b|0)==4)break;h[m+(b<<4)>>3]=+h[d+(b<<4)>>3]-+h[i>>3];h[m+(b<<4)+8>>3]=+h[d+(b<<4)+8>>3]-+h[f>>3];b=b+1|0}$N(a,c[(c[(c[g+8>>2]|0)+4>>2]|0)+12>>2]|0,m,e);b=0;while(1){if((b|0)==4)break;e=c[j>>2]|0;h[d+(b<<4)>>3]=+h[e+16>>3]+ +h[m+(b<<4)>>3];h[d+(b<<4)+8>>3]=+h[e+24>>3]+ +h[m+(b<<4)+8>>3];b=b+1|0}h[(c[j>>2]|0)+96>>3]=k;l=n;return}function cO(b,d){b=b|0;d=d|0;var e=0,f=0;while(1){f=b+16|0;b=c[f>>2]|0;if(!(a[b+112>>0]|0))break;b=c[b+116>>2]|0}b=c[b+8>>2]|0;if(!b){b=JK(40)|0;c[(c[f>>2]|0)+8>>2]=b}e=c[b>>2]|0;if(!e)b=KK(((c[b+4>>2]|0)*48|0)+48|0)|0;else b=MK(e,((c[b+4>>2]|0)*48|0)+48|0)|0;f=c[(c[f>>2]|0)+8>>2]|0;c[f>>2]=b;f=f+4|0;e=c[f>>2]|0;c[f>>2]=e+1;f=b+(e*48|0)|0;c[f>>2]=JK(d<<4)|0;c[b+(e*48|0)+4>>2]=d;b=b+(e*48|0)+8|0;e=b+40|0;do{c[b>>2]=0;b=b+4|0}while((b|0)<(e|0));return f|0}function dO(b,e,f,g,i){b=b|0;e=e|0;f=f|0;g=g|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0.0,F=0.0;D=l;l=l+96|0;A=D+16|0;u=D;x=D+92|0;y=D+88|0;v=D+80|0;m=c[((c[b>>2]&3|0)==3?b:b+48|0)+40>>2]|0;z=xC(m)|0;B=cO(b,g)|0;n=b;while(1){o=c[n+16>>2]|0;if(!(a[o+112>>0]|0))break;n=c[o+116>>2]|0}if((a[i+8>>0]|0)==0?(j=c[m+16>>2]|0,k=c[e+16>>2]|0,(c[j+232>>2]|0)==(c[k+232>>2]|0)):0){p=(c[j+236>>2]|0)>(c[k+236>>2]|0);w=p?m:e;m=p?e:m}else w=e;if((m|0)==(c[((c[n>>2]&3|0)==3?n:n+48|0)+40>>2]|0)){j=o+80|0;k=o+40|0;p=d[o+86>>0]|0;e=d[o+46>>0]|0}else{j=o+40|0;k=o+80|0;p=d[o+46>>0]|0;e=d[o+86>>0]|0}o=c[j>>2]|0;j=c[k>>2]|0;if(((e|0)!=0?(r=m+16|0,q=c[(c[r>>2]|0)+8>>2]|0,(q|0)!=0):0)?(c[(c[q+4>>2]|0)+12>>2]|0)!=0:0){c[v>>2]=m;c[v+4>>2]=j;j=g+-4|0;e=u+8|0;k=0;while(1){if((k|0)>=(j|0))break;n=k+3|0;q=c[r>>2]|0;h[u>>3]=+h[f+(n<<4)>>3]-+h[q+16>>3];h[e>>3]=+h[f+(n<<4)+8>>3]-+h[q+24>>3];q=c[(c[(c[q+8>>2]|0)+4>>2]|0)+12>>2]|0;c[A>>2]=c[u>>2];c[A+4>>2]=c[u+4>>2];c[A+8>>2]=c[u+8>>2];c[A+12>>2]=c[u+12>>2];if(!((lb[q&127](v,A)|0)<<24>>24))break;else k=n}c[x>>2]=k;bO(v,m,f+(k<<4)|0,1)}else{c[x>>2]=0;k=0}if(((p|0)!=0?(t=w+16|0,s=c[(c[t>>2]|0)+8>>2]|0,(s|0)!=0):0)?(c[(c[s+4>>2]|0)+12>>2]|0)!=0:0){c[v>>2]=w;c[v+4>>2]=o;m=g+-4|0;e=u+8|0;j=m;while(1){if((j|0)<=0)break;g=c[t>>2]|0;h[u>>3]=+h[f+(j<<4)>>3]-+h[g+16>>3];h[e>>3]=+h[f+(j<<4)+8>>3]-+h[g+24>>3];g=c[(c[(c[g+8>>2]|0)+4>>2]|0)+12>>2]|0;c[A>>2]=c[u>>2];c[A+4>>2]=c[u+4>>2];c[A+8>>2]=c[u+8>>2];c[A+12>>2]=c[u+12>>2];if(!((lb[g&127](v,A)|0)<<24>>24))break;j=j+-3|0}c[y>>2]=j;bO(v,w,f+(j<<4)|0,0)}else{m=g+-4|0;c[y>>2]=m;j=m}while(1){if((k|0)>=(m|0))break;e=k+3|0;E=+h[f+(k<<4)>>3]-+h[f+(e<<4)>>3];F=+h[f+(k<<4)+8>>3]-+h[f+(e<<4)+8>>3];if(F*F+E*E<1.0e-06)k=e;else break}c[x>>2]=k;while(1){if((j|0)<=0)break;v=j+3|0;F=+h[f+(j<<4)>>3]-+h[f+(v<<4)>>3];E=+h[f+(j<<4)+8>>3]-+h[f+(v<<4)+8>>3];if(!(E*E+F*F<1.0e-06))break;j=j+-3|0}c[y>>2]=j;eO(b,w,f,x,y,B,i);r=c[x>>2]|0;n=c[y>>2]|0;m=n+4|0;n=n+3|0;o=A+16|0;p=A+32|0;q=A+48|0;k=z+16|0;j=r;while(1){if((j|0)>=(m|0))break;z=(c[B>>2]|0)+(j-r<<4)|0;e=f+(j<<4)|0;c[z>>2]=c[e>>2];c[z+4>>2]=c[e+4>>2];c[z+8>>2]=c[e+8>>2];c[z+12>>2]=c[e+12>>2];c[A>>2]=c[e>>2];c[A+4>>2]=c[e+4>>2];c[A+8>>2]=c[e+8>>2];c[A+12>>2]=c[e+12>>2];e=j+1|0;if((j|0)>=(n|0)){C=38;break}y=(c[B>>2]|0)+(e-r<<4)|0;z=f+(e<<4)|0;c[y>>2]=c[z>>2];c[y+4>>2]=c[z+4>>2];c[y+8>>2]=c[z+8>>2];c[y+12>>2]=c[z+12>>2];c[o>>2]=c[z>>2];c[o+4>>2]=c[z+4>>2];c[o+8>>2]=c[z+8>>2];c[o+12>>2]=c[z+12>>2];z=j+2|0;y=(c[B>>2]|0)+(z-r<<4)|0;z=f+(z<<4)|0;c[y>>2]=c[z>>2];c[y+4>>2]=c[z+4>>2];c[y+8>>2]=c[z+8>>2];c[y+12>>2]=c[z+12>>2];c[p>>2]=c[z>>2];c[p+4>>2]=c[z+4>>2];c[p+8>>2]=c[z+8>>2];c[p+12>>2]=c[z+12>>2];z=j+3|0;y=f+(z<<4)|0;c[q>>2]=c[y>>2];c[q+4>>2]=c[y+4>>2];c[q+8>>2]=c[y+8>>2];c[q+12>>2]=c[y+12>>2];lI((c[k>>2]|0)+16|0,A);j=z}c[B+4>>2]=m-r;l=D;return}function eO(b,d,e,f,g,h,i){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0;p=l;l=l+16|0;m=p+4|0;n=p;o=b;while(1){j=c[(c[o+16>>2]|0)+116>>2]|0;if(!j)break;else o=j}if(!(a[i+8>>0]|0))j=(kb[c[i>>2]&63](o)|0)&255;else j=0;HH(o,m,n);k=i+4|0;if((kb[c[k>>2]&63](d)|0)<<24>>24)c[n>>2]=0;if((kb[c[k>>2]&63](c[((c[b>>2]&3|0)==3?b:b+48|0)+40>>2]|0)|0)<<24>>24)c[m>>2]=0;if(j|0){d=c[m>>2]|0;c[m>>2]=c[n>>2];c[n>>2]=d}if(!(a[i+9>>0]|0)){j=c[m>>2]|0;if(j|0)c[f>>2]=WH(o,e,c[f>>2]|0,c[g>>2]|0,h,j)|0;j=c[n>>2]|0;if(j|0)c[g>>2]=UH(o,e,c[f>>2]|0,c[g>>2]|0,h,j)|0}else{k=c[n>>2]|0;j=c[m>>2]|0;if(j|k|0)XH(o,e,c[f>>2]|0,c[g>>2]|0,h,j,k)}l=p;return}function fO(a,b){a=a|0;b=b|0;var d=0,e=0;if(+h[b>>3]<+h[b+16>>3]?+h[b+8>>3]<+h[b+24>>3]:0){d=c[a+84>>2]|0;e=a+80|0;a=c[e>>2]|0;c[e>>2]=a+1;a=d+(a<<5)|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];c[a+16>>2]=c[b+16>>2];c[a+20>>2]=c[b+20>>2];c[a+24>>2]=c[b+24>>2];c[a+28>>2]=c[b+28>>2]}return}function gO(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var i=0,j=0,k=0.0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0.0,z=0.0;x=l;l=l+112|0;u=x+72|0;o=x+56|0;n=x+16|0;q=x;j=c[d>>2]&3;p=d+48|0;w=c[((j|0)==3?d:p)+40>>2]|0;t=d+16|0;r=c[t>>2]|0;i=r+16|0;if(a[r+47>>0]|0){WN(n,w,c[((j|0)==2?d:d+-48|0)+40>>2]|0,i);j=n;n=i+40|0;do{c[i>>2]=c[j>>2];i=i+4|0;j=j+4|0}while((i|0)<(n|0))}r=w+16|0;j=c[r>>2]|0;i=c[j+8>>2]|0;if(!i)n=0;else n=c[(c[i+4>>2]|0)+16>>2]|0;i=j+16|0;j=(c[t>>2]|0)+16|0;c[o>>2]=c[i>>2];c[o+4>>2]=c[i+4>>2];c[o+8>>2]=c[i+8>>2];c[o+12>>2]=c[i+12>>2];c[u>>2]=c[j>>2];c[u+4>>2]=c[j+4>>2];c[u+8>>2]=c[j+8>>2];c[u+12>>2]=c[j+12>>2];hO(q,o,u);c[b>>2]=c[q>>2];c[b+4>>2]=c[q+4>>2];c[b+8>>2]=c[q+8>>2];c[b+12>>2]=c[q+12>>2];if(!(g<<24>>24)){i=c[t>>2]|0;if(!(a[i+45>>0]|0))i=0;else{k=+h[i+32>>3];v=9}}else{k=+iO(c[((c[d>>2]&3|0)==3?d:p)+40>>2]|0);v=9}if((v|0)==9){h[b+16>>3]=k;i=1}a[b+29>>0]=i;c[b+80>>2]=0;c[b+88>>2]=d;q=f+32|0;c[q>>2]=c[b>>2];c[q+4>>2]=c[b+4>>2];c[q+8>>2]=c[b+8>>2];c[q+12>>2]=c[b+12>>2];switch(e|0){case 1:{j=c[r>>2]|0;if((a[j+156>>0]|0)==0?(q=a[(c[t>>2]|0)+49>>0]|0,s=q&255,q<<24>>24!=0):0){c[u>>2]=c[f>>2];c[u+4>>2]=c[f+4>>2];c[u+8>>2]=c[f+8>>2];c[u+12>>2]=c[f+12>>2];c[u+16>>2]=c[f+16>>2];c[u+20>>2]=c[f+20>>2];c[u+24>>2]=c[f+24>>2];c[u+28>>2]=c[f+28>>2];do if(!(s&4)){if(s&1|0){c[f+48>>2]=1;i=u+24|0;h[i>>3]=+h[(+h[i>>3]>+h[b+8>>3]?u+16|0:b)+8>>3];i=f+56|0;c[i>>2]=c[u>>2];c[i+4>>2]=c[u+4>>2];c[i+8>>2]=c[u+8>>2];c[i+12>>2]=c[u+12>>2];c[i+16>>2]=c[u+16>>2];c[i+20>>2]=c[u+20>>2];c[i+24>>2]=c[u+24>>2];c[i+28>>2]=c[u+28>>2];i=1;break}i=f+48|0;if(!(s&8)){c[i>>2]=2;h[u>>3]=+h[b>>3];h[u+8>>3]=+h[j+24>>3]-+h[j+80>>3]*.5;h[u+24>>3]=+h[b+8>>3];i=f+56|0;c[i>>2]=c[u>>2];c[i+4>>2]=c[u+4>>2];c[i+8>>2]=c[u+8>>2];c[i+12>>2]=c[u+12>>2];c[i+16>>2]=c[u+16>>2];c[i+20>>2]=c[u+20>>2];c[i+24>>2]=c[u+24>>2];c[i+28>>2]=c[u+28>>2];i=1;break}else{c[i>>2]=8;h[u+16>>3]=+h[b>>3];h[u+8>>3]=+h[j+24>>3]-+h[j+80>>3]*.5;h[u+24>>3]=+h[b+8>>3];i=f+56|0;c[i>>2]=c[u>>2];c[i+4>>2]=c[u+4>>2];c[i+8>>2]=c[u+8>>2];c[i+12>>2]=c[u+12>>2];c[i+16>>2]=c[u+16>>2];c[i+20>>2]=c[u+20>>2];c[i+24>>2]=c[u+24>>2];c[i+28>>2]=c[u+28>>2];i=1;break}}else{c[f+48>>2]=4;k=+h[u>>3];if(+h[b>>3]<+h[j+16>>3]){z=k+-1.0;y=+h[b+8>>3];b=u+16|0;k=+h[b>>3];m=+h[j+80>>3]*.5+ +h[j+24>>3];m=m+ +((c[(c[(xC(w)|0)+16>>2]|0)+252>>2]|0)/2|0|0);i=c[r>>2]|0;h[b>>3]=+h[i+16>>3]-+h[i+88>>3];h[u+24>>3]=y;h[u+8>>3]=+h[i+24>>3]-+h[i+80>>3]*.5;h[u>>3]=z;h[f+56>>3]=z;h[f+64>>3]=y;h[f+72>>3]=k;h[f+80>>3]=m;i=f+88|0;c[i>>2]=c[u>>2];c[i+4>>2]=c[u+4>>2];c[i+8>>2]=c[u+8>>2];c[i+12>>2]=c[u+12>>2];c[i+16>>2]=c[u+16>>2];c[i+20>>2]=c[u+20>>2];c[i+24>>2]=c[u+24>>2];c[i+28>>2]=c[u+28>>2];i=2;break}else{m=+h[b+8>>3];i=u+16|0;y=+h[i>>3]+1.0;z=+h[j+80>>3]*.5+ +h[j+24>>3];z=z+ +((c[(c[(xC(w)|0)+16>>2]|0)+252>>2]|0)/2|0|0);b=c[r>>2]|0;h[u>>3]=+h[b+96>>3]+ +h[b+16>>3];h[u+24>>3]=m;h[u+8>>3]=+h[b+24>>3]-+h[b+80>>3]*.5;h[i>>3]=y;h[f+56>>3]=k;h[f+64>>3]=m;h[f+72>>3]=y;h[f+80>>3]=z;i=f+88|0;c[i>>2]=c[u>>2];c[i+4>>2]=c[u+4>>2];c[i+8>>2]=c[u+8>>2];c[i+12>>2]=c[u+12>>2];c[i+16>>2]=c[u+16>>2];c[i+20>>2]=c[u+20>>2];c[i+24>>2]=c[u+24>>2];c[i+28>>2]=c[u+28>>2];i=2;break}}while(0);c[f+52>>2]=i;while(1){i=c[d+16>>2]|0;if(!(a[i+112>>0]|0))break;d=c[i+116>>2]|0}a[((w|0)==(c[((c[d>>2]&3|0)==3?d:d+48|0)+40>>2]|0)?i+16|0:i+56|0)+30>>0]=0}else{j=1;v=47}break}case 2:{s=a[(c[t>>2]|0)+49>>0]|0;j=s&255;if(!(s<<24>>24))v=46;else{c[u>>2]=c[f>>2];c[u+4>>2]=c[f+4>>2];c[u+8>>2]=c[f+8>>2];c[u+12>>2]=c[f+12>>2];c[u+16>>2]=c[f+16>>2];c[u+20>>2]=c[f+20>>2];c[u+24>>2]=c[f+24>>2];c[u+28>>2]=c[f+28>>2];do if(!(j&4)){if(j&1|0)if((c[f+48>>2]|0)==4){i=c[r>>2]|0;z=+h[i+24>>3]-+h[i+80>>3]*.5;i=u+16|0;y=+h[i>>3]+1.0;k=+h[b>>3];m=z-+((c[(c[(xC(w)|0)+16>>2]|0)+252>>2]|0)/2|0|0);b=c[r>>2]|0;h[u>>3]=+h[b+96>>3]+ +h[b+16>>3];h[u+8>>3]=z;h[u+24>>3]=+h[b+80>>3]*.5+ +h[b+24>>3];h[i>>3]=y;h[f+56>>3]=k;h[f+64>>3]=m;h[f+72>>3]=y;h[f+80>>3]=z;i=f+88|0;c[i>>2]=c[u>>2];c[i+4>>2]=c[u+4>>2];c[i+8>>2]=c[u+8>>2];c[i+12>>2]=c[u+12>>2];c[i+16>>2]=c[u+16>>2];c[i+20>>2]=c[u+20>>2];c[i+24>>2]=c[u+24>>2];c[i+28>>2]=c[u+28>>2];i=2;break}else{i=u+24|0;h[i>>3]=+h[(+h[i>>3]>+h[b+8>>3]?u+16|0:b)+8>>3];i=f+56|0;c[i>>2]=c[u>>2];c[i+4>>2]=c[u+4>>2];c[i+8>>2]=c[u+8>>2];c[i+12>>2]=c[u+12>>2];c[i+16>>2]=c[u+16>>2];c[i+20>>2]=c[u+20>>2];c[i+24>>2]=c[u+24>>2];c[i+28>>2]=c[u+28>>2];i=1;break}k=+h[b>>3];if(!(j&8)){h[u>>3]=k;e=c[r>>2]|0;k=+h[e+24>>3];m=+h[e+80>>3]*.5;if((c[f+48>>2]|0)==4){h[u+24>>3]=m+k;k=+h[b+8>>3];i=u}else{h[u+8>>3]=k-m;k=+h[b+8>>3]+1.0;i=u+16|0}h[i+8>>3]=k;i=f+56|0;c[i>>2]=c[u>>2];c[i+4>>2]=c[u+4>>2];c[i+8>>2]=c[u+8>>2];c[i+12>>2]=c[u+12>>2];c[i+16>>2]=c[u+16>>2];c[i+20>>2]=c[u+20>>2];c[i+24>>2]=c[u+24>>2];c[i+28>>2]=c[u+28>>2];i=1;break}else{i=u+16|0;h[i>>3]=k+1.0;e=c[r>>2]|0;k=+h[e+24>>3];m=+h[e+80>>3]*.5;if((c[f+48>>2]|0)==4){h[u+24>>3]=m+k;k=+h[b+8>>3]+-1.0;i=u}else{h[u+8>>3]=k-m;k=+h[b+8>>3]+1.0}h[i+8>>3]=k;i=f+56|0;c[i>>2]=c[u>>2];c[i+4>>2]=c[u+4>>2];c[i+8>>2]=c[u+8>>2];c[i+12>>2]=c[u+12>>2];c[i+16>>2]=c[u+16>>2];c[i+20>>2]=c[u+20>>2];c[i+24>>2]=c[u+24>>2];c[i+28>>2]=c[u+28>>2];i=1;break}}else{i=u+8|0;h[i>>3]=+h[(+h[i>>3]<+h[b+8>>3]?u:b)+8>>3];i=f+56|0;c[i>>2]=c[u>>2];c[i+4>>2]=c[u+4>>2];c[i+8>>2]=c[u+8>>2];c[i+12>>2]=c[u+12>>2];c[i+16>>2]=c[u+16>>2];c[i+20>>2]=c[u+20>>2];c[i+24>>2]=c[u+24>>2];c[i+28>>2]=c[u+28>>2];i=1}while(0);c[f+52>>2]=i;while(1){i=c[d+16>>2]|0;if(!(a[i+112>>0]|0))break;d=c[i+116>>2]|0}a[((w|0)==(c[((c[d>>2]&3|0)==3?d:d+48|0)+40>>2]|0)?i+16|0:i+56|0)+30>>0]=0;c[f+48>>2]=j}break}default:v=46}if((v|0)==46){j=c[f+48>>2]|0;v=47}a:do if((v|0)==47){if(n){d=f+56|0;i=f+52|0;j=pb[n&127](w,(c[t>>2]|0)+16|0,j,d,i)|0;if(j){c[f+48>>2]=j;break}}else{i=f+52|0;d=f+56|0};c[d>>2]=c[f>>2];c[d+4>>2]=c[f+4>>2];c[d+8>>2]=c[f+8>>2];c[d+12>>2]=c[f+12>>2];c[d+16>>2]=c[f+16>>2];c[d+20>>2]=c[f+20>>2];c[d+24>>2]=c[f+24>>2];c[d+28>>2]=c[f+28>>2];c[i>>2]=1;switch(e|0){case 8:{qa(138394,106514,569,106524);break}case 2:{h[((c[f+48>>2]|0)==4?f+56|0:f+72|0)+8>>3]=+h[b+8>>3];break a}case 1:{h[f+80>>3]=+h[b+8>>3];c[f+48>>2]=1;break a}default:break a}}while(0);l=x;return}function hO(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0;d=+h[c+8>>3]+ +h[b+8>>3];h[a>>3]=+h[c>>3]+ +h[b>>3];h[a+8>>3]=d;return}function iO(a){a=a|0;var b=0.0,d=0,e=0,f=0.0,g=0,i=0,j=0,k=0.0,l=0.0;i=c[a+16>>2]|0;j=c[i+172>>2]|0;f=0.0;g=0;while(1){a=c[j+(g<<2)>>2]|0;if(!a)break;f=+h[(c[(c[((c[a>>2]&3|0)==3?a:a+48|0)+40>>2]|0)+16>>2]|0)+16>>3]+f;g=g+1|0}e=c[i+180>>2]|0;b=0.0;a=0;while(1){d=c[e+(a<<2)>>2]|0;if(!d)break;b=+h[(c[(c[((c[d>>2]&3|0)==2?d:d+-48|0)+40>>2]|0)+16>>2]|0)+16>>3]+b;a=a+1|0}k=+h[i+16>>3];l=+h[i+24>>3];j=c[j>>2]|0;f=+K(+(l-+h[(c[(c[((c[j>>2]&3|0)==3?j:j+48|0)+40>>2]|0)+16>>2]|0)+24>>3]),+(k-f/+(g|0)));j=c[e>>2]|0;return +((+K(+(+h[(c[(c[((c[j>>2]&3|0)==2?j:j+-48|0)+40>>2]|0)+16>>2]|0)+24>>3]-l),+(b/+(a|0)-k))+f)*.5)}function jO(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var i=0,j=0,k=0.0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0.0,B=0.0;z=l;l=l+112|0;w=z+72|0;p=z+56|0;n=z+16|0;t=z;j=c[d>>2]&3;r=d+-48|0;y=c[((j|0)==2?d:r)+40>>2]|0;u=d+16|0;s=c[u>>2]|0;i=s+56|0;if(a[s+87>>0]|0){WN(n,y,c[((j|0)==3?d:d+48|0)+40>>2]|0,i);j=n;n=i+40|0;do{c[i>>2]=c[j>>2];i=i+4|0;j=j+4|0}while((i|0)<(n|0))}s=y+16|0;j=c[s>>2]|0;i=c[j+8>>2]|0;if(!i)o=0;else o=c[(c[i+4>>2]|0)+16>>2]|0;n=b+40|0;i=j+16|0;j=(c[u>>2]|0)+56|0;c[p>>2]=c[i>>2];c[p+4>>2]=c[i+4>>2];c[p+8>>2]=c[i+8>>2];c[p+12>>2]=c[i+12>>2];c[w>>2]=c[j>>2];c[w+4>>2]=c[j+4>>2];c[w+8>>2]=c[j+8>>2];c[w+12>>2]=c[j+12>>2];hO(t,p,w);c[n>>2]=c[t>>2];c[n+4>>2]=c[t+4>>2];c[n+8>>2]=c[t+8>>2];c[n+12>>2]=c[t+12>>2];if(!(g<<24>>24)){i=c[u>>2]|0;if(!(a[i+85>>0]|0))q=0;else{h[b+56>>3]=+h[i+72>>3];q=1}}else{m=+iO(c[((c[d>>2]&3|0)==2?d:r)+40>>2]|0)+3.141592653589793;h[b+56>>3]=m;if(m<6.283185307179586)q=1;else qa(106534,106514,606,106558)}a[b+69>>0]=q;t=f+32|0;c[t>>2]=c[n>>2];c[t+4>>2]=c[n+4>>2];c[t+8>>2]=c[n+8>>2];c[t+12>>2]=c[n+12>>2];switch(e|0){case 1:{j=c[s>>2]|0;if((a[j+156>>0]|0)==0?(t=a[(c[u>>2]|0)+89>>0]|0,v=t&255,t<<24>>24!=0):0){c[w>>2]=c[f>>2];c[w+4>>2]=c[f+4>>2];c[w+8>>2]=c[f+8>>2];c[w+12>>2]=c[f+12>>2];c[w+16>>2]=c[f+16>>2];c[w+20>>2]=c[f+20>>2];c[w+24>>2]=c[f+24>>2];c[w+28>>2]=c[f+28>>2];do if(!(v&4))if(!(v&1)){i=f+48|0;if(!(v&8)){c[i>>2]=2;h[w>>3]=+h[n>>3];h[w+24>>3]=+h[j+80>>3]*.5+ +h[j+24>>3];h[w+8>>3]=+h[b+48>>3];i=f+56|0;c[i>>2]=c[w>>2];c[i+4>>2]=c[w+4>>2];c[i+8>>2]=c[w+8>>2];c[i+12>>2]=c[w+12>>2];c[i+16>>2]=c[w+16>>2];c[i+20>>2]=c[w+20>>2];c[i+24>>2]=c[w+24>>2];c[i+28>>2]=c[w+28>>2];i=1;break}else{c[i>>2]=8;h[w+16>>3]=+h[n>>3];h[w+24>>3]=+h[j+80>>3]*.5+ +h[j+24>>3];h[w+8>>3]=+h[b+48>>3];i=f+56|0;c[i>>2]=c[w>>2];c[i+4>>2]=c[w+4>>2];c[i+8>>2]=c[w+8>>2];c[i+12>>2]=c[w+12>>2];c[i+16>>2]=c[w+16>>2];c[i+20>>2]=c[w+20>>2];c[i+24>>2]=c[w+24>>2];c[i+28>>2]=c[w+28>>2];i=1;break}}else{c[f+48>>2]=1;k=+h[w>>3];if(+h[n>>3]<+h[j+16>>3]){B=k+-1.0;m=+h[b+48>>3];b=w+16|0;k=+h[b>>3];A=+h[j+80>>3]*-.5+ +h[j+24>>3];A=A-+((c[(c[(xC(y)|0)+16>>2]|0)+252>>2]|0)/2|0|0);i=c[s>>2]|0;h[b>>3]=+h[i+16>>3]-+h[i+88>>3];h[w+8>>3]=m;h[w+24>>3]=+h[i+80>>3]*.5+ +h[i+24>>3];h[w>>3]=B;h[f+56>>3]=B;h[f+64>>3]=A;h[f+72>>3]=k;h[f+80>>3]=m;i=f+88|0;c[i>>2]=c[w>>2];c[i+4>>2]=c[w+4>>2];c[i+8>>2]=c[w+8>>2];c[i+12>>2]=c[w+12>>2];c[i+16>>2]=c[w+16>>2];c[i+20>>2]=c[w+20>>2];c[i+24>>2]=c[w+24>>2];c[i+28>>2]=c[w+28>>2];i=2;break}else{B=+h[b+48>>3];i=w+16|0;A=+h[i>>3]+1.0;m=+h[j+80>>3]*-.5+ +h[j+24>>3];m=m-+((c[(c[(xC(y)|0)+16>>2]|0)+252>>2]|0)/2|0|0);b=c[s>>2]|0;h[w>>3]=+h[b+96>>3]+ +h[b+16>>3];h[w+8>>3]=B;h[w+24>>3]=+h[b+80>>3]*.5+ +h[b+24>>3];h[i>>3]=A;h[f+56>>3]=k;h[f+64>>3]=m;h[f+72>>3]=A;h[f+80>>3]=B;i=f+88|0;c[i>>2]=c[w>>2];c[i+4>>2]=c[w+4>>2];c[i+8>>2]=c[w+8>>2];c[i+12>>2]=c[w+12>>2];c[i+16>>2]=c[w+16>>2];c[i+20>>2]=c[w+20>>2];c[i+24>>2]=c[w+24>>2];c[i+28>>2]=c[w+28>>2];i=2;break}}else{c[f+48>>2]=4;i=w+8|0;h[i>>3]=+h[(+h[i>>3]<+h[b+48>>3]?w:n)+8>>3];i=f+56|0;c[i>>2]=c[w>>2];c[i+4>>2]=c[w+4>>2];c[i+8>>2]=c[w+8>>2];c[i+12>>2]=c[w+12>>2];c[i+16>>2]=c[w+16>>2];c[i+20>>2]=c[w+20>>2];c[i+24>>2]=c[w+24>>2];c[i+28>>2]=c[w+28>>2];i=1}while(0);c[f+52>>2]=i;while(1){i=c[d+16>>2]|0;if(!(a[i+112>>0]|0))break;d=c[i+116>>2]|0}a[((y|0)==(c[((c[d>>2]&3|0)==2?d:d+-48|0)+40>>2]|0)?i+56|0:i+16|0)+30>>0]=0;c[f+48>>2]=v}else{j=4;x=47}break}case 2:{v=a[(c[u>>2]|0)+89>>0]|0;j=v&255;if(!(v<<24>>24))x=46;else{c[w>>2]=c[f>>2];c[w+4>>2]=c[f+4>>2];c[w+8>>2]=c[f+8>>2];c[w+12>>2]=c[f+12>>2];c[w+16>>2]=c[f+16>>2];c[w+20>>2]=c[f+20>>2];c[w+24>>2]=c[f+24>>2];c[w+28>>2]=c[f+28>>2];do if(!(j&4)){if(j&1|0)if((c[f+48>>2]|0)==4){k=+h[w>>3]+-1.0;i=c[s>>2]|0;B=+h[i+24>>3]-+h[i+80>>3]*.5;A=+h[n>>3];m=B-+((c[(c[(xC(y)|0)+16>>2]|0)+252>>2]|0)/2|0|0);i=c[s>>2]|0;h[w+16>>3]=+h[i+16>>3]+-2.0-+h[i+88>>3];h[w+8>>3]=B;h[w+24>>3]=+h[i+80>>3]*.5+ +h[i+24>>3];h[w>>3]=k;h[f+56>>3]=k;h[f+64>>3]=m;h[f+72>>3]=A;h[f+80>>3]=B;i=f+88|0;c[i>>2]=c[w>>2];c[i+4>>2]=c[w+4>>2];c[i+8>>2]=c[w+8>>2];c[i+12>>2]=c[w+12>>2];c[i+16>>2]=c[w+16>>2];c[i+20>>2]=c[w+20>>2];c[i+24>>2]=c[w+24>>2];c[i+28>>2]=c[w+28>>2];i=2;break}else{i=w+24|0;h[i>>3]=+h[(+h[i>>3]>+h[b+8>>3]?w+16|0:b)+8>>3];i=f+56|0;c[i>>2]=c[w>>2];c[i+4>>2]=c[w+4>>2];c[i+8>>2]=c[w+8>>2];c[i+12>>2]=c[w+12>>2];c[i+16>>2]=c[w+16>>2];c[i+20>>2]=c[w+20>>2];c[i+24>>2]=c[w+24>>2];c[i+28>>2]=c[w+28>>2];i=1;break}k=+h[n>>3];if(!(j&8)){h[w>>3]=k+-1.0;e=c[s>>2]|0;k=+h[e+24>>3];m=+h[e+80>>3]*.5;if((c[f+48>>2]|0)==4){h[w+24>>3]=m+k;k=+h[b+48>>3]+-1.0;i=w}else{h[w+8>>3]=k-m;k=+h[b+48>>3];i=w+16|0}h[i+8>>3]=k;i=f+56|0;c[i>>2]=c[w>>2];c[i+4>>2]=c[w+4>>2];c[i+8>>2]=c[w+8>>2];c[i+12>>2]=c[w+12>>2];c[i+16>>2]=c[w+16>>2];c[i+20>>2]=c[w+20>>2];c[i+24>>2]=c[w+24>>2];c[i+28>>2]=c[w+28>>2];i=1;break}else{i=w+16|0;h[i>>3]=k+1.0;e=c[s>>2]|0;k=+h[e+24>>3];m=+h[e+80>>3]*.5;if((c[f+48>>2]|0)==4){h[w+24>>3]=m+k;k=+h[b+48>>3]+-1.0;i=w}else{h[w+8>>3]=k-m;k=+h[b+48>>3]+1.0}h[i+8>>3]=k;i=f+56|0;c[i>>2]=c[w>>2];c[i+4>>2]=c[w+4>>2];c[i+8>>2]=c[w+8>>2];c[i+12>>2]=c[w+12>>2];c[i+16>>2]=c[w+16>>2];c[i+20>>2]=c[w+20>>2];c[i+24>>2]=c[w+24>>2];c[i+28>>2]=c[w+28>>2];i=1;break}}else{i=w+8|0;h[i>>3]=+h[(+h[i>>3]<+h[b+48>>3]?w:n)+8>>3];i=f+56|0;c[i>>2]=c[w>>2];c[i+4>>2]=c[w+4>>2];c[i+8>>2]=c[w+8>>2];c[i+12>>2]=c[w+12>>2];c[i+16>>2]=c[w+16>>2];c[i+20>>2]=c[w+20>>2];c[i+24>>2]=c[w+24>>2];c[i+28>>2]=c[w+28>>2];i=1}while(0);c[f+52>>2]=i;while(1){i=c[d+16>>2]|0;if(!(a[i+112>>0]|0))break;d=c[i+116>>2]|0}a[((y|0)==(c[((c[d>>2]&3|0)==2?d:d+-48|0)+40>>2]|0)?i+56|0:i+16|0)+30>>0]=0;c[f+48>>2]=j}break}default:x=46}if((x|0)==46){j=c[f+48>>2]|0;x=47}a:do if((x|0)==47){if(o){d=f+56|0;i=f+52|0;j=pb[o&127](y,(c[u>>2]|0)+56|0,j,d,i)|0;if(j){c[f+48>>2]=j;break}}else{i=f+52|0;d=f+56|0};c[d>>2]=c[f>>2];c[d+4>>2]=c[f+4>>2];c[d+8>>2]=c[f+8>>2];c[d+12>>2]=c[f+12>>2];c[d+16>>2]=c[f+16>>2];c[d+20>>2]=c[f+20>>2];c[d+24>>2]=c[f+24>>2];c[d+28>>2]=c[f+28>>2];c[i>>2]=1;switch(e|0){case 8:{qa(138394,106514,765,106558);break}case 2:{h[((c[f+48>>2]|0)==4?f+56|0:f+72|0)+8>>3]=+h[b+48>>3];break a}case 1:{h[f+64>>3]=+h[b+48>>3];c[f+48>>2]=4;break a}default:break a}}while(0);l=z;return}function kO(b){b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0;g=c[b+16>>2]|0;i=c[g+96>>2]|0;if((a[g+44>>0]|0)==0?(a[g+84>>0]|0)==0:0)j=6;else{d=a[g+49>>0]|0;e=d&255;if(((e&8|0)==0?(f=a[g+89>>0]|0,(f&8)==0):0)?((e&5|0)==0?1:d<<24>>24!=f<<24>>24):0)j=6;else b=0}if((j|0)==6)if(!i)b=18;else{b=(c[(c[(xC(c[((c[b>>2]&3|0)==2?b:b+-48|0)+40>>2]|0)|0)+16>>2]|0)+116>>2]&1|0)!=0;b=~~(+h[(b?i+32|0:i+24|0)>>3]+18.0)}return b|0}function lO(b,d,e,f,g,h,i){b=b|0;d=d|0;e=e|0;f=f|0;g=+g;h=+h;i=i|0;var j=0,k=0,l=0,m=0;b=c[(c[d+(e<<2)>>2]|0)+16>>2]|0;if((a[b+44>>0]|0)==0?(a[b+84>>0]|0)==0:0)l=6;else l=3;do if((l|0)==3){j=a[b+49>>0]|0;k=j&255;if(!(k&8)){m=a[b+89>>0]|0;if((m&8)==0?((k&5|0)==0?1:j<<24>>24!=m<<24>>24):0){l=6;break}if(!(a[b+89>>0]&8)){if(k&4|0){nO(d,e,f,g,h,i);break}if(!(k&1))qa(138394,106514,1231,106566);else{pO(d,e,f,g,h,i);break}}}if((j&2)==0?(a[b+89>>0]&2)==0:0){oO(d,e,f,g,h,i);break}nO(d,e,f,g,h,i)}while(0);if((l|0)==6)mO(d,e,f,g,h,i);return}function mO(b,e,f,g,i,j){b=b|0;e=e|0;f=f|0;g=+g;i=+i;j=j|0;var k=0,m=0.0,n=0.0,o=0.0,p=0.0,q=0,r=0,s=0,t=0,u=0,v=0.0,w=0,x=0,y=0,z=0.0,A=0,B=0,C=0.0,D=0,E=0.0,F=0.0,G=0.0,H=0.0,I=0.0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0.0,R=0.0,S=0;P=l;l=l+16080|0;L=P+80|0;M=P+64|0;N=P+48|0;O=P+32|0;J=P+16|0;K=P;B=c[b+(e<<2)>>2]|0;n=i*.5/+(f|0);n=n>2.0?n:2.0;D=(c[((c[B>>2]&3|0)==3?B:B+48|0)+40>>2]|0)+16|0;A=c[D>>2]|0;C=+h[A+16>>3];H=+h[A+24>>3];B=c[B+16>>2]|0;m=+h[B+16>>3];E=m+C;F=+h[B+24>>3]+H;i=+h[B+56>>3];G=i+C;H=+h[B+64>>3]+H;k=!(F>=H)?-1:1;p=+h[A+96>>3];switch(qO(d[B+49>>0]|0,d[B+89>>0]|0)|0){case 65:case 32:{if(F==H)k=0-k|0;break}default:{}}Q=(p-m)*3.0;m=(p-i)*3.0;v=n*+(k|0);u=L+8|0;w=L+16|0;x=L+32|0;y=L+48|0;z=(H+F)*.5;A=L+64|0;B=L+80|0;s=L+96|0;t=L+104|0;r=0;o=0.0;i=p;n=p=(f|0))break;q=e+1|0;e=c[b+(e<<2)>>2]|0;p=i+g;n=n+g;m=m+g;o=o+v;h[L>>3]=E;h[u>>3]=F;Q=o+F;rO(M,n*.3333333333333333+E,Q);c[w>>2]=c[M>>2];c[w+4>>2]=c[M+4>>2];c[w+8>>2]=c[M+8>>2];c[w+12>>2]=c[M+12>>2];R=p+C;rO(N,R,Q);c[x>>2]=c[N>>2];c[x+4>>2]=c[N+4>>2];c[x+8>>2]=c[N+8>>2];c[x+12>>2]=c[N+12>>2];rO(O,R,z);c[y>>2]=c[O>>2];c[y+4>>2]=c[O+4>>2];c[y+8>>2]=c[O+8>>2];c[y+12>>2]=c[O+12>>2];Q=H-o;rO(J,R,Q);c[A>>2]=c[J>>2];c[A+4>>2]=c[J+4>>2];c[A+8>>2]=c[J+8>>2];c[A+12>>2]=c[J+12>>2];rO(K,m*.3333333333333333+G,Q);c[B>>2]=c[K>>2];c[B+4>>2]=c[K+4>>2];c[B+8>>2]=c[K+8>>2];c[B+12>>2]=c[K+12>>2];h[s>>3]=G;h[t>>3]=H;k=e+16|0;if((c[(c[k>>2]|0)+96>>2]|0)!=0?(S=(c[(c[(xC(c[((c[e>>2]&3|0)==3?e:e+48|0)+40>>2]|0)|0)+16>>2]|0)+116>>2]&1|0)==0,k=c[(c[k>>2]|0)+96>>2]|0,I=+h[(S?k+24|0:k+32|0)>>3],S=c[D>>2]|0,h[k+56>>3]=I*.5+p+ +h[S+16>>3],h[k+64>>3]=+h[S+24>>3],a[k+81>>0]=1,I>g):0)i=I+i;else i=p;dO(e,c[((c[e>>2]&3|0)==2?e:e+-48|0)+40>>2]|0,L,7,j);e=q;r=r+1|0}l=P;return}function nO(b,e,f,g,i,j){b=b|0;e=e|0;f=f|0;g=+g;i=+i;j=j|0;var k=0.0,m=0,n=0.0,o=0.0,p=0.0,q=0.0,r=0,s=0.0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0.0,B=0,C=0,D=0.0,E=0,F=0.0,G=0.0,H=0.0,I=0.0,J=0.0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0.0,S=0;Q=l;l=l+16080|0;M=Q+80|0;N=Q+64|0;O=Q+48|0;P=Q+32|0;K=Q+16|0;L=Q;C=c[b+(e<<2)>>2]|0;q=g*.5/+(f|0);q=q>2.0?q:2.0;E=(c[((c[C>>2]&3|0)==3?C:C+48|0)+40>>2]|0)+16|0;m=c[E>>2]|0;H=+h[m+16>>3];D=+h[m+24>>3];C=c[C+16>>2]|0;k=+h[C+16>>3];p=+h[C+24>>3];F=k+H;G=p+D;g=+h[C+56>>3];o=+h[C+64>>3];H=g+H;I=o+D;n=!(F>=H)?-1.0:1.0;s=+h[m+80>>3]*.5;switch(qO(d[C+49>>0]|0,d[C+89>>0]|0)|0){case 15:{k=(q-g+ +h[m+96>>3])*n;break}case 38:{k=(g+q+ +h[m+88>>3])*n;break}case 41:{k=(q-k+ +h[m+96>>3])*n;break}case 48:{k=(q-k+ +h[m+96>>3])*n;break}case 58:case 57:case 51:case 47:case 37:case 14:{k=n*.3333333333333333*(k-g+ +h[m+88>>3]+ +h[m+96>>3]);break}case 73:{k=(k+q+ +h[m+88>>3])*n;break}case 83:{k=(+h[m+88>>3]+k)*n;break}case 84:{k=((k-g+ +h[m+88>>3]+ +h[m+96>>3])*.5+q)*n;break}case 85:case 75:case 74:{k=((k-g+ +h[m+88>>3]+ +h[m+96>>3])*.5+q*2.0)*n;break}default:k=0.0}p=(s-p)*3.0;o=(s-o)*3.0;q=n*q;w=M+8|0;x=M+16|0;y=M+32|0;z=M+48|0;A=(H+F)*.5;B=M+64|0;C=M+80|0;u=M+96|0;v=M+104|0;t=0;g=s;p=s=(f|0))break;r=e+1|0;e=c[b+(e<<2)>>2]|0;o=g+i;p=p+i;n=n+i;k=k+q;h[M>>3]=F;h[w>>3]=G;s=k+F;rO(N,s,p*.3333333333333333+G);c[x>>2]=c[N>>2];c[x+4>>2]=c[N+4>>2];c[x+8>>2]=c[N+8>>2];c[x+12>>2]=c[N+12>>2];R=o+D;rO(O,s,R);c[y>>2]=c[O>>2];c[y+4>>2]=c[O+4>>2];c[y+8>>2]=c[O+8>>2];c[y+12>>2]=c[O+12>>2];rO(P,A,R);c[z>>2]=c[P>>2];c[z+4>>2]=c[P+4>>2];c[z+8>>2]=c[P+8>>2];c[z+12>>2]=c[P+12>>2];s=H-k;rO(K,s,R);c[B>>2]=c[K>>2];c[B+4>>2]=c[K+4>>2];c[B+8>>2]=c[K+8>>2];c[B+12>>2]=c[K+12>>2];rO(L,s,n*.3333333333333333+I);c[C>>2]=c[L>>2];c[C+4>>2]=c[L+4>>2];c[C+8>>2]=c[L+8>>2];c[C+12>>2]=c[L+12>>2];h[u>>3]=H;h[v>>3]=I;m=e+16|0;if((c[(c[m>>2]|0)+96>>2]|0)!=0?(S=(c[(c[(xC(c[((c[e>>2]&3|0)==3?e:e+48|0)+40>>2]|0)|0)+16>>2]|0)+116>>2]&1|0)==0,m=c[(c[m>>2]|0)+96>>2]|0,J=+h[(S?m+32|0:m+24|0)>>3],S=c[E>>2]|0,h[m+64>>3]=J*.5+o+ +h[S+24>>3],h[m+56>>3]=+h[S+16>>3],a[m+81>>0]=1,J>i):0)g=J+g;else g=o;dO(e,c[((c[e>>2]&3|0)==2?e:e+-48|0)+40>>2]|0,M,7,j);e=r;t=t+1|0}l=Q;return}function oO(b,e,f,g,i,j){b=b|0;e=e|0;f=f|0;g=+g;i=+i;j=j|0;var k=0,m=0.0,n=0.0,o=0.0,p=0.0,q=0,r=0,s=0,t=0,u=0,v=0.0,w=0,x=0,y=0,z=0.0,A=0,B=0,C=0.0,D=0,E=0.0,F=0.0,G=0.0,H=0.0,I=0.0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0.0,R=0.0,S=0;P=l;l=l+16080|0;L=P+80|0;M=P+64|0;N=P+48|0;O=P+32|0;J=P+16|0;K=P;B=c[b+(e<<2)>>2]|0;n=i*.5/+(f|0);n=n>2.0?n:2.0;D=(c[((c[B>>2]&3|0)==3?B:B+48|0)+40>>2]|0)+16|0;A=c[D>>2]|0;C=+h[A+16>>3];H=+h[A+24>>3];B=c[B+16>>2]|0;m=+h[B+16>>3];E=m+C;F=+h[B+24>>3]+H;i=+h[B+56>>3];G=i+C;H=+h[B+64>>3]+H;k=!(F>=H)?-1:1;p=+h[A+88>>3];switch(qO(d[B+49>>0]|0,d[B+89>>0]|0)|0){case 67:case 12:{if(F==H)k=0-k|0;break}default:{}}Q=(m+p)*3.0;m=(i+p)*3.0;v=n*+(k|0);u=L+8|0;w=L+16|0;x=L+32|0;y=L+48|0;z=(H+F)*.5;A=L+64|0;B=L+80|0;s=L+96|0;t=L+104|0;r=0;o=0.0;i=p;n=p=(f|0))break;q=e+1|0;e=c[b+(e<<2)>>2]|0;p=i+g;n=n+g;m=m+g;o=o+v;h[L>>3]=E;h[u>>3]=F;Q=o+F;rO(M,E-n*.3333333333333333,Q);c[w>>2]=c[M>>2];c[w+4>>2]=c[M+4>>2];c[w+8>>2]=c[M+8>>2];c[w+12>>2]=c[M+12>>2];R=C-p;rO(N,R,Q);c[x>>2]=c[N>>2];c[x+4>>2]=c[N+4>>2];c[x+8>>2]=c[N+8>>2];c[x+12>>2]=c[N+12>>2];rO(O,R,z);c[y>>2]=c[O>>2];c[y+4>>2]=c[O+4>>2];c[y+8>>2]=c[O+8>>2];c[y+12>>2]=c[O+12>>2];Q=H-o;rO(J,R,Q);c[A>>2]=c[J>>2];c[A+4>>2]=c[J+4>>2];c[A+8>>2]=c[J+8>>2];c[A+12>>2]=c[J+12>>2];rO(K,G-m*.3333333333333333,Q);c[B>>2]=c[K>>2];c[B+4>>2]=c[K+4>>2];c[B+8>>2]=c[K+8>>2];c[B+12>>2]=c[K+12>>2];h[s>>3]=G;h[t>>3]=H;k=e+16|0;if((c[(c[k>>2]|0)+96>>2]|0)!=0?(S=(c[(c[(xC(c[((c[e>>2]&3|0)==3?e:e+48|0)+40>>2]|0)|0)+16>>2]|0)+116>>2]&1|0)==0,k=c[(c[k>>2]|0)+96>>2]|0,I=+h[(S?k+24|0:k+32|0)>>3],S=c[D>>2]|0,h[k+56>>3]=I*-.5-p+ +h[S+16>>3],h[k+64>>3]=+h[S+24>>3],a[k+81>>0]=1,I>g):0)i=I+i;else i=p;dO(e,c[((c[e>>2]&3|0)==2?e:e+-48|0)+40>>2]|0,L,7,j);e=q;r=r+1|0}l=P;return}function pO(b,e,f,g,i,j){b=b|0;e=e|0;f=f|0;g=+g;i=+i;j=j|0;var k=0.0,m=0.0,n=0.0,o=0.0,p=0,q=0,r=0,s=0,t=0,u=0,v=0.0,w=0,x=0.0,y=0.0,z=0.0,A=0.0,B=0.0,C=0,D=0,E=0,F=0.0,G=0,H=0,I=0.0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0.0,R=0.0,S=0;P=l;l=l+16080|0;L=P+80|0;M=P+64|0;N=P+48|0;O=P+32|0;J=P+16|0;K=P;C=c[b+(e<<2)>>2]|0;B=g*.5/+(f|0);w=(c[((c[C>>2]&3|0)==3?C:C+48|0)+40>>2]|0)+16|0;D=c[w>>2]|0;z=+h[D+16>>3];v=+h[D+24>>3];C=c[C+16>>2]|0;m=+h[C+24>>3];x=+h[C+16>>3]+z;y=m+v;n=+h[C+64>>3];z=+h[C+56>>3]+z;A=n+v;u=!(x>=z)?-1:1;o=+h[D+80>>3]*.5;C=(qO(d[C+49>>0]|0,d[C+89>>0]|0)|0)==67;m=(m+o)*3.0;n=(n+o)*3.0;B=(B>2.0?B:2.0)*+((C?0-u|0:u)|0);u=L+8|0;C=L+16|0;D=L+32|0;E=L+48|0;F=(z+x)*.5;G=L+64|0;H=L+80|0;s=L+96|0;t=L+104|0;g=o;k=0.0;m=o=(f|0))break;r=e+1|0;p=c[b+(e<<2)>>2]|0;o=g+i;m=m+i;n=n+i;k=k+B;h[L>>3]=x;h[u>>3]=y;Q=k+x;rO(M,Q,y-m*.3333333333333333);c[C>>2]=c[M>>2];c[C+4>>2]=c[M+4>>2];c[C+8>>2]=c[M+8>>2];c[C+12>>2]=c[M+12>>2];R=v-o;rO(N,Q,R);c[D>>2]=c[N>>2];c[D+4>>2]=c[N+4>>2];c[D+8>>2]=c[N+8>>2];c[D+12>>2]=c[N+12>>2];rO(O,F,R);c[E>>2]=c[O>>2];c[E+4>>2]=c[O+4>>2];c[E+8>>2]=c[O+8>>2];c[E+12>>2]=c[O+12>>2];Q=z-k;rO(J,Q,R);c[G>>2]=c[J>>2];c[G+4>>2]=c[J+4>>2];c[G+8>>2]=c[J+8>>2];c[G+12>>2]=c[J+12>>2];rO(K,Q,A-n*.3333333333333333);c[H>>2]=c[K>>2];c[H+4>>2]=c[K+4>>2];c[H+8>>2]=c[K+8>>2];c[H+12>>2]=c[K+12>>2];h[s>>3]=z;h[t>>3]=A;e=p+16|0;if((c[(c[e>>2]|0)+96>>2]|0)!=0?(S=(c[(c[(xC(c[((c[p>>2]&3|0)==3?p:p+48|0)+40>>2]|0)|0)+16>>2]|0)+116>>2]&1|0)==0,e=c[(c[e>>2]|0)+96>>2]|0,I=+h[(S?e+32|0:e+24|0)>>3],S=c[w>>2]|0,h[e+64>>3]=I*-.5-o+ +h[S+24>>3],h[e+56>>3]=+h[S+16>>3],a[e+81>>0]=1,I>i):0)g=I+g;else g=o;dO(p,c[((c[p>>2]&3|0)==2?p:p+-48|0)+40>>2]|0,L,7,j);e=r;q=q+1|0}l=P;return}function qO(a,b){a=a|0;b=b|0;var d=0;d=0;while(1){if((d|0)>=8){b=-1;break}if((c[22044+(d<<2)>>2]|0)==(b|0)){b=d;break}d=d+1|0}d=0;while(1){if((d|0)>=8){d=-1;break}if((c[22044+(d<<2)>>2]|0)==(a|0))break;d=d+1|0}if((d|b|0)<0)d=0;else d=c[22076+(d<<5)+(b<<2)>>2]|0;return d|0}function rO(a,b,c){a=a|0;b=+b;c=+c;h[a>>3]=b;h[a+8>>3]=c;return}function sO(b){b=b|0;var d=0,e=0;if((c[47203]|0)!=0|(c[47202]|0)!=0){d=b+16|0;e=c[(c[d>>2]|0)+100>>2]|0;if((e|0?(a[e+81>>0]|0)==0:0)?tO(b,1)|0:0){e=xC(c[((c[b>>2]&3|0)==3?b:b+48|0)+40>>2]|0)|0;zP(e,c[(c[d>>2]|0)+100>>2]|0)}e=c[(c[d>>2]|0)+104>>2]|0;if((e|0?(a[e+81>>0]|0)==0:0)?tO(b,0)|0:0){e=xC(c[((c[b>>2]&3|0)==3?b:b+48|0)+40>>2]|0)|0;zP(e,c[(c[d>>2]|0)+104>>2]|0)}}return}function tO(b,d){b=b|0;d=d|0;var e=0,f=0.0,g=0.0,i=0,j=0.0,k=0,m=0,n=0,o=0,p=0,q=0,r=0.0;q=l;l=l+96|0;o=q+32|0;m=q+16|0;n=q;i=b+16|0;do if((a[(c[i>>2]|0)+112>>0]|0)!=6){e=c[47203]|0;if(!((e|0)!=0?(a[(RA(b,e)|0)>>0]|0)!=0:0)){e=c[47202]|0;if(!e){e=0;break}if(!(a[(RA(b,e)|0)>>0]|0)){e=0;break}}d=d<<24>>24==0;p=c[i>>2]|0;p=c[(d?p+104|0:p+100|0)>>2]|0;e=uO(b)|0;if(e){k=c[e>>2]|0;do if(d){if(c[k+8>>2]|0){e=c[k>>2]|0;j=+h[e>>3];g=+h[k+16>>3];e=e+8|0;f=+h[k+24>>3];break}e=c[k>>2]|0;g=+h[e>>3];f=+h[e+8>>3];e=0;while(1){if((e|0)==4)break;n=o+(e<<4)|0;i=(c[k>>2]|0)+(e<<4)|0;c[n>>2]=c[i>>2];c[n+4>>2]=c[i+4>>2];c[n+8>>2]=c[i+8>>2];c[n+12>>2]=c[i+12>>2];e=e+1|0}kP(m,o,3,.1,0,0);j=+h[m>>3];e=m+8|0}else{d=(c[e+4>>2]|0)+-1|0;i=k+(d*48|0)|0;if(c[k+(d*48|0)+12>>2]|0){o=c[i>>2]|0;e=(c[k+(d*48|0)+4>>2]|0)+-1|0;j=+h[o+(e<<4)>>3];g=+h[k+(d*48|0)+32>>3];e=o+(e<<4)+8|0;f=+h[k+(d*48|0)+40>>3];break}m=c[i>>2]|0;d=k+(d*48|0)+4|0;e=(c[d>>2]|0)+-1|0;g=+h[m+(e<<4)>>3];f=+h[m+(e<<4)+8>>3];e=0;while(1){if((e|0)==4)break;m=o+(e<<4)|0;k=(c[i>>2]|0)+(e+-4+(c[d>>2]|0)<<4)|0;c[m>>2]=c[k>>2];c[m+4>>2]=c[k+4>>2];c[m+8>>2]=c[k+8>>2];c[m+12>>2]=c[k+12>>2];e=e+1|0}kP(n,o,3,.9,0,0);j=+h[n>>3];e=n+8|0}while(0);r=+K(+(+h[e>>3]-f),+(j-g));r=+_O(b,c[47203]|0,-25.0,-180.0)*.017453292519943295+r;j=+_O(b,c[47202]|0,1.0,0.0)*10.0;h[p+56>>3]=j*+E(+r)+g;h[p+64>>3]=+F(+r)*j+f;a[p+81>>0]=1;e=1}else e=0}else e=0;while(0);l=q;return e|0}function uO(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;h=l;l=l+16|0;f=h;d=b;while(1){e=c[d+16>>2]|0;d=c[e+8>>2]|0;if(d|0)break;if(!(a[e+112>>0]|0)){g=5;break}d=c[e+116>>2]|0}if((g|0)==5){g=KB(c[((c[b>>2]&3|0)==3?b:b+48|0)+40>>2]|0)|0;d=KB(c[((c[b>>2]&3|0)==2?b:b+-48|0)+40>>2]|0)|0;c[f>>2]=g;c[f+4>>2]=d;gA(1,106579,f)|0;d=0}l=h;return d|0}function vO(a,d,e){a=a|0;d=d|0;e=e|0;var f=0.0,g=0.0,i=0.0,j=0.0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0.0,u=0.0;s=l;l=l+96|0;m=s+80|0;n=s+64|0;o=s+48|0;p=s+32|0;q=s+16|0;r=s;k=b[(c[d+16>>2]|0)+136>>1]|0;d=e+16|0;wO(c[(c[d>>2]|0)+8>>2]|0,p,q);f=+h[p>>3];g=+h[q>>3];t=f-g;i=+h[p+8>>3];j=+h[q+8>>3];u=i-j;a:do if(u*u+t*t<1.0e-06){c[o>>2]=c[p>>2];c[o+4>>2]=c[p+4>>2];c[o+8>>2]=c[p+8>>2];c[o+12>>2]=c[p+12>>2]}else switch(k&14){case 4:case 10:{h[n>>3]=(g+f)*.5;h[n+8>>3]=(j+i)*.5;q=c[(c[d>>2]|0)+8>>2]|0;c[m>>2]=c[n>>2];c[m+4>>2]=c[n+4>>2];c[m+8>>2]=c[n+8>>2];c[m+12>>2]=c[n+12>>2];qP(r,q,m);c[o>>2]=c[r>>2];c[o+4>>2]=c[r+4>>2];c[o+8>>2]=c[r+8>>2];c[o+12>>2]=c[r+12>>2];break a}default:{xO(o,c[(c[d>>2]|0)+8>>2]|0,p,q);break a}}while(0);c[a>>2]=c[o>>2];c[a+4>>2]=c[o+4>>2];c[a+8>>2]=c[o+8>>2];c[a+12>>2]=c[o+12>>2];l=s;return}function wO(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;h=l;l=l+32|0;g=h+16|0;f=h;j=c[a>>2]|0;e=c[j>>2]|0;i=c[j+8>>2]|0;k=j+16|0;c[g>>2]=c[k>>2];c[g+4>>2]=c[k+4>>2];c[g+8>>2]=c[k+8>>2];c[g+12>>2]=c[k+12>>2];j=j+32|0;c[f>>2]=c[j>>2];c[f+4>>2]=c[j+4>>2];c[f+8>>2]=c[j+8>>2];c[f+12>>2]=c[j+12>>2];if(!i){c[b>>2]=c[e>>2];c[b+4>>2]=c[e+4>>2];c[b+8>>2]=c[e+8>>2];c[b+12>>2]=c[e+12>>2]}else{c[b>>2]=c[g>>2];c[b+4>>2]=c[g+4>>2];c[b+8>>2]=c[g+8>>2];c[b+12>>2]=c[g+12>>2]}i=c[a>>2]|0;j=(c[a+4>>2]|0)+-1|0;e=c[i+(j*48|0)>>2]|0;a=c[i+(j*48|0)+4>>2]|0;k=c[i+(j*48|0)+12>>2]|0;b=i+(j*48|0)+16|0;c[g>>2]=c[b>>2];c[g+4>>2]=c[b+4>>2];c[g+8>>2]=c[b+8>>2];c[g+12>>2]=c[b+12>>2];j=i+(j*48|0)+32|0;c[f>>2]=c[j>>2];c[f+4>>2]=c[j+4>>2];c[f+8>>2]=c[j+8>>2];c[f+12>>2]=c[j+12>>2];if(!k){k=e+(a+-1<<4)|0;c[d>>2]=c[k>>2];c[d+4>>2]=c[k+4>>2];c[d+8>>2]=c[k+8>>2];c[d+12>>2]=c[k+12>>2]}else{c[d>>2]=c[f>>2];c[d+4>>2]=c[f+4>>2];c[d+8>>2]=c[f+8>>2];c[d+12>>2]=c[f+12>>2]}l=h;return}function xO(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0.0,i=0,j=0,k=0,l=0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0,s=0.0;r=c[b+4>>2]|0;g=0.0;f=0;while(1){if((f|0)>=(r|0))break;l=c[b>>2]|0;k=c[l+(f*48|0)>>2]|0;l=c[l+(f*48|0)+4>>2]|0;i=3;j=0;while(1){if((i|0)>=(l|0))break;q=+h[k+(j<<4)>>3]-+h[k+(i<<4)>>3];p=+h[k+(j<<4)+8>>3]-+h[k+(i<<4)+8>>3];i=i+3|0;j=j+3|0;g=+C(+(p*p+q*q))+g}f=f+1|0}l=0;g=g*.5;a:while(1){if((l|0)>=(r|0)){f=15;break}k=c[b>>2]|0;j=c[k+(l*48|0)>>2]|0;k=c[k+(l*48|0)+4>>2]|0;f=3;i=0;while(1){if((f|0)>=(k|0))break;m=+h[j+(i<<4)>>3];p=+h[j+(i<<4)+8>>3];n=+h[j+(f<<4)>>3];o=+h[j+(f<<4)+8>>3];q=m-n;s=p-o;q=+C(+(s*s+q*q));if(q>=g){f=12;break a}f=f+3|0;i=i+3|0;g=g-q}l=l+1|0}if((f|0)==12){h[d>>3]=m;h[d+8>>3]=p;h[e>>3]=n;h[e+8>>3]=o;s=q-g;h[a>>3]=(s*m+n*g)/q;h[a+8>>3]=(s*p+o*g)/q;return}else if((f|0)==15)qa(138712,106514,1316,106641)}function yO(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;sO(b);return}function zO(b,d,e,f,g){b=b|0;d=d|0;e=+e;f=f|0;g=g|0;var i=0.0,j=0.0,k=0.0,l=0.0,m=0.0,n=0,o=0,p=0.0,q=0.0,r=0.0,s=0,t=0.0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0.0,C=0.0,D=0,G=0,H=0,I=0,J=0,K=0,L=0;J=AO(b)|0;I=c[J+4>>2]|0;K=c[J>>2]|0;H=I+-1|0;B=+h[K+(H<<6)+16>>3];C=+(I|0);D=(g|0)==2;G=(f|0)!=0;n=0;j=0.0;i=0.0;l=0.0;m=0.0;while(1){if((n|0)>=(I|0))break;b=~~+BO(+(n+-1|0),C);A=n+1|0;L=~~+BO(+(A|0),C);o=K+(n<<6)|0;m=+h[o>>3];z=K+(n<<6)+8|0;l=+h[z>>3];s=K+(n<<6)+16|0;t=+h[s>>3];u=K+(n<<6)+24|0;v=K+(n<<6)+32|0;w=K+(n<<6)+40|0;x=K+(n<<6)+48|0;y=K+(n<<6)+56|0;k=+CO(+h[K+(L<<6)+8>>3]-l,+h[K+(L<<6)>>3]-m);q=+CO(+h[K+(b<<6)+8>>3]-l,+h[K+(b<<6)>>3]-m);r=+hb[d&7](t,B,e);b=(n|0)==0;do if(b|(n|0)==(H|0))if(b){i=k+1.5707963267948966;if(!D){b=0;p=i;j=r;break}b=0;p=i;j=r;l=l-+F(+k)*r;m=m-+E(+k)*r;break}else{i=q+-1.5707963267948966;if(!D){b=0;p=i;j=r;break}b=0;p=i;j=r;l=l-+F(+q)*r;m=m-+E(+q)*r;break}else{p=k-q;p=1.5707963267948966-(p<0.0?p+6.283185307179586:p)*.5;j=+E(+p);j=j==0.0?0.0:r/j;i=k+1.5707963267948966;k=p+i;if(G|j>r*10.0){q=+BO(q+-1.5707963267948966,6.283185307179586);b=1;p=+BO(i,6.283185307179586);j=r;i=q}else{b=0;p=k;i=k}}while(0);h[o>>3]=m;h[z>>3]=l;h[s>>3]=t;a[u>>0]=108;h[v>>3]=i;h[w>>3]=j;c[x>>2]=b;h[y>>3]=p;n=A}o=JK(12)|0;b=0;while(1){if((b|0)>=(I|0))break;m=+h[K+(b<<6)>>3];l=+h[K+(b<<6)+8>>3];i=+h[K+(b<<6)+32>>3];j=+h[K+(b<<6)+40>>3];L=c[K+(b<<6)+48>>2]|0;k=+h[K+(b<<6)+56>>3];DO(o,+E(+i)*j+m,+F(+i)*j+l);if(L|0)EO(m,l,j,1,i,k,f,o);b=b+1|0}n=(g|0)==1;k=i+3.141592653589793;if(n)FO(o,m,l,j,i,k);else{DO(o,+E(+k)*j+m,+F(+k)*j+l);i=k}b=I+-2|0;k=m;while(1){if((b|0)<=-1)break;m=+h[K+(b<<6)>>3];l=+h[K+(b<<6)+8>>3];j=+h[K+(b<<6)+40>>3];L=c[K+(b<<6)+48>>2]|0;i=+h[K+(b<<6)+32>>3]+3.141592653589793;k=+h[K+(b<<6)+56>>3]+3.141592653589793;DO(o,+E(+k)*j+m,+F(+k)*j+l);if(L|0)EO(m,l,j,0,i,k,f,o);b=b+-1|0;k=m}if(n)FO(o,k,l,j,i,i+3.141592653589793);GO(J);return o|0}function AO(a){a=a|0;var b=0.0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0.0;q=l;l=l+144|0;i=q+128|0;h=q+112|0;j=q+96|0;k=q+64|0;m=q;n=q+80|0;o=HO()|0;p=c[a+4>>2]|0;f=c[a>>2]|0;c[i>>2]=c[f>>2];c[i+4>>2]=c[f+4>>2];c[i+8>>2]=c[f+8>>2];c[i+12>>2]=c[f+12>>2];IO(o,i,0.0);g=m+48|0;c[g>>2]=c[f>>2];c[g+4>>2]=c[f+4>>2];c[g+8>>2]=c[f+8>>2];c[g+12>>2]=c[f+12>>2];d=0;b=0.0;a:while(1){e=d+3|0;if((e|0)>=(p|0))break;c[m>>2]=c[g>>2];c[m+4>>2]=c[g+4>>2];c[m+8>>2]=c[g+8>>2];c[m+12>>2]=c[g+12>>2];a=1;while(1){if((a|0)==4)break;r=m+(a<<4)|0;s=f+(a+d<<4)|0;c[r>>2]=c[s>>2];c[r+4>>2]=c[s+4>>2];c[r+8>>2]=c[s+8>>2];c[r+12>>2]=c[s+12>>2];a=a+1|0}c[j>>2]=c[m>>2];c[j+4>>2]=c[m+4>>2];c[j+8>>2]=c[m+8>>2];c[j+12>>2]=c[m+12>>2];a=1;while(1){if((a|0)==21){d=e;continue a}kP(n,m,3,+(a|0)*.05,0,0);c[k>>2]=c[n>>2];c[k+4>>2]=c[n+4>>2];c[k+8>>2]=c[n+8>>2];c[k+12>>2]=c[n+12>>2];c[h>>2]=c[j>>2];c[h+4>>2]=c[j+4>>2];c[h+8>>2]=c[j+8>>2];c[h+12>>2]=c[j+12>>2];c[i>>2]=c[n>>2];c[i+4>>2]=c[n+4>>2];c[i+8>>2]=c[n+8>>2];c[i+12>>2]=c[n+12>>2];t=+JO(h,i)+b;c[i>>2]=c[k>>2];c[i+4>>2]=c[k+4>>2];c[i+8>>2]=c[k+8>>2];c[i+12>>2]=c[k+12>>2];IO(o,i,t);c[j>>2]=c[k>>2];c[j+4>>2]=c[k+4>>2];c[j+8>>2]=c[k+8>>2];c[j+12>>2]=c[k+12>>2];a=a+1|0;b=t}}KO(o);l=q;return o|0}function BO(a,b){a=+a;b=+b;var c=0.0;c=a-+A(+(a/b))*b;return +(!(a<0.0)&!(a>=b)?a:c)}function CO(a,b){a=+a;b=+b;if(!(a==0.0&b==0.0)){a=+K(+a,+b);if(!(a>=0.0))a=a+6.283185307179586}else a=0.0;return +a}function DO(a,b,d){a=a|0;b=+b;d=+d;var e=0,f=0;e=c[a>>2]|0;f=a+4|0;if((e|0)<(c[f>>2]|0))f=c[a+8>>2]|0;else{c[f>>2]=2e3;e=a+8|0;f=MK(c[e>>2]|0,32e3)|0;c[e>>2]=f;e=c[a>>2]|0}c[a>>2]=e+1;h[f+(e<<4)>>3]=b;h[f+(e<<4)+8>>3]=d;return}function EO(a,b,c,d,e,f,g,h){a=+a;b=+b;c=+c;d=d|0;e=+e;f=+f;g=g|0;h=h|0;var i=0.0;d=(d|0)==0;i=d?e:f;do if((g|0)==1){e=(d?f:e)-i;e=!(e<=1.7453292519943296e-03)?e:e+6.283185307179586;if(e<3.141592653589793){FO(h,a,b,c,e+i,i);break}else{DO(h,+E(+i)*c+a,+F(+i)*c+a);break}}else DO(h,+E(+i)*c+a,+F(+i)*c+a);while(0);return}function FO(a,b,c,d,e,f){a=a|0;b=+b;c=+c;d=+d;e=+e;f=+f;var g=0,h=0.0;DO(a,+E(+e)*d+b,+F(+e)*d+c);a:do if(!(d==0.0)){while(1){if(!(f>e))break;f=f+-6.283185307179586}f=e-f;while(1){if(!(f>6.283185307179586))break;f=f+-6.283185307179586}f=f*.05263157894736842;g=1;while(1){if((g|0)==20)break a;h=e-f*+(g|0);DO(a,+E(+h)*d+b,+F(+h)*d+c);g=g+1|0}}while(0);return}function GO(a){a=a|0;U1(c[a>>2]|0);U1(a);return}function HO(){var a=0;a=JK(12)|0;c[a+4>>2]=0;c[a+8>>2]=2e3;c[a>>2]=JK(128e3)|0;return a|0}function IO(a,b,d){a=a|0;b=b|0;d=+d;var e=0,f=0,g=0,i=0;i=a+4|0;e=c[i>>2]|0;f=a+8|0;g=c[f>>2]|0;if((e|0)<(g|0))a=c[a>>2]|0;else{c[f>>2]=g<<1;e=MK(c[a>>2]|0,g<<7)|0;c[a>>2]=e;a=e;e=c[i>>2]|0}h[a+(e<<6)>>3]=+h[b>>3];h[a+(e<<6)+8>>3]=+h[b+8>>3];c[i>>2]=e+1;h[a+(e<<6)+16>>3]=d;return}function JO(a,b){a=a|0;b=b|0;var c=0.0,d=0.0;c=+h[a>>3]-+h[b>>3];d=+h[a+8>>3]-+h[b+8>>3];return +(+C(+(d*d+c*c)))}function KO(a){a=a|0;var b=0;b=c[a+4>>2]|0;if((c[a+8>>2]|0)>(b|0))c[a>>2]=MK(c[a>>2]|0,b<<6)|0;return}function LO(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;k=l;l=l+16|0;j=k+8|0;i=k;g=k+12|0;c[g>>2]=0;h=c[d+4>>2]|0;if(!h)qa(106658,106669,203,106680);e=c[h>>2]|0;if(!e)qa(106694,106669,206,106680);f=h+8|0;if(!(c[f>>2]|0))c[f>>2]=MO(e)|0;if(!0)e=0;else{e=(PJ(c[h>>2]|0)|0)==0;e=e?0:g}if(!((dT(b,d,e)|0)<<24>>24))NO(d,e);do if(e|0){f=c[g>>2]|0;b=c[15712]|0;e=c[h>>2]|0;if(!f){c[j>>2]=e;w4(b,106737,j)|0;break}else{c[i>>2]=e;c[i+4>>2]=f;w4(b,106705,i)|0;break}}while(0);j=d+32|0;c[a>>2]=c[j>>2];c[a+4>>2]=c[j+4>>2];c[a+8>>2]=c[j+8>>2];c[a+12>>2]=c[j+12>>2];l=k;return}function MO(a){a=a|0;var b=0;b=c[47301]|0;if((b|0)!=0?(c3(b,a)|0)==0:0)a=c[47310]|0;else{U1(b);c[47301]=D4(a)|0;a=u5(189204,22332,35,36,95)|0;c[47310]=a}return a|0}function NO(b,d){b=b|0;d=d|0;var e=0,f=0.0,g=0,i=0.0,j=0,k=0.0;j=c[b+4>>2]|0;e=c[j>>2]|0;i=+h[j+16>>3];j=b+32|0;h[j>>3]=0.0;h[b+40>>3]=i*1.2;h[b+16>>3]=0.0;h[b+24>>3]=i*.1;c[b+8>>2]=0;c[b+12>>2]=0;if(j3(e,106771,4)|0)if((j3(e,106776,5)|0)!=0?(j3(e,106782,9)|0)!=0:0){g=4248;e=106792}else{g=8344;e=106828}else{g=6296;e=106809}if(d|0)c[d>>2]=e;e=c[b>>2]|0;if(e|0){f=0.0;while(1){b=a[e>>0]|0;if(!(b<<24>>24))break;k=f+ +h[g+((b&255)<<3)>>3];h[j>>3]=k;e=e+1|0;f=k}h[j>>3]=f*i}return}function OO(a,b){a=a|0;b=b|0;return c3(c[a>>2]|0,c[b>>2]|0)|0}function PO(a){a=a|0;var b=0;b=a+108|0;c[b>>2]=0;c[a+112>>2]=32;c[a+116>>2]=-1;c[a+120>>2]=33;c[a+124>>2]=63;c[a+128>>2]=55;c[a+132>>2]=0;c[a+136>>2]=0;c[a+140>>2]=0;b=Vz(b,c[4581]|0)|0;c[a+144>>2]=b;return b|0}function QO(a,b,d){a=a|0;b=b|0;d=d|0;d=V1(1,32)|0;a=c[b>>2]|0;if(a|0)c[d>>2]=D4(a)|0;a=c[b+4>>2]|0;if(a|0)c[d+4>>2]=D4(a)|0;c[d+24>>2]=c[b+24>>2]&127;h[d+16>>3]=+h[b+16>>3];c[d+8>>2]=c[b+8>>2];return d|0}function RO(a,b,d){a=a|0;b=b|0;d=d|0;U1(c[b>>2]|0);U1(c[b+4>>2]|0);U1(b);return}function SO(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,g=0.0,i=0,j=0;a=c[b>>2]|0;e=c[d>>2]|0;i=(e|0)==0;if(!a)if(i)j=5;else a=-1;else if(!i){a=s2(a,e)|0;if(!a)j=5}else a=1;do if((j|0)==5){a=c[b+4>>2]|0;e=c[d+4>>2]|0;i=(e|0)==0;if(!a){if(!i){a=-1;break}}else{if(i){a=1;break}a=s2(a,e)|0;if(a|0)break}a=(c[b+24>>2]&127)-(c[d+24>>2]&127)|0;if(!a){g=+h[b+16>>3];f=+h[d+16>>3];if(gf&1}}while(0);return a|0}function TO(){eb(189244)|0;return}function UO(){var a=0,b=0;b=l;l=l+16|0;a=b;eb(a|0)|0;l=b;return +(+((c[a+4>>2]|0)+(c[a>>2]|0)-(c[47311]|0)-(c[47312]|0)|0)*.016666666666666666)}function VO(a){a=a|0;var b=0,d=0;b=JK(16)|0;a=(a|0)>2?a:2;d=JK(a<<2)|0;c[b>>2]=d;c[b+12>>2]=d;c[b+8>>2]=d;c[b+4>>2]=d+(a<<2);return b|0}function WO(a){a=a|0;U1(c[a>>2]|0);U1(a);return}function XO(a,b){a=a|0;b=b|0;var d=0,e=0;d=a+12|0;e=c[d>>2]|0;c[d>>2]=e+4;c[e>>2]=b;if((c[d>>2]|0)>>>0>=(c[a+4>>2]|0)>>>0)c[d>>2]=c[a>>2];return}function YO(a){a=a|0;var b=0,d=0,e=0;d=a+8|0;b=c[d>>2]|0;if((b|0)!=(c[a+12>>2]|0)){e=b+4|0;c[d>>2]=e;b=c[b>>2]|0;if(e>>>0>=(c[a+4>>2]|0)>>>0)c[d>>2]=c[a>>2]}else b=0;return b|0}function ZO(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;i=l;l=l+16|0;g=i;if(((d|0)!=0?(h=RA(b,d)|0,(h|0)!=0):0)?(a[h>>0]|0)!=0:0){d=y4(h,g,10)|0;e=(h|0)==(c[g>>2]|0)?e:(d|0)<(f|0)?f:d}l=i;return e|0}function _O(b,d,e,f){b=b|0;d=d|0;e=+e;f=+f;var g=0,h=0,i=0,j=0.0;i=l;l=l+16|0;g=i;if(((b|0)!=0&(d|0)!=0?(h=RA(b,d)|0,(h|0)!=0):0)?(a[h>>0]|0)!=0:0){j=+s5(h,g);e=(h|0)==(c[g>>2]|0)?e:j0.0)){b=+_O(a,GA(a,0,107638,0)|0,-1.0,0.0);b=b==0.0?72.0:b}return +b}function aP(a,b,c){a=a|0;b=b|0;c=c|0;if((a|0)!=0&(b|0)!=0)c=RA(a,b)|0;return c|0}function bP(b,c,d){b=b|0;c=c|0;d=d|0;b=aP(b,c,d)|0;if((b|0)!=0?(a[b>>0]|0)!=0:0)d=b;return d|0}function cP(a,b,c){a=a|0;b=b|0;c=c|0;if(!b)a=c&255;else a=dP(RA(a,b)|0)|0;return a|0}function dP(a){a=a|0;return eP(a,0)|0}function eP(b,c){b=b|0;c=c|0;var d=0;if((b|0)!=0?(d=a[b>>0]|0,d<<24>>24!=0):0)if((c3(b,137308)|0)!=0?(c3(b,107649)|0)!=0:0)if((c3(b,107652)|0)!=0?(c3(b,107657)|0)!=0:0){if(((d<<24>>24)+-48|0)>>>0<10)c=(q5(b)|0)&255}else c=1;else c=0;return c|0}function fP(a){a=a|0;var b=0,d=0;while(1){b=(c[a+16>>2]|0)+220|0;d=c[b>>2]|0;if(!((d|0)!=(a|0)&(d|0)!=0))break;a=c[(c[d+16>>2]|0)+220>>2]|0;if(!a){a=d;continue}c[b>>2]=a}return a|0}function gP(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;if((a|0)!=(b|0)){d=c[a+16>>2]|0;e=d+220|0;if(!(c[e>>2]|0)){c[e>>2]=a;c[d+216>>2]=1}else a=fP(a)|0;d=c[b+16>>2]|0;e=d+220|0;if(!(c[e>>2]|0)){c[e>>2]=b;c[d+216>>2]=1}else{d=fP(b)|0;b=d;d=c[d+16>>2]|0}g=a+16|0;e=c[g>>2]|0;f=b+16|0;h=(c[e+120>>2]|0)>(c[d+120>>2]|0);a=h?b:a;c[(h?e:d)+220>>2]=a;e=(c[(h?f:g)>>2]|0)+216|0;c[e>>2]=(c[e>>2]|0)+(c[(c[(h?g:f)>>2]|0)+216>>2]|0)}return a|0}function hP(b){b=b|0;b=c[b+16>>2]|0;c[b+216>>2]=1;c[b+220>>2]=0;a[b+159>>0]=0;return}function iP(a,b){a=a|0;b=b|0;if((fP(a)|0)==(a|0)){a=c[a+16>>2]|0;c[a+220>>2]=b;b=(c[b+16>>2]|0)+216|0;c[b>>2]=(c[b>>2]|0)+(c[a+216>>2]|0);return}else qa(107669,107661,194,107685)}function jP(a,b){a=a|0;b=b|0;var d=0.0;b=c[(c[b+16>>2]|0)+132>>2]|0;d=+h[b+8>>3]*72.0;h[a>>3]=+h[b>>3]*72.0;h[a+8>>3]=d;return}function kP(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=+e;f=f|0;g=g|0;var i=0,j=0,k=0,m=0.0,n=0,o=0,p=0;o=l;l=l+576|0;n=o;i=0;while(1){if((i|0)>(d|0))break;k=n+(i<<4)|0;j=b+(i<<4)|0;c[k>>2]=c[j>>2];c[k+4>>2]=c[j+4>>2];c[k+8>>2]=c[j+8>>2];c[k+12>>2]=c[j+12>>2];i=i+1|0}m=1.0-e;i=1;while(1){if((i|0)>(d|0))break;j=d-i|0;k=i+-1|0;b=0;while(1){if((b|0)>(j|0))break;p=b+1|0;h[n+(i*96|0)+(b<<4)>>3]=+h[n+(k*96|0)+(p<<4)>>3]*e+ +h[n+(k*96|0)+(b<<4)>>3]*m;h[n+(i*96|0)+(b<<4)+8>>3]=+h[n+(k*96|0)+(p<<4)+8>>3]*e+ +h[n+(k*96|0)+(b<<4)+8>>3]*m;b=p}i=i+1|0}a:do if(f|0){i=0;while(1){if((i|0)>(d|0))break a;p=f+(i<<4)|0;k=n+(i*96|0)|0;c[p>>2]=c[k>>2];c[p+4>>2]=c[k+4>>2];c[p+8>>2]=c[k+8>>2];c[p+12>>2]=c[k+12>>2];i=i+1|0}}while(0);b:do if(g|0){i=0;while(1){if((i|0)>(d|0))break b;p=g+(i<<4)|0;f=n+((d-i|0)*96|0)+(i<<4)|0;c[p>>2]=c[f>>2];c[p+4>>2]=c[f+4>>2];c[p+8>>2]=c[f+8>>2];c[p+12>>2]=c[f+12>>2];i=i+1|0}}while(0);p=n+(d*96|0)|0;c[a>>2]=c[p>>2];c[a+4>>2]=c[p+4>>2];c[a+8>>2]=c[p+8>>2];c[a+12>>2]=c[p+12>>2];l=o;return}function lP(b){b=b|0;var d=0,e=0,f=0,g=0;e=0;do{d=c[47315]|0;f=d+1024|0;if((d-e|0)<1024){c[47315]=f;f=MK(c[47316]|0,f)|0;c[47316]=f;d=c[47315]|0}else f=c[47316]|0;d=c4(f+e|0,d-e|0,b)|0;if(!d){g=6;break}e=(l2(d)|0)+e|0;d=c[47316]|0}while((a[d+(e+-1)>>0]|0)!=10);if((g|0)==6)d=c[47316]|0;return ((e|0)>0?d:0)|0}function mP(b){b=b|0;var d=0,e=0,f=0;f=l;l=l+16|0;do if((b|0)!=0?(a[b>>0]|0)!=0:0)if(!0){d=c[47133]|0;e=c[47318]|0;if((c[47317]|0)==(d|0))d=e;else{if(e){U1(c[e>>2]|0);U1(c[47318]|0);c[47318]=0;d=c[47133]|0}c[47317]=d;if(!d)break;if(!(a[d>>0]|0))break;d=nP(d)|0;c[47318]=d}if(!((a[b>>0]|0)!=47&(d|0)!=0))break;b=oP(d,c[47319]|0,b)|0;break}else S();else b=0;while(0);l=f;return b|0}function nP(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;e=0;f=0;g=0;b=D4(a)|0;d=0;while(1){b=A4(b,107984)|0;if(!b)break;a=(g<<2)+8|0;if(!f)a=KK(a)|0;else a=MK(d,a)|0;c[a+(g<<2)>>2]=b;f=l2(b)|0;e=e>>>0>f>>>0?e:f;f=a;g=g+1|0;b=0;d=a}c[f+(g<<2)>>2]=0;c[47319]=e;return f|0}function oP(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;g=l;l=l+16|0;e=g;h=c[47320]|0;c[47320]=W1(h,b+2+(l2(d)|0)|0)|0;while(1){b=c[a>>2]|0;if(!b){a=0;break}h=c[47320]|0;c[e>>2]=b;c[e+4>>2]=107982;c[e+8>>2]=d;m4(h,107975,e)|0;if(!(_4(c[47320]|0,4)|0)){f=4;break}else a=a+4|0}if((f|0)==4)a=c[47320]|0;l=g;return a|0}function pP(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;g=(b|0)==0;f=0;while(1){h=c[d+(f<<2)>>2]|0;if(!h)break;if((!g?(a[b>>0]|0)==(a[h>>0]|0):0)?(s2(b,h)|0)==0:0)break;f=f+1|0}return c[e+(f<<2)>>2]|0}function qP(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0.0,i=0.0,j=0.0,k=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;z=l;l=l+80|0;x=z+16|0;y=z;u=c[b+4>>2]|0;v=c[b>>2]|0;w=d+8|0;f=0;e=-1;g=1.e+38;b=-1;while(1){if((f|0)>=(u|0))break;s=c[v+(f*48|0)>>2]|0;t=c[v+(f*48|0)+4>>2]|0;r=0;while(1){if((r|0)>=(t|0))break;q=+h[s+(r<<4)>>3]-+h[d>>3];p=+h[s+(r<<4)+8>>3]-+h[w>>3];q=p*p+q*q;A=(e|0)==-1|q>2]|0;e=e+(((e|0)==((c[v+(b*48|0)+4>>2]|0)+-1|0))<<31>>31)|0;e=e-((e|0)%3|0)|0;b=0;while(1){if((b|0)==4)break;C=b+e|0;h[x+(b<<4)>>3]=+h[f+(C<<4)>>3];h[x+(b<<4)+8>>3]=+h[f+(C<<4)+8>>3];b=b+1|0}q=+h[d>>3];k=+h[x>>3]-q;o=+h[w>>3];p=+h[x+8>>3]-o;j=+h[x+48>>3]-q;n=+h[x+56>>3]-o;b=y+8|0;g=1.0;i=0.0;j=n*n+j*j;k=p*p+k*k;while(1){p=(g+i)*.5;kP(y,x,3,p,0,0);m=+h[y>>3];n=+h[b>>3];if(+B(+(k-j))<1.0)break;if(+B(+(g-i))<1.0e-05)break;C=k>3]=m;h[a+8>>3]=n;l=z;return}function rP(){return 0}function sP(b){b=b|0;var d=0.0,e=0,f=0,g=0,i=0,j=0,k=0,l=0;d=+_O(b,c[47146]|0,.75,.01);g=b+16|0;h[(c[g>>2]|0)+32>>3]=d;d=+_O(b,c[47145]|0,.5,.02);h[(c[g>>2]|0)+40>>3]=d;l=jN(bP(b,c[47147]|0,107986)|0,b)|0;c[(c[g>>2]|0)+8>>2]=l;l=RA(b,c[47154]|0)|0;d=+_O(b,c[47150]|0,14.0,1.0);e=bP(b,c[47151]|0,107994)|0;f=bP(b,c[47152]|0,137314)|0;i=(iD(l)|0)!=0;k=(WM(b)|0)==2;i=zK(b,l,(k?4:0)|(i?2:0),d,e,f)|0;c[(c[g>>2]|0)+104>>2]=i;i=c[47155]|0;if((i|0?(j=RA(b,i)|0,j|0):0)?a[j>>0]|0:0){l=(iD(j)|0)!=0;l=zK(b,j,l?2:0,d,e,f)|0;c[(c[g>>2]|0)+108>>2]=l;l=(c[(xC(b)|0)+16>>2]|0)+113|0;a[l>>0]=a[l>>0]|16}k=(ZO(b,c[47158]|0,0,0)|0)&255;l=c[g>>2]|0;a[l+144>>0]=k;tb[c[c[(c[l+8>>2]|0)+4>>2]>>2]&127](b);return}function tP(b){b=b|0;var d=0,e=0,f=0,g=0,i=0.0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;v=l;l=l+112|0;m=v+96|0;n=v+80|0;s=v+40|0;u=v;r=b+48|0;p=xC(c[((c[b>>2]&3|0)==3?b:r)+40>>2]|0)|0;g=m+8|0;c[g>>2]=0;o=n+8|0;c[o>>2]=0;d=c[47182]|0;if(((d|0)!=0?(e=RA(b,d)|0,(e|0)!=0):0)?(a[e>>0]|0)!=0:0){uP(b,m);t=(iD(e)|0)!=0;i=+h[m>>3];f=c[g>>2]|0;d=c[m+12>>2]|0;e=zK(b,e,t?2:0,i,f,d)|0;t=b+16|0;c[(c[t>>2]|0)+96>>2]=e;e=(c[p+16>>2]|0)+113|0;a[e>>0]=a[e>>0]|1;e=dP(aP(b,c[47192]|0,137308)|0)|0;a[(c[t>>2]|0)+114>>0]=e;t=1;e=f}else{t=0;d=0;i=0.0;e=0}f=c[47183]|0;if((f|0?(j=RA(b,f)|0,j|0):0)?a[j>>0]|0:0){if(!e){uP(b,m);i=+h[m>>3];e=c[g>>2]|0;d=c[m+12>>2]|0}g=(iD(j)|0)!=0;j=zK(b,j,g?2:0,i,e,d)|0;c[(c[b+16>>2]|0)+108>>2]=j;j=(c[p+16>>2]|0)+113|0;a[j>>0]=a[j>>0]|32}d=c[47197]|0;if(((d|0)!=0?(k=RA(b,d)|0,(k|0)!=0):0)?(a[k>>0]|0)!=0:0){vP(b,m,n);j=(iD(k)|0)!=0;i=+h[n>>3];d=c[o>>2]|0;e=c[n+12>>2]|0;k=zK(b,k,j?2:0,i,d,e)|0;c[(c[b+16>>2]|0)+100>>2]=k;k=(c[p+16>>2]|0)+113|0;a[k>>0]=a[k>>0]|2}else{e=0;i=0.0;d=0}f=c[47198]|0;if((f|0?(q=RA(b,f)|0,q|0):0)?a[q>>0]|0:0){if(!d){vP(b,m,n);e=c[n+12>>2]|0;i=+h[n>>3];d=c[o>>2]|0}o=(iD(q)|0)!=0;q=zK(b,q,o?2:0,i,d,e)|0;c[(c[b+16>>2]|0)+104>>2]=q;q=(c[p+16>>2]|0)+113|0;a[q>>0]=a[q>>0]|4}d=QA(b,111455)|0;d=d|0?d:195059;if(a[d>>0]|0)a[(c[(c[((c[b>>2]&3|0)==3?b:r)+40>>2]|0)+16>>2]|0)+145>>0]=1;g=b+16|0;f=(c[g>>2]|0)+16|0;e=c[((c[b>>2]&3|0)==3?b:r)+40>>2]|0;wP(s,c[(c[(c[(c[e+16>>2]|0)+8>>2]|0)+4>>2]|0)+8>>2]|0,e,d);d=s;e=f+40|0;do{c[f>>2]=c[d>>2];f=f+4|0;d=d+4|0}while((f|0)<(e|0));if((xP(b,c[47204]|0)|0)<<24>>24)a[(c[g>>2]|0)+46>>0]=0;d=QA(b,111464)|0;d=d|0?d:195059;if(!(a[d>>0]|0))e=b+-48|0;else{e=b+-48|0;a[(c[(c[((c[b>>2]&3|0)==2?b:e)+40>>2]|0)+16>>2]|0)+145>>0]=1}f=(c[g>>2]|0)+56|0;e=c[((c[b>>2]&3|0)==2?b:e)+40>>2]|0;wP(u,c[(c[(c[(c[e+16>>2]|0)+8>>2]|0)+4>>2]|0)+8>>2]|0,e,d);d=u;e=f+40|0;do{c[f>>2]=c[d>>2];f=f+4|0;d=d+4|0}while((f|0)<(e|0));if((xP(b,c[47205]|0)|0)<<24>>24)a[(c[g>>2]|0)+86>>0]=0;l=v;return t|0}function uP(a,b){a=a|0;b=b|0;h[b>>3]=+_O(a,c[47179]|0,14.0,1.0);c[b+8>>2]=bP(a,c[47180]|0,107994)|0;c[b+12>>2]=bP(a,c[47181]|0,137314)|0;return}function vP(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=b+8|0;if(!(c[e>>2]|0))uP(a,b);h[d>>3]=+_O(a,c[47199]|0,+h[b>>3],1.0);c[d+8>>2]=bP(a,c[47200]|0,c[e>>2]|0)|0;c[d+12>>2]=bP(a,c[47201]|0,c[b+12>>2]|0)|0;return}function wP(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0;m=l;l=l+128|0;k=m+80|0;h=m+40|0;g=m;if((f|0)!=0?(j=R2(f,58)|0,(j|0)!=0):0){a[j>>0]=0;i=j+1|0;xb[d&31](h,e,f,i);e=k;g=h;d=e+36|0;do{c[e>>2]=c[g>>2];e=e+4|0;g=g+4|0}while((e|0)<(d|0));a[j>>0]=58;f=i}else{xb[d&31](g,e,f,0);e=k;d=e+36|0;do{c[e>>2]=c[g>>2];e=e+4|0;g=g+4|0}while((e|0)<(d|0))}e=b;g=k;d=e+36|0;do{c[e>>2]=c[g>>2];e=e+4|0;g=g+4|0}while((e|0)<(d|0));c[b+36>>2]=f;l=m;return}function xP(b,c){b=b|0;c=c|0;var d=0;if(((c|0)!=0?(d=RA(b,c)|0,(d|0)!=0):0)?(a[d>>0]|0)!=0:0)b=(dP(d)|0)<<24>>24==0&1;else b=0;return b|0}function yP(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0,k=0,m=0,n=0.0,o=0.0;k=l;l=l+32|0;i=k;j=c[b+8>>2]|0;d=c[b+4>>2]|0;d=(c[b+44>>2]|0)+((O((d|0)>1?d+-1|0:0,j)|0)<<4)|0;e=i+16|0;c[e>>2]=c[d>>2];c[e+4>>2]=c[d+4>>2];c[e+8>>2]=c[d+8>>2];c[e+12>>2]=c[d+12>>2];c[i>>2]=c[d>>2];c[i+4>>2]=c[d+4>>2];c[i+8>>2]=c[d+8>>2];c[i+12>>2]=c[d+12>>2];f=i+8|0;g=i+24|0;b=1;while(1){if((b|0)>=(j|0))break;m=d+(b<<4)|0;o=+h[m>>3];h[i>>3]=+h[(+h[i>>3]>3];n=+h[m+8>>3];h[f>>3]=+h[(+h[f>>3]>3];h[e>>3]=+h[(+h[e>>3]>o?e:m)>>3];h[g>>3]=+h[(+h[g>>3]>n?e:m)+8>>3];b=b+1|0}c[a>>2]=c[i>>2];c[a+4>>2]=c[i+4>>2];c[a+8>>2]=c[i+8>>2];c[a+12>>2]=c[i+12>>2];c[a+16>>2]=c[i+16>>2];c[a+20>>2]=c[i+20>>2];c[a+24>>2]=c[i+24>>2];c[a+28>>2]=c[i+28>>2];l=k;return}function zP(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;d=l;l=l+64|0;g=d+32|0;e=d;f=c[a+16>>2]|0;a=f+16|0;f=c[f+116>>2]&1;c[g>>2]=c[a>>2];c[g+4>>2]=c[a+4>>2];c[g+8>>2]=c[a+8>>2];c[g+12>>2]=c[a+12>>2];c[g+16>>2]=c[a+16>>2];c[g+20>>2]=c[a+20>>2];c[g+24>>2]=c[a+24>>2];c[g+28>>2]=c[a+28>>2];AP(e,g,b,f);c[a>>2]=c[e>>2];c[a+4>>2]=c[e+4>>2];c[a+8>>2]=c[e+8>>2];c[a+12>>2]=c[e+12>>2];c[a+16>>2]=c[e+16>>2];c[a+20>>2]=c[e+20>>2];c[a+24>>2]=c[e+24>>2];c[a+28>>2]=c[e+28>>2];l=d;return}function AP(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,g=0.0,i=0.0,j=0,k=0.0,l=0.0,m=0.0;g=+h[d+56>>3];l=+h[d+64>>3];j=e<<24>>24==0;k=+h[d+24>>3];i=+h[d+32>>3];m=(j?k:i)*.5;f=g-m;g=m+g;if(f<+h[b>>3])h[b>>3]=f;e=b+16|0;if(g>+h[e>>3])h[e>>3]=g;g=(j?i:k)*.5;f=l-g;g=g+l;e=b+8|0;if(f<+h[e>>3])h[e>>3]=f;e=b+24|0;if(g>+h[e>>3])h[e>>3]=g;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];c[a+16>>2]=c[b+16>>2];c[a+20>>2]=c[b+20>>2];c[a+24>>2]=c[b+24>>2];c[a+28>>2]=c[b+28>>2];return}function BP(b){b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0.0,N=0.0,O=0.0,P=0.0;L=l;l=l+448|0;H=L+416|0;t=L+384|0;u=L+304|0;K=L+256|0;G=L+192|0;B=L+144|0;C=L+96|0;d=L+400|0;e=L+368|0;f=L+352|0;g=L+336|0;v=L+288|0;w=L+224|0;x=L+160|0;y=L+112|0;z=L+64|0;A=L+32|0;I=L;J=b+16|0;if((tB(b)|0)==0?(c[(c[J>>2]|0)+180>>2]|0)==0:0){CP(d,0.0,0.0);c[K>>2]=c[d>>2];c[K+4>>2]=c[d+4>>2];c[K+8>>2]=c[d+8>>2];c[K+12>>2]=c[d+12>>2];K=K+16|0;CP(e,0.0,0.0);c[K>>2]=c[e>>2];c[K+4>>2]=c[e+4>>2];c[K+8>>2]=c[e+8>>2];c[K+12>>2]=c[e+12>>2]}else{CP(f,2147483647.0,2147483647.0);c[K>>2]=c[f>>2];c[K+4>>2]=c[f+4>>2];c[K+8>>2]=c[f+8>>2];c[K+12>>2]=c[f+12>>2];F=K+16|0;CP(g,-2147483647.0,-2147483647.0);c[F>>2]=c[g>>2];c[F+4>>2]=c[g+4>>2];c[F+8>>2]=c[g+8>>2];c[F+12>>2]=c[g+12>>2];o=C+8|0;p=u+16|0;D=K+8|0;q=u+8|0;E=K+24|0;r=u+24|0;s=B+8|0;n=jC(b)|0;while(1){if(!n)break;jP(B,n);d=n+16|0;m=c[d>>2]|0;h[C>>3]=(+h[m+96>>3]+ +h[m+88>>3])*.5;h[o>>3]=+h[m+80>>3]*.5;c[t>>2]=c[B>>2];c[t+4>>2]=c[B+4>>2];c[t+8>>2]=c[B+8>>2];c[t+12>>2]=c[B+12>>2];c[H>>2]=c[C>>2];c[H+4>>2]=c[C+4>>2];c[H+8>>2]=c[C+8>>2];c[H+12>>2]=c[C+12>>2];DP(u,t,H);c[t>>2]=c[B>>2];c[t+4>>2]=c[B+4>>2];c[t+8>>2]=c[B+8>>2];c[t+12>>2]=c[B+12>>2];c[H>>2]=c[C>>2];c[H+4>>2]=c[C+4>>2];c[H+8>>2]=c[C+8>>2];c[H+12>>2]=c[C+12>>2];EP(v,t,H);c[p>>2]=c[v>>2];c[p+4>>2]=c[v+4>>2];c[p+8>>2]=c[v+8>>2];c[p+12>>2]=c[v+12>>2];h[K>>3]=+h[(+h[K>>3]<+h[u>>3]?K:u)>>3];h[D>>3]=+h[(+h[D>>3]<+h[q>>3]?K:u)+8>>3];h[F>>3]=+h[(+h[F>>3]>+h[p>>3]?K:u)+16>>3];h[E>>3]=+h[(+h[E>>3]>+h[r>>3]?K:u)+24>>3];d=c[(c[d>>2]|0)+108>>2]|0;if(d|0?a[d+81>>0]|0:0){m=c[(c[J>>2]|0)+116>>2]&1;c[H>>2]=c[K>>2];c[H+4>>2]=c[K+4>>2];c[H+8>>2]=c[K+8>>2];c[H+12>>2]=c[K+12>>2];c[H+16>>2]=c[K+16>>2];c[H+20>>2]=c[K+20>>2];c[H+24>>2]=c[K+24>>2];c[H+28>>2]=c[K+28>>2];AP(w,H,d,m);c[K>>2]=c[w>>2];c[K+4>>2]=c[w+4>>2];c[K+8>>2]=c[w+8>>2];c[K+12>>2]=c[w+12>>2];c[K+16>>2]=c[w+16>>2];c[K+20>>2]=c[w+20>>2];c[K+24>>2]=c[w+24>>2];c[K+28>>2]=c[w+28>>2]}m=XA(b,n)|0;while(1){if(!m)break;k=m+16|0;d=c[k>>2]|0;j=d+8|0;e=c[j>>2]|0;if(e|0){i=0;while(1){if((i|0)<(c[e+4>>2]|0))g=0;else break;while(1){f=c[e>>2]|0;if((g|0)>=(c[f+(i*48|0)+4>>2]|0))break;e=(c[f+(i*48|0)>>2]|0)+(g<<4)|0;c[B>>2]=c[e>>2];c[B+4>>2]=c[e+4>>2];c[B+8>>2]=c[e+8>>2];c[B+12>>2]=c[e+12>>2];N=+h[B>>3];h[K>>3]=+h[(+h[K>>3]>3];M=+h[s>>3];h[D>>3]=+h[(+h[D>>3]>3];h[F>>3]=+h[(+h[F>>3]>N?F:B)>>3];h[E>>3]=+h[(+h[E>>3]>M?F:B)+8>>3];g=g+1|0;e=c[j>>2]|0}i=i+1|0}e=c[d+96>>2]|0;if((e|0)!=0?(a[e+81>>0]|0)!=0:0){d=c[(c[J>>2]|0)+116>>2]&1;c[H>>2]=c[K>>2];c[H+4>>2]=c[K+4>>2];c[H+8>>2]=c[K+8>>2];c[H+12>>2]=c[K+12>>2];c[H+16>>2]=c[K+16>>2];c[H+20>>2]=c[K+20>>2];c[H+24>>2]=c[K+24>>2];c[H+28>>2]=c[K+28>>2];AP(x,H,e,d);c[K>>2]=c[x>>2];c[K+4>>2]=c[x+4>>2];c[K+8>>2]=c[x+8>>2];c[K+12>>2]=c[x+12>>2];c[K+16>>2]=c[x+16>>2];c[K+20>>2]=c[x+20>>2];c[K+24>>2]=c[x+24>>2];c[K+28>>2]=c[x+28>>2];d=c[k>>2]|0}e=c[d+100>>2]|0;if((e|0)!=0?(a[e+81>>0]|0)!=0:0){d=c[(c[J>>2]|0)+116>>2]&1;c[H>>2]=c[K>>2];c[H+4>>2]=c[K+4>>2];c[H+8>>2]=c[K+8>>2];c[H+12>>2]=c[K+12>>2];c[H+16>>2]=c[K+16>>2];c[H+20>>2]=c[K+20>>2];c[H+24>>2]=c[K+24>>2];c[H+28>>2]=c[K+28>>2];AP(y,H,e,d);c[K>>2]=c[y>>2];c[K+4>>2]=c[y+4>>2];c[K+8>>2]=c[y+8>>2];c[K+12>>2]=c[y+12>>2];c[K+16>>2]=c[y+16>>2];c[K+20>>2]=c[y+20>>2];c[K+24>>2]=c[y+24>>2];c[K+28>>2]=c[y+28>>2];d=c[k>>2]|0}e=c[d+104>>2]|0;if((e|0)!=0?(a[e+81>>0]|0)!=0:0){d=c[(c[J>>2]|0)+116>>2]&1;c[H>>2]=c[K>>2];c[H+4>>2]=c[K+4>>2];c[H+8>>2]=c[K+8>>2];c[H+12>>2]=c[K+12>>2];c[H+16>>2]=c[K+16>>2];c[H+20>>2]=c[K+20>>2];c[H+24>>2]=c[K+24>>2];c[H+28>>2]=c[K+28>>2];AP(z,H,e,d);c[K>>2]=c[z>>2];c[K+4>>2]=c[z+4>>2];c[K+8>>2]=c[z+8>>2];c[K+12>>2]=c[z+12>>2];c[K+16>>2]=c[z+16>>2];c[K+20>>2]=c[z+20>>2];c[K+24>>2]=c[z+24>>2];c[K+28>>2]=c[z+28>>2];d=c[k>>2]|0}d=c[d+108>>2]|0;if(d|0?a[d+81>>0]|0:0){k=c[(c[J>>2]|0)+116>>2]&1;c[H>>2]=c[K>>2];c[H+4>>2]=c[K+4>>2];c[H+8>>2]=c[K+8>>2];c[H+12>>2]=c[K+12>>2];c[H+16>>2]=c[K+16>>2];c[H+20>>2]=c[K+20>>2];c[H+24>>2]=c[K+24>>2];c[H+28>>2]=c[K+28>>2];AP(A,H,d,k);c[K>>2]=c[A>>2];c[K+4>>2]=c[A+4>>2];c[K+8>>2]=c[A+8>>2];c[K+12>>2]=c[A+12>>2];c[K+16>>2]=c[A+16>>2];c[K+20>>2]=c[A+20>>2];c[K+24>>2]=c[A+24>>2];c[K+28>>2]=c[A+28>>2]}}m=ZA(b,m)|0}n=kC(b,n)|0}d=c[J>>2]|0;f=c[d+180>>2]|0;g=d+184|0;i=G+8|0;j=G+16|0;k=G+24|0;e=1;while(1){if((e|0)>(f|0))break;P=+h[(c[(c[(c[g>>2]|0)+(e<<2)>>2]|0)+16>>2]|0)+16>>3];h[G>>3]=P;C=c[(c[(c[g>>2]|0)+(e<<2)>>2]|0)+16>>2]|0;O=+h[C+24>>3];h[i>>3]=O;M=+h[C+32>>3];h[j>>3]=M;N=+h[C+40>>3];h[k>>3]=N;h[K>>3]=+h[(+h[K>>3]>3];h[D>>3]=+h[(+h[D>>3]>3];h[F>>3]=+h[(+h[F>>3]>M?K:G)+16>>3];h[E>>3]=+h[(+h[E>>3]>N?K:G)+24>>3];e=e+1|0}e=c[d+12>>2]|0;if((e|0)!=0?(a[e+81>>0]|0)!=0:0){d=c[d+116>>2]&1;c[H>>2]=c[K>>2];c[H+4>>2]=c[K+4>>2];c[H+8>>2]=c[K+8>>2];c[H+12>>2]=c[K+12>>2];c[H+16>>2]=c[K+16>>2];c[H+20>>2]=c[K+20>>2];c[H+24>>2]=c[K+24>>2];c[H+28>>2]=c[K+28>>2];AP(I,H,e,d);c[K>>2]=c[I>>2];c[K+4>>2]=c[I+4>>2];c[K+8>>2]=c[I+8>>2];c[K+12>>2]=c[I+12>>2];c[K+16>>2]=c[I+16>>2];c[K+20>>2]=c[I+20>>2];c[K+24>>2]=c[I+24>>2];c[K+28>>2]=c[I+28>>2];d=c[J>>2]|0}J=d+16|0;c[J>>2]=c[K>>2];c[J+4>>2]=c[K+4>>2];c[J+8>>2]=c[K+8>>2];c[J+12>>2]=c[K+12>>2];c[J+16>>2]=c[K+16>>2];c[J+20>>2]=c[K+20>>2];c[J+24>>2]=c[K+24>>2];c[J+28>>2]=c[K+28>>2]}l=L;return}function CP(a,b,c){a=a|0;b=+b;c=+c;h[a>>3]=b;h[a+8>>3]=c;return}function DP(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0;d=+h[b+8>>3]-+h[c+8>>3];h[a>>3]=+h[b>>3]-+h[c>>3];h[a+8>>3]=d;return}function EP(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0;d=+h[c+8>>3]+ +h[b+8>>3];h[a>>3]=+h[c>>3]+ +h[b>>3];h[a+8>>3]=d;return}function FP(a){a=a|0;if((c[a+60>>2]|0)==(a|0))a=1;else a=(j3(KB(a)|0,108006,7)|0)==0&1;return a|0}function GP(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;a:do if(!e)switch(IC(b)|0){case 0:{e=GA(a,0,c,195059)|0;break a}case 1:{e=GA(a,1,c,195059)|0;break a}case 2:{e=GA(a,2,c,195059)|0;break a}default:{e=0;break a}}while(0);KA(b,e,d)|0;return e|0}function HP(d){d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;k=l;l=l+144|0;g=k;i=IP(d)|0;h=Vz(23592,c[4581]|0)|0;j=ND(d,108014,1)|0;TC(j,137483,280,1)|0;kA(g,128,k+16|0);e=jC(d)|0;while(1){if(!e)break;a:do if(!(a[(c[e+16>>2]|0)+118>>0]|0)){f=XA(d,e)|0;while(1){if(!f)break a;JP(f,j,g,h,i);f=ZA(d,f)|0}}while(0);e=kC(d,e)|0}oA(g);Rz(h)|0;f=tB(j)|0;e=jC(j)|0;while(1){if(!e)break;h=kC(j,e)|0;wC(d,e)|0;e=h}sB(j)|0;if(f|0){j=(c[d+16>>2]|0)+136|0;b[j>>1]=b[j>>1]|1}Rz(i)|0;l=k;return f|0}function IP(a){a=a|0;var b=0;b=Vz(23628,c[4581]|0)|0;SP(a,b);return b|0}function JP(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;t=l;l=l+48|0;q=t+32|0;p=t+24|0;s=t+16|0;r=t+8|0;k=t;n=c[b>>2]&3;m=c[((n|0)==3?b:b+48|0)+40>>2]|0;n=c[((n|0)==2?b:b+-48|0)+40>>2]|0;do if(!(a[(c[n+16>>2]|0)+118>>0]|0)){if(!(Q2(KB(m)|0,108006,7)|0))o=KP(g,KB(m)|0)|0;else o=0;if(!(Q2(KB(n)|0,108006,7)|0))i=KP(g,KB(n)|0)|0;else i=0;h=(o|0)!=0;j=(i|0)!=0;if(h|j){if((o|0)==(i|0)){r=KB(m)|0;s=KB(m)|0;c[k>>2]=r;c[k+4>>2]=s;gA(0,108029,k)|0;break}g=LP(f,b)|0;if(g|0){MP(b,c[g+16>>2]|0,c[g+20>>2]|0)|0;break}if(!j)if(!(HC(o,n)|0)){OP(f,m,n,MP(b,NP(m,o,e,d)|0,n)|0);break}else{r=KB(n)|0;s=KB(o)|0;c[q>>2]=r;c[q+4>>2]=s;gA(0,108184,q)|0;break}if(!h)if(!(HC(i,m)|0)){OP(f,m,n,MP(b,m,NP(n,i,e,d)|0)|0);break}else{r=KB(m)|0;s=KB(i)|0;c[p>>2]=r;c[p+4>>2]=s;gA(0,108147,p)|0;break}if(HC(i,o)|0){q=KB(o)|0;s=KB(i)|0;c[r>>2]=q;c[r+4>>2]=s;gA(0,108067,r)|0;break}if(!(HC(o,i)|0)){s=NP(m,o,e,d)|0;OP(f,m,n,MP(b,s,NP(n,i,e,d)|0)|0);break}else{q=KB(i)|0;r=KB(o)|0;c[s>>2]=q;c[s+4>>2]=r;gA(0,108107,s)|0;break}}}while(0);l=t;return}function KP(a,b){a=a|0;b=b|0;a=nb[c[a>>2]&63](a,b,512)|0;if(!a)a=0;else a=c[a+12>>2]|0;return a|0}function LP(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d;f=c[b>>2]&3;c[e>>2]=c[((f|0)==3?b:b+48|0)+40>>2];c[e+4>>2]=c[((f|0)==2?b:b+-48|0)+40>>2];b=nb[c[a>>2]&63](a,e,512)|0;l=d;return b|0}function MP(a,b,c){a=a|0;b=b|0;c=c|0;c=iB(xC(b)|0,b,c,0,1)|0;TC(c,137460,176,1)|0;UA(a,c)|0;return c|0}function NP(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0;k=l;l=l+112|0;g=k;j=k+4|0;nA(e,108221)|0;i=c[47321]|0;c[47321]=i+1;c[g>>2]=i;m4(j,137395,g)|0;nA(e,j)|0;j=e+4|0;g=c[j>>2]|0;i=e+8|0;if(g>>>0>=(c[i>>2]|0)>>>0){lA(e,1)|0;g=c[j>>2]|0}c[j>>2]=g+1;a[g>>0]=58;nA(e,KB(d)|0)|0;h=yC(d)|0;g=c[j>>2]|0;if(g>>>0>=(c[i>>2]|0)>>>0){lA(e,1)|0;g=c[j>>2]|0}a[g>>0]=0;e=c[e>>2]|0;c[j>>2]=e;j=tC(h,e,1)|0;TC(j,137447,304,1)|0;a[(c[j+16>>2]|0)+118>>0]=1;oC(d,j,1)|0;oC(f,b,1)|0;f=xC(j)|0;c[47154]=GP(f,j,108224,195059,c[47154]|0)|0;f=xC(j)|0;c[47157]=GP(f,j,141082,134335,c[47157]|0)|0;f=xC(j)|0;c[47147]=GP(f,j,108230,108236,c[47147]|0)|0;l=k;return j|0}function OP(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;f=l;l=l+32|0;g=f;n=g+8|0;c[n>>2]=b;m=g+12|0;c[m>>2]=d;o=c[e>>2]&3;i=e+48|0;j=g+16|0;c[j>>2]=c[((o|0)==3?e:i)+40>>2];k=e+-48|0;h=g+20|0;c[h>>2]=c[((o|0)==2?e:k)+40>>2];nb[c[a>>2]&63](a,g,1)|0;c[n>>2]=d;c[m>>2]=b;d=c[e>>2]&3;c[j>>2]=c[((d|0)==2?e:k)+40>>2];c[h>>2]=c[((d|0)==3?e:i)+40>>2];nb[c[a>>2]&63](a,g,1)|0;l=f;return}function PP(a,b,d){a=a|0;b=b|0;d=d|0;d=JK(24)|0;c[d+8>>2]=c[b+8>>2];c[d+12>>2]=c[b+12>>2];c[d+16>>2]=c[b+16>>2];c[d+20>>2]=c[b+20>>2];return d|0}function QP(a,b,c){a=a|0;b=b|0;c=c|0;U1(b);return}function RP(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;a=c[b>>2]|0;e=c[d>>2]|0;if(a>>>0>=e>>>0)if(a>>>0>e>>>0)a=1;else{b=c[b+4>>2]|0;d=c[d+4>>2]|0;return (b>>>0>>0?-1:b>>>0>d>>>0&1)|0}else a=-1;return a|0}function SP(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;h=l;l=l+16|0;g=h;f=a+16|0;e=1;while(1){a=c[f>>2]|0;if((e|0)>(c[a+180>>2]|0))break;a=c[(c[a+184>>2]|0)+(e<<2)>>2]|0;d=KB(a)|0;if(!(nb[c[b>>2]&63](b,d,512)|0)){i=JK(16)|0;c[i+8>>2]=d;c[i+12>>2]=a;nb[c[b>>2]&63](b,i,1)|0}else{c[g>>2]=d;gA(0,108240,g)|0}SP(a,b);e=e+1|0}l=h;return}function TP(a,b,c){a=a|0;b=b|0;c=c|0;U1(b);return}function UP(a){a=a|0;var b=0,c=0,d=0;d=ND(a,108014,1)|0;TC(d,137483,280,1)|0;b=jC(a)|0;while(1){if(!b)break;c=XA(a,b)|0;while(1){if(!c)break;VP(c,d);c=ZA(a,c)|0}b=kC(a,b)|0}b=jC(d)|0;while(1){if(!b)break;c=kC(d,b)|0;WP(b);wC(a,b)|0;b=c}sB(d)|0;return}function VP(b,d){b=b|0;d=d|0;var e=0,f=0;e=c[b>>2]&3;f=c[((e|0)==3?b:b+48|0)+40>>2]|0;e=c[((e|0)==2?b:b+-48|0)+40>>2]|0;if(!((a[(c[f+16>>2]|0)+118>>0]|0)==0?!(a[(c[e+16>>2]|0)+118>>0]|0):0)){f=XP(f,d)|0;e=MP(b,f,XP(e,d)|0)|0;f=c[b+16>>2]|0;d=f+8|0;e=c[e+16>>2]|0;c[e+8>>2]=c[d>>2];c[d>>2]=0;d=f+96|0;c[e+96>>2]=c[d>>2];c[d>>2]=0;d=f+108|0;c[e+108>>2]=c[d>>2];c[d>>2]=0;d=f+100|0;c[e+100>>2]=c[d>>2];c[d>>2]=0;f=f+104|0;c[e+104>>2]=c[f>>2];c[f>>2]=0;YP(b)}return}function WP(a){a=a|0;var b=0,d=0,e=0;e=a+16|0;b=c[e>>2]|0;d=c[b+132>>2]|0;if(d){U1(d);b=c[e>>2]|0}d=c[b+8>>2]|0;if(d){tb[c[(c[d+4>>2]|0)+4>>2]&127](a);b=c[e>>2]|0}CK(c[b+104>>2]|0);CK(c[(c[e>>2]|0)+108>>2]|0);VC(a,137447)|0;return}function XP(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;f=xC(b)|0;a:do if(a[(c[b+16>>2]|0)+118>>0]|0){oC(d,b,1)|0;b=R2(KB(b)|0,58)|0;if(!b)qa(111208,107661,1225,108292);d=b+1|0;b=tC(f,d,0)|0;if(!b){b=tC(f,d,1)|0;TC(b,137447,304,1)|0;d=LA(f,1,0)|0;while(1){if(!d)break a;g=RA(b,d)|0;e=c[d+12>>2]|0;if((g|0)!=(e|0))KA(b,d,e)|0;d=LA(f,1,d)|0}}}while(0);return b|0}function YP(a){a=a|0;var b=0;b=a+16|0;U1(c[(c[b>>2]|0)+144>>2]|0);ZP(a);CK(c[(c[b>>2]|0)+96>>2]|0);CK(c[(c[b>>2]|0)+108>>2]|0);CK(c[(c[b>>2]|0)+100>>2]|0);CK(c[(c[b>>2]|0)+104>>2]|0);VC(a,137460)|0;return}function ZP(a){a=a|0;var b=0,d=0,e=0;e=a+16|0;a=c[e>>2]|0;b=c[a+8>>2]|0;if(b){d=0;while(1){a=c[b>>2]|0;if((d|0)>=(c[b+4>>2]|0))break;U1(c[a+(d*48|0)>>2]|0);d=d+1|0;b=c[(c[e>>2]|0)+8>>2]|0}U1(a);U1(c[(c[e>>2]|0)+8>>2]|0);a=c[e>>2]|0}c[a+8>>2]=0;return}function _P(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0;e=GA(a,b,c,0)|0;if(!e)e=GA(a,b,c,d)|0;return e|0}function $P(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;o=l;l=l+32|0;i=o;h=o+8|0;j=o+16|0;m=R2(b,59)|0;n=d+4|0;e=c[n>>2]|0;k=d+8|0;if(e>>>0>=(c[k>>2]|0)>>>0){lA(d,1)|0;e=c[n>>2]|0}c[n>>2]=e+1;a[e>>0]=38;if(((m|0)!=0?(f=m-b|0,(f+-2|0)>>>0<=6):0)?(i4(j,b,f)|0,a[j+f>>0]=0,c[h>>2]=j,g=u5(h,23664,252,8,96)|0,(g|0)!=0):0){c[i>>2]=c[g+4>>2];m4(j,137395,i)|0;b=c[n>>2]|0;if(b>>>0>=(c[k>>2]|0)>>>0){lA(d,1)|0;b=c[n>>2]|0}c[n>>2]=b+1;a[b>>0]=35;nA(d,j)|0;b=c[n>>2]|0;if(b>>>0>=(c[k>>2]|0)>>>0){lA(d,1)|0;b=c[n>>2]|0}c[n>>2]=b+1;a[b>>0]=59;b=m+1|0}l=o;return b|0}function aQ(a,b){a=a|0;b=b|0;return s2(c[a>>2]|0,c[b>>2]|0)|0}function bQ(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;q=l;l=l+1072|0;k=q+8|0;j=q;i=q+16|0;o=q+24|0;c[i>>2]=b;if((c[47322]|0)!=(d|0)){c[47322]=d;a[194958]=0}kA(o,1024,q+40|0);p=o+4|0;n=o+8|0;while(1){f=b+1|0;c[i>>2]=f;e=a[b>>0]|0;if(!(e<<24>>24))break;do if((e&255)<192)if(e<<24>>24==38){f=dQ(i)|0;if(!f)e=38;else{if(f>>>0<127){e=f&255;break}b=c[p>>2]|0;e=b>>>0>=(c[n>>2]|0)>>>0;if(f>>>0<2047){if(e){lA(o,1)|0;b=c[p>>2]|0}c[p>>2]=b+1;a[b>>0]=f>>>6|192;e=(f&63|128)&255;break}if(e){lA(o,1)|0;b=c[p>>2]|0}c[p>>2]=b+1;a[b>>0]=f>>>12|224;b=c[p>>2]|0;if(b>>>0>=(c[n>>2]|0)>>>0){lA(o,1)|0;b=c[p>>2]|0}c[p>>2]=b+1;a[b>>0]=f>>>6&63|128;e=(f&63|128)&255}}else{h=0;m=9}else if((e&255)>=224)if((e&255)>=240)if((e&255)<248){h=3;m=9}else{if(!(a[194958]|0)){c[j>>2]=KB(d)|0;gA(0,109707,j)|0;a[194958]=1}h=-1;e=cQ(e,o)|0;m=9}else{h=2;m=9}else{h=1;m=9}while(0);do if((m|0)==9){m=0;g=0;while(1){if((g|0)>=(h|0)){m=34;break}if((a[f>>0]&-64)<<24>>24!=-128)break;b=c[p>>2]|0;if(b>>>0>=(c[n>>2]|0)>>>0){lA(o,1)|0;b=c[p>>2]|0}c[p>>2]=b+1;a[b>>0]=e;g=g+1|0;e=a[f>>0]|0;f=f+1|0}if((m|0)==34){m=0;c[i>>2]=f;break}c[i>>2]=f;if(!(a[194958]|0)){g=KB(d)|0;c[k>>2]=h+1;c[k+4>>2]=g;gA(0,109828,k)|0;a[194958]=1}e=cQ(e,o)|0}while(0);b=c[p>>2]|0;if(b>>>0>=(c[n>>2]|0)>>>0){lA(o,1)|0;b=c[p>>2]|0}c[p>>2]=b+1;a[b>>0]=e;b=c[i>>2]|0}b=c[p>>2]|0;if(b>>>0>=(c[n>>2]|0)>>>0){lA(o,1)|0;b=c[p>>2]|0}a[b>>0]=0;n=c[o>>2]|0;c[p>>2]=n;p=D4(n)|0;oA(o);l=q;return p|0}function cQ(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;j=l;l=l+16|0;g=j;a[g>>0]=b;a[g+1>>0]=0;g=eQ(g)|0;h=d+4|0;i=d+8|0;e=l2(g)|0;f=g;while(1){if((e|0)<=1)break;b=c[h>>2]|0;if(b>>>0>=(c[i>>2]|0)>>>0){lA(d,1)|0;b=c[h>>2]|0}k=a[f>>0]|0;c[h>>2]=b+1;a[b>>0]=k;e=e+-1|0;f=f+1|0}k=a[f>>0]|0;U1(g);l=j;return k|0}function dQ(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=l;l=l+32|0;h=i;d=i+8|0;e=c[b>>2]|0;a:do if((a[e>>0]|0)!=35){c[h>>2]=d;g=0;b:while(1){if((g|0)>=8){d=0;break a}f=a[e+g>>0]|0;switch(f<<24>>24){case 0:{d=0;break a}case 59:break b;default:{}}a[d>>0]=f;d=d+1|0;g=g+1|0}a[d>>0]=0;d=u5(h,23664,252,8,96)|0;if(!d)d=0;else{e=e+(g+1)|0;d=c[d+4>>2]|0}}else{h=a[e+1>>0]|0;d=h&255;c:do if((h|32)<<24>>24==120){h=0;g=2;while(1){if((g|0)>=8){f=h;break c}f=a[e+g>>0]|0;d=f&255;if((f+-65&255)>=6)if((f+-97&255)>=6)if((f+-48&255)<10)f=-48;else{f=h;break c}else f=-87;else f=-55;d=f+d|0;h=d+(h<<4)|0;g=g+1|0}}else{f=0;g=1;while(1){if((g|0)>=8)break c;h=a[e+g>>0]|0;d=h&255;if((h+-48&255)>=10)break c;f=(f*10|0)+-48+d|0;g=g+1|0}}while(0);d=(d|0)==59;e=d?e+(g+1)|0:e;d=d?f:0}while(0);c[b>>2]=e;l=i;return d|0}function eQ(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;k=l;l=l+1056|0;g=k;i=k+8|0;c[g>>2]=b;kA(i,1024,k+24|0);j=i+4|0;h=i+8|0;while(1){c[g>>2]=b+1;d=a[b>>0]|0;if(!(d<<24>>24))break;b=d&255;if(d<<24>>24==38){b=dQ(g)|0;if(!b){b=38;f=6}else f=5}else f=5;do if((f|0)==5){f=0;if(b>>>0<127)f=6;else{d=c[j>>2]|0;e=d>>>0>=(c[h>>2]|0)>>>0;if(b>>>0<2047){if(e){lA(i,1)|0;d=c[j>>2]|0}c[j>>2]=d+1;a[d>>0]=b>>>6|192;d=c[j>>2]|0;if(d>>>0>=(c[h>>2]|0)>>>0){lA(i,1)|0;d=c[j>>2]|0}b=b&63|128;break}if(e){lA(i,1)|0;d=c[j>>2]|0}c[j>>2]=d+1;a[d>>0]=b>>>12|224;d=c[j>>2]|0;if(d>>>0>=(c[h>>2]|0)>>>0){lA(i,1)|0;d=c[j>>2]|0}c[j>>2]=d+1;a[d>>0]=b>>>6&63|128;d=c[j>>2]|0;if(d>>>0>=(c[h>>2]|0)>>>0){lA(i,1)|0;d=c[j>>2]|0}b=b&63|128}}while(0);if((f|0)==6){d=c[j>>2]|0;if(d>>>0>=(c[h>>2]|0)>>>0){lA(i,1)|0;d=c[j>>2]|0}}c[j>>2]=d+1;a[d>>0]=b;b=c[g>>2]|0}b=c[j>>2]|0;if(b>>>0>=(c[h>>2]|0)>>>0){lA(i,1)|0;b=c[j>>2]|0}a[b>>0]=0;h=c[i>>2]|0;c[j>>2]=h;j=D4(h)|0;oA(i);l=k;return j|0}function fQ(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=l;l=l+1040|0;g=i;kA(g,1024,i+16|0);h=g+4|0;f=g+8|0;while(1){d=b+1|0;e=a[b>>0]|0;if(!(e<<24>>24))break;if((e&255)<127){b=c[h>>2]|0;if(b>>>0>=(c[f>>2]|0)>>>0){lA(g,1)|0;b=c[h>>2]|0}c[h>>2]=b+1;a[b>>0]=e;b=d;continue}else{e=a[d>>0]&63|e<<6&255;d=c[h>>2]|0;if(d>>>0>=(c[f>>2]|0)>>>0){lA(g,1)|0;d=c[h>>2]|0}c[h>>2]=d+1;a[d>>0]=e;b=b+2|0;continue}}b=c[h>>2]|0;if(b>>>0>=(c[f>>2]|0)>>>0){lA(g,1)|0;b=c[h>>2]|0}a[b>>0]=0;f=c[g>>2]|0;c[h>>2]=f;h=D4(f)|0;oA(g);l=i;return h|0}function gQ(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+80|0;e=n+48|0;d=n+32|0;f=n+64|0;g=n+16|0;i=n;j=b+16|0;k=a+16|0;m=c[k>>2]|0;if(((+h[j>>3]>=+h[m+48>>3]?+h[m+64>>3]>=+h[b>>3]:0)?+h[b+24>>3]>=+h[m+56>>3]:0)?+h[m+72>>3]>=+h[b+8>>3]:0){m=m+16|0;c[d>>2]=c[j>>2];c[d+4>>2]=c[j+4>>2];c[d+8>>2]=c[j+8>>2];c[d+12>>2]=c[j+12>>2];c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];hQ(g,d,e);c[d>>2]=c[m>>2];c[d+4>>2]=c[m+4>>2];c[d+8>>2]=c[m+8>>2];c[d+12>>2]=c[m+12>>2];c[e>>2]=c[g>>2];c[e+4>>2]=c[g+4>>2];c[e+8>>2]=c[g+8>>2];c[e+12>>2]=c[g+12>>2];DP(i,d,e);c[f>>2]=a;c[f+4>>2]=0;d=c[(c[(c[(c[k>>2]|0)+8>>2]|0)+4>>2]|0)+12>>2]|0;c[e>>2]=c[i>>2];c[e+4>>2]=c[i+4>>2];c[e+8>>2]=c[i+8>>2];c[e+12>>2]=c[i+12>>2];d=lb[d&127](f,e)|0}else d=0;l=n;return d|0}function hQ(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0;d=(+h[c+8>>3]+ +h[b+8>>3])*.5;h[a>>3]=(+h[c>>3]+ +h[b>>3])*.5;h[a+8>>3]=d;return}function iQ(a,b){a=a|0;b=b|0;var d=0.0,e=0,f=0.0,g=0,i=0.0,j=0,k=0,m=0,n=0;e=l;l=l+80|0;j=e+64|0;k=e+48|0;m=e;n=e+32|0;g=e+16|0;h[m>>3]=+h[a+24>>3]*.5;h[m+8>>3]=+h[a+32>>3]*.5;a=a+56|0;c[k>>2]=c[a>>2];c[k+4>>2]=c[a+4>>2];c[k+8>>2]=c[a+8>>2];c[k+12>>2]=c[a+12>>2];c[j>>2]=c[m>>2];c[j+4>>2]=c[m+4>>2];c[j+8>>2]=c[m+8>>2];c[j+12>>2]=c[m+12>>2];DP(n,k,j);i=+h[n>>3];f=+h[n+8>>3];c[k>>2]=c[a>>2];c[k+4>>2]=c[a+4>>2];c[k+8>>2]=c[a+8>>2];c[k+12>>2]=c[a+12>>2];c[j>>2]=c[m>>2];c[j+4>>2]=c[m+4>>2];c[j+8>>2]=c[m+8>>2];c[j+12>>2]=c[m+12>>2];EP(g,k,j);d=+h[g+8>>3];if((+h[b+16>>3]>=i?+h[g>>3]>=+h[b>>3]:0)?+h[b+24>>3]>=f:0)a=d>=+h[b+8>>3]&1;else a=0;l=e;return a|0}function jQ(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+80|0;k=n+48|0;j=n;h=a+16|0;a=c[h>>2]|0;i=c[a+8>>2]|0;a:do if((i|0)!=0?(g=i+8|0,c[j>>2]=c[g>>2],c[j+4>>2]=c[g+4>>2],c[j+8>>2]=c[g+8>>2],c[j+12>>2]=c[g+12>>2],c[j+16>>2]=c[g+16>>2],c[j+20>>2]=c[g+20>>2],c[j+24>>2]=c[g+24>>2],c[j+28>>2]=c[g+28>>2],c[k>>2]=c[b>>2],c[k+4>>2]=c[b+4>>2],c[k+8>>2]=c[b+8>>2],c[k+12>>2]=c[b+12>>2],c[k+16>>2]=c[b+16>>2],c[k+20>>2]=c[b+20>>2],c[k+24>>2]=c[b+24>>2],c[k+28>>2]=c[b+28>>2],(kQ(j,k)|0)!=0):0){d=i+4|0;a=0;while(1){if((a|0)>=(c[d>>2]|0))break;e=j;f=(c[i>>2]|0)+(a*48|0)|0;g=e+48|0;do{c[e>>2]=c[f>>2];e=e+4|0;f=f+4|0}while((e|0)<(g|0));c[k>>2]=c[b>>2];c[k+4>>2]=c[b+4>>2];c[k+8>>2]=c[b+8>>2];c[k+12>>2]=c[b+12>>2];c[k+16>>2]=c[b+16>>2];c[k+20>>2]=c[b+20>>2];c[k+24>>2]=c[b+24>>2];c[k+28>>2]=c[b+28>>2];if(!((lQ(j,k)|0)<<24>>24))a=a+1|0;else{a=1;break a}}a=c[h>>2]|0;m=7}else m=7;while(0);do if((m|0)==7){a=c[a+96>>2]|0;if(a|0?(c[k>>2]=c[b>>2],c[k+4>>2]=c[b+4>>2],c[k+8>>2]=c[b+8>>2],c[k+12>>2]=c[b+12>>2],c[k+16>>2]=c[b+16>>2],c[k+20>>2]=c[b+20>>2],c[k+24>>2]=c[b+24>>2],c[k+28>>2]=c[b+28>>2],(iQ(a,k)|0)<<24>>24):0){a=1;break}a=0}while(0);l=n;return a|0}function kQ(a,b){a=a|0;b=b|0;if((+h[a+16>>3]>=+h[b>>3]?+h[b+16>>3]>=+h[a>>3]:0)?+h[a+24>>3]>=+h[b+8>>3]:0)a=+h[b+24>>3]>=+h[a+8>>3]&1;else a=0;return a|0}function lQ(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+96|0;k=n+64|0;j=n+48|0;i=n+32|0;f=n+16|0;g=n;m=a+4|0;d=c[m>>2]|0;if(!d)qa(109937,107661,1637,109945);e=c[a>>2]|0;c[g>>2]=c[e>>2];c[g+4>>2]=c[e+4>>2];c[g+8>>2]=c[e+8>>2];c[g+12>>2]=c[e+12>>2];e=1;while(1){if((e|0)>=(d|0)){h=7;break}d=(c[a>>2]|0)+(e<<4)|0;c[f>>2]=c[d>>2];c[f+4>>2]=c[d+4>>2];c[f+8>>2]=c[d+8>>2];c[f+12>>2]=c[d+12>>2];c[i>>2]=c[d>>2];c[i+4>>2]=c[d+4>>2];c[i+8>>2]=c[d+8>>2];c[i+12>>2]=c[d+12>>2];c[j>>2]=c[g>>2];c[j+4>>2]=c[g+4>>2];c[j+8>>2]=c[g+8>>2];c[j+12>>2]=c[g+12>>2];c[k>>2]=c[b>>2];c[k+4>>2]=c[b+4>>2];c[k+8>>2]=c[b+8>>2];c[k+12>>2]=c[b+12>>2];c[k+16>>2]=c[b+16>>2];c[k+20>>2]=c[b+20>>2];c[k+24>>2]=c[b+24>>2];c[k+28>>2]=c[b+28>>2];if((iK(i,j,k)|0)!=-1){d=1;break};c[g>>2]=c[f>>2];c[g+4>>2]=c[f+4>>2];c[g+8>>2]=c[f+8>>2];c[g+12>>2]=c[f+12>>2];e=e+1|0;d=c[m>>2]|0}do if((h|0)==7){d=c[a+8>>2]|0;if(d|0?(g=a+16|0,h=c[a>>2]|0,c[i>>2]=c[g>>2],c[i+4>>2]=c[g+4>>2],c[i+8>>2]=c[g+8>>2],c[i+12>>2]=c[g+12>>2],c[j>>2]=c[h>>2],c[j+4>>2]=c[h+4>>2],c[j+8>>2]=c[h+8>>2],c[j+12>>2]=c[h+12>>2],c[k>>2]=c[b>>2],c[k+4>>2]=c[b+4>>2],c[k+8>>2]=c[b+8>>2],c[k+12>>2]=c[b+12>>2],c[k+16>>2]=c[b+16>>2],c[k+20>>2]=c[b+20>>2],c[k+24>>2]=c[b+24>>2],c[k+28>>2]=c[b+28>>2],(mQ(i,j,d,k)|0)<<24>>24):0){d=1;break}d=c[a+12>>2]|0;if(d|0?(h=a+32|0,m=(c[a>>2]|0)+((c[m>>2]|0)+-1<<4)|0,c[i>>2]=c[h>>2],c[i+4>>2]=c[h+4>>2],c[i+8>>2]=c[h+8>>2],c[i+12>>2]=c[h+12>>2],c[j>>2]=c[m>>2],c[j+4>>2]=c[m+4>>2],c[j+8>>2]=c[m+8>>2],c[j+12>>2]=c[m+12>>2],c[k>>2]=c[b>>2],c[k+4>>2]=c[b+4>>2],c[k+8>>2]=c[b+8>>2],c[k+12>>2]=c[b+12>>2],c[k+16>>2]=c[b+16>>2],c[k+20>>2]=c[b+20>>2],c[k+24>>2]=c[b+24>>2],c[k+28>>2]=c[b+28>>2],(mQ(i,j,d,k)|0)<<24>>24):0){d=1;break}d=0}while(0);l=n;return d|0}function mQ(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0.0;m=l;l=l+160|0;g=m+144|0;f=m+128|0;n=m+96|0;i=m+64|0;j=m+32|0;k=m;o=+h[e+16>>3];c[f>>2]=c[a>>2];c[f+4>>2]=c[a+4>>2];c[f+8>>2]=c[a+8>>2];c[f+12>>2]=c[a+12>>2];c[g>>2]=c[b>>2];c[g+4>>2]=c[b+4>>2];c[g+8>>2]=c[b+8>>2];c[g+12>>2]=c[b+12>>2];YH(n,f,g,1.0,d);if(((o>=+h[n>>3]?(c[f>>2]=c[a>>2],c[f+4>>2]=c[a+4>>2],c[f+8>>2]=c[a+8>>2],c[f+12>>2]=c[a+12>>2],c[g>>2]=c[b>>2],c[g+4>>2]=c[b+4>>2],c[g+8>>2]=c[b+8>>2],c[g+12>>2]=c[b+12>>2],YH(i,f,g,1.0,d),+h[i+16>>3]>=+h[e>>3]):0)?(o=+h[e+24>>3],c[f>>2]=c[a>>2],c[f+4>>2]=c[a+4>>2],c[f+8>>2]=c[a+8>>2],c[f+12>>2]=c[a+12>>2],c[g>>2]=c[b>>2],c[g+4>>2]=c[b+4>>2],c[g+8>>2]=c[b+8>>2],c[g+12>>2]=c[b+12>>2],YH(j,f,g,1.0,d),o>=+h[j+8>>3]):0)?(c[f>>2]=c[a>>2],c[f+4>>2]=c[a+4>>2],c[f+8>>2]=c[a+8>>2],c[f+12>>2]=c[a+12>>2],c[g>>2]=c[b>>2],c[g+4>>2]=c[b+4>>2],c[g+8>>2]=c[b+8>>2],c[g+12>>2]=c[b+12>>2],YH(k,f,g,1.0,d),+h[k+24>>3]>=+h[e+8>>3]):0)f=1;else f=0;l=m;return f|0}function nQ(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;g=l;l=l+16|0;f=g;a:do if((b|0)!=0?(e=a[b>>0]|0,e<<24>>24!=0):0){do switch(e<<24>>24|0){case 48:{d=2;break a}case 57:case 56:case 55:case 54:case 53:case 52:case 51:case 50:case 49:{d=10;break a}case 67:case 99:{e=b+1|0;if(!(c3(e,109960)|0)){d=4;break a}if(!(c3(e,109966)|0)){d=12;break a}break}case 70:case 102:{if(!(c3(b+1|0,109974)|0)){d=2;break a}break}case 76:case 108:{if(!(c3(b+1|0,109979)|0)){d=2;break a}break}case 78:case 110:{e=b+1|0;if(!(c3(e,109983)|0)){d=0;break a}if(!(c3(e,109987)|0)){d=2;break a}break}case 79:case 111:{if(!(c3(b+1|0,109989)|0)){d=8;break a}break}case 80:case 112:{if(!(c3(b+1|0,109994)|0)){d=6;break a}break}case 83:case 115:{if(!(c3(b+1|0,110002)|0)){d=10;break a}break}case 84:case 116:{if(!(c3(b+1|0,110008)|0)){d=10;break a}break}case 89:case 121:{if(!(c3(b+1|0,110012)|0)){d=10;break a}break}default:{}}while(0);c[f>>2]=b;gA(0,110015,f)|0}while(0);l=g;return d|0}function oQ(d,f){d=d|0;f=f|0;var g=0;g=QA(d,110056)|0;if(g)if(!(a[g>>0]|0))f=0;else f=nQ(g,f)|0;d=(c[d+16>>2]|0)+136|0;b[d>>1]=f|e[d>>1];return}function pQ(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;var f=0.0,g=0.0,i=0.0,j=0.0,k=0.0,m=0,n=0,o=0.0,p=0,q=0.0,r=0,s=0.0,t=0,u=0,v=0,w=0;v=l;l=l+32|0;p=v+16|0;r=v;t=e&1;u=e&2;a:do if((c|0)==2){s=+h[a+16>>3];f=+h[a>>3];j=+h[a+24>>3];i=+h[a+8>>3];f=f-(s-f);h[p>>3]=f;h[r>>3]=s;i=i-(j-i);h[p+8>>3]=i;h[r+8>>3]=j}else{g=+h[a>>3];h[r>>3]=g;h[p>>3]=g;j=+h[a+8>>3];m=r+8|0;h[m>>3]=j;n=p+8|0;h[n>>3]=j;e=0;f=g;i=j;while(1){if((e|0)>=(c|0)){s=g;break a}w=a+(e<<4)|0;q=+h[w>>3];k=+h[(q>3];h[p>>3]=k;s=+h[a+(e<<4)+8>>3];o=+h[(s>3];h[n>>3]=o;q=+h[(q>g?w:r)>>3];h[r>>3]=q;s=+h[(s>j?w:r)+8>>3];h[m>>3]=s;e=e+1|0;f=k;i=o;g=q;j=s}}while(0);g=(s-f)*.5;q=g+f;o=(j-i)*.5;k=o+i;if(!t){f=j-k;j=d;i=+F(+j);j=+E(+j);if(!u){g=i*f-k;f=-k-o*i}else{f=i*f;g=k-f;f=f+k}h[b+8>>3]=g;h[b+24>>3]=f;d=j*(s-q);h[b>>3]=q-d;h[b+16>>3]=d+q}else{d=+C(+(o*o+g*g));h[b+8>>3]=u|0?k:-k;h[b>>3]=q;h[b+16>>3]=d*.25;h[b+24>>3]=d}l=v;return}function qQ(a,b){a=a|0;b=b|0;var d=0.0,e=0,f=0;e=a+16|0;f=c[e>>2]|0;if(!(b<<24>>24)){d=+h[f+32>>3]*36.0;h[f+88>>3]=d;a=f+40|0}else{d=+h[f+40>>3]*36.0;h[f+88>>3]=d;a=f+32|0}h[f+96>>3]=d;h[(c[e>>2]|0)+80>>3]=+h[a>>3]*72.0;return} +function Tl(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+32|0;j=n+8|0;f=n+4|0;g=n;d=c[b>>2]&3;e=c[((d|0)==3?b:b+48|0)+40>>2]|0;k=(c[(c[e+16>>2]|0)+232>>2]|0)+-1|0;a=c[(c[a+16>>2]|0)+196>>2]|0;h=c[a+(k<<6)+4>>2]|0;a=c[a+(k<<6)>>2]|0;k=j+8|0;c[k>>2]=-1;c[j>>2]=-1;m=j+12|0;c[m>>2]=a;i=j+4|0;c[i>>2]=a;Vl(e,c[((d|0)==2?b:b+-48|0)+40>>2]|0,f,g);f=c[f>>2]|0;g=c[g>>2]|0;d=0;e=a;b=-1;while(1){if((d|0)>=(e|0))break;e=e+-1|0;Wl(c[h+(d<<2)>>2]|0,j,f,g);if((d|0)!=(e|0))Wl(c[h+(e<<2)>>2]|0,j,f,g);a=c[i>>2]|0;b=c[j>>2]|0;if((a-b|0)<2)break;else d=d+1|0}if((b|0)>(a|0))a=(c[m>>2]|0)+(c[k>>2]|0)|0;else a=a+b|0;l=n;return (a+1|0)/2|0|0}function Ul(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;g=a+16|0;f=c[(c[g>>2]|0)+196>>2]|0;e=f+(b<<6)|0;f=c[f+(b<<6)+4>>2]|0;if(!f)f=KK((c[e>>2]<<2)+8|0)|0;else f=MK(f,(c[e>>2]<<2)+8|0)|0;e=c[(c[g>>2]|0)+196>>2]|0;c[e+(b<<6)+4>>2]=f;e=c[e+(b<<6)>>2]|0;while(1){if((e|0)<=(d|0))break;h=e+-1|0;i=c[f+(h<<2)>>2]|0;c[f+(e<<2)>>2]=i;i=(c[i+16>>2]|0)+236|0;c[i>>2]=(c[i>>2]|0)+1;e=h}h=sh(a)|0;i=f+(d<<2)|0;c[i>>2]=h;h=c[h+16>>2]|0;c[h+236>>2]=d;c[h+232>>2]=b;g=(c[(c[g>>2]|0)+196>>2]|0)+(b<<6)|0;h=(c[g>>2]|0)+1|0;c[g>>2]=h;c[f+(h<<2)>>2]=0;return c[i>>2]|0}function Vl(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0;a=c[(c[a+16>>2]|0)+236>>2]|0;b=c[(c[b+16>>2]|0)+236>>2]|0;f=(a|0)>(b|0);c[d>>2]=f?b:a;c[e>>2]=f?a:b;return}function Wl(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0;m=l;l=l+16|0;h=m+4|0;g=m;b=c[b+16>>2]|0;do if((a[b+156>>0]|0)==1){k=c[b+236>>2]|0;if(c[b+176>>2]|0){i=c[b+180>>2]|0;b=0;g=0;h=0;while(1){j=c[i+(h<<2)>>2]|0;if(!j)break;n=c[(c[(c[((c[j>>2]&3|0)==2?j:j+-48|0)+40>>2]|0)+16>>2]|0)+236>>2]|0;j=(n|0)>(e|0);b=j?((n|0)<(f|0)?b:1):b;g=j?g:1;h=h+1|0}if(g<<24>>24!=0&b<<24>>24==0){c[d>>2]=k+1;break}if(!(g<<24>>24==0&b<<24>>24!=0))break;c[d+4>>2]=k+-1;break}if((c[b+184>>2]|0)!=2)qa(88397,88417,63,88424);i=c[b+180>>2]|0;n=c[i>>2]|0;i=c[i+4>>2]|0;Vl(c[((c[n>>2]&3|0)==2?n:n+-48|0)+40>>2]|0,c[((c[i>>2]&3|0)==2?i:i+-48|0)+40>>2]|0,h,g);i=c[g>>2]|0;if((i|0)<=(e|0)){c[d>>2]=k;c[d+8>>2]=k;break}b=c[h>>2]|0;if((b|0)>=(f|0)){c[d+4>>2]=k;c[d+12>>2]=k;break}g=(b|0)<(e|0);h=(i|0)>(f|0);if(!(h&g)){if(!(!g?!((i|0)<(f|0)&(b|0)==(e|0)):0))c[d+8>>2]=k;if(!h?!((i|0)==(f|0)&(b|0)>(e|0)):0)break;c[d+12>>2]=k}}while(0);l=m;return}function Xl(a){a=a|0;c[47134]=1;pm(a);c[47134]=0;return}function Yl(a){a=a|0;c[47134]=2;pm(a);c[47134]=0;return}function Zl(a){a=a|0;var b=0;TC(a,137447,304,1)|0;sP(a);b=JK((e[(c[(xC(a)|0)+16>>2]|0)+176>>1]|0)<<3)|0;c[(c[a+16>>2]|0)+132>>2]=b;qQ(a,c[(c[(xC(a)|0)+16>>2]|0)+116>>2]&1);return}function _l(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0.0,u=0.0;s=l;l=l+64|0;j=s+48|0;o=s+40|0;k=s+24|0;i=s+8|0;q=s+56|0;m=s;do if((b|0)!=0?(r=e+16|0,p=c[(c[r>>2]|0)+132>>2]|0,g=RA(e,b)|0,(a[g>>0]|0)!=0):0){a[q>>0]=0;b=p+8|0;if((c[47137]|0)>2?(c[i>>2]=p,c[i+4>>2]=b,c[i+8>>2]=p+16,c[i+12>>2]=q,(b5(g,88535,i)|0)>2):0){a[(c[r>>2]|0)+119>>0]=1;g=c[47137]|0;a:do if(+h[23293]>0.0){b=0;while(1){if((b|0)>=(g|0))break a;o=p+(b<<3)|0;h[o>>3]=+h[o>>3]/+h[23293];b=b+1|0}}while(0);if((g|0)>3)Fn(e,f,3);if((a[q>>0]|0)!=33){if(!d){b=1;break}if(!((dP(RA(e,d)|0)|0)<<24>>24)){b=1;break}}a[(c[r>>2]|0)+119>>0]=3;b=1;break}c[k>>2]=p;c[k+4>>2]=b;c[k+8>>2]=q;if((b5(g,101749,k)|0)<=1){c[j>>2]=KB(e)|0;c[j+4>>2]=g;gA(1,88549,j)|0;b=0;break}a[(c[r>>2]|0)+119>>0]=1;g=c[47137]|0;b:do if(+h[23293]>0.0){b=0;while(1){if((b|0)>=(g|0))break b;k=p+(b<<3)|0;h[k>>3]=+h[k>>3]/+h[23293];b=b+1|0}}while(0);do if((g|0)>2){b=c[47171]|0;if((b|0?(n=RA(e,b)|0,n|0):0)?(c[o>>2]=m,(b5(n,101209,o)|0)==1):0){u=+h[23293];t=+h[m>>3];h[p+16>>3]=u>0.0?t/u:t;Fn(e,f,3);break}Gn(e,f)}while(0);if((a[q>>0]|0)!=33){if(!d){b=1;break}if(!((dP(RA(e,d)|0)|0)<<24>>24)){b=1;break}}a[(c[r>>2]|0)+119>>0]=3;b=1}else b=0;while(0);l=s;return b|0}function $l(a){a=a|0;var b=0,c=0;c=jC(a)|0;while(1){if(!c)break;b=XA(a,c)|0;while(1){if(!b)break;YP(b);b=ZA(a,b)|0}WP(c);c=kC(a,c)|0}am(a);return}function am(a){a=a|0;if((c[47134]|0)!=0|(c[46795]|0)<0)Dn(a);if((yC(a)|0)!=(a|0))ZC(a,0,137483);return}function bm(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;q=l;l=l+48|0;m=q+32|0;o=q;k=GA(b,0,102637,0)|0;e=GA(b,0,102671,0)|0;p=(eP(QA(b,88593)|0,0)|0)<<24>>24!=0;if(!e)e=GA(b,0,102671,195059)|0;Cn(b)|0;n=b+16|0;i=0;while(1){j=c[(c[(c[n>>2]|0)+152>>2]|0)+(i<<2)>>2]|0;if(!j){f=12;break}g=j+16|0;f=c[g>>2]|0;if(!(a[f+119>>0]|0)){if(Q2(KB(j)|0,108006,7)|0){f=8;break}f=c[g>>2]|0}f=c[f+108>>2]|0;if(f|0)cm(j,f,102633);i=i+1|0}a:do if((f|0)==8){p=KB(j)|0;e=KB(b)|0;c[m>>2]=p;c[m+4>>2]=e;gA(1,88605,m)|0;e=-1}else if((f|0)==12){dm(b,k,e);j=em(b)|0;e=c[(c[n>>2]|0)+8>>2]|0;if(!(c[e+88>>2]|0))e=0;else{c[e+84>>2]=0;e=1}g=(d|0)!=0;i=(e|0)!=0;if(!(i|g&(c[47134]|0)==1^1)?(or(b)|0)!=0:0){f=c[(c[n>>2]|0)+12>>2]|0;if(!f)f=1;else{a[f+81>>0]=0;f=1}}else f=0;BP(b);if(i){d=(c[n>>2]|0)+16|0;nI(o,b);c[d>>2]=c[o>>2];c[d+4>>2]=c[o+4>>2];c[d+8>>2]=c[o+8>>2];c[d+12>>2]=c[o+12>>2];c[d+16>>2]=c[o+16>>2];c[d+20>>2]=c[o+20>>2];c[d+24>>2]=c[o+24>>2];c[d+28>>2]=c[o+28>>2]}if(!g){c[47138]=1;f=jC(b)|0;while(1){if(!f)break a;p=c[f+16>>2]|0;o=c[p+132>>2]|0;h[p+16>>3]=+h[o>>3]*72.0;h[p+24>>3]=+h[o+8>>3]*72.0;f=kC(b,f)|0}}do if(!(p|i)){p=c[n>>2]|0;if(!(+h[p+16>>3]!=0.0)?!(+h[p+24>>3]!=0.0):0)break;an(b)}while(0);if(!((j|0)!=0&(f|(_m(b)|0)<<24>>24!=0))){if((j|0)==2){c[47138]=1;break}}else fm(b);Zm(b,0)}while(0);l=q;return e|0}function cm(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0,k=0;k=l;l=l+48|0;j=k+32|0;f=k+24|0;g=k+16|0;i=k;b=QA(b,e)|0;if(b|0?(c[j>>2]=f,c[j+4>>2]=g,(b5(b,105503,j)|0)==2):0){j=d+56|0;im(i,+h[f>>3],+h[g>>3]);c[j>>2]=c[i>>2];c[j+4>>2]=c[i+4>>2];c[j+8>>2]=c[i+8>>2];c[j+12>>2]=c[i+12>>2];a[d+81>>0]=1}l=k;return}function dm(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0,k=0,m=0,n=0;m=l;l=l+48|0;k=m+32|0;f=m+24|0;g=m+16|0;i=m;j=b+16|0;if((d|0?(c[(c[j>>2]|0)+12>>2]|0)!=0:0)?(n=RA(b,d)|0,c[k>>2]=f,c[k+4>>2]=g,(b5(n,105503,k)|0)==2):0){n=(c[(c[j>>2]|0)+12>>2]|0)+56|0;im(i,+h[f>>3],+h[g>>3]);c[n>>2]=c[i>>2];c[n+4>>2]=c[i+4>>2];c[n+8>>2]=c[i+8>>2];c[n+12>>2]=c[i+12>>2];a[(c[(c[j>>2]|0)+12>>2]|0)+81>>0]=1}a:do if(e|0){f=OD(b)|0;while(1){if(!f)break a;jm(f,b,d,e);f=PD(f)|0}}while(0);l=m;return}function em(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;if(uB(a)|0){f=GA(a,2,102623,0)|0;if(!((f|0)==0|(c[47134]|0)<2)){b=0;e=jC(a)|0;while(1){if(!e)break;d=XA(a,e)|0;while(1){if(!d)break;g=b+((gm(f,d)|0)!=0&1)|0;d=ZA(a,d)|0;b=g}e=kC(a,e)|0}if(b){b=(b|0)==(uB(a)|0);b=b?2:1}else b=0}else b=0}else b=2;return b|0}function fm(a){a=a|0;var b=0,d=0,e=0;d=jC(a)|0;while(1){if(!d)break;b=XA(a,d)|0;while(1){if(!b)break;ZP(b);e=b+16|0;CK(c[(c[e>>2]|0)+96>>2]|0);CK(c[(c[e>>2]|0)+108>>2]|0);CK(c[(c[e>>2]|0)+100>>2]|0);CK(c[(c[e>>2]|0)+104>>2]|0);b=ZA(a,b)|0}d=kC(a,d)|0}return}function gm(b,d){b=b|0;d=d|0;var e=0,f=0,g=0.0,i=0.0,j=0.0,k=0.0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0;B=l;l=l+96|0;z=B+72|0;x=B+56|0;A=B+48|0;y=B+32|0;w=B+16|0;r=B+88|0;s=B+8|0;t=B;u=B+84|0;v=B+80|0;b=RA(d,b)|0;do if(a[b>>0]|0){HH(d,u,v);q=1;f=0;e=0;j=0.0;i=0.0;k=0.0;g=0.0;a:while(1){c[w>>2]=s;c[w+4>>2]=t;c[w+8>>2]=r;if((b5(b,88642,w)|0)==2){p=1;b=b+(c[r>>2]|0)|0;i=+h[s>>3];g=+h[t>>3]}else p=e;c[y>>2]=s;c[y+4>>2]=t;c[y+8>>2]=r;if((b5(b,88654,y)|0)==2){o=1;b=b+(c[r>>2]|0)|0;j=+h[s>>3];k=+h[t>>3]}else o=f;m=hm(b)|0;if(!((m|0)>3&((m|0)%3|0|0)==1)){e=8;break}n=KK(m<<4)|0;e=n;f=m;while(1){if(!f)break;c[x>>2]=s;c[x+4>>2]=t;c[x+8>>2]=r;if((b5(b,88724,x)|0)<2){e=13;break a}C=b+(c[r>>2]|0)|0;h[e>>3]=+h[s>>3];h[e+8>>3]=+h[t>>3];e=e+16|0;f=f+-1|0;b=C}while(1){e=a[b>>0]|0;f=b+1|0;if(!(S2(e<<24>>24)|0))break;else b=f}C=e<<24>>24==0;b=C?b:f;q=C?0:q;f=cO(d,m)|0;if(p|0){c[f+8>>2]=c[u>>2];h[f+16>>3]=i;h[f+24>>3]=g}if(o|0){c[f+12>>2]=c[v>>2];h[f+32>>3]=j;h[f+40>>3]=k}e=0;while(1){if((e|0)>=(m|0))break;C=(c[f>>2]|0)+(e<<4)|0;D=n+(e<<4)|0;c[C>>2]=c[D>>2];c[C+4>>2]=c[D+4>>2];c[C+8>>2]=c[D+8>>2];c[C+12>>2]=c[D+12>>2];e=e+1|0}U1(n);if(!q){e=26;break}else{f=o;e=p}}if((e|0)==8){ZP(d);if(a[193771]|0){b=0;break}a[193771]=1;D=KB(c[((c[d>>2]&3|0)==3?d:d+48|0)+40>>2]|0)|0;b=KB(c[((c[d>>2]&3|0)==2?d:d+-48|0)+40>>2]|0)|0;c[A>>2]=D;c[A+4>>2]=b;gA(0,88667,A)|0;b=0;break}else if((e|0)==13){if(!(a[193771]|0)){a[193771]=1;C=KB(c[((c[d>>2]&3|0)==3?d:d+48|0)+40>>2]|0)|0;D=KB(c[((c[d>>2]&3|0)==2?d:d+-48|0)+40>>2]|0)|0;c[z>>2]=C;c[z+4>>2]=D;gA(0,88734,z)|0}U1(n);ZP(d);b=0;break}else if((e|0)==26){f=d+16|0;b=c[f>>2]|0;e=c[b+96>>2]|0;if(e){cm(d,e,102637);b=c[f>>2]|0}e=c[b+108>>2]|0;if(e){cm(d,e,102633);b=c[f>>2]|0}e=c[b+100>>2]|0;if(e){cm(d,e,102640);b=c[f>>2]|0}b=c[b+104>>2]|0;if(!b){b=1;break}cm(d,b,102648);b=1;break}}else b=0;while(0);l=B;return b|0}function hm(b){b=b|0;var c=0,d=0;d=0;do{while(1){c=a[b>>0]|0;if(!(S2(c&255)|0))break;else b=b+1|0}a:do if(!(c<<24>>24))c=0;else{d=d+1|0;while(1){if(!(c<<24>>24)){c=0;break a}if(c<<24>>24==59|(S2(c&255)|0)!=0)break a;c=b+1|0;b=c;c=a[c>>0]|0}}while(0)}while((S2(c&255)|0)!=0);return d|0}function im(a,b,c){a=a|0;b=+b;c=+c;h[a>>3]=b;h[a+8>>3]=c;return}function jm(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;h=l;l=l+32|0;f=h;if((Q2(KB(a)|0,108006,7)|0)==0?(km(a,e,f)|0)!=0:0){TC(a,137483,280,1)|0;i=(c[a+16>>2]|0)+16|0;c[i>>2]=c[f>>2];c[i+4>>2]=c[f+4>>2];c[i+8>>2]=c[f+8>>2];c[i+12>>2]=c[f+12>>2];c[i+16>>2]=c[f+16>>2];c[i+20>>2]=c[f+20>>2];c[i+24>>2]=c[f+24>>2];c[i+28>>2]=c[f+28>>2];lm(b,a);dm(a,d,e)}else g=4;a:do if((g|0)==4){a=OD(a)|0;while(1){if(!a)break a;jm(a,b,d,e);a=PD(a)|0}}while(0);l=h;return}function km(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0.0,g=0,i=0,j=0,k=0;i=l;l=l+48|0;j=i+32|0;g=i;k=RA(a,b)|0;a=g+8|0;b=g+24|0;c[j>>2]=g;c[j+4>>2]=a;c[j+8>>2]=g+16;c[j+12>>2]=b;if((b5(k,88782,j)|0)==4){e=+h[a>>3];f=+h[b>>3];if(e>f){h[a>>3]=f;h[b>>3]=e};c[d>>2]=c[g>>2];c[d+4>>2]=c[g+4>>2];c[d+8>>2]=c[g+8>>2];c[d+12>>2]=c[g+12>>2];c[d+16>>2]=c[g+16>>2];c[d+20>>2]=c[g+20>>2];c[d+24>>2]=c[g+24>>2];c[d+28>>2]=c[g+28>>2];a=1}else a=0;l=i;return a|0}function lm(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;e=a+16|0;d=c[e>>2]|0;g=d+180|0;a=c[g>>2]|0;f=a+1|0;c[g>>2]=f;d=c[d+184>>2]|0;if(!d)a=JK((a<<2)+8|0)|0;else a=LK(d,a+2|0,4,f)|0;c[(c[e>>2]|0)+184>>2]=a;c[a+(f<<2)>>2]=b;uK(b);return}function mm(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+48|0;m=n+8|0;k=n;i=n+16|0;j=n+12|0;h=QA(b,88798)|0;do if((h|0)!=0?(g=a[h>>0]|0,g<<24>>24!=0):0){g=g&255;if(!(b3(g)|0))if((e|0)==2|(g+-48|0)>>>0<10)e=h;else break;else{if(!(Q2(h,88804,4)|0)){e=0;break}if(!(Q2(h,105511,7)|0)){e=1;break}if(Q2(h,88809,6)|0)if((e|0)==2)e=h;else break;else e=h+6|0}if(!(((d[e>>0]|0)+-48|0)>>>0<10?(c[k>>2]=j,(b5(e,99933,k)|0)>=1):0)){k=X4()|0;k=(db(0)|0)^k;c[j>>2]=k;c[m>>2]=k;m4(i,99933,m)|0;SA(b,88798,i)|0}c[f>>2]=c[j>>2];e=2}while(0);l=n;return e|0}function nm(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f+4|0;c[e>>2]=1;d=mm(a,d,e)|0;if((d|0)!=2&(c[46796]|0)!=0)gA(0,88816,f)|0;if((d|0)==1)om(a,b);z5(c[e>>2]|0);l=f;return d|0}function om(b,d){b=b|0;d=d|0;var e=0,f=0.0,g=0.0,i=0.0,j=0,k=0,l=0.0;g=+(d|0);i=6.283185307179586/g;e=jC(b)|0;f=0.0;while(1){if(!e)break;l=+E(+f)*g;j=c[e+16>>2]|0;k=c[j+132>>2]|0;h[k>>3]=l;h[k+8>>3]=+F(+f)*g;a[j+119>>0]=1;if((c[47137]|0)>2)Gn(e,d);e=kC(b,e)|0;f=f+i}return}function pm(b){b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0.0,r=0;r=l;l=l+80|0;d=r+24|0;n=r+32|0;k=r;p=r+28|0;m=r+64|0;q=+h[23293];do if(c[47134]|0){h[23293]=72.0;qm(b);rm(b);if((bm(b,1)|0)<0){gA(3,88864,d)|0;break}else{cM(b,0);f=32;break}}else{o=eP(QA(b,88593)|0,0)|0;h[23293]=+$O(b);qm(b);g=sm(b)|0;Nq(b,k,0)|0;i=tm(b)|0;j=mH(b,0,n)|0;d=lH(b,-1,8)|0;c[46795]=d;e=(d|0)<0;do if(!j){if((g|0)!=0&e){c[46795]=8;c[n+16>>2]=2;f=11;break}c[n+16>>2]=2;if((d|0)<=-1){um(b,g,i);Qq(b,k)|0;rm(b);if(!(o<<24>>24)){fn(b);break}else{vm(b);break}}else f=11}else if(e){c[46795]=8;f=11}else f=11;while(0);if((f|0)==11){j=sG(b,p,88892,m)|0;d=c[p>>2]|0;do if((d|0)<=1){um(b,g,i);Qq(b,k)|0;if(!(o<<24>>24)){fn(b);break}else{vm(b);break}}else{f=o<<24>>24==0;e=0;while(1){if((e|0)>=(d|0))break;d=c[j+(e<<2)>>2]|0;KG(d)|0;um(d,g,i);Qq(d,k)|0;oQ(d,2);if(f)fn(d);else vm(d);e=e+1|0;d=c[p>>2]|0}if(!(a[m>>0]|0))e=0;else{e=JK(d)|0;a[e>>0]=1;d=c[p>>2]|0}c[n+8>>2]=c[46795];c[n+20>>2]=e;c[n+12>>2]=1;iH(d,j,b,n)|0;U1(e)}while(0);BP(b);rm(b);d=0;while(1){if((d|0)>=(c[p>>2]|0))break;n=c[j+(d<<2)>>2]|0;Dn(n);VC(n,137483)|0;wC(b,n)|0;d=d+1|0}U1(j)}cM(b,o<<24>>24==0&1);f=32}while(0);if((f|0)==32)h[23293]=q;l=r;return}function qm(a){a=a|0;var d=0,e=0,f=0,g=0;oQ(a,2);f=ZO(a,GA(a,0,91368,0)|0,2,2)|0;d=(ZO(a,GA(a,0,91374,0)|0,f,2)|0)&65535;b[(c[(yC(a)|0)+16>>2]|0)+176>>1]=d;d=c[(c[a+60>>2]|0)+16>>2]|0;g=d+176|0;e=b[g>>1]|0;e=(e&65535)<10?e:10;b[g>>1]=e;e=e&65535;c[47137]=e;b[d+178>>1]=(f|0)<(e|0)?f:e;Fm(a);return}function rm(a){a=a|0;var b=0,d=0,e=0,f=0;f=l;l=l+1040|0;e=f;d=f+8|0;a:do if((c[47137]|0)>2&(c[47171]|0)!=0){b=jC(a)|0;while(1){if(!b)break a;h[e>>3]=+h[(c[(c[b+16>>2]|0)+132>>2]|0)+16>>3]*72.0;m4(d,101209,e)|0;KA(b,c[47171]|0,d)|0;b=kC(a,b)|0}}while(0);l=f;return}function sm(b){b=b|0;var d=0,e=0,f=0;f=l;l=l+16|0;e=f;d=QA(b,89577)|0;a:do if(!d)b=1;else{switch(a[d>>0]|0){case 0:{b=1;break a}case 75:{if(!(s2(d,89582)|0)){b=0;break a}break}case 109:{if(!(s2(d,89585)|0)){b=1;break a}break}case 104:{if(!(s2(d,89591)|0)){b=2;break a}break}default:{}}b=KB(b)|0;c[e>>2]=d;c[e+4>>2]=b;gA(0,89596,e)|0;b=1}while(0);l=f;return b|0}function tm(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;h=l;l=l+32|0;g=h+16|0;f=h+8|0;e=h;d=QA(b,89360)|0;a:do if(!d)b=0;else{switch(a[d>>0]|0){case 0:{b=0;break a}case 99:{if(!(s2(d,89366)|0)){b=1;break a}break}case 115:{if(!(s2(d,89374)|0)){b=2;break a}if(!(s2(d,89381)|0)){b=0;break a}break}case 109:{if(!(s2(d,89391)|0)){if(GA(b,2,92493,0)|0){b=3;break a}c[e>>2]=KB(b)|0;gA(0,89395,e)|0;gA(3,89458,f)|0;b=0;break a}break}default:{}}b=KB(b)|0;c[g>>2]=d;c[g+4>>2]=b;gA(0,89515,g)|0;b=0}while(0);l=h;return b|0}function um(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=QA(a,91061)|0;if(!e)if((b|0)==1)e=200;else e=(tB(a)|0)*100|0;else e=q5(e)|0;c[47136]=e;e=wn(a,b)|0;do if(!((e|0)<2|(c[47136]|0)<0))if(!b){xm(a,e,d);break}else{wm(a,e,b,d,c[47137]|0);break}while(0);return}function vm(a){a=a|0;BP(a);Zm(a,1);return}function wm(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,i=0,j=0,k=0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;u=l;l=l+64|0;r=u+40|0;o=u+24|0;n=u;p=u+48|0;t=u+44|0;q=(d|0)==2;i=nm(a,b,q?0:2)|0;j=Em(a)|0;k=j|4;s=KK(f<<2)|0;c[s>>2]=KK(O(b<<3,f)|0)|0;g=c[47137]|0;f=1;while(1){if((f|0)>=(g|0))break;c[s+(f<<2)>>2]=(c[s>>2]|0)+((O(f,b)|0)<<3);f=f+1|0}g=(i|0)==0;f=g?k:j;if(0){k=c[15712]|0;j=c[47136]|0;m=+h[23294];c[n>>2]=e;c[n+4>>2]=g&1;c[n+8>>2]=f&3;c[n+12>>2]=j;h[n+16>>3]=m;w4(k,89173,n)|0;U4(89230,15,1,k)|0;TO();U4(89246,13,1,k)|0}n=Am(a,b,p,d,e,t)|0;if(0){k=c[15712]|0;m=+UO();c[o>>2]=b;h[o+8>>3]=m;w4(k,89260,o)|0}if((d|0)!=1){m=+_O(a,GA(a,0,89279,0)|0,0.0,-1797693134862315708145274.0e284);if(q){f=Br(n,b,c[p>>2]|0,s,c[t>>2]|0,c[47137]|0,f,e,c[47136]|0,m)|0;g=12}else g=14}else{f=on(n,b,c[p>>2]|0,s,c[t>>2]|0,c[47137]|0,f,e,c[47136]|0)|0;g=12}if((g|0)==12)if((f|0)<0)gA(3,89289,r)|0;else g=14;a:do if((g|0)==14){g=jC(a)|0;while(1){if(!g)break a;k=c[g+16>>2]|0;i=c[k+120>>2]|0;j=c[47137]|0;k=k+132|0;f=0;while(1){if((f|0)>=(j|0))break;h[(c[k>>2]|0)+(f<<3)>>3]=+h[(c[s+(f<<2)>>2]|0)+(i<<3)>>3];f=f+1|0}g=kC(a,g)|0}}while(0);as(n);U1(c[s>>2]|0);U1(s);U1(c[t>>2]|0);l=u;return}function xm(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,i=0.0,j=0;g=l;l=l+48|0;f=g+32|0;e=g;switch(d|0){case 2:{ym(a,b);break}case 1:{if(!(xr(a,b)|0)){c[e>>2]=KB(a)|0;gA(0,88902,e)|0;gA(3,93364,g+8|0)|0;gA(3,88954,g+16|0)|0;gA(3,89026,g+24|0)|0;Un(a,b)}break}default:{Un(a,b);if((d|0)==3)zm(a)}}In(a,b);Jn(a,b);if(0){e=c[15712]|0;j=c[47136]|0;i=+h[23294];c[f>>2]=d;c[f+4>>2]=j;h[f+8>>3]=i;w4(e,89064,f)|0;TO()}Kn(a,b);l=g;return}function ym(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0;j=l;l=l+16|0;g=Am(a,b,j,0,2,0)|0;i=ct(g,b)|0;e=a+16|0;a=0;while(1){if((a|0)>=(b|0))break;f=i+(a<<2)|0;d=0;while(1){if((d|0)==(b|0))break;h[(c[(c[(c[e>>2]|0)+160>>2]|0)+(a<<2)>>2]|0)+(d<<3)>>3]=+(c[(c[f>>2]|0)+(d<<2)>>2]|0);d=d+1|0}a=a+1|0}U1(c[i>>2]|0);U1(i);as(g);l=j;return}function zm(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,i=0,j=0.0;f=a+16|0;d=jC(a)|0;while(1){if(!d)break;b=XA(a,d)|0;while(1){if(!b)break;g=c[b>>2]&3;e=(c[c[((g|0)==3?b:b+48|0)+40>>2]>>2]|0)>>>4;g=(c[c[((g|0)==2?b:b+-48|0)+40>>2]>>2]|0)>>>4;if((e|0)!=(g|0)){j=+h[(c[b+16>>2]|0)+136>>3];i=c[(c[f>>2]|0)+160>>2]|0;h[(c[i+(g<<2)>>2]|0)+(e<<3)>>3]=j;h[(c[i+(e<<2)>>2]|0)+(g<<3)>>3]=j}b=ZA(a,b)|0}d=kC(a,d)|0}return}function Am(a,b,d,e,f,i){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0.0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0.0,I=0;j=uB(a)|0;G=VL()|0;if((f|0)==2){k=0;D=0}else{D=GA(a,2,92493,0)|0;k=(c[47174]|0)!=0&1;D=(D|0)!=0}A=(e|1|0)==3;E=KK(b*20|0)|0;F=KK(b<<2)|0;l=(j<<1)+b<<2;m=KK(l)|0;z=A|D;if(z)f=KK(l)|0;else f=0;C=(k|0)!=0;if(C)j=KK(l)|0;else j=0;if(A)k=KK(l)|0;else k=0;l=0;x=jC(a)|0;y=0;while(1){if(!x)break;YL(G);if((c[(c[x+16>>2]|0)+120>>2]|0)!=(y|0)){B=12;break}c[F+(y<<2)>>2]=x;u=E+(y*20|0)+4|0;c[u>>2]=m;v=E+(y*20|0)+8|0;c[v>>2]=z?f:0;w=E+(y*20|0)+12|0;c[w>>2]=C?j:0;c[E+(y*20|0)+16>>2]=A?k:0;r=1;t=aB(a,x)|0;s=1;q=l;m=m+4|0;f=z?f+4|0:f;j=C?j+4|0:j;k=A?k+4|0:k;while(1){if(!t)break;n=c[t>>2]&3;p=t+-48|0;l=t+48|0;do if((c[((n|0)==2?t:p)+40>>2]|0)==(c[((n|0)==3?t:l)+40>>2]|0)){n=r;p=s;l=q}else{n=Bm(G,t,r)|0;if((n|0)!=(r|0)){if(C){p=(c[w>>2]|0)+(n<<2)|0;g[p>>2]=+h[(c[t+16>>2]|0)+128>>3]+ +g[p>>2]}if(!D){n=r;p=s;l=q;break}n=(c[v>>2]|0)+(n<<2)|0;H=+h[(c[t+16>>2]|0)+136>>3];o=+(~~+g[n>>2]|0);g[n>>2]=H>o?H:o;n=r;p=s;l=q;break}I=c[t>>2]&3;l=(I|0)==3?t:l;q=q+1|0;n=r+1|0;r=m+4|0;c[m>>2]=c[(c[(c[((c[l+40>>2]|0)==(x|0)?((I|0)==2?t:p):l)+40>>2]|0)+16>>2]|0)+120>>2];if(C){g[j>>2]=+h[(c[t+16>>2]|0)+128>>3];j=j+4|0}if(D){l=f+4|0;g[f>>2]=+h[(c[t+16>>2]|0)+136>>3];if(A){f=l;B=27}else f=l}else if(A){g[f>>2]=1.0;f=f+4|0;B=27}if((B|0)==27){B=0;l=QA(t,101559)|0;if((l|0)!=0?(Q2(l,135709,4)|0)==0:0)o=0.0;else o=(x|0)==(c[((c[t>>2]&3|0)==2?t:p)+40>>2]|0)?1.0:-1.0;g[k>>2]=o;k=k+4|0}p=s+1|0;l=q;m=r}while(0);r=n;t=bB(a,t,x)|0;s=p;q=l}c[E+(y*20|0)>>2]=s;c[c[u>>2]>>2]=y;l=q;x=kC(a,x)|0;y=y+1|0}if((B|0)==12)qa(89103,89118,819,89130);if(A)Cm(E,b,e,F);n=(l|0)/2|0;a:do if((n|0)!=(uB(a)|0)){l=(n<<1)+b<<2;k=MK(c[E+4>>2]|0,l)|0;if(D)f=MK(c[E+8>>2]|0,l)|0;if(C){m=0;j=MK(c[E+12>>2]|0,l)|0}else m=0;while(1){if((m|0)>=(b|0))break a;l=c[E+(m*20|0)>>2]|0;c[E+(m*20|0)+4>>2]=k;if(D){c[E+(m*20|0)+8>>2]=f;f=f+(l<<2)|0}if(C){c[E+(m*20|0)+12>>2]=j;j=j+(l<<2)|0}m=m+1|0;k=k+(l<<2)|0}}while(0);c[d>>2]=n;if(!i)U1(F);else c[i>>2]=F;ZL(G);return E|0}function Bm(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;f=c[b>>2]&3;e=c[(c[(c[((f|0)==3?b:b+48|0)+40>>2]|0)+16>>2]|0)+120>>2]|0;b=c[(c[(c[((f|0)==2?b:b+-48|0)+40>>2]|0)+16>>2]|0)+120>>2]|0;f=(e|0)>(b|0);return _L(a,f?b:e,f?e:b,d)|0}function Cm(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;g=0;while(1){if((g|0)>=(d|0)){g=0;break}h=c[(c[f+(g<<2)>>2]|0)+16>>2]|0;a[h+157>>0]=0;a[h+158>>0]=0;g=g+1|0}while(1){if((g|0)>=(d|0))break;if(!(a[(c[(c[f+(g<<2)>>2]|0)+16>>2]|0)+157>>0]|0))Dm(b,g,e,f);g=g+1|0}return}function Dm(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0.0,p=0,q=0;q=(c[f+(d<<2)>>2]|0)+16|0;l=c[q>>2]|0;a[l+157>>0]=1;a[l+158>>0]=1;l=b+(d*20|0)|0;m=b+(d*20|0)+16|0;n=b+(d*20|0)+4|0;o=(e|0)==3?-1.0:1.0;k=1;a:while(1){if((k|0)>=(c[l>>2]|0)){h=14;break}h=(c[m>>2]|0)+(k<<2)|0;do if(!(+g[h>>2]==1.0)){p=c[(c[n>>2]|0)+(k<<2)>>2]|0;i=c[(c[f+(p<<2)>>2]|0)+16>>2]|0;if(!(a[i+158>>0]|0)){if(a[i+157>>0]|0)break;Dm(b,p,e,f);break}g[h>>2]=o;i=b+(p*20|0)+4|0;j=c[b+(p*20|0)>>2]|0;h=1;while(1){if((h|0)>=(j|0)){h=9;break a}if((c[(c[i>>2]|0)+(h<<2)>>2]|0)==(d|0))break;h=h+1|0}g[(c[b+(p*20|0)+16>>2]|0)+(h<<2)>>2]=-1.0}while(0);k=k+1|0}if((h|0)==9)qa(89144,89118,721,89164);else if((h|0)==14){a[(c[q>>2]|0)+158>>0]=0;return}}function Em(a){a=a|0;var b=0,d=0;d=l;l=l+16|0;b=d;a=ZO(a,GA(a,0,89305,0)|0,2,0)|0;if((a|0)==0|(a|0)>2){c[b>>2]=89305;gA(0,89314,b)|0;a=2}l=d;return a|0}function Fm(a){a=a|0;var b=0,d=0,e=0;d=tB(a)|0;c[46796]=GA(a,1,102623,0)|0;e=GA(a,1,90660,0)|0;b=jC(a)|0;while(1){if(!b)break;Zl(b);_l(c[46796]|0,e,b,d)|0;b=kC(a,b)|0}d=jC(a)|0;while(1){if(!d)break;b=XA(a,d)|0;while(1){if(!b)break;Gm(b);b=ZA(a,b)|0}d=kC(a,d)|0}return}function Gm(a){a=a|0;var b=0.0;TC(a,137460,176,1)|0;tP(a)|0;b=+_O(a,c[47174]|0,1.0,1.0);h[(c[a+16>>2]|0)+128>>3]=b;return}function Hm(a,d,e){a=a|0;d=d|0;e=e|0;var f=0,g=0;a=JK(64)|0;e=a+8|0;f=d+8|0;g=e+48|0;do{c[e>>2]=c[f>>2];e=e+4|0;f=f+4|0}while((e|0)<(g|0));d=c[d+56>>2]|0;c[a+56>>2]=d;b[(c[d+16>>2]|0)+168>>1]=1;return a|0}function Im(a,b,c){a=a|0;b=b|0;c=c|0;U1(b);return}function Jm(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;a=c[b>>2]|0;e=c[d>>2]|0;if(a>>>0<=e>>>0)if(a>>>0>=e>>>0){e=c[b+24>>2]|0;a=c[d+24>>2]|0;if(e>>>0<=a>>>0)if(e>>>0>=a>>>0){a=~~(+h[b+8>>3]-+h[d+8>>3]);if(!a){a=~~(+h[b+16>>3]-+h[d+16>>3]);if(!a){a=~~(+h[b+32>>3]-+h[d+32>>3]);if(!a)a=~~(+h[b+40>>3]-+h[d+40>>3])}}}else a=-1;else a=1}else a=-1;else a=1;return a|0}function Km(d,e,f){d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0.0;k=l;l=l+16|0;g=k;h=e+16|0;i=b[(c[h>>2]|0)+168>>1]|0;j=i<<16>>16;if(i<<16>>16!=1&(a[194954]|0)==0){i=KK(j<<2)|0;g=0;while(1){if((g|0)>=(j|0))break;c[i+(g<<2)>>2]=e;e=c[(c[e+16>>2]|0)+172>>2]|0;g=g+1|0}m=+(f|0);lO(d,i,0,j,m,m,17792);e=0;while(1){if((e|0)>=(j|0))break;g=c[i+(e<<2)>>2]|0;h=g+16|0;if(c[(c[h>>2]|0)+96>>2]|0){f=xC(c[((c[g>>2]&3|0)==3?g:g+48|0)+40>>2]|0)|0;zP(f,c[(c[h>>2]|0)+96>>2]|0)}sO(g);e=e+1|0}U1(i)}else{c[g>>2]=e;m=+(f|0);lO(d,g,0,1,m,m,17792);if(c[(c[h>>2]|0)+96>>2]|0){j=xC(c[((c[e>>2]&3|0)==3?e:e+48|0)+40>>2]|0)|0;zP(j,c[(c[h>>2]|0)+96>>2]|0)}sO(e)}l=k;return}function Lm(a){a=a|0;return 0}function Mm(a){a=a|0;return 0}function Nm(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,i=0,j=0,k=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0,s=0.0,t=0,u=0,v=0,w=0.0,x=0.0,y=0.0,z=0,A=0,B=0,D=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0;Q=l;l=l+384|0;O=Q+368|0;P=Q+112|0;j=Q+32|0;r=Q+336|0;K=Q+320|0;L=Q+304|0;M=Q+288|0;N=Q+272|0;i=Q+256|0;H=Q+240|0;I=Q+224|0;J=Q+208|0;t=Q+192|0;u=Q+176|0;v=Q+160|0;z=Q+144|0;A=Q+128|0;B=Q+96|0;D=Q+16|0;G=Q;a:do switch(WM(b)|0){case 3:case 1:{f=JK(8)|0;z=b+16|0;b=c[z>>2]|0;i=c[b+12>>2]|0;do if(!(e<<24>>24)){b=c[i+8>>2]|0;if((b|0)>2){y=0.0;j=c[i+44>>2]|0;e=0;p=+g[d>>2];q=+g[d+4>>2];break}else{y=+B5()*.01;b=8;j=0;e=1;p=0.0;q=0.0;break}}else if(!(c[i+40>>2]&2048)){q=+h[b+88>>3];p=-q;y=+h[b+80>>3];x=y*-.5;h[j>>3]=p;h[j+8>>3]=x;h[j+16>>3]=q;h[j+24>>3]=x;y=y*.5;h[j+32>>3]=q;h[j+40>>3]=y;h[j+48>>3]=p;h[j+56>>3]=y;y=0.0;b=4;e=0;p=0.0;q=0.0;break}else{yP(r,i);p=+h[r>>3];x=+h[r+8>>3];q=+h[r+16>>3];y=+h[r+24>>3];h[j>>3]=p;h[j+8>>3]=x;h[j+16>>3]=q;h[j+24>>3]=x;h[j+32>>3]=q;h[j+40>>3]=y;h[j+48>>3]=p;h[j+56>>3]=y;y=0.0;b=4;e=0;p=0.0;q=0.0;break}while(0);c[f+4>>2]=b;r=JK(b<<4)|0;c[f>>2]=r;s=1.0/+(b|0);t=d+8|0;u=d+4|0;v=(b|0)==4;w=-p;x=-q;i=0;while(1){if((b|0)<=(i|0))break a;do if(e){k=+(i|0)*6.283185307179586*s+y;m=+E(+k);k=+F(+k);if(!(a[t>>0]|0)){P=c[z>>2]|0;n=k*+g[u>>2]*+h[P+80>>3];k=m*+g[d>>2]*(+h[P+96>>3]+ +h[P+88>>3])}else{P=c[z>>2]|0;n=(+h[P+80>>3]+ +g[u>>2])*k;k=(+h[P+96>>3]+ +h[P+88>>3]+ +g[d>>2])*m}o=k*.5;k=n*.5}else{if(!(a[t>>0]|0)){o=+h[j+(i<<4)>>3]*p;k=+h[j+(i<<4)+8>>3]*q;break}if(!v){o=+h[j+(i<<4)>>3];k=+h[j+(i<<4)+8>>3];n=+C(+(k*k+o*o));o=(p/n+1.0)*o;k=(q/n+1.0)*k;break}switch(i|0){case 0:{m=q;k=p;break}case 1:{m=q;k=w;break}case 2:{m=x;k=w;break}case 3:{m=x;k=p;break}default:{m=0.0;k=0.0}}o=+h[j+(i<<4)>>3]+k;k=+h[j+(i<<4)+8>>3]+m}while(0);O=c[z>>2]|0;P=b-i+-1|0;h[r+(P<<4)>>3]=+h[O+16>>3]+o;h[r+(P<<4)+8>>3]=+h[O+24>>3]+k;i=i+1|0}}case 2:{G=b+16|0;f=c[(c[G>>2]|0)+12>>2]|0;k=+h[f+16>>3];o=+h[f+24>>3];m=+h[f+32>>3];n=+h[f+40>>3];f=JK(8)|0;c[f+4>>2]=4;b=JK(64)|0;c[f>>2]=b;G=(c[G>>2]|0)+16|0;c[P>>2]=c[G>>2];c[P+4>>2]=c[G+4>>2];c[P+8>>2]=c[G+8>>2];c[P+12>>2]=c[G+12>>2];if(!(a[d+8>>0]|0)){c[O>>2]=c[P>>2];c[O+4>>2]=c[P+4>>2];c[O+8>>2]=c[P+8>>2];c[O+12>>2]=c[P+12>>2];Pm(i,k,o,O,d);c[b>>2]=c[i>>2];c[b+4>>2]=c[i+4>>2];c[b+8>>2]=c[i+8>>2];c[b+12>>2]=c[i+12>>2];N=(c[f>>2]|0)+16|0;c[O>>2]=c[P>>2];c[O+4>>2]=c[P+4>>2];c[O+8>>2]=c[P+8>>2];c[O+12>>2]=c[P+12>>2];Pm(H,k,n,O,d);c[N>>2]=c[H>>2];c[N+4>>2]=c[H+4>>2];c[N+8>>2]=c[H+8>>2];c[N+12>>2]=c[H+12>>2];N=(c[f>>2]|0)+32|0;c[O>>2]=c[P>>2];c[O+4>>2]=c[P+4>>2];c[O+8>>2]=c[P+8>>2];c[O+12>>2]=c[P+12>>2];Pm(I,m,n,O,d);c[N>>2]=c[I>>2];c[N+4>>2]=c[I+4>>2];c[N+8>>2]=c[I+8>>2];c[N+12>>2]=c[I+12>>2];N=(c[f>>2]|0)+48|0;c[O>>2]=c[P>>2];c[O+4>>2]=c[P+4>>2];c[O+8>>2]=c[P+8>>2];c[O+12>>2]=c[P+12>>2];Pm(J,m,o,O,d);c[N>>2]=c[J>>2];c[N+4>>2]=c[J+4>>2];c[N+8>>2]=c[J+8>>2];c[N+12>>2]=c[J+12>>2];break a}else{y=k-+g[d>>2];J=d+4|0;x=o-+g[J>>2];c[O>>2]=c[P>>2];c[O+4>>2]=c[P+4>>2];c[O+8>>2]=c[P+8>>2];c[O+12>>2]=c[P+12>>2];Om(K,y,x,O);c[b>>2]=c[K>>2];c[b+4>>2]=c[K+4>>2];c[b+8>>2]=c[K+8>>2];c[b+12>>2]=c[K+12>>2];K=(c[f>>2]|0)+16|0;x=k-+g[d>>2];y=n+ +g[J>>2];c[O>>2]=c[P>>2];c[O+4>>2]=c[P+4>>2];c[O+8>>2]=c[P+8>>2];c[O+12>>2]=c[P+12>>2];Om(L,x,y,O);c[K>>2]=c[L>>2];c[K+4>>2]=c[L+4>>2];c[K+8>>2]=c[L+8>>2];c[K+12>>2]=c[L+12>>2];L=(c[f>>2]|0)+32|0;y=m+ +g[d>>2];x=n+ +g[J>>2];c[O>>2]=c[P>>2];c[O+4>>2]=c[P+4>>2];c[O+8>>2]=c[P+8>>2];c[O+12>>2]=c[P+12>>2];Om(M,y,x,O);c[L>>2]=c[M>>2];c[L+4>>2]=c[M+4>>2];c[L+8>>2]=c[M+8>>2];c[L+12>>2]=c[M+12>>2];M=(c[f>>2]|0)+48|0;x=m+ +g[d>>2];y=o-+g[J>>2];c[O>>2]=c[P>>2];c[O+4>>2]=c[P+4>>2];c[O+8>>2]=c[P+8>>2];c[O+12>>2]=c[P+12>>2];Om(N,x,y,O);c[M>>2]=c[N>>2];c[M+4>>2]=c[N+4>>2];c[M+8>>2]=c[N+8>>2];c[M+12>>2]=c[N+12>>2];break a}}case 4:{b=b+16|0;f=JK(8)|0;c[f+4>>2]=4;i=JK(64)|0;c[f>>2]=i;j=c[b>>2]|0;N=j+16|0;c[P>>2]=c[N>>2];c[P+4>>2]=c[N+4>>2];c[P+8>>2]=c[N+8>>2];c[P+12>>2]=c[N+12>>2];k=-+h[j+88>>3];if(!(a[d+8>>0]|0)){x=-+h[j+80>>3];c[O>>2]=c[P>>2];c[O+4>>2]=c[P+4>>2];c[O+8>>2]=c[P+8>>2];c[O+12>>2]=c[P+12>>2];Pm(A,k,x,O,d);c[i>>2]=c[A>>2];c[i+4>>2]=c[A+4>>2];c[i+8>>2]=c[A+8>>2];c[i+12>>2]=c[A+12>>2];N=(c[f>>2]|0)+16|0;M=c[b>>2]|0;x=-+h[M+88>>3];y=+h[M+80>>3];c[O>>2]=c[P>>2];c[O+4>>2]=c[P+4>>2];c[O+8>>2]=c[P+8>>2];c[O+12>>2]=c[P+12>>2];Pm(B,x,y,O,d);c[N>>2]=c[B>>2];c[N+4>>2]=c[B+4>>2];c[N+8>>2]=c[B+8>>2];c[N+12>>2]=c[B+12>>2];N=(c[f>>2]|0)+32|0;M=c[b>>2]|0;y=+h[M+96>>3];x=+h[M+80>>3];c[O>>2]=c[P>>2];c[O+4>>2]=c[P+4>>2];c[O+8>>2]=c[P+8>>2];c[O+12>>2]=c[P+12>>2];Pm(D,y,x,O,d);c[N>>2]=c[D>>2];c[N+4>>2]=c[D+4>>2];c[N+8>>2]=c[D+8>>2];c[N+12>>2]=c[D+12>>2];N=(c[f>>2]|0)+48|0;M=c[b>>2]|0;x=+h[M+96>>3];y=-+h[M+80>>3];c[O>>2]=c[P>>2];c[O+4>>2]=c[P+4>>2];c[O+8>>2]=c[P+8>>2];c[O+12>>2]=c[P+12>>2];Pm(G,x,y,O,d);c[N>>2]=c[G>>2];c[N+4>>2]=c[G+4>>2];c[N+8>>2]=c[G+8>>2];c[N+12>>2]=c[G+12>>2];break a}else{y=k-+g[d>>2];M=d+4|0;x=-+h[j+80>>3]-+g[M>>2];c[O>>2]=c[P>>2];c[O+4>>2]=c[P+4>>2];c[O+8>>2]=c[P+8>>2];c[O+12>>2]=c[P+12>>2];Om(t,y,x,O);c[i>>2]=c[t>>2];c[i+4>>2]=c[t+4>>2];c[i+8>>2]=c[t+8>>2];c[i+12>>2]=c[t+12>>2];N=(c[f>>2]|0)+16|0;L=c[b>>2]|0;x=-+h[L+88>>3]-+g[d>>2];y=+h[L+80>>3]+ +g[M>>2];c[O>>2]=c[P>>2];c[O+4>>2]=c[P+4>>2];c[O+8>>2]=c[P+8>>2];c[O+12>>2]=c[P+12>>2];Om(u,x,y,O);c[N>>2]=c[u>>2];c[N+4>>2]=c[u+4>>2];c[N+8>>2]=c[u+8>>2];c[N+12>>2]=c[u+12>>2];N=(c[f>>2]|0)+32|0;L=c[b>>2]|0;y=+h[L+96>>3]+ +g[d>>2];x=+h[L+80>>3]+ +g[M>>2];c[O>>2]=c[P>>2];c[O+4>>2]=c[P+4>>2];c[O+8>>2]=c[P+8>>2];c[O+12>>2]=c[P+12>>2];Om(v,y,x,O);c[N>>2]=c[v>>2];c[N+4>>2]=c[v+4>>2];c[N+8>>2]=c[v+8>>2];c[N+12>>2]=c[v+12>>2];N=(c[f>>2]|0)+48|0;L=c[b>>2]|0;x=+h[L+96>>3]+ +g[d>>2];y=-+h[L+80>>3]-+g[M>>2];c[O>>2]=c[P>>2];c[O+4>>2]=c[P+4>>2];c[O+8>>2]=c[P+8>>2];c[O+12>>2]=c[P+12>>2];Om(z,x,y,O);c[N>>2]=c[z>>2];c[N+4>>2]=c[z+4>>2];c[N+8>>2]=c[z+8>>2];c[N+12>>2]=c[z+12>>2];break a}}default:f=0}while(0);l=Q;return f|0}function Om(a,b,c,d){a=a|0;b=+b;c=+c;d=d|0;c=+h[d+8>>3]+c;h[a>>3]=+h[d>>3]+b;h[a+8>>3]=c;return}function Pm(a,b,c,d,e){a=a|0;b=+b;c=+c;d=d|0;e=e|0;c=+g[e+4>>2]*c+ +h[d+8>>3];h[a>>3]=+g[e>>2]*b+ +h[d>>3];h[a+8>>3]=c;return}function Qm(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;o=l;l=l+112|0;j=o+88|0;i=o+72|0;k=o+32|0;m=o+16|0;n=o;f=o+56|0;g=o+40|0;h=b+48|0;r=(c[(c[((c[b>>2]&3|0)==3?b:h)+40>>2]|0)+16>>2]|0)+16|0;p=b+16|0;q=(c[p>>2]|0)+16|0;c[i>>2]=c[r>>2];c[i+4>>2]=c[r+4>>2];c[i+8>>2]=c[r+8>>2];c[i+12>>2]=c[r+12>>2];c[j>>2]=c[q>>2];c[j+4>>2]=c[q+4>>2];c[j+8>>2]=c[q+8>>2];c[j+12>>2]=c[q+12>>2];Rm(f,i,j);c[m>>2]=c[f>>2];c[m+4>>2]=c[f+4>>2];c[m+8>>2]=c[f+8>>2];c[m+12>>2]=c[f+12>>2];f=b+-48|0;q=(c[(c[((c[b>>2]&3|0)==2?b:f)+40>>2]|0)+16>>2]|0)+16|0;p=(c[p>>2]|0)+56|0;c[i>>2]=c[q>>2];c[i+4>>2]=c[q+4>>2];c[i+8>>2]=c[q+8>>2];c[i+12>>2]=c[q+12>>2];c[j>>2]=c[p>>2];c[j+4>>2]=c[p+4>>2];c[j+8>>2]=c[p+8>>2];c[j+12>>2]=c[p+12>>2];Rm(g,i,j);c[n>>2]=c[g>>2];c[n+4>>2]=c[g+4>>2];c[n+8>>2]=c[g+8>>2];c[n+12>>2]=c[g+12>>2];if(!e){g=-1111;f=-1111}else{r=c[b>>2]&3;g=c[(c[(c[((r|0)==2?b:f)+40>>2]|0)+16>>2]|0)+288>>2]|0;f=c[(c[(c[((r|0)==3?b:h)+40>>2]|0)+16>>2]|0)+288>>2]|0};c[i>>2]=c[m>>2];c[i+4>>2]=c[m+4>>2];c[i+8>>2]=c[m+8>>2];c[i+12>>2]=c[m+12>>2];c[j>>2]=c[n>>2];c[j+4>>2]=c[n+4>>2];c[j+8>>2]=c[n+8>>2];c[j+12>>2]=c[n+12>>2];MX(d,i,f,j,g,k)|0;p=k;q=c[p+4>>2]|0;r=a;c[r>>2]=c[p>>2];c[r+4>>2]=q;l=o;return}function Rm(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0;d=+h[c+8>>3]+ +h[b+8>>3];h[a>>3]=+h[c>>3]+ +h[b>>3];h[a+8>>3]=d;return}function Sm(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;u=l;l=l+144|0;p=u+104|0;q=u+88|0;o=u+80|0;n=u+72|0;j=u+64|0;s=u+128|0;k=u+32|0;m=u+124|0;t=u+16|0;r=u;i=u+120|0;h=(c[b+16>>2]|0)+144|0;g=c[h>>2]|0;h=c[h+4>>2]|0;v=j;c[v>>2]=g;c[v+4>>2]=h;v=g;c[t>>2]=c[v>>2];c[t+4>>2]=c[v+4>>2];c[t+8>>2]=c[v+8>>2];c[t+12>>2]=c[v+12>>2];h=g+(h+-1<<4)|0;c[r>>2]=c[h>>2];c[r+4>>2]=c[h+4>>2];c[r+8>>2]=c[h+8>>2];c[r+12>>2]=c[h+12>>2];a:do if(!(f<<24>>24)){g=-1111;f=-1111}else{g=-1111;f=-1111;h=0;while(1){if((h|0)>=(e|0))break a;if((f|0)==-1111){f=c[d+(h<<2)>>2]|0;c[q>>2]=c[f>>2];c[q+4>>2]=c[f+4>>2];c[p>>2]=c[t>>2];c[p+4>>2]=c[t+4>>2];c[p+8>>2]=c[t+8>>2];c[p+12>>2]=c[t+12>>2];f=(NX(q,p)|0)==0;f=f?-1111:h}if((g|0)==-1111){g=c[d+(h<<2)>>2]|0;c[q>>2]=c[g>>2];c[q+4>>2]=c[g+4>>2];c[p>>2]=c[r>>2];c[p+4>>2]=c[r+4>>2];c[p+8>>2]=c[r+8>>2];c[p+12>>2]=c[r+12>>2];g=(NX(q,p)|0)==0;g=g?-1111:h}h=h+1|0}}while(0);Tm(d,e,f,g,i,m);c[k>>2]=0;c[k+4>>2]=0;c[k+8>>2]=0;c[k+12>>2]=0;c[k+16>>2]=0;c[k+20>>2]=0;c[k+24>>2]=0;c[k+28>>2]=0;h=c[i>>2]|0;v=c[m>>2]|0;c[p>>2]=c[j>>2];c[p+4>>2]=c[j+4>>2];if((OX(h,v,p,k,s)|0)<0){t=KB(c[((c[b>>2]&3|0)==3?b:b+48|0)+40>>2]|0)|0;v=KB(c[((c[b>>2]&3|0)==2?b:b+-48|0)+40>>2]|0)|0;c[n>>2]=t;c[n+4>>2]=v;gA(1,89657,n)|0}else{if(0>1){g=c[15712]|0;n=KB(c[((c[b>>2]&3|0)==3?b:b+48|0)+40>>2]|0)|0;f=b+-48|0;v=KB(c[((c[b>>2]&3|0)==2?b:f)+40>>2]|0)|0;c[o>>2]=n;c[o+4>>2]=v;w4(g,89705,o)|0;g=b}else{f=b+-48|0;g=b}dO(b,c[((c[g>>2]&3|0)==2?b:f)+40>>2]|0,c[s>>2]|0,c[s+4>>2]|0,17792);U1(h);c[q>>2]=c[t>>2];c[q+4>>2]=c[t+4>>2];c[q+8>>2]=c[t+8>>2];c[q+12>>2]=c[t+12>>2];c[p>>2]=c[r>>2];c[p+4>>2]=c[r+4>>2];c[p+8>>2]=c[r+8>>2];c[p+12>>2]=c[r+12>>2];yO(a,b,q,p)}l=u;return}function Tm(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;i=0;h=0;while(1){if((i|0)>=(b|0))break;if(!((i|0)==(d|0)|(i|0)==(e|0)))h=(c[(c[a+(i<<2)>>2]|0)+4>>2]|0)+h|0;i=i+1|0}o=KK(h<<5)|0;i=0;n=0;while(1){if((n|0)>=(b|0))break;a:do if(!((n|0)==(d|0)|(n|0)==(e|0))){m=a+(n<<2)|0;l=0;while(1){j=c[m>>2]|0;k=c[j+4>>2]|0;if((l|0)>=(k|0))break a;p=l+1|0;q=o+(i<<5)|0;j=(c[j>>2]|0)+(l<<4)|0;c[q>>2]=c[j>>2];c[q+4>>2]=c[j+4>>2];c[q+8>>2]=c[j+8>>2];c[q+12>>2]=c[j+12>>2];j=o+(i<<5)+16|0;k=(c[c[m>>2]>>2]|0)+(((p|0)<(k|0)?p:0)<<4)|0;c[j>>2]=c[k>>2];c[j+4>>2]=c[k+4>>2];c[j+8>>2]=c[k+8>>2];c[j+12>>2]=c[k+12>>2];l=p;i=i+1|0}}while(0);n=n+1|0}if((i|0)==(h|0)){c[f>>2]=o;c[g>>2]=h;return}else qa(89719,89726,77,89741)}function Um(a,d,e){a=a|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;n=l;l=l+32|0;k=n+12|0;f=n;pr(f,a);c[k>>2]=c[f>>2];c[k+4>>2]=c[f+4>>2];c[k+8>>2]=c[f+8>>2];f=jC(a)|0;while(1){if(!f)break;g=XA(a,f)|0;while(1){if(!g)break;ZN(g);g=ZA(a,g)|0}f=kC(a,f)|0}h=Vz(17756,c[4581]|0)|0;f=jC(a)|0;while(1){if(!f)break;g=XA(a,f)|0;while(1){if(!g)break;if((c[47134]|0)>1?(i=c[g+16>>2]|0,(c[i+8>>2]|0)!=0):0){o=i+168|0;b[o>>1]=(b[o>>1]|0)+1<<16>>16}else m=14;if((m|0)==14?(m=0,j=Vm(h,g)|0,(j|0)!=(g|0)):0){o=c[j+16>>2]|0;p=o+168|0;b[p>>1]=(b[p>>1]|0)+1<<16>>16;o=o+172|0;c[(c[g+16>>2]|0)+172>>2]=c[o>>2];c[o>>2]=g}g=ZA(a,g)|0}f=kC(a,f)|0}Rz(h)|0;if(!(nb[d&63](a,k,e)|0)){c[47138]=1;f=0}else f=1;l=n;return f|0}function Vm(a,b){a=a|0;b=b|0;var d=0,e=0,f=0.0,g=0.0,i=0,j=0.0,k=0.0,m=0.0,n=0.0,o=0,p=0,q=0;q=l;l=l+64|0;p=q;e=c[b>>2]&3;i=c[((e|0)==3?b:b+48|0)+40>>2]|0;e=c[((e|0)==2?b:b+-48|0)+40>>2]|0;do if(i>>>0>=e>>>0){d=b+16|0;if(i>>>0>e>>>0){d=c[d>>2]|0;o=e;e=i;k=+h[d+16>>3];m=+h[d+24>>3];g=+h[d+56>>3];f=+h[d+64>>3];break}o=c[d>>2]|0;j=+h[o+56>>3];n=+h[o+64>>3];g=+h[o+16>>3];f=+h[o+24>>3];if(!(gj)){d=f>n;if(f>2]|0;o=i;k=+h[d+56>>3];m=+h[d+64>>3];g=+h[d+16>>3];f=+h[d+24>>3]}while(0);c[p+8>>2]=o;h[p+16>>3]=g;h[p+24>>3]=f;c[p+32>>2]=e;h[p+40>>3]=k;h[p+48>>3]=m;c[p+56>>2]=b;p=c[(nb[c[a>>2]&63](a,p,1)|0)+56>>2]|0;l=q;return p|0}function Wm(a,b){a=a|0;b=b|0;return Um(a,21,b)|0}function Xm(d,e,f){d=d|0;e=e|0;f=f|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0.0,H=0;F=l;l=l+112|0;B=F+88|0;A=F+72|0;t=F+40|0;q=F+8|0;p=F;u=F+64|0;C=F+48|0;D=F+24|0;i=(c[47134]|0)>1&1;do if((f|0)>5){s=JK((tB(d)|0)<<2)|0;o=(f|0)==8;n=o&1;m=jC(d)|0;r=0;while(1){if(!m)break;j=Nm(m,e,n)|0;k=(c[m+16>>2]|0)+288|0;if(!j){c[k>>2]=-1111;j=r}else{c[k>>2]=r;c[s+(r<<2)>>2]=j;j=r+1|0}m=kC(d,m)|0;r=j}if(s){j=lt(s,r)|0;if(j|0){if(o){y=0;z=s;x=s;w=1;break}y=JX(s,r)|0;z=s;x=s;w=1;break}if(o){gA(0,89755,p)|0;j=0;y=0;z=s;x=s;w=1;break}else{G=+g[e+4>>2];h[q>>3]=+g[e>>2];h[q+8>>3]=G;gA(0,89833,q)|0;j=0;y=0;z=s;x=s;w=1;break}}else{j=0;y=0;z=0;x=0;w=0}}else{j=0;y=0;z=0;r=0;x=0;w=0}while(0);if(0){k=c[15712]|0;if((f|0)==8&(j|0)!=0)m=89939;else m=(y|0)==0?89925:(f|0)==10?110056:89915;c[t>>2]=m;w4(k,89956,t)|0}v=(y|0)!=0;a:do if(!v){if((f|0)==8&(j|0)!=0){rQ(d,0);i=1}}else{k=jC(d)|0;while(1){if(!k)break a;j=XA(d,k)|0;while(1){if(!j)break;t=(c[j+16>>2]|0)+144|0;Qm(u,j,y,1,0,0);q=u;s=c[q+4>>2]|0;c[t>>2]=c[q>>2];c[t+4>>2]=s;j=ZA(d,j)|0}k=kC(d,k)|0}}while(0);p=(i|0)==0;q=d+60|0;s=(f|0)==10;i=0;o=jC(d)|0;j=0;while(1){if(!o)break;t=o+16|0;e=XA(d,o)|0;while(1){if(!e)break;n=c[((c[e>>2]&3|0)==2?e:e+-48|0)+40>>2]|0;k=e+16|0;m=c[k>>2]|0;if(!p?(c[m+8>>2]|0)!=0:0){H=(c[t>>2]|0)+16|0;u=m+16|0;c[A>>2]=c[H>>2];c[A+4>>2]=c[H+4>>2];c[A+8>>2]=c[H+8>>2];c[A+12>>2]=c[H+12>>2];c[B>>2]=c[u>>2];c[B+4>>2]=c[u+4>>2];c[B+8>>2]=c[u+8>>2];c[B+12>>2]=c[u+12>>2];Rm(C,A,B);n=(c[n+16>>2]|0)+16|0;u=(c[k>>2]|0)+56|0;c[A>>2]=c[n>>2];c[A+4>>2]=c[n+4>>2];c[A+8>>2]=c[n+8>>2];c[A+12>>2]=c[n+12>>2];c[B>>2]=c[u>>2];c[B+4>>2]=c[u+4>>2];c[B+8>>2]=c[u+8>>2];c[B+12>>2]=c[u+12>>2];Rm(D,A,B);c[A>>2]=c[C>>2];c[A+4>>2]=c[C+4>>2];c[A+8>>2]=c[C+8>>2];c[A+12>>2]=c[C+12>>2];c[B>>2]=c[D>>2];c[B+4>>2]=c[D+4>>2];c[B+8>>2]=c[D+8>>2];c[B+12>>2]=c[D+12>>2];yO(d,e,A,B)}else E=35;b:do if((E|0)==35){E=0;H=b[m+168>>1]|0;k=H<<16>>16;if(H<<16>>16){if((o|0)==(n|0)){if(!i){j=JK(96)|0;c[j+84>>2]=JK(((tB(d)|0)<<5)+11520|0)|0;i=j}Km(i,e,c[(c[(c[q>>2]|0)+16>>2]|0)+248>>2]|0);break}if(!v){OM(d,e,f,17792);break}k=a[194954]|0?1:k;m=e;n=0;while(1){if((n|0)>=(k|0))break b;if(s)Sm(d,m,z,r,1);else Ym(d,m);m=c[(c[m+16>>2]|0)+172>>2]|0;n=n+1|0}}}while(0);e=ZA(d,e)|0}o=kC(d,o)|0}if(v)LX(y);if(i|0){U1(c[i+84>>2]|0);U1(j)}if(w){i=0;while(1){if((i|0)>=(r|0))break;U1(c[z+(i<<2)>>2]|0);i=i+1|0}U1(x)}l=F;return 0}function Ym(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;k=l;l=l+96|0;g=k+64|0;f=k+48|0;d=k+40|0;h=k+80|0;e=k+32|0;i=k+16|0;j=k;m=(c[b+16>>2]|0)+144|0;n=c[m>>2]|0;m=c[m+4>>2]|0;o=e;c[o>>2]=n;c[o+4>>2]=m;o=n;c[i>>2]=c[o>>2];c[i+4>>2]=c[o+4>>2];c[i+8>>2]=c[o+8>>2];c[i+12>>2]=c[o+12>>2];m=n+(m+-1<<4)|0;c[j>>2]=c[m>>2];c[j+4>>2]=c[m+4>>2];c[j+8>>2]=c[m+8>>2];c[j+12>>2]=c[m+12>>2];c[g>>2]=c[e>>2];c[g+4>>2]=c[e+4>>2];FY(g,h);if(0>1){o=c[15712]|0;m=KB(c[((c[b>>2]&3|0)==3?b:b+48|0)+40>>2]|0)|0;e=b+-48|0;n=KB(c[((c[b>>2]&3|0)==2?b:e)+40>>2]|0)|0;c[d>>2]=m;c[d+4>>2]=n;w4(o,89981,d)|0;d=e;e=b}else{d=b+-48|0;e=b}dO(b,c[((c[e>>2]&3|0)==2?b:d)+40>>2]|0,c[h>>2]|0,c[h+4>>2]|0,17792);c[f>>2]=c[i>>2];c[f+4>>2]=c[i+4>>2];c[f+8>>2]=c[i+8>>2];c[f+12>>2]=c[i+12>>2];c[g>>2]=c[j>>2];c[g+4>>2]=c[j+4>>2];c[g+8>>2]=c[j+8>>2];c[g+12>>2]=c[j+12>>2];yO(a,b,f,g);l=k;return}function Zm(a,d){a=a|0;d=d|0;var e=0;e=b[(c[a+16>>2]|0)+136>>1]&14;if(d<<24>>24)_m(a)|0;if(e<<16>>16)Wm(a,e&65535)|0;return}function _m(a){a=a|0;var b=0,d=0,e=0,f=0;d=$m(a)|0;b=jC(a)|0;while(1){if(!b)break;e=c[b+16>>2]|0;f=c[e+132>>2]|0;h[e+16>>3]=+h[f>>3]*72.0;h[e+24>>3]=+h[f+8>>3]*72.0;b=kC(a,b)|0}return d|0}function $m(a){a=a|0;var b=0,d=0,e=0,f=0.0,g=0.0,i=0.0,j=0,k=0;a:do if((c[a+60>>2]|0)==(a|0)?(d=a+16|0,e=c[d>>2]|0,(c[(c[e+8>>2]|0)+84>>2]|0)!=0):0){if(!(+h[e+16>>3]!=0.0)?!(+h[e+24>>3]!=0.0):0)b=0;else{an(a);b=1;e=c[d>>2]|0}j=(c[e+116>>2]&1|0)==0;if(!j){k=e+32|0;i=+h[k>>3];d=e+40|0;h[k>>3]=+h[d>>3];h[d>>3]=i}d=c[e+8>>2]|0;b:do switch(c[d+84>>2]|0){case 2:{f=+h[d+64>>3];if(f<=0.0)break a;g=f/+h[e+32>>3];f=+h[d+72>>3]/+h[e+40>>3];if(g<1.0|f<1.0)if(g>3];if(f<=0.0)break a;g=f/+h[e+32>>3];f=+h[d+72>>3]/+h[e+40>>3];if(!(g>1.0&f>1.0))break a;f=g>3];f=+h[e+40>>3]/+h[e+32>>3];if(f1){d=jC(a)|0;while(1){if(!d)break c;b=XA(a,d)|0;while(1){if(!b)break;if(c[(c[b+16>>2]|0)+8>>2]|0)bn(b,f,g);b=ZA(a,b)|0}d=kC(a,d)|0}}while(0);b=jC(a)|0;while(1){if(!b)break;k=c[(c[b+16>>2]|0)+132>>2]|0;h[k>>3]=+h[k>>3]*f;k=k+8|0;h[k>>3]=+h[k>>3]*g;b=kC(a,b)|0}cn(a,f,g);b=1}else b=0;while(0);return b|0}function an(b){b=b|0;var d=0,e=0,f=0.0,g=0.0,i=0.0,j=0.0,k=0,m=0,n=0,o=0;n=l;l=l+32|0;k=n+16|0;m=n;d=(c[b+16>>2]|0)+16|0;c[m>>2]=c[d>>2];c[m+4>>2]=c[d+4>>2];c[m+8>>2]=c[d+8>>2];c[m+12>>2]=c[d+12>>2];f=+h[m>>3];g=f*.013888888888888888;i=+h[m+8>>3];j=i*.013888888888888888;d=jC(b)|0;while(1){if(!d)break;e=c[d+16>>2]|0;o=c[e+132>>2]|0;h[o>>3]=+h[o>>3]-g;o=o+8|0;h[o>>3]=+h[o>>3]-j;e=c[e+108>>2]|0;if(e|0?a[e+81>>0]|0:0){o=e+56|0;h[o>>3]=+h[o>>3]-f;o=e+64|0;h[o>>3]=+h[o>>3]-i}d=kC(b,d)|0}e=jC(b)|0;while(1){if(!e)break;d=XA(b,e)|0;while(1){if(!d)break;if(c[(c[d+16>>2]|0)+8>>2]|0){c[k>>2]=c[m>>2];c[k+4>>2]=c[m+4>>2];c[k+8>>2]=c[m+8>>2];c[k+12>>2]=c[m+12>>2];dn(d,k)}d=ZA(b,d)|0}e=kC(b,e)|0}c[k>>2]=c[m>>2];c[k+4>>2]=c[m+4>>2];c[k+8>>2]=c[m+8>>2];c[k+12>>2]=c[m+12>>2];en(b,k);l=n;return}function bn(b,d,e){b=b|0;d=+d;e=+e;var f=0,g=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0.0,p=0,q=0.0,r=0.0,s=0.0,t=0.0,u=0;p=c[b>>2]&3;i=c[(c[(c[((p|0)==2?b:b+-48|0)+40>>2]|0)+16>>2]|0)+132>>2]|0;s=(d+-1.0)*72.0;q=s*+h[i>>3];t=(e+-1.0)*72.0;r=t*+h[i+8>>3];p=c[(c[(c[((p|0)==3?b:b+48|0)+40>>2]|0)+16>>2]|0)+132>>2]|0;s=s*+h[p>>3];t=t*+h[p+8>>3];p=c[b+16>>2]|0;i=c[p+8>>2]|0;j=c[i+4>>2]|0;k=j+-1|0;b=0;i=c[i>>2]|0;while(1){if((b|0)>=(j|0))break;l=c[i+4>>2]|0;m=l+-1|0;n=(b|0)==(k|0);f=0;g=c[i>>2]|0;while(1){if((f|0)>=(l|0))break;do if(f|b){o=+h[g>>3];if((f|0)==(m|0)&n){h[g>>3]=o+q;u=g+8|0;h[u>>3]=+h[u>>3]+r;break}else{h[g>>3]=o*d;u=g+8|0;h[u>>3]=+h[u>>3]*e;break}}else{h[g>>3]=+h[g>>3]+s;u=g+8|0;h[u>>3]=+h[u>>3]+t}while(0);f=f+1|0;g=g+16|0}if(c[i+8>>2]|0){u=i+16|0;h[u>>3]=+h[u>>3]+s;u=i+24|0;h[u>>3]=+h[u>>3]+t}if(c[i+12>>2]|0){u=i+32|0;h[u>>3]=+h[u>>3]+q;u=i+40|0;h[u>>3]=+h[u>>3]+r}b=b+1|0;i=i+48|0}b=c[p+96>>2]|0;if(b|0?a[b+81>>0]|0:0){u=b+56|0;h[u>>3]=+h[u>>3]*d;u=b+64|0;h[u>>3]=+h[u>>3]*e}b=c[p+100>>2]|0;if(b|0?a[b+81>>0]|0:0){u=b+56|0;h[u>>3]=+h[u>>3]+q;u=b+64|0;h[u>>3]=+h[u>>3]+r}b=c[p+104>>2]|0;if(b|0?a[b+81>>0]|0:0){u=b+56|0;h[u>>3]=+h[u>>3]+s;u=b+64|0;h[u>>3]=+h[u>>3]+t}return}function cn(b,d,e){b=b|0;d=+d;e=+e;var f=0,g=0,i=0;i=b+16|0;g=c[i>>2]|0;b=g+32|0;h[b>>3]=+h[b>>3]*d;b=g+40|0;h[b>>3]=+h[b>>3]*e;b=g+16|0;h[b>>3]=+h[b>>3]*d;b=g+24|0;h[b>>3]=+h[b>>3]*e;b=c[g+12>>2]|0;if((b|0)!=0?(a[b+81>>0]|0)!=0:0){f=b+56|0;h[f>>3]=+h[f>>3]*d;f=b+64|0;h[f>>3]=+h[f>>3]*e;f=1;b=g}else{f=1;b=g}while(1){if((f|0)>(c[b+180>>2]|0))break;cn(c[(c[b+184>>2]|0)+(f<<2)>>2]|0,d,e);f=f+1|0;b=c[i>>2]|0}return}function dn(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,i=0,j=0,k=0,l=0,m=0;k=c[b+16>>2]|0;b=c[k+8>>2]|0;j=c[b+4>>2]|0;l=d+8|0;b=c[b>>2]|0;g=0;while(1){if((g|0)>=(j|0))break;i=c[b+4>>2]|0;e=c[b>>2]|0;f=0;while(1){if((f|0)>=(i|0))break;h[e>>3]=+h[e>>3]-+h[d>>3];m=e+8|0;h[m>>3]=+h[m>>3]-+h[l>>3];e=e+16|0;f=f+1|0}if(c[b+8>>2]|0){m=b+16|0;h[m>>3]=+h[m>>3]-+h[d>>3];m=b+24|0;h[m>>3]=+h[m>>3]-+h[l>>3]}if(c[b+12>>2]|0){m=b+32|0;h[m>>3]=+h[m>>3]-+h[d>>3];m=b+40|0;h[m>>3]=+h[m>>3]-+h[l>>3]}b=b+48|0;g=g+1|0}b=c[k+96>>2]|0;if(b|0?a[b+81>>0]|0:0){m=b+56|0;h[m>>3]=+h[m>>3]-+h[d>>3];m=b+64|0;h[m>>3]=+h[m>>3]-+h[l>>3]}b=c[k+108>>2]|0;if(b|0?a[b+81>>0]|0:0){m=b+56|0;h[m>>3]=+h[m>>3]-+h[d>>3];m=b+64|0;h[m>>3]=+h[m>>3]-+h[l>>3]}b=c[k+100>>2]|0;if(b|0?a[b+81>>0]|0:0){m=b+56|0;h[m>>3]=+h[m>>3]-+h[d>>3];m=b+64|0;h[m>>3]=+h[m>>3]-+h[l>>3]}b=c[k+104>>2]|0;if(b|0?a[b+81>>0]|0:0){m=b+56|0;h[m>>3]=+h[m>>3]-+h[d>>3];m=b+64|0;h[m>>3]=+h[m>>3]-+h[l>>3]}return}function en(b,d){b=b|0;d=d|0;var e=0,f=0.0,g=0.0,i=0,j=0,k=0,m=0;k=l;l=l+16|0;j=k;g=+h[d>>3];i=b+16|0;b=c[i>>2]|0;e=b+32|0;h[e>>3]=+h[e>>3]-g;f=+h[d+8>>3];e=b+40|0;h[e>>3]=+h[e>>3]-f;e=b+16|0;h[e>>3]=+h[e>>3]-g;e=b+24|0;h[e>>3]=+h[e>>3]-f;e=c[b+12>>2]|0;if((e|0)!=0?(a[e+81>>0]|0)!=0:0){m=e+56|0;h[m>>3]=+h[m>>3]-g;e=e+64|0;h[e>>3]=+h[e>>3]-f;e=1}else e=1;while(1){if((e|0)>(c[b+180>>2]|0))break;m=c[(c[b+184>>2]|0)+(e<<2)>>2]|0;c[j>>2]=c[d>>2];c[j+4>>2]=c[d+4>>2];c[j+8>>2]=c[d+8>>2];c[j+12>>2]=c[d+12>>2];en(m,j);e=e+1|0;b=c[i>>2]|0}l=k;return}function fn(a){a=a|0;var b=0,d=0,e=0,f=0.0,g=0.0,i=0,j=0;i=l;l=l+16|0;d=i;BP(a);e=a+16|0;b=c[e>>2]|0;f=+h[b+16>>3]*.013888888888888888;g=+h[b+24>>3]*.013888888888888888;b=jC(a)|0;while(1){if(!b)break;j=c[(c[b+16>>2]|0)+132>>2]|0;h[j>>3]=+h[j>>3]-f;j=j+8|0;h[j>>3]=+h[j>>3]-g;b=kC(a,b)|0}j=(c[e>>2]|0)+16|0;c[d>>2]=c[j>>2];c[d+4>>2]=c[j+4>>2];c[d+8>>2]=c[j+8>>2];c[d+12>>2]=c[j+12>>2];gn(a,d);Zm(a,1);l=i;return}function gn(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,i=0.0,j=0.0;g=l;l=l+16|0;f=g;d=a+16|0;a=1;while(1){e=c[d>>2]|0;if((a|0)>(c[e+180>>2]|0))break;e=c[(c[e+184>>2]|0)+(a<<2)>>2]|0;c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];gn(e,f);a=a+1|0}j=+h[b>>3];f=e+32|0;h[f>>3]=+h[f>>3]-j;i=+h[b+8>>3];b=e+40|0;h[b>>3]=+h[b>>3]-i;b=e+16|0;h[b>>3]=+h[b>>3]-j;b=e+24|0;h[b>>3]=+h[b>>3]-i;l=g;return}function hn(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0.0;p=(e|0)>2;n=0;o=0;j=c[f+4>>2]|0;b=c[f>>2]|0;while(1){if((o|0)>=(d|0)){b=0;break}i=c[(c[g+(o<<2)>>2]|0)+16>>2]|0;l=a[i+119>>0]|0;a:do if(!(l<<24>>24)){k=b+8|0;h[b>>3]=+B5();i=j+8|0;h[j>>3]=+B5();if(p){b=2;while(1){if((b|0)==(e|0)){j=n;b=k;break a}q=+B5();h[(c[f+(b<<2)>>2]|0)+(o<<3)>>3]=q;b=b+1|0}}else{j=n;b=k}}else{k=c[i+132>>2]|0;m=b+8|0;h[b>>3]=+h[k>>3];i=j+8|0;h[j>>3]=+h[k+8>>3];b:do if(p){j=2;b=k+16|0;while(1){if((j|0)==(e|0))break b;h[(c[f+(j<<2)>>2]|0)+(o<<3)>>3]=+h[b>>3];j=j+1|0;b=b+8|0}}while(0);j=(l&255)>1?1:n;b=m}while(0);n=j;o=o+1|0;j=i}while(1){if((b|0)>=(e|0))break;Ht(d,c[f+(b<<2)>>2]|0);b=b+1|0}return n|0}function jn(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,i=0,j=0,k=0,l=0.0,m=0,n=0,o=0,p=0;d=JK(((O(b+1|0,b)|0)/2|0)<<2)|0;n=un(b,b,0.0)|0;o=un(b,b,0.0)|0;a:do if(!(c[a+8>>2]|0)){e=0;while(1){if((e|0)>=(b|0))break a;i=c[a+(e*20|0)>>2]|0;j=a+(e*20|0)+4|0;k=n+(e<<2)|0;f=1;while(1){if((f|0)>=(i|0))break;m=c[(c[j>>2]|0)+(f<<2)>>2]|0;h[(c[n+(m<<2)>>2]|0)+(e<<3)>>3]=-1.0;h[(c[k>>2]|0)+(m<<3)>>3]=-1.0;f=f+1|0}e=e+1|0}}else{e=0;while(1){if((e|0)>=(b|0))break a;i=c[a+(e*20|0)>>2]|0;j=a+(e*20|0)+4|0;k=a+(e*20|0)+8|0;m=n+(e<<2)|0;f=1;while(1){if((f|0)>=(i|0))break;p=c[(c[j>>2]|0)+(f<<2)>>2]|0;l=-1.0/+g[(c[k>>2]|0)+(f<<2)>>2];h[(c[n+(p<<2)>>2]|0)+(e<<3)>>3]=l;h[(c[m>>2]|0)+(p<<3)>>3]=l;f=f+1|0}e=e+1|0}}while(0);b:do if(!(wr(b,n,o)|0)){U1(d);d=0}else{f=0;j=0;m=b;while(1){if((j|0)>=(b|0))break b;k=o+(j<<2)|0;e=j;i=f;while(1){if((e|0)==(b|0))break;if((j|0)==(e|0))l=0.0;else{p=c[k>>2]|0;l=+h[(c[o+(e<<2)>>2]|0)+(e<<3)>>3]+ +h[p+(j<<3)>>3]+ +h[p+(e<<3)>>3]*-2.0}g[d+(i<<2)>>2]=l;e=e+1|0;i=i+1|0}f=f+m|0;j=j+1|0;m=m+-1|0}}while(0);vn(n);vn(o);return d|0}function kn(a,b){a=a|0;b=b|0;var d=0,e=0,f=0.0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0.0;r=l;l=l+16|0;q=r;if(c[a+8>>2]|0){d=ln(a,b)|0;f=0.0;e=0;p=0;while(1){if((p|0)>=(b|0))break;e=e+p|0;o=c[a+(p*20|0)>>2]|0;k=a+(p*20|0)+4|0;m=(O(p,b)|0)-e|0;n=a+(p*20|0)+8|0;j=1;while(1){if((j|0)>=(o|0))break;i=c[(c[k>>2]|0)+(j<<2)>>2]|0;if((i|0)>=(p|0)){i=d+(m+i<<2)|0;s=+g[(c[n>>2]|0)+(j<<2)>>2];f=f+ +B(+(+g[i>>2]-s));g[i>>2]=s}j=j+1|0}p=p+1|0}if(0){b=c[15712]|0;h[q>>3]=f;w4(b,89997,q)|0}}else d=0;l=r;return d|0}function ln(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0;m=l;l=l+16|0;h=m;i=JK(((O(b+1|0,b)|0)/2|0)<<2)|0;j=JK(b<<2)|0;ur(h,b);d=0;f=0;k=b;while(1){if((d|0)>=(b|0))break;hs(d,a,b,j);e=d;g=f;while(1){if((e|0)==(b|0))break;c[i+(g<<2)>>2]=c[j+(e<<2)>>2];e=e+1|0;g=g+1|0}d=d+1|0;f=f+k|0;k=k+-1|0}U1(j);vr(h);l=m;return i|0}function mn(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,h=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+16|0;i=n;j=JK(((O(b+1|0,b)|0)/2|0)<<2)|0;k=JK(b<<2)|0;ur(i,b);d=0;f=0;m=b;while(1){if((d|0)>=(b|0))break;qr(d,a,b,k,i);e=d;h=f;while(1){if((e|0)==(b|0))break;g[j+(h<<2)>>2]=+(c[k+(e<<2)>>2]|0);e=e+1|0;h=h+1|0}d=d+1|0;f=f+m|0;m=m+-1|0}U1(k);vr(i);l=n;return j|0}function nn(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,h=0,i=0,j=0,k=0,l=0.0,m=0,n=0,o=0,p=0,q=0,r=0,s=0.0;r=a+8|0;d=c[r>>2]|0;e=0;f=0;while(1){if((f|0)>=(b|0))break;e=(c[a+(f*20|0)>>2]|0)+e|0;f=f+1|0}f=JK(e<<2)|0;q=JK(b<<2)|0;e=0;while(1){if((e|0)>=(b|0))break;c[q+(e<<2)>>2]=0;e=e+1|0}if(!(c[r>>2]|0)){h=0;while(1){if((h|0)>=(b|0))break;c[a+(h*20|0)+8>>2]=f;Zs(a,h,q);i=a+(h*20|0)|0;j=c[i>>2]|0;k=a+(h*20|0)+4|0;l=+(j+-1|0);e=1;while(1){if((e|0)>=(j|0))break;p=c[(c[k>>2]|0)+(e<<2)>>2]|0;s=+((c[a+(p*20|0)>>2]|0)+-1|0)+l;g[f+(e<<2)>>2]=s-+((Ys(a,h,p,q)|0)<<1|0);e=e+1|0}_s(a,h,q);f=f+(c[i>>2]<<2)|0;h=h+1|0}f=mn(a,b)|0}else{j=0;while(1){if((j|0)>=(b|0))break;Zs(a,j,q);k=a+(j*20|0)|0;m=c[k>>2]|0;n=a+(j*20|0)+4|0;o=m+-2|0;p=a+(j*20|0)+8|0;i=1;while(1){if((i|0)>=(m|0))break;e=c[(c[n>>2]|0)+(i<<2)>>2]|0;h=o+(c[a+(e*20|0)>>2]|0)|0;s=+(h-((Ys(a,j,e,q)|0)<<1)|0);l=+g[(c[p>>2]|0)+(i<<2)>>2];if(l>2]=l;i=i+1|0}_s(a,j,q);c[p>>2]=f;f=f+(c[k>>2]<<2)|0;j=j+1|0}f=ln(a,b)|0}U1(q);U1(c[r>>2]|0);c[r>>2]=0;a:do if(d|0){e=0;while(1){if((e|0)>=(b|0))break a;c[a+(e*20|0)+8>>2]=d;d=d+(c[a+(e*20|0)>>2]<<2)|0;e=e+1|0}}while(0);return f|0}function on(a,b,e,f,i,j,k,m,n){a=a|0;b=b|0;e=e|0;f=f|0;i=i|0;j=j|0;k=k|0;m=m|0;n=n|0;var o=0,p=0,q=0,r=0.0,s=0,t=0,u=0,v=0.0,w=0,x=0.0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0.0,P=0.0;M=l;l=l+80|0;L=M+56|0;K=M+48|0;A=M+40|0;u=M+32|0;t=M+24|0;s=M+16|0;p=M+8|0;o=M;q=k&4;J=k&3;a:do if((n|0)<0)e=0;else{if(0)TO();k=(m|0)==2;b:do if(k){if(0)U4(93290,24,1,c[15712]|0)|0;e=nn(a,b)|0;w=14}else{switch(m|0){case 1:{e=jn(a,b)|0;if(e|0){I=e;break b}gA(0,93315,o)|0;gA(3,93364,p)|0;w=15;break b}case 3:break;default:{w=15;break b}}if(0)U4(93417,21,1,c[15712]|0)|0;e=kn(a,b)|0;w=14}while(0);if((w|0)==14)if(!e)w=15;else I=e;do if((w|0)==15){if(0)U4(93439,26,1,c[15712]|0)|0;if(!(c[a+8>>2]|0)){I=mn(a,b)|0;break}else{I=ln(a,b)|0;break}}while(0);if(0){H=c[15712]|0;h[s>>3]=+UO();w4(H,93466,s)|0;U4(93478,25,1,H)|0;TO()}c:do if((b|0)>1&(q|0)!=0)if((pn(a,b,f,j,q,J,k&1)|0)<0){u=0;t=0;e=-1;a=0;s=0;q=0;p=0;o=0;m=0;k=0}else{k=0;while(1){if((k|0)>=(j|0)){y=0;w=35;break c}m=f+(k<<2)|0;r=1.0;e=0;while(1){if((e|0)==(b|0))break;x=+B(+(+h[(c[m>>2]|0)+(e<<3)>>3]));r=x>r?x:r;e=e+1|0}r=1.0/r;e=0;while(1){if((e|0)==(b|0)){e=0;break}H=(c[m>>2]|0)+(e<<3)|0;h[H>>3]=+h[H>>3]*r;e=e+1|0}while(1){if((e|0)==(b|0))break;x=(+B5()+-.5)*1.0e-06;H=(c[m>>2]|0)+(e<<3)|0;h[H>>3]=+h[H>>3]+x;e=e+1|0}Ht(b,c[m>>2]|0);k=k+1|0}}else{y=hn(0,b,j,f,i)|0;w=35}while(0);d:do if((w|0)==35){if(0){H=c[15712]|0;h[t>>3]=+UO();w4(H,93504,t)|0}if((b|0)==1|(n|0)==0){e=0;break a}if(0){H=c[15712]|0;h[u>>3]=+UO();w4(H,93466,u)|0;U4(90019,26,1,H)|0;TO()}s=j<<2;H=JK(s)|0;t=b<<2;a=O(t,j)|0;G=JK(a)|0;e=0;while(1){if((e|0)>=(j|0))break;m=G+((O(e,b)|0)<<2)|0;c[H+(e<<2)>>2]=m;o=f+(e<<2)|0;k=0;while(1){if((k|0)>=(b|0))break;g[m+(k<<2)>>2]=+h[(c[o>>2]|0)+(k<<3)>>3];k=k+1|0}e=e+1|0}e:do if(!J){p=b+-1|0;e=0;r=0.0;o=0;while(1){if((o|0)>=(p|0))break e;q=b-o|0;m=e;k=1;while(1){e=m+1|0;if((k|0)>=(q|0))break;m=e;r=+g[I+(e<<2)>>2]+r;k=k+1|0}o=o+1|0}}else r=+(b|0)*.5*+(b+-1|0);while(0);C=(O(b+1|0,b)|0)/2|0;D=(J|0)==2;if(D)bu(C,I);cu(C,I);E=b<<3;m=JK(E)|0;Y6(m|0,0,E|0)|0;F=b+-1|0;e=0;o=0;while(1){if((o|0)>=(F|0)){e=b;k=0;o=0;break}p=b-o|0;v=0.0;k=1;while(1){e=e+1|0;if((k|0)>=(p|0))break;x=+g[I+(e<<2)>>2];z=m+(k+o<<3)|0;h[z>>3]=+h[z>>3]-x;v=v+x;k=k+1|0}z=m+(o<<3)|0;h[z>>3]=+h[z>>3]-v;o=o+1|0}while(1){if((k|0)>=(b|0))break;g[I+(o<<2)>>2]=+h[m+(k<<3)>>3];z=e+o|0;e=e+-1|0;k=k+1|0;o=z}z=JK(s)|0;c[z>>2]=JK(a)|0;e=1;while(1){if((e|0)>=(j|0))break;c[z+(e<<2)>>2]=(c[z>>2]|0)+((O(e,b)|0)<<2);e=e+1|0}p=JK(t)|0;o=JK(t)|0;k=JK(C<<2)|0;if(0){w=c[15712]|0;h[A>>3]=+UO();w4(w,93466,A)|0;U4(90046,15,1,w)|0;TO()}w=(y|0)==0;y=c[15712]|0;e=0;q=0;x=1797693134862315708145274.0e284;while(1){if(!(q<<24>>24==0&(e|0)<(n|0)))break;Y6(m|0,0,E|0)|0;if(D){du(C,I,k);u=0;a=0}else{u=0;a=0}while(1){if((u|0)>=(F|0)){q=b;s=0;a=0;break}t=b-u+-1|0;$t(t,0.0,o);q=0;while(1){if((q|0)>=(j|0))break;A=H+(q<<2)|0;$t(t,+g[(c[A>>2]|0)+(u<<2)>>2],p);Wt(t,p,-1.0,(c[A>>2]|0)+(u<<2)+4|0);bu(t,p);Vt(t,p,o,o);q=q+1|0}eu(t,o);q=0;while(1){if((q|0)>=(t|0))break;s=o+(q<<2)|0;v=+g[s>>2];if(v>=3402823466385288598117041.0e14|v<0.0)g[s>>2]=0.0;q=q+1|0}q=a+1|0;a=u+1|0;f:do if(D){v=0.0;s=0;while(1){if((s|0)>=(t|0))break f;A=k+(q<<2)|0;N=+g[A>>2]*+g[o+(s<<2)>>2];g[A>>2]=N;A=m+(a+s<<3)|0;h[A>>3]=+h[A>>3]-N;v=v+N;q=q+1|0;s=s+1|0}}else{v=0.0;s=0;while(1){if((s|0)>=(t|0))break f;N=+g[o+(s<<2)>>2];g[k+(q<<2)>>2]=N;A=m+(a+s<<3)|0;h[A>>3]=+h[A>>3]-N;v=v+N;q=q+1|0;s=s+1|0}}while(0);A=m+(u<<3)|0;h[A>>3]=+h[A>>3]-v;u=a;a=q}while(1){if((s|0)>=(b|0)){q=0;break}g[k+(a<<2)>>2]=+h[m+(s<<3)>>3];A=q+a|0;q=q+-1|0;s=s+1|0;a=A}while(1){if((q|0)>=(j|0)){v=0.0;q=0;break}Tt(k,b,c[H+(q<<2)>>2]|0,c[z+(q<<2)>>2]|0);q=q+1|0}while(1){if((q|0)>=(j|0))break;v=+Zt(b,c[H+(q<<2)>>2]|0,c[z+(q<<2)>>2]|0)+v;q=q+1|0}v=v*2.0+r;q=0;while(1){if((q|0)>=(j|0))break;A=H+(q<<2)|0;Tt(I,b,c[A>>2]|0,p);v=v-+Zt(b,c[A>>2]|0,p);q=q+1|0}P=x-v;N=+h[23294];q=(v=0.0?P:-P)/x=(j|0))break;t=H+(a<<2)|0;s=c[t>>2]|0;g:do if(w){if((Ar(I,s,c[z+(a<<2)>>2]|0,b,.001,b)|0)<0){u=z;t=I;e=-1;a=G;s=H;q=z;break d}}else{Yt(b,s,p);if((Ar(I,p,c[z+(a<<2)>>2]|0,b,.001,b)|0)<0){u=z;t=I;e=-1;a=G;s=H;q=z;break d}else s=0;while(1){if((s|0)>=(b|0))break g;if((d[(c[(c[i+(s<<2)>>2]|0)+16>>2]|0)+119>>0]|0)<=1)c[(c[t>>2]|0)+(s<<2)>>2]=c[p+(s<<2)>>2];s=s+1|0}}while(0);a=a+1|0}if(((e|0)%5|0|0)==0&0!=0?(h[K>>3]=v,w4(y,90371,K)|0,((e+5|0)%50|0|0)==0):0)E6(10,y)|0;e=e+1|0;x=v}if(!0)q=0;else{N=+qn(H,I,j,b,J);P=+UO();h[L>>3]=N;c[L+8>>2]=e;h[L+16>>3]=P;w4(y,90062,L)|0;q=0}while(1){if((q|0)>=(j|0)){u=z;t=I;a=G;s=H;q=z;break d}a=H+(q<<2)|0;t=f+(q<<2)|0;s=0;while(1){if((s|0)>=(b|0))break;h[(c[t>>2]|0)+(s<<3)>>3]=+g[(c[a>>2]|0)+(s<<2)>>2];s=s+1|0}q=q+1|0}}while(0);U1(a);U1(s);U1(t);if(u|0){U1(c[u>>2]|0);U1(q)}U1(p);U1(o);U1(m);U1(k)}while(0);l=M;return e|0}function pn(b,d,e,f,i,j,k){b=b|0;d=d|0;e=e|0;f=f|0;i=i|0;j=j|0;k=k|0;var m=0,n=0,o=0,p=0.0,q=0,r=0,s=0.0,t=0,u=0.0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,P=0,Q=0,R=0;R=l;l=l+32|0;o=R+24|0;Q=R+8|0;H=R+4|0;N=R;M=(d|0)<50?d:50;P=KK(M<<2)|0;G=d<<3;n=KK(O(G,M)|0)|0;m=0;while(1){if((m|0)>=(M|0))break;c[P+(m<<2)>>2]=n+((O(m,d)|0)<<3);m=m+1|0}E=M<<1;E=(E|0)>50?E:50;E=(E|0)>(d|0)?d:E;c[o>>2]=0;rs(b,d,E,o,k);ss(c[o>>2]|0,d,E);mu(c[o>>2]|0,E,d,P,M);U1(c[c[o>>2]>>2]|0);U1(c[o>>2]|0);E=d<<2;L=KK(E)|0;m=0;while(1){if((m|0)>=(d|0))break;c[L+(m<<2)>>2]=-1;m=m+1|0}ur(Q,d);J=c[b+8>>2]|0;I=(k|0)!=0;if(I)dt(b,d);C=KK(E)|0;K=KK(160)|0;n=KK(d*160|0)|0;D=KK(160)|0;m=0;while(1){if((m|0)==40)break;c[D+(m<<2)>>2]=n+((O(m,d)|0)<<2);m=m+1|0}m=(x5()|0)%(d|0)|0;c[L+(m<<2)>>2]=0;c[K>>2]=m;n=c[D>>2]|0;if(I){bs(m,b,d,n);n=0;o=0}else{qr(m,b,d,n,Q);n=0;o=0}while(1){if((o|0)>=(d|0)){r=1;break}F=c[(c[D>>2]|0)+(o<<2)>>2]|0;c[C+(o<<2)>>2]=F;A=(F|0)>(n|0);m=A?o:m;n=A?F:n;o=o+1|0}while(1){if((r|0)==40){m=0;break}c[L+(m<<2)>>2]=r;c[K+(r<<2)>>2]=m;t=D+(r<<2)|0;n=c[t>>2]|0;if(I){bs(m,b,d,n);q=0;n=0}else{qr(m,b,d,n,Q);q=0;n=0}while(1){if((q|0)>=(d|0))break;o=C+(q<<2)|0;F=c[o>>2]|0;k=c[(c[t>>2]|0)+(q<<2)>>2]|0;k=(F|0)<(k|0)?F:k;c[o>>2]=k;if((k|0)<=(n|0)){if((k|0)==(n|0)?((x5()|0)%(q+1|0)|0|0)==0:0){n=c[o>>2]|0;m=q}}else{n=k;m=q}q=q+1|0}r=r+1|0}while(1){if((m|0)>=(d|0))break;c[C+(m<<2)>>2]=-1;m=m+1|0}w=KK(E)|0;F=KK(d<<4)|0;x=d+-1|0;y=x<<2;A=0;o=0;k=0;n=0;z=0;while(1){if((z|0)>=(d|0))break;m=L+(z<<2)|0;a:do if((c[m>>2]|0)>-1){t=F+(z<<4)+4|0;c[t>>2]=KK(y)|0;v=KK(y)|0;c[F+(z<<4)+8>>2]=v;c[F+(z<<4)>>2]=x;a[F+(z<<4)+12>>0]=1;r=D+(c[m>>2]<<2)|0;m=0;while(1){if((m|0)==(z|0)){q=z;break}c[(c[t>>2]|0)+(m<<2)>>2]=m;c[v+(m<<2)>>2]=c[(c[r>>2]|0)+(m<<2)>>2];m=m+1|0}while(1){m=q+1|0;if((q|0)==(x|0)){m=x;break a}c[(c[t>>2]|0)+(q<<2)>>2]=m;c[v+(q<<2)>>2]=c[(c[r>>2]|0)+(m<<2)>>2];q=m}}else{if((n|0)<40){k=KK(E)|0;o=KK(E)|0;n=d;m=1}else m=0;a[F+(z<<4)+12>>0]=m;c[F+(z<<4)+4>>2]=k;c[F+(z<<4)+8>>2]=o;c[F+(z<<4)>>2]=40;m=0;while(1){if((m|0)==40)break;c[k+(m<<2)>>2]=c[K+(m<<2)>>2];c[o+(m<<2)>>2]=c[(c[D+(m<<2)>>2]|0)+(z<<2)>>2];m=m+1|0}o=o+160|0;k=k+160|0;n=n+-40|0;m=40}while(0);A=m+A|0;z=z+1|0}U1(C);U1(w);if(D|0){U1(c[D>>2]|0);U1(D)}D=KK(d*20|0)|0;q=A+d<<2;r=KK(q)|0;v=(j|0)==2;q=KK(q)|0;t=0;while(1){if((t|0)>=(d|0))break;c[D+(t*20|0)+4>>2]=r;c[D+(t*20|0)+8>>2]=q;m=(c[F+(t<<4)>>2]|0)+1|0;w=D+(t*20|0)|0;c[w>>2]=m;o=(c[F+(t<<4)+8>>2]|0)+-4|0;k=F+(t<<4)+4|0;b:do if(v){p=0.0;n=1;while(1){if((n|0)>=(m|0))break b;c[r+(n<<2)>>2]=c[(c[k>>2]|0)+(n+-1<<2)>>2];u=+(c[o+(n<<2)>>2]|0);u=-1.0/(u*u);g[q+(n<<2)>>2]=u;p=p-u;n=n+1|0;m=c[w>>2]|0}}else{p=0.0;n=1;while(1){if((n|0)>=(m|0))break b;c[r+(n<<2)>>2]=c[(c[k>>2]|0)+(n+-1<<2)>>2];u=-1.0/+(c[o+(n<<2)>>2]|0);g[q+(n<<2)>>2]=u;p=p-u;n=n+1|0;m=c[w>>2]|0}}while(0);c[r>>2]=t;g[q>>2]=p;E=c[w>>2]|0;q=q+(E<<2)|0;r=r+(E<<2)|0;t=t+1|0}C=KK(f<<2)|0;c[C>>2]=KK(O(f<<3,M)|0)|0;m=1;while(1){if((m|0)>=(f|0))break;c[C+(m<<2)>>2]=(c[C>>2]|0)+((O(m,M)|0)<<3);m=m+1|0}c:do if(i){m=0;while(1){if((m|0)>=(f|0))break;o=C+(m<<2)|0;n=0;while(1){if((n|0)>=(M|0))break;h[(c[o>>2]|0)+(n<<3)>>3]=0.0;n=n+1|0}m=m+1|0}if((f|0)!=2){m=0;while(1){if((m|0)>=(f|0)){m=0;break c}h[(c[C+(m<<2)>>2]|0)+(m<<3)>>3]=1.0;m=m+1|0}}h[c[C>>2]>>3]=1.0;m=C+4|0;if(!((nu(P,M,d,c[m>>2]|0)|0)<<24>>24)){n=c[m>>2]|0;m=0;while(1){if((m|0)>=(M|0))break;h[n+(m<<3)>>3]=0.0;m=m+1|0}h[n+8>>3]=1.0;m=0}else m=0}else{n=0;while(1){if((n|0)>=(f|0)){m=0;break c}o=C+(n<<2)|0;m=0;while(1){if((m|0)>=(M|0))break;u=+(x5()|0)*4.656612875245797e-10;h[(c[o>>2]|0)+(m<<3)>>3]=u;m=m+1|0}n=n+1|0}}while(0);while(1){if((m|0)>=(f|0))break;Rt(P,d,M,c[C+(m<<2)>>2]|0,c[e+(m<<2)>>2]|0);m=m+1|0}c[H>>2]=0;c[N>>2]=0;Gt(D,P,d,M,H);Et(P,c[H>>2]|0,M,d,M,N);U1(c[c[H>>2]>>2]|0);U1(c[H>>2]|0);z=KK(G)|0;A=KK(M<<3)|0;m=0;n=0;p=+rn(e,F,f,d,j);d:while(1){if((n|0)<50&m<<24>>24==0)x=0;else break;while(1){if((x|0)>=(f|0))break;y=e+(x<<2)|0;o=0;while(1){if((o|0)>=(d|0))break;q=z+(o<<3)|0;h[q>>3]=0.0;r=(c[F+(o<<4)+8>>2]|0)+-4|0;t=c[D+(o*20|0)+4>>2]|0;v=c[D+(o*20|0)+8>>2]|0;w=D+(o*20|0)|0;s=0.0;k=1;while(1){if((k|0)>=(c[w>>2]|0))break;m=c[t+(k<<2)>>2]|0;u=+ft(e,f,o,m);if(u>1.0e-30){u=-(+g[v+(k<<2)>>2]*+(c[r+(k<<2)>>2]|0))/u;h[q>>3]=u*+h[(c[y>>2]|0)+(m<<3)>>3]+ +h[q>>3];s=s-u}k=k+1|0}h[q>>3]=+h[q>>3]+ +h[(c[y>>2]|0)+(o<<3)>>3]*s;o=o+1|0}Dt(P,M,d,z,A);m=C+(x<<2)|0;if(zr(c[N>>2]|0,c[m>>2]|0,A,M,.001,M,0)|0){n=-1;break d}Rt(P,d,M,c[m>>2]|0,c[y>>2]|0);x=x+1|0}if(!(n&1)){u=+rn(e,F,f,d,j);p=+B(+(u-p))/(u+1.0e-10);m=p<+h[23294]&1;p=u}else m=0;n=n+1|0}U1(A);U1(z);if(I){et(b,d,J);m=0}else m=0;while(1){if((m|0)>=(d|0))break;if(a[F+(m<<4)+12>>0]|0){U1(c[F+(m<<4)+4>>2]|0);U1(c[F+(m<<4)+8>>2]|0)}m=m+1|0}U1(F);U1(c[D+4>>2]|0);U1(c[D+8>>2]|0);U1(D);U1(L);U1(K);U1(c[C>>2]|0);U1(C);m=c[N>>2]|0;if(m|0){U1(c[m>>2]|0);U1(c[N>>2]|0)}U1(c[P>>2]|0);U1(P);vr(Q);l=R;return n|0}function qn(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var h=0.0,i=0.0,j=0,k=0,l=0.0,m=0,n=0,o=0,p=0,q=0,r=0;q=e+-1|0;o=(f|0)==2;h=0.0;f=0;m=0;while(1){if((m|0)>=(q|0))break;p=e-m|0;n=1;while(1){f=f+1|0;if((n|0)>=(p|0))break;k=n+m|0;i=0.0;j=0;while(1){if((j|0)>=(d|0))break;r=c[a+(j<<2)>>2]|0;l=+g[r+(m<<2)>>2]-+g[r+(k<<2)>>2];i=i+l*l;j=j+1|0}i=+C(+i);l=+g[b+(f<<2)>>2];if(o){i=1.0/+C(+l)-i;i=i*i}else{i=1.0/l-i;i=i*i}n=n+1|0;h=i*l+h}m=m+1|0}return +h}function rn(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0.0,i=0.0,j=0,k=0,l=0,m=0,n=0,o=0,p=0.0,q=0;a:do if((f|0)==2){g=0.0;l=0;while(1){if((l|0)>=(e|0))break a;n=c[b+(l<<4)>>2]|0;o=b+(l<<4)+4|0;m=b+(l<<4)+8|0;k=0;while(1){if((k|0)>=(n|0))break;j=c[(c[o>>2]|0)+(k<<2)>>2]|0;if((j|0)>(l|0)){i=0.0;f=0;while(1){if((f|0)>=(d|0))break;q=c[a+(f<<2)>>2]|0;p=+h[q+(l<<3)>>3]-+h[q+(j<<3)>>3];i=p*p+i;f=f+1|0}i=+C(+i);p=+(c[(c[m>>2]|0)+(k<<2)>>2]|0);i=p-i;g=i*i/(p*p)+g}k=k+1|0}l=l+1|0}}else{l=0;g=0.0;while(1){if((l|0)>=(e|0))break a;m=c[b+(l<<4)>>2]|0;n=b+(l<<4)+4|0;o=b+(l<<4)+8|0;k=0;while(1){if((k|0)>=(m|0))break;j=c[(c[n>>2]|0)+(k<<2)>>2]|0;if((j|0)>(l|0)){i=0.0;f=0;while(1){if((f|0)>=(d|0))break;q=c[a+(f<<2)>>2]|0;p=+h[q+(l<<3)>>3]-+h[q+(j<<3)>>3];i=p*p+i;f=f+1|0}i=+C(+i);p=+(c[(c[o>>2]|0)+(k<<2)>>2]|0);i=p-i;g=i*i/p+g}k=k+1|0}l=l+1|0}}while(0);return +g}function sn(a){a=+a;return +(+C(+a)*a)}function tn(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0,g=0,i=0.0;g=c[47137]|0;e=0.0;f=0;while(1){if((f|0)>=(g|0))break;i=+h[a+(f<<3)>>3]-+h[b+(f<<3)>>3];h[d+(f<<3)>>3]=i;e=i*i+e;f=f+1|0}return +(+C(+e))}function un(a,b,d){a=a|0;b=b|0;d=+d;var e=0,f=0,g=0,i=0;i=JK(a<<2)|0;f=0;g=JK(O(a<<3,b)|0)|0;while(1){if((f|0)>=(a|0))break;c[i+(f<<2)>>2]=g;e=0;while(1){if((e|0)>=(b|0))break;h[g+(e<<3)>>3]=d;e=e+1|0}f=f+1|0;g=g+(b<<3)|0}return i|0}function vn(a){a=a|0;if(a|0){U1(c[a>>2]|0);U1(a)}return}function wn(b,d){b=b|0;d=d|0;var e=0.0,f=0.0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;o=l;l=l+16|0;n=tB(b)|0;m=uB(b)|0;k=GA(b,2,92493,0)|0;a:do if(!d){h[23294]=+(n|0)*.0001;pK(b,108886,186352);g=QA(c[b+60>>2]|0,90100)|0;if(!g)e=.99;else e=+r5(g);h[23296]=e;g=JK((n<<2)+4|0)|0;j=b+16|0;c[(c[j>>2]|0)+152>>2]=g;g=0;e=0.0;i=jC(b)|0;while(1){if(!i)break a;c[(c[(c[j>>2]|0)+152>>2]|0)+(g<<2)>>2]=i;p=c[i+16>>2]|0;c[p+120>>2]=g;c[p+124>>2]=-1;f=+zn(b,i,k)+e;g=g+1|0;e=f;i=kC(b,i)|0}}else{h[23294]=.0001;pK(b,108886,186352);g=0;e=0.0;i=jC(b)|0;while(1){if(!i)break a;c[(c[i+16>>2]|0)+120>>2]=g;f=+zn(b,i,k)+e;g=g+1|0;e=f;i=kC(b,i)|0}}while(0);g=QA(b,90108)|0;if((g|0)!=0?(a[g>>0]|0)!=0:0){e=+h[23294];f=+r5(g);if(!(e>f))e=f}else e=e/+(((m|0)>1?m:1)|0)*+C(+(+(n|0)))+1.0;h[23295]=e;if(!(c[47134]|d)){d=un(n,n,e)|0;p=b+16|0;c[(c[p>>2]|0)+160>>2]=d;d=un(n,n,1.0)|0;c[(c[p>>2]|0)+164>>2]=d;d=un(n,c[47137]|0,1.0)|0;c[(c[p>>2]|0)+168>>2]=d;d=An(n,n,c[47137]|0)|0;c[(c[p>>2]|0)+172>>2]=d}l=o;return n|0}function xn(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;f=0;e=0;j=aB(a,b)|0;a:while(1){if(!j)break;h=c[j>>2]&3;g=c[((h|0)==2?j:j+-48|0)+40>>2]|0;h=c[((h|0)==3?j:j+48|0)+40>>2]|0;do if((g|0)!=(h|0)){i=(h|0)==(b|0);if((e|0)!=1){f=i?g:h;c[d>>2]=f;e=e+1|0;break}if(!((g|0)==(f|0)&i)?!((g|0)==(b|0)&(h|0)==(f|0)):0){e=2;break a}else e=1}while(0);j=bB(a,j,b)|0}return e|0}function yn(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=l;l=l+16|0;f=h;g=a+60|0;a:while(1){b:while(1){if(!b)break a;switch(xn(a,b,f)|0){case 0:{e=5;break b}case 1:{e=8;break b}default:b=0}}if((e|0)==5){if((d|0)==(b|0))d=kC(a,d)|0;wC(c[g>>2]|0,b)|0;b=0;continue}else if((e|0)==8){if((d|0)==(b|0))d=kC(a,d)|0;wC(c[g>>2]|0,b)|0;b=c[f>>2]|0;continue}}l=h;return d|0}function zn(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0.0,g=0,i=0,j=0,k=0;k=l;l=l+32|0;i=k+8|0;g=k;b=XA(a,b)|0;e=0.0;while(1){if(!b)break;switch(Bn(b,d,g)|0){case 0:{f=+h[g>>3];break}case 2:{c[i>>2]=KB(a)|0;h[i+8>>3]=1.0;gA(3,90120,i)|0;j=6;break}default:j=6}if((j|0)==6){j=0;h[g>>3]=1.0;f=1.0}h[(c[b+16>>2]|0)+136>>3]=f;b=ZA(a,b)|0;e=f+e}l=k;return +e}function An(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,i=0,j=0,k=0,l=0;j=JK((a<<2)+4|0)|0;k=(b<<2)+4|0;l=d<<3;g=0;while(1){if((g|0)>=(a|0))break;i=j+(g<<2)|0;c[i>>2]=JK(k)|0;f=0;while(1){if((f|0)>=(b|0))break;e=JK(l)|0;c[(c[i>>2]|0)+(f<<2)>>2]=e;e=0;while(1){if((e|0)>=(d|0))break;h[(c[(c[i>>2]|0)+(f<<2)>>2]|0)+(e<<3)>>3]=0.0;e=e+1|0}f=f+1|0}c[(c[i>>2]|0)+(f<<2)>>2]=0;g=g+1|0}c[j+(g<<2)>>2]=0;return j|0}function Bn(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0.0,i=0,j=0,k=0;k=l;l=l+16|0;j=k+8|0;i=k;do if((d|0)!=0?(f=RA(b,d)|0,(a[f>>0]|0)!=0):0){c[i>>2]=e;if(((b5(f,101209,i)|0)>=1?(g=+h[e>>3],!(g<0.0)):0)?g!=0.0|(c[47134]|0)!=0:0){b=0;break}c[j>>2]=f;gA(0,90147,j)|0;b=2}else b=1;while(0);l=k;return b|0}function Cn(a){a=a|0;return wn(a,0)|0}function Dn(a){a=a|0;a=a+16|0;U1(c[(c[a>>2]|0)+152>>2]|0);if(!(c[47134]|0)){vn(c[(c[a>>2]|0)+160>>2]|0);vn(c[(c[a>>2]|0)+164>>2]|0);vn(c[(c[a>>2]|0)+168>>2]|0);En(c[(c[a>>2]|0)+172>>2]|0);c[(c[a>>2]|0)+172>>2]=0}return}function En(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;if(a|0){f=0;while(1){g=a+(f<<2)|0;b=c[g>>2]|0;if(!b)break;else e=0;while(1){d=c[b+(e<<2)>>2]|0;if(!d)break;U1(d);e=e+1|0;b=c[g>>2]|0}U1(b);f=f+1|0}U1(a)}return}function Fn(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0.0;e=+(b|0);b=a+16|0;while(1){if((d|0)>=(c[47137]|0))break;f=+B5()*e;h[(c[(c[b>>2]|0)+132>>2]|0)+(d<<3)>>3]=f;d=d+1|0}return}function Gn(a,b){a=a|0;b=b|0;Fn(a,b,2);return}function Hn(a,b){a=a|0;b=b|0;var d=0,e=0.0,f=0.0;e=+(b|0);f=+B5()*e;d=a+16|0;h[c[(c[d>>2]|0)+132>>2]>>3]=f;e=+B5()*e;h[(c[(c[d>>2]|0)+132>>2]|0)+8>>3]=e;if((c[47137]|0)>2)Gn(a,b);return}function In(b,d){b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;if(0)U4(90165,26,1,c[15712]|0)|0;d=nm(b,d,2)|0;a:do if((d|0)!=1){if(!(c[46797]|d)){gA(0,90192,e)|0;c[46797]=1}e=b+16|0;d=0;while(1){b=c[(c[(c[e>>2]|0)+152>>2]|0)+(d<<2)>>2]|0;if(!b)break a;if(!(a[(c[b+16>>2]|0)+119>>0]|0))Hn(b,1);d=d+1|0}}while(0);l=f;return}function Jn(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0.0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0.0;q=l;l=l+96|0;p=q+80|0;n=q;if(0){U4(90241,25,1,c[15712]|0)|0;TO()}o=a+16|0;f=c[o>>2]|0;k=c[f+164>>2]|0;f=c[f+160>>2]|0;m=0;while(1){if((m|0)>=(b|0))break;i=f+(m<<2)|0;j=k+(m<<2)|0;e=0;while(1){if((e|0)==(m|0))break;g=+h[(c[i>>2]|0)+(e<<3)>>3];g=1.0/(g*g);d=c[(c[o>>2]|0)+152>>2]|0;d=iB(a,c[d+(m<<2)>>2]|0,c[d+(e<<2)>>2]|0,0,0)|0;if(d)g=+h[(c[d+16>>2]|0)+128>>3]*g;h[(c[k+(e<<2)>>2]|0)+(m<<3)>>3]=g;h[(c[j>>2]|0)+(e<<3)>>3]=g;e=e+1|0}m=m+1|0}a=c[47137]|0;e=0;while(1){if((e|0)<(b|0))d=0;else break;while(1){if((d|0)>=(a|0))break;h[(c[(c[(c[o>>2]|0)+168>>2]|0)+(e<<2)>>2]|0)+(d<<3)>>3]=0.0;d=d+1|0}e=e+1|0}i=0;while(1){d=c[(c[(c[o>>2]|0)+152>>2]|0)+(i<<2)>>2]|0;if(!d)break;a=d+16|0;d=0;while(1){if((d|0)>=(b|0))break;a:do if((i|0)!=(d|0)){g=+tn(c[(c[a>>2]|0)+132>>2]|0,c[(c[(c[(c[(c[o>>2]|0)+152>>2]|0)+(d<<2)>>2]|0)+16>>2]|0)+132>>2]|0,n);f=c[47137]|0;g=1.0/g;e=0;while(1){if((e|0)>=(f|0))break a;m=c[o>>2]|0;r=+h[n+(e<<3)>>3];r=(r-+h[(c[(c[m+160>>2]|0)+(i<<2)>>2]|0)+(d<<3)>>3]*r*g)*+h[(c[(c[m+164>>2]|0)+(i<<2)>>2]|0)+(d<<3)>>3];h[(c[(c[(c[m+172>>2]|0)+(i<<2)>>2]|0)+(d<<2)>>2]|0)+(e<<3)>>3]=r;m=(c[(c[m+168>>2]|0)+(i<<2)>>2]|0)+(e<<3)|0;h[m>>3]=+h[m>>3]+r;e=e+1|0}}while(0);d=d+1|0}i=i+1|0}if(0){o=c[15712]|0;h[p>>3]=+UO();w4(o,90267,p)|0}l=q;return}function Kn(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0.0,k=0;i=l;l=l+32|0;g=i+24|0;f=i+8|0;e=i;j=+h[23294];h[23216]=j*j;while(1){d=Ln(a,b)|0;if(!d)break;Mn(a,b,d)}if(!0)b=a+16|0;else{d=c[15712]|0;h[e>>3]=+Nn(a,b);w4(d,90277,e)|0;b=a+16|0;k=c[(c[b>>2]|0)+156>>2]|0;e=(k|0)==(c[47136]|0)?90291:195059;j=+UO();c[f>>2]=k;c[f+4>>2]=e;h[f+8>>3]=j;w4(d,90293,f)|0}b=c[(c[b>>2]|0)+156>>2]|0;if((b|0)==(c[47136]|0)){k=KB(a)|0;c[g>>2]=b;c[g+4>>2]=k;gA(0,90320,g)|0}l=i;return}function Ln(a,b){a=a|0;b=b|0;var e=0.0,f=0,g=0,i=0.0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0.0;r=l;l=l+16|0;q=r;o=(c[46799]|0)+1|0;c[46799]=o;a=c[a+16>>2]|0;if((c[a+156>>2]|0)<(c[47136]|0)){m=c[47137]|0;n=a+152|0;k=a+168|0;a=0;e=0.0;j=0;while(1){if((j|0)>=(b|0))break;g=c[(c[n>>2]|0)+(j<<2)>>2]|0;if((d[(c[g+16>>2]|0)+119>>0]|0)<=1){i=0.0;f=0;while(1){if((f|0)>=(m|0))break;s=+h[(c[(c[k>>2]|0)+(j<<2)>>2]|0)+(f<<3)>>3];i=s*s+i;f=f+1|0}if(i>e){a=g;e=i}}j=j+1|0}if(!(e<+h[23216])){if(0!=0&((o|0)%100|0|0)==0?(p=c[15712]|0,h[q>>3]=+C(+e),w4(p,90371,q)|0,((c[46799]|0)%1e3|0|0)==0):0)E6(10,p)|0}else a=0}else a=0;l=r;return a|0}function Mn(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0;o=l;l=l+16|0;n=o;k=d+16|0;m=c[(c[k>>2]|0)+120>>2]|0;f=c[46798]|0;if(!f){g=c[47137]|0;g=KK(O(g<<3,g)|0)|0}else{g=c[47137]|0;g=MK(f,O(g<<3,g)|0)|0}c[46798]=g;On(a,b,m,g);i=c[47137]|0;j=a+16|0;f=0;while(1){if((f|0)>=(i|0))break;h[185736+(f<<3)>>3]=-+h[(c[(c[(c[j>>2]|0)+168>>2]|0)+(m<<2)>>2]|0)+(f<<3)>>3];f=f+1|0}Xu(g,185816,185736,i);f=0;while(1){if((f|0)>=(c[47137]|0))break;e=+h[23296];e=(1.0-e)*2.0*+B5()+e;i=185816+(f<<3)|0;e=e*+h[i>>3];h[i>>3]=e;i=(c[(c[k>>2]|0)+132>>2]|0)+(f<<3)|0;h[i>>3]=+h[i>>3]+e;f=f+1|0}k=(c[j>>2]|0)+156|0;c[k>>2]=(c[k>>2]|0)+1;Pn(a,b,m);if(rP()|0){g=c[47137]|0;e=0.0;f=0;while(1){if((f|0)>=(g|0))break;e=+B(+(+h[185816+(f<<3)>>3]))+e;f=f+1|0}e=+C(+e);m=c[15712]|0;c[n>>2]=KB(d)|0;h[n+8>>3]=e;w4(m,90362,n)|0}l=o;return}function Nn(a,b){a=a|0;b=b|0;var d=0.0,e=0.0,f=0,g=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0.0;q=b+-1|0;n=a+16|0;o=c[47137]|0;g=0;d=0.0;a:while(1){if((g|0)>=(q|0))break;m=c[n>>2]|0;p=c[m+152>>2]|0;j=g+1|0;k=(c[p+(g<<2)>>2]|0)+16|0;l=m+164|0;m=m+160|0;i=j;while(1){if((i|0)>=(b|0)){g=j;continue a}f=(c[p+(i<<2)>>2]|0)+16|0;a=0;e=0.0;while(1){if((a|0)>=(o|0))break;r=+h[(c[(c[k>>2]|0)+132>>2]|0)+(a<<3)>>3]-+h[(c[(c[f>>2]|0)+132>>2]|0)+(a<<3)>>3];a=a+1|0;e=r*r+e}r=+h[(c[(c[m>>2]|0)+(g<<2)>>2]|0)+(i<<3)>>3];r=((+C(+e)*-2.0+r)*r+e)*+h[(c[(c[l>>2]|0)+(g<<2)>>2]|0)+(i<<3)>>3]+d;i=i+1|0;d=r}}return +d}function On(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0,k=0,m=0,n=0.0,o=0.0,p=0.0,q=0.0,r=0.0,s=0,t=0,u=0,v=0,w=0,x=0;x=l;l=l+80|0;w=x;v=c[a+16>>2]|0;k=c[v+164>>2]|0;m=c[v+160>>2]|0;v=c[v+152>>2]|0;j=c[v+(d<<2)>>2]|0;g=c[47137]|0;a=0;while(1){if((a|0)>=(g|0))break;i=O(g,a)|0;f=0;while(1){if((f|0)==(g|0))break;h[e+(i+f<<3)>>3]=0.0;f=f+1|0}a=a+1|0}u=c[47137]|0;t=j+16|0;s=k+(d<<2)|0;k=m+(d<<2)|0;j=0;while(1){if((j|0)>=(b|0))break;a:do if((j|0)!=(d|0)){f=(c[v+(j<<2)>>2]|0)+16|0;r=0.0;a=0;while(1){if((a|0)>=(u|0))break;q=+h[(c[(c[t>>2]|0)+132>>2]|0)+(a<<3)>>3]-+h[(c[(c[f>>2]|0)+132>>2]|0)+(a<<3)>>3];h[w+(a<<3)>>3]=q;r=q*q+r;a=a+1|0}n=1.0/+sn(r);i=0;while(1){if((i|0)>=(u|0))break a;f=(c[s>>2]|0)+(j<<3)|0;g=(c[k>>2]|0)+(j<<3)|0;o=+h[w+(i<<3)>>3];a=0;while(1){p=+h[f>>3];q=+h[g>>3];if((a|0)==(i|0))break;m=e+((O(u,a)|0)+i<<3)|0;h[m>>3]=+h[m>>3]+p*n*q*o*+h[w+(a<<3)>>3];a=a+1|0}m=e+((O(u,i)|0)+i<<3)|0;h[m>>3]=(1.0-q*n*(r-o*o))*p+ +h[m>>3];i=i+1|0}}while(0);j=j+1|0}f=c[47137]|0;i=1;while(1){if((i|0)>=(f|0))break;g=O(f,i)|0;a=0;while(1){if((a|0)==(i|0))break;h[e+(g+a<<3)>>3]=+h[e+((O(f,a)|0)+i<<3)>>3];a=a+1|0}i=i+1|0}l=x;return}function Pn(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,i=0.0,j=0,k=0,m=0,n=0,o=0.0,p=0.0,q=0,r=0,s=0;m=l;l=l+80|0;k=m;j=a+16|0;f=c[j>>2]|0;g=c[(c[f+152>>2]|0)+(d<<2)>>2]|0;e=c[47137]|0;f=f+168|0;a=0;while(1){if((a|0)>=(e|0))break;h[(c[(c[f>>2]|0)+(d<<2)>>2]|0)+(a<<3)>>3]=0.0;a=a+1|0}f=g+16|0;a=0;while(1){if((a|0)>=(b|0))break;a:do if((a|0)!=(d|0)){i=+tn(c[(c[f>>2]|0)+132>>2]|0,c[(c[(c[(c[(c[j>>2]|0)+152>>2]|0)+(a<<2)>>2]|0)+16>>2]|0)+132>>2]|0,k);g=c[47137]|0;i=1.0/i;e=0;while(1){if((e|0)>=(g|0))break a;n=c[j>>2]|0;q=c[n+172>>2]|0;r=(c[(c[q+(d<<2)>>2]|0)+(a<<2)>>2]|0)+(e<<3)|0;o=+h[k+(e<<3)>>3];o=(o-+h[(c[(c[n+160>>2]|0)+(d<<2)>>2]|0)+(a<<3)>>3]*o*i)*+h[(c[(c[n+164>>2]|0)+(d<<2)>>2]|0)+(a<<3)>>3];h[r>>3]=o;n=c[n+168>>2]|0;s=(c[n+(d<<2)>>2]|0)+(e<<3)|0;h[s>>3]=+h[s>>3]+o;q=(c[(c[q+(a<<2)>>2]|0)+(d<<2)>>2]|0)+(e<<3)|0;o=+h[q>>3];p=-+h[r>>3];h[q>>3]=p;n=(c[n+(a<<2)>>2]|0)+(e<<3)|0;h[n>>3]=p-o+ +h[n>>3];e=e+1|0}}while(0);a=a+1|0}l=m;return}function Qn(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,i=0,j=0;d=a+16|0;g=c[46800]|0;b=c[(c[d>>2]|0)+124>>2]|0;while(1){if((b|0)<=0)break;i=(b+-1|0)/2|0;j=g+(i<<2)|0;e=c[j>>2]|0;f=e+16|0;if(+h[(c[f>>2]|0)+136>>3]<=+h[(c[d>>2]|0)+136>>3])break;c[j>>2]=a;c[(c[d>>2]|0)+124>>2]=i;c[g+(b<<2)>>2]=e;c[(c[f>>2]|0)+124>>2]=b;b=i}return}function Rn(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,i=0,j=0,k=0,l=0;i=a+16|0;j=c[46801]|0;k=c[46800]|0;g=c[(c[i>>2]|0)+124>>2]|0;while(1){e=g<<1|1;if((e|0)>=(j|0))break;d=e+1|0;if((d|0)<(j|0)){f=c[k+(d<<2)>>2]|0;b=c[k+(e<<2)>>2]|0;if(+h[(c[f+16>>2]|0)+136>>3]<+h[(c[b+16>>2]|0)+136>>3]){e=d;b=f}else l=6}else{b=c[k+(e<<2)>>2]|0;l=6}if((l|0)==6)l=0;d=b+16|0;if(+h[(c[i>>2]|0)+136>>3]<=+h[(c[d>>2]|0)+136>>3])break;c[k+(e<<2)>>2]=a;c[(c[i>>2]|0)+124>>2]=e;c[k+(g<<2)>>2]=b;c[(c[d>>2]|0)+124>>2]=g;g=e}return}function Sn(a){a=a|0;var b=0,d=0;b=(c[a+16>>2]|0)+124|0;if((c[b>>2]|0)>=0)qa(90377,90397,643,90405);d=c[46801]|0;c[46801]=d+1;c[b>>2]=d;c[(c[46800]|0)+(d<<2)>>2]=a;if((d|0)>0)Qn(a);return}function Tn(){var a=0,b=0,d=0,e=0;b=c[46801]|0;if(!b)a=0;else{e=c[46800]|0;a=c[e>>2]|0;d=b+-1|0;c[46801]=d;d=c[e+(d<<2)>>2]|0;c[e>>2]=d;c[(c[d+16>>2]|0)+124>>2]=0;if((b|0)>2)Rn(d);c[(c[a+16>>2]|0)+124>>2]=-1}return a|0}function Un(a,b){a=a|0;b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;c[46800]=JK((b<<2)+4|0)|0;if(0){U4(90419,28,1,c[15712]|0)|0;TO()}b=jC(a)|0;while(1){if(!b)break;Vn(a,b);b=kC(a,b)|0}if(0){a=c[15712]|0;h[d>>3]=+UO();w4(a,90267,d)|0}U1(c[46800]|0);l=e;return}function Vn(a,b){a=a|0;b=b|0;var d=0,e=0,f=0.0,g=0,i=0,j=0,k=0;e=c[(c[a+16>>2]|0)+152>>2]|0;f=+h[23295];d=0;while(1){g=c[e+(d<<2)>>2]|0;if(!g)break;h[(c[g+16>>2]|0)+136>>3]=f;d=d+1|0}c[46802]=b;k=c[b+16>>2]|0;h[k+136>>3]=0.0;c[k+128>>2]=0;Sn(b);a:while(1){k=Tn()|0;if(!k)break;d=c[46802]|0;j=k+16|0;if((k|0)!=(d|0))Wn(a,d,k,+h[(c[j>>2]|0)+136>>3]);i=aB(a,k)|0;while(1){if(!i)continue a;d=c[i>>2]&3;b=c[((d|0)==3?i:i+48|0)+40>>2]|0;if((b|0)==(k|0))b=c[((d|0)==2?i:i+-48|0)+40>>2]|0;d=c[j>>2]|0;f=+h[(c[i+16>>2]|0)+136>>3]+ +h[d+136>>3];e=c[b+16>>2]|0;g=e+136|0;do if(+h[g>>3]>f){h[g>>3]=f;if((c[e+124>>2]|0)>-1){Qn(b);break}else{c[e+128>>2]=(c[d+128>>2]|0)+1;Sn(b);break}}while(0);i=bB(a,i,k)|0}}return}function Wn(a,b,d,e){a=a|0;b=b|0;d=d|0;e=+e;b=c[(c[b+16>>2]|0)+120>>2]|0;d=c[(c[d+16>>2]|0)+120>>2]|0;a=c[(c[a+16>>2]|0)+160>>2]|0;h[(c[a+(d<<2)>>2]|0)+(b<<3)>>3]=e;h[(c[a+(b<<2)>>2]|0)+(d<<3)>>3]=e;return}function Xn(a){a=a|0;oQ(a,2);b[(c[a+16>>2]|0)+176>>1]=2;c[47137]=2;Yn(a);return}function Yn(a){a=a|0;var b=0,d=0,e=0,f=0;b=tB(a)|0;e=JK(b*56|0)|0;b=JK((b<<2)+4|0)|0;f=a+16|0;c[(c[f>>2]|0)+152>>2]=b;b=jC(a)|0;d=0;while(1){if(!b)break;Zl(b);c[(c[b+16>>2]|0)+112>>2]=e+(d*56|0);c[(c[(c[f>>2]|0)+152>>2]|0)+(d<<2)>>2]=b;b=kC(a,b)|0;d=d+1|0}d=jC(a)|0;while(1){if(!d)break;b=XA(a,d)|0;while(1){if(!b)break;Zn(b);b=ZA(a,b)|0}d=kC(a,d)|0}return}function Zn(a){a=a|0;var b=0.0;TC(a,137460,176,1)|0;tP(a)|0;b=+_O(a,c[47174]|0,1.0,0.0);h[(c[a+16>>2]|0)+128>>3]=b;return}function _n(b){b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;u=l;l=l+80|0;m=u+32|0;i=u+24|0;g=u+16|0;j=u;t=u+72|0;p=u+40|0;if(tB(b)|0){Xn(b);f=QA(b,95738)|0;if(f)if(a[f>>0]|0){d=tC(b,f,0)|0;if(!d){c[g>>2]=f;gA(0,90448,g)|0;gA(3,90488,i)|0;d=0;s=1}else s=0}else{d=0;s=1}else{d=0;s=0}n=GA(b,1,95738,0)|0;o=(n|0)!=0;f=QA(b,140742)|0;if((f|0?a[f>>0]|0:0)?(k=j+8|0,c[m>>2]=j,c[m+4>>2]=k,(b5(f,105503,m)|0)==1):0)h[k>>3]=+h[j>>3];if(tB(b)|0){m=DG(b,t,0)|0;if((c[t>>2]|0)==1){g=(d|0)!=0;do if(g)e=d;else{if(o?(e=$n(b,n)|0,e|0):0)break;e=0}while(0);f=Zu(b,e)|0;if(!((e|0)!=0|o^1))KA(f,n,142463)|0;r=(jC(b)|0)+16|0;U1(c[(c[r>>2]|0)+112>>2]|0);c[(c[r>>2]|0)+112>>2]=0;or(b)|0;fn(b);d=(s|0)==0|g?d:f}else{kH(b,2,8,p)|0;c[p+12>>2]=0;k=(s|0)==0;j=0;while(1){if((j|0)>=(c[t>>2]|0))break;g=c[m+(j<<2)>>2]|0;e=(d|0)!=0;if(e?(HC(g,d)|0)!=0:0)f=d;else r=23;do if((r|0)==23){r=0;if(o?(q=$n(g,n)|0,q|0):0){f=q;break}f=0}while(0);KG(g)|0;i=Zu(g,f)|0;d=k|e?d:i;if(o?(f|0)==0|(f|0)==(d|0):0)KA(i,n,142463)|0;or(g)|0;j=j+1|0}r=(jC(b)|0)+16|0;U1(c[(c[r>>2]|0)+112>>2]|0);c[(c[r>>2]|0)+112>>2]=0;jH(c[t>>2]|0,m,b,p)|0;fn(b)}e=0;while(1){if((e|0)>=(c[t>>2]|0))break;wC(b,c[m+(e<<2)>>2]|0)|0;e=e+1|0}U1(m)}if(s|0)SA(b,95738,KB(d)|0)|0;tM(b)}l=u;return}function $n(a,b){a=a|0;b=b|0;var c=0;c=jC(a)|0;while(1){if(!c){c=0;break}if((dP(RA(c,b)|0)|0)<<24>>24)break;c=kC(a,c)|0}return c|0}function ao(a){a=a|0;var b=0,c=0;b=jC(a)|0;if(b|0){while(1){if(!b)break;c=XA(a,b)|0;while(1){if(!c)break;YP(c);c=ZA(a,c)|0}WP(b);b=kC(a,b)|0}bo(a)}return}function bo(a){a=a|0;U1(c[(c[a+16>>2]|0)+152>>2]|0);if((yC(a)|0)!=(a|0))ZC(a,0,137483);return}function co(a){a=a|0;eo(a);if(!((tB(a)|0)==0?!(c[(c[a+16>>2]|0)+180>>2]|0):0)){nv(a);tM(a)}return}function eo(a){a=a|0;c[47147]=GA(a,1,108230,108236)|0;oQ(a,2);b[(c[a+16>>2]|0)+176>>1]=2;c[47137]=2;fo(a,0);go(a);return}function fo(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=l;l=l+16|0;g=i;h=(b|0)==0;if(h){jo(g);b=g}d=OD(a)|0;while(1){if(!d)break;if(!(Q2(KB(d)|0,108006,7)|0)){TC(d,137483,280,1)|0;ko(b,d);fo(d,0)}else fo(d,b);d=PD(d)|0}if(h?(e=c[g+8>>2]|0,f=a+16|0,c[(c[f>>2]|0)+180>>2]=e,e|0):0){h=MK(c[g>>2]|0,(e<<2)+4|0)|0;c[(c[f>>2]|0)+184>>2]=h}l=i;return}function go(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;f=JK((tB(a)|0)<<2)|0;b=JK(((tB(a)|0)<<2)+4|0)|0;g=a+16|0;c[(c[g>>2]|0)+152>>2]=b;b=jC(a)|0;d=0;while(1){if(!b)break;TC(b,137447,304,1)|0;c[(c[b+16>>2]|0)+112>>2]=f+(d<<2);c[(c[(c[g>>2]|0)+152>>2]|0)+(d<<2)>>2]=b;ho(b);e=XA(a,b)|0;while(1){if(!e)break;io(e);e=ZA(a,e)|0}b=kC(a,b)|0;d=d+1|0}return}function ho(a){a=a|0;SA(a,108230,108236)|0;return}function io(a){a=a|0;TC(a,137460,304,1)|0;return}function jo(a){a=a|0;c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;return}function ko(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;g=a+8|0;d=(c[g>>2]|0)+1|0;c[g>>2]=d;e=a+4|0;h=c[e>>2]|0;f=h+10|0;if((d|0)<(h|0))a=c[a>>2]|0;else{c[e>>2]=f;d=MK(c[a>>2]|0,f<<2)|0;c[a>>2]=d;a=d;d=c[g>>2]|0}c[a+(d<<2)>>2]=b;return}function lo(a){a=a|0;var b=0,d=0;b=jC(a)|0;if(b|0){U1(c[(c[b+16>>2]|0)+112>>2]|0);while(1){if(!b)break;d=XA(a,b)|0;while(1){if(!d)break;YP(d);d=ZA(a,d)|0}WP(b);b=kC(a,b)|0}mo(a)}return}function mo(a){a=a|0;U1(c[(c[a+16>>2]|0)+152>>2]|0);if((yC(a)|0)!=(a|0))ZC(a,0,137483);return}function no(a){a=a|0;var d=0,e=0,f=0;oo(a);po(a,0);qo(a,0);ro(a,0);d=c[a+16>>2]|0;if(!(c[(c[d+8>>2]|0)+84>>2]|0)){d=b[d+136>>1]&14;if(d<<16>>16)Wm(a,d&65535)|0}else{d=jC(a)|0;while(1){if(!d)break;f=c[d+16>>2]|0;e=c[f+132>>2]|0;h[e>>3]=+h[f+16>>3]*.013888888888888888;h[e+8>>3]=+h[f+24>>3]*.013888888888888888;d=kC(a,d)|0}Zm(a,1)}tM(a);return}function oo(a){a=a|0;var d=0,e=0;oQ(a,2);b[(c[a+16>>2]|0)+176>>1]=2;c[47137]=2;d=jC(a)|0;while(1){if(!d)break;Zl(d);d=kC(a,d)|0}e=jC(a)|0;while(1){if(!e)break;d=XA(a,e)|0;while(1){if(!d)break;TC(d,137460,176,1)|0;tP(d)|0;d=ZA(a,d)|0}e=kC(a,e)|0}return}function po(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=l;l=l+16|0;g=i;h=(b|0)==0;if(h){wo(g);b=g}d=OD(a)|0;while(1){if(!d)break;if(!(Q2(KB(d)|0,108006,7)|0)){TC(d,137483,280,1)|0;uK(d);xo(b,d);po(d,0)}else po(d,b);d=PD(d)|0}if(h?(e=c[g+8>>2]|0,f=a+16|0,c[(c[f>>2]|0)+180>>2]=e,e|0):0){h=MK(c[g>>2]|0,(e<<2)+4|0)|0;c[(c[f>>2]|0)+184>>2]=h}l=i;return}function qo(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,i=0.0,j=0.0,k=0.0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0;Q=l;l=l+448|0;G=Q+400|0;F=Q+384|0;P=Q+344|0;O=Q+304|0;N=Q+248|0;D=Q+192|0;x=Q+152|0;y=Q+96|0;o=Q+72|0;d=Q+64|0;I=Q+32|0;J=Q;B=Q+416|0;u=Q+328|0;w=Q+288|0;K=Q+232|0;L=Q+176|0;M=Q+136|0;H=Q+80|0;n=c[a+60>>2]|0;if(0>1){so(b);E=c[15712]|0;c[d>>2]=KB(a)|0;w4(E,90723,d)|0}E=a+16|0;f=b+1|0;d=1;e=0;while(1){g=c[E>>2]|0;if((d|0)>(c[g+180>>2]|0))break;C=c[(c[g+184>>2]|0)+(d<<2)>>2]|0;qo(C,f);d=d+1|0;e=(tB(C)|0)+e|0}p=(tB(a)|0)-e|0;d=c[E>>2]|0;C=(c[d+180>>2]|0)+p|0;v=(C|0)==0;if(v?(c[d+12>>2]|0)==0:0){P=d+16|0;c[P>>2]=0;c[P+4>>2]=0;c[P+8>>2]=0;c[P+12>>2]=0;h[d+40>>3]=18.0;h[d+32>>3]=18.0}else{d=B+16|0;do if((kH(a,4,4,B)|0)>>>0>=3)if((c[d>>2]|0)==4?(c[B+28>>2]&2|0)!=0:0){e=GA(n,0,99190,0)|0;d=GA(n,1,99190,0)|0;if((e|0)!=0|(d|0)!=0){c[B+24>>2]=JK(C<<2)|0;break}else{c[o>>2]=KB(a)|0;gA(0,90577,o)|0;d=0;e=0;break}}else{d=0;e=0}else{c[d>>2]=3;d=0;e=0}while(0);z=JK(C<<5)|0;A=JK(C<<2)|0;s=B+24|0;n=(e|0)!=0;r=0;g=1;while(1){f=c[E>>2]|0;if((g|0)>(c[f+180>>2]|0))break;f=c[(c[f+184>>2]|0)+(g<<2)>>2]|0;t=z+(r<<5)|0;q=(c[f+16>>2]|0)+16|0;c[t>>2]=c[q>>2];c[t+4>>2]=c[q+4>>2];c[t+8>>2]=c[q+8>>2];c[t+12>>2]=c[q+12>>2];c[t+16>>2]=c[q+16>>2];c[t+20>>2]=c[q+20>>2];c[t+24>>2]=c[q+24>>2];c[t+28>>2]=c[q+28>>2];if(n&(c[s>>2]|0)!=0){t=ZO(f,e,0,0)|0;c[(c[s>>2]|0)+(r<<2)>>2]=t}c[A+(r<<2)>>2]=f;r=r+1|0;g=g+1|0}a:do if((p|0)>0){o=I+16|0;p=I+24|0;q=(d|0)!=0;n=jC(a)|0;e=r;while(1){if(!n)break a;f=c[n+16>>2]|0;g=f+112|0;if(!(c[g>>2]|0)){c[g>>2]=a;c[I>>2]=0;c[I+4>>2]=0;c[I+8>>2]=0;c[I+12>>2]=0;h[o>>3]=+h[f+96>>3]+ +h[f+88>>3];h[p>>3]=+h[f+80>>3];t=z+(e<<5)|0;c[t>>2]=c[I>>2];c[t+4>>2]=c[I+4>>2];c[t+8>>2]=c[I+8>>2];c[t+12>>2]=c[I+12>>2];c[t+16>>2]=c[I+16>>2];c[t+20>>2]=c[I+20>>2];c[t+24>>2]=c[I+24>>2];c[t+28>>2]=c[I+28>>2];if(q&(c[s>>2]|0)!=0){t=ZO(n,d,0,0)|0;c[(c[s>>2]|0)+(e<<2)>>2]=t}c[A+(e<<2)>>2]=n;e=e+1|0}n=kC(a,n)|0}}while(0);t=dH(C,z,B)|0;d=c[s>>2]|0;if(d|0)U1(d);to(J,2147483647.0,2147483647.0);s=J+16|0;to(u,-2147483647.0,-2147483647.0);c[s>>2]=c[u>>2];c[s+4>>2]=c[u+4>>2];c[s+8>>2]=c[u+8>>2];c[s+12>>2]=c[u+12>>2];g=I+16|0;n=I+8|0;o=I+24|0;p=J+8|0;q=J+24|0;r=c[15712]|0;d=0;while(1){if((d|0)>=(C|0))break;j=+(c[t+(d<<3)>>2]|0);m=+(c[t+(d<<3)+4>>2]|0);e=z+(d<<5)|0;c[I>>2]=c[e>>2];c[I+4>>2]=c[e+4>>2];c[I+8>>2]=c[e+8>>2];c[I+12>>2]=c[e+12>>2];c[I+16>>2]=c[e+16>>2];c[I+20>>2]=c[e+20>>2];c[I+24>>2]=c[e+24>>2];c[I+28>>2]=c[e+28>>2];i=+h[I>>3]+j;h[I>>3]=i;j=+h[g>>3]+j;h[g>>3]=j;k=+h[n>>3]+m;h[n>>3]=k;m=+h[o>>3]+m;h[o>>3]=m;h[J>>3]=+h[(+h[J>>3]>3];h[p>>3]=+h[(+h[p>>3]>3];h[s>>3]=+h[(+h[s>>3]>j?J:I)+16>>3];h[q>>3]=+h[(+h[q>>3]>m?J:I)+24>>3];e=c[A+(d<<2)>>2]|0;f=e+16|0;if((d|0)<(c[(c[E>>2]|0)+180>>2]|0)){u=(c[f>>2]|0)+16|0;c[u>>2]=c[I>>2];c[u+4>>2]=c[I+4>>2];c[u+8>>2]=c[I+8>>2];c[u+12>>2]=c[I+12>>2];c[u+16>>2]=c[I+16>>2];c[u+20>>2]=c[I+20>>2];c[u+24>>2]=c[I+24>>2];c[u+28>>2]=c[I+28>>2];if(0>1){so(b);c[y>>2]=KB(e)|0;h[y+8>>3]=i;h[y+16>>3]=k;h[y+24>>3]=j;h[y+32>>3]=m;w4(r,90556,y)|0}}else{u=(c[f>>2]|0)+16|0;c[F>>2]=c[I>>2];c[F+4>>2]=c[I+4>>2];c[F+8>>2]=c[I+8>>2];c[F+12>>2]=c[I+12>>2];c[G>>2]=c[g>>2];c[G+4>>2]=c[g+4>>2];c[G+8>>2]=c[g+8>>2];c[G+12>>2]=c[g+12>>2];uo(w,F,G);c[u>>2]=c[w>>2];c[u+4>>2]=c[w+4>>2];c[u+8>>2]=c[w+8>>2];c[u+12>>2]=c[w+12>>2];if(0>1){so(b);u=KB(e)|0;f=c[f>>2]|0;k=+h[f+16>>3];m=+h[f+24>>3];c[x>>2]=u;h[x+8>>3]=k;h[x+16>>3]=m;w4(r,90544,x)|0}}d=d+1|0}e=c[E>>2]|0;d=c[e+12>>2]|0;if(d|0){i=+h[d+24>>3];if(v){j=+h[d+32>>3];c[J>>2]=0;c[J+4>>2]=0;c[J+8>>2]=0;c[J+12>>2]=0;h[s>>3]=i;h[q>>3]=j;j=0.0;k=i}else{j=+h[J>>3];k=+h[s>>3]}m=i-(k-j);i=m*.5;if(m>0.0){h[J>>3]=j-i;h[s>>3]=k+i}}if((b|0)>0)i=+((c[B+8>>2]|0)>>>0)*.5;else i=0.0;j=+h[J>>3]-i;h[J>>3]=j;k=+h[s>>3]+i;h[s>>3]=k;m=-i-+h[e+56>>3]+ +h[p>>3];h[p>>3]=m;i=+h[e+88>>3]+i+ +h[q>>3];h[q>>3]=i;if(0>1){so(b);c[D>>2]=KB(a)|0;h[D+8>>3]=j;h[D+16>>3]=m;h[D+24>>3]=k;h[D+32>>3]=i;w4(r,90556,D)|0}d=0;while(1){if((d|0)>=(C|0))break;e=c[A+(d<<2)>>2]|0;f=e+16|0;if((d|0)<(c[(c[E>>2]|0)+180>>2]|0)){D=(c[f>>2]|0)+16|0;c[I>>2]=c[D>>2];c[I+4>>2]=c[D+4>>2];c[I+8>>2]=c[D+8>>2];c[I+12>>2]=c[D+12>>2];c[I+16>>2]=c[D+16>>2];c[I+20>>2]=c[D+20>>2];c[I+24>>2]=c[D+24>>2];c[I+28>>2]=c[D+28>>2];c[F>>2]=c[D>>2];c[F+4>>2]=c[D+4>>2];c[F+8>>2]=c[D+8>>2];c[F+12>>2]=c[D+12>>2];c[G>>2]=c[J>>2];c[G+4>>2]=c[J+4>>2];c[G+8>>2]=c[J+8>>2];c[G+12>>2]=c[J+12>>2];vo(I,F,G);c[F>>2]=c[g>>2];c[F+4>>2]=c[g+4>>2];c[F+8>>2]=c[g+8>>2];c[F+12>>2]=c[g+12>>2];c[G>>2]=c[J>>2];c[G+4>>2]=c[J+4>>2];c[G+8>>2]=c[J+8>>2];c[G+12>>2]=c[J+12>>2];vo(K,F,G);c[g>>2]=c[K>>2];c[g+4>>2]=c[K+4>>2];c[g+8>>2]=c[K+8>>2];c[g+12>>2]=c[K+12>>2];D=(c[f>>2]|0)+16|0;c[D>>2]=c[I>>2];c[D+4>>2]=c[I+4>>2];c[D+8>>2]=c[I+8>>2];c[D+12>>2]=c[I+12>>2];c[D+16>>2]=c[I+16>>2];c[D+20>>2]=c[I+20>>2];c[D+24>>2]=c[I+24>>2];c[D+28>>2]=c[I+28>>2];if(0>1){so(b);D=KB(e)|0;i=+h[I>>3];j=+h[n>>3];k=+h[g>>3];m=+h[o>>3];c[N>>2]=D;h[N+8>>3]=i;h[N+16>>3]=j;h[N+24>>3]=k;h[N+32>>3]=m;w4(r,90556,N)|0}}else{D=(c[f>>2]|0)+16|0;c[F>>2]=c[D>>2];c[F+4>>2]=c[D+4>>2];c[F+8>>2]=c[D+8>>2];c[F+12>>2]=c[D+12>>2];c[G>>2]=c[J>>2];c[G+4>>2]=c[J+4>>2];c[G+8>>2]=c[J+8>>2];c[G+12>>2]=c[J+12>>2];vo(L,F,G);c[D>>2]=c[L>>2];c[D+4>>2]=c[L+4>>2];c[D+8>>2]=c[L+8>>2];c[D+12>>2]=c[L+12>>2];if(0>1){so(b);D=KB(e)|0;B=c[f>>2]|0;k=+h[B+16>>3];m=+h[B+24>>3];c[O>>2]=D;h[O+8>>3]=k;h[O+16>>3]=m;w4(r,90544,O)|0}}d=d+1|0}c[F>>2]=c[s>>2];c[F+4>>2]=c[s+4>>2];c[F+8>>2]=c[s+8>>2];c[F+12>>2]=c[s+12>>2];c[G>>2]=c[J>>2];c[G+4>>2]=c[J+4>>2];c[G+8>>2]=c[J+8>>2];c[G+12>>2]=c[J+12>>2];vo(M,F,G);c[s>>2]=c[M>>2];c[s+4>>2]=c[M+4>>2];c[s+8>>2]=c[M+8>>2];c[s+12>>2]=c[M+12>>2];c[F>>2]=c[J>>2];c[F+4>>2]=c[J+4>>2];c[F+8>>2]=c[J+8>>2];c[F+12>>2]=c[J+12>>2];c[G>>2]=c[J>>2];c[G+4>>2]=c[J+4>>2];c[G+8>>2]=c[J+8>>2];c[G+12>>2]=c[J+12>>2];vo(H,F,G);c[J>>2]=c[H>>2];c[J+4>>2]=c[H+4>>2];c[J+8>>2]=c[H+8>>2];c[J+12>>2]=c[H+12>>2];O=(c[E>>2]|0)+16|0;c[O>>2]=c[J>>2];c[O+4>>2]=c[J+4>>2];c[O+8>>2]=c[J+8>>2];c[O+12>>2]=c[J+12>>2];c[O+16>>2]=c[J+16>>2];c[O+20>>2]=c[J+20>>2];c[O+24>>2]=c[J+24>>2];c[O+28>>2]=c[J+28>>2];if(0>1){so(b);O=KB(a)|0;i=+h[J>>3];j=+h[p>>3];k=+h[s>>3];m=+h[q>>3];c[P>>2]=O;h[P+8>>3]=i;h[P+16>>3]=j;h[P+24>>3]=k;h[P+32>>3]=m;w4(r,90556,P)|0}U1(z);U1(A);U1(t)}l=Q;return}function ro(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0.0,k=0.0,m=0.0,n=0.0,o=0,p=0.0,q=0.0,r=0,s=0,t=0,u=0;t=l;l=l+80|0;s=t+32|0;i=t+8|0;d=t;r=a+16|0;o=c[r>>2]|0;p=+h[o+16>>3];q=+h[o+24>>3];if(0>1){so(b);o=c[15712]|0;c[d>>2]=KB(a)|0;w4(o,90529,d)|0}o=(b|0)!=0;a:do if(o){d=jC(a)|0;e=c[15712]|0;while(1){if(!d)break a;f=d+16|0;g=c[f>>2]|0;if((c[g+112>>2]|0)==(a|0)?(u=g+16|0,h[u>>3]=+h[u>>3]+p,g=g+24|0,h[g>>3]=+h[g>>3]+q,0>1):0){so(b);u=KB(d)|0;g=c[f>>2]|0;m=+h[g+16>>3];n=+h[g+24>>3];c[i>>2]=u;h[i+8>>3]=m;h[i+16>>3]=n;w4(e,90544,i)|0}d=kC(a,d)|0}}else e=c[15712]|0;while(0);i=b+1|0;a=1;while(1){d=c[r>>2]|0;if((a|0)>(c[d+180>>2]|0))break;g=c[(c[d+184>>2]|0)+(a<<2)>>2]|0;if(o){f=g+16|0;d=c[f>>2]|0;j=+h[d+16>>3]+p;k=+h[d+24>>3]+q;m=+h[d+32>>3]+p;n=+h[d+40>>3]+q;if(0>1){so(b);c[s>>2]=KB(g)|0;h[s+8>>3]=j;h[s+16>>3]=k;h[s+24>>3]=m;h[s+32>>3]=n;w4(e,90556,s)|0;d=c[f>>2]|0}h[d+16>>3]=j;h[d+24>>3]=k;h[d+32>>3]=m;h[d+40>>3]=n}ro(g,i);a=a+1|0}l=t;return}function so(a){a=a|0;var b=0;b=c[15712]|0;while(1){if((a|0)<=0)break;T4(90574,b)|0;a=a+-1|0}return}function to(a,b,c){a=a|0;b=+b;c=+c;h[a>>3]=b;h[a+8>>3]=c;return}function uo(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0;d=(+h[c+8>>3]+ +h[b+8>>3])*.5;h[a>>3]=(+h[c>>3]+ +h[b>>3])*.5;h[a+8>>3]=d;return}function vo(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0;d=+h[b+8>>3]-+h[c+8>>3];h[a>>3]=+h[b>>3]-+h[c>>3];h[a+8>>3]=d;return}function wo(a){a=a|0;c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;return}function xo(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;g=a+8|0;d=(c[g>>2]|0)+1|0;c[g>>2]=d;e=a+4|0;h=c[e>>2]|0;f=h+10|0;if((d|0)<(h|0))a=c[a>>2]|0;else{c[e>>2]=f;d=MK(c[a>>2]|0,f<<2)|0;c[a>>2]=d;a=d;d=c[g>>2]|0}c[a+(d<<2)>>2]=b;return}function yo(a){a=a|0;var b=0;b=jC(a)|0;while(1){if(!b)break;WP(b);b=kC(a,b)|0}zo(a);return}function zo(a){a=a|0;var b=0,d=0,e=0;b=a+16|0;a=1;while(1){e=c[b>>2]|0;d=c[e+184>>2]|0;if((a|0)>(c[e+180>>2]|0))break;e=c[d+(a<<2)>>2]|0;CK(c[(c[e+16>>2]|0)+12>>2]|0);zo(e);a=a+1|0}U1(d);return}function Ao(a){a=a|0;var b=0,d=0,e=0;YC(a,1,137447,304,1);HP(a)|0;b=JK(((tB(a)|0)<<2)+4|0)|0;e=a+16|0;c[(c[e>>2]|0)+152>>2]=b;b=0;d=jC(a)|0;while(1){if(!d)break;Bo(d);c[(c[(c[e>>2]|0)+152>>2]|0)+(b<<2)>>2]=d;c[(c[d+16>>2]|0)+120>>2]=b;b=b+1|0;d=kC(a,d)|0}e=GA(a,2,92493,0)|0;d=jC(a)|0;while(1){if(!d)break;b=XA(a,d)|0;while(1){if(!b)break;Co(b,e);b=ZA(a,b)|0}d=kC(a,d)|0}Do(a);return}function Bo(a){a=a|0;var b=0;sP(a);b=JK((e[(c[(xC(a)|0)+16>>2]|0)+176>>1]|0)<<3)|0;c[(c[a+16>>2]|0)+132>>2]=b;qQ(a,c[(c[(xC(a)|0)+16>>2]|0)+116>>2]&1);return}function Co(a,b){a=a|0;b=b|0;var d=0,e=0.0;TC(a,137460,176,1)|0;e=+_O(a,c[47174]|0,1.0,0.0);d=a+16|0;h[(c[d>>2]|0)+128>>3]=e;e=+_O(a,b,+h[1371],0.0);h[(c[d>>2]|0)+136>>3]=e;tP(a)|0;return}function Do(b){b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;r=l;l=l+32|0;q=r+16|0;p=r;m=r+24|0;n=GA(b,1,102623,0)|0;a:do if(n|0){o=GA(b,1,90660,0)|0;i=b+16|0;j=(o|0)==0;k=c[15712]|0;g=0;while(1){e=c[(c[(c[i>>2]|0)+152>>2]|0)+(g<<2)>>2]|0;if(!e)break a;b=RA(e,n)|0;do if(a[b>>0]|0){f=e+16|0;d=c[(c[f>>2]|0)+132>>2]|0;a[m>>0]=0;c[p>>2]=d;c[p+4>>2]=d+8;c[p+8>>2]=m;if((b5(b,101749,p)|0)<=1){c[q>>2]=KB(e)|0;c[q+4>>2]=b;w4(k,90664,q)|0;break}b:do if(+h[23293]>0.0){b=0;while(1){if((b|0)==2)break b;s=d+(b<<3)|0;h[s>>3]=+h[s>>3]/+h[23293];b=b+1|0}}while(0);b=c[f>>2]|0;a[b+119>>0]=1;if((a[m>>0]|0)!=33){if(j)break;if(!((dP(RA(e,o)|0)|0)<<24>>24))break;b=c[f>>2]|0}a[b+119>>0]=3}while(0);g=g+1|0}}while(0);l=r;return}function Eo(a){a=a|0;var b=0,c=0;c=jC(a)|0;while(1){if(!c)break;b=XA(a,c)|0;while(1){if(!b)break;YP(b);b=ZA(a,b)|0}WP(c);c=kC(a,c)|0}Fo(a);return}function Fo(a){a=a|0;Go(a);a=a+16|0;U1(c[(c[a>>2]|0)+152>>2]|0);U1(c[(c[a>>2]|0)+140>>2]|0);return}function Go(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;g=a+16|0;f=1;while(1){e=c[g>>2]|0;b=c[e+184>>2]|0;if((f|0)>(c[e+180>>2]|0))break;e=c[b+(f<<2)>>2]|0;b=e+16|0;CK(c[(c[b>>2]|0)+12>>2]|0);d=c[(c[b>>2]|0)+140>>2]|0;if(d|0){U1(c[d>>2]|0);U1(c[(c[b>>2]|0)+140>>2]|0)}Go(e);f=f+1|0}U1(b);if((yC(a)|0)!=(a|0))VC(a,137483)|0;return}function Ho(a,b){a=a|0;b=b|0;c[b+4>>2]=GA(a,0,90716,0)|0;c[b+8>>2]=GA(a,0,141116,0)|0;c[b+12>>2]=GA(a,0,141048,0)|0;c[b>>2]=a;c[b+16>>2]=0;c[b+36>>2]=kH(a,2,4,b+20|0)|0;return}function Io(a){a=a|0;var d=0,e=0;oQ(a,2);d=JK(56)|0;e=a+16|0;c[(c[e>>2]|0)+140>>2]=d;d=(ZO(a,GA(a,0,91374,0)|0,2,2)|0)&65535;d=(d&65535)<10?d:10;b[(c[e>>2]|0)+176>>1]=d;c[47137]=d&65535;Jo(a,0,a);fp(a);Ao(a);return}function Jo(a,d,e){a=a|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;m=l;l=l+16|0;j=m;k=(d|0)==0;if(k){Ko(j);d=j}g=e+16|0;f=OD(a)|0;while(1){if(!f)break;if(!(Q2(KB(f)|0,108006,7)|0)){TC(f,137483,280,1)|0;n=JK(56)|0;p=c[f+16>>2]|0;c[p+140>>2]=n;o=c[g>>2]|0;b[p+176>>1]=b[o+176>>1]|0;c[n+44>>2]=(c[(c[o+140>>2]|0)+44>>2]|0)+1;c[n+48>>2]=e;Lo(d,f);Jo(f,0,f)}else Jo(f,d,e);f=PD(f)|0}if(k?(h=c[j+8>>2]|0,i=a+16|0,c[(c[i>>2]|0)+180>>2]=h,h|0):0){p=MK(c[j>>2]|0,(h<<2)+4|0)|0;c[(c[i>>2]|0)+184>>2]=p}l=m;return}function Ko(a){a=a|0;c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;return}function Lo(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;g=a+8|0;d=(c[g>>2]|0)+1|0;c[g>>2]=d;e=a+4|0;h=c[e>>2]|0;f=h+10|0;if((d|0)<(h|0))a=c[a>>2]|0;else{c[e>>2]=f;d=MK(c[a>>2]|0,f<<2)|0;c[a>>2]=d;a=d;d=c[g>>2]|0}c[a+(d<<2)>>2]=b;return}function Mo(a){a=a|0;var b=0,c=0;b=l;l=l+64|0;c=b;Ho(a,c);No(a,c);Oo(a);Po(a,a);Qo(a);l=b;return}function No(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0.0,u=0.0,v=0,w=0.0,x=0.0;s=l;l=l+64|0;r=s+48|0;e=s+40|0;o=s+56|0;n=s+52|0;m=s;if(0){q=c[15712]|0;c[e>>2]=KB(b)|0;w4(q,90723,e)|0}e=jC(b)|0;while(1){if(!e)break;c[(c[e+16>>2]|0)+164>>2]=0;e=kC(b,e)|0}p=Ro(b,d)|0;q=Iv(p,o,n)|0;e=q;while(1){k=e+4|0;f=c[e>>2]|0;if(!f)break;gp(f,m);e=jC(f)|0;while(1){if(!e)break;g=kC(f,e)|0;i=e+16|0;j=c[i>>2]|0;if(c[j+212>>2]|0){v=So(e,f)|0;No(v,d);v=c[(c[v+16>>2]|0)+140>>2]|0;u=+h[v+24>>3];j=c[i>>2]|0;h[j+32>>3]=u;t=+h[v+32>>3];h[j+40>>3]=t;u=u*36.0;h[j+88>>3]=u;h[j+96>>3]=u;h[j+80>>3]=t*72.0;e=g;continue}if(c[(c[j+112>>2]|0)+8>>2]|0){e=g;continue}wC(f,e)|0;e=g}if((tB(f)|0)<=1){e=k;continue}if((c[d>>2]|0)==(b|0))Lq(f)|0;tp(f,m);e=k}e=c[o>>2]|0;if((e|0)<=1)if((e|0)==1){BP(c[q>>2]|0);e=0}else e=0;else{if(!(c[n>>2]|0))f=0;else{f=JK(e)|0;a[f>>0]=1;e=c[o>>2]|0}c[d+40>>2]=f;e=QG(e,q,0,d+20|0)|0;U1(f)}To(p,c[o>>2]|0,q,e,b,d);U1(e);f=jC(p)|0;while(1){if(!f)break;g=c[f+16>>2]|0;e=c[g+212>>2]|0;if(!e){e=c[(c[g+112>>2]|0)+8>>2]|0;if(e|0){o=c[g+132>>2]|0;v=c[(c[e+16>>2]|0)+132>>2]|0;h[v>>3]=+h[o>>3];h[v+8>>3]=+h[o+8>>3]}}else{o=c[g+132>>2]|0;x=+h[g+32>>3];w=+h[o>>3]-x*.5;v=c[(c[e+16>>2]|0)+140>>2]|0;h[v+8>>3]=w;t=+h[g+40>>3];u=+h[o+8>>3]-t*.5;h[v+16>>3]=u;h[v+24>>3]=x+w;h[v+32>>3]=t+u}f=kC(p,f)|0}v=(c[(c[b+16>>2]|0)+140>>2]|0)+8|0;o=(c[(c[p+16>>2]|0)+140>>2]|0)+8|0;c[v>>2]=c[o>>2];c[v+4>>2]=c[o+4>>2];c[v+8>>2]=c[o+8>>2];c[v+12>>2]=c[o+12>>2];c[v+16>>2]=c[o+16>>2];c[v+20>>2]=c[o+20>>2];c[v+24>>2]=c[o+24>>2];c[v+28>>2]=c[o+28>>2];Uo(p,q);U1(q);if(0){v=c[15712]|0;c[r>>2]=KB(b)|0;w4(v,90734,r)|0}l=s;return}function Oo(b){b=b|0;var d=0,e=0,f=0.0,g=0.0,i=0.0,j=0.0,k=0;d=jC(b)|0;while(1){if(!d)break;e=c[d+16>>2]|0;if(a[e+118>>0]|0){k=c[(c[(c[e+212>>2]|0)+16>>2]|0)+140>>2]|0;j=+h[k+24>>3]-+h[k+8>>3];i=+h[k+32>>3]-+h[k+16>>3];g=j*36.0;f=i*36.0;k=c[e+132>>2]|0;h[k>>3]=j*.5;h[k+8>>3]=i*.5;h[e+32>>3]=j;h[e+40>>3]=i;h[e+96>>3]=g;h[e+88>>3]=g;h[e+80>>3]=i*72.0;e=c[(c[e+12>>2]|0)+44>>2]|0;h[e>>3]=g;h[e+8>>3]=f;i=-g;h[e+16>>3]=i;h[e+24>>3]=f;h[e+32>>3]=i;f=-f;h[e+40>>3]=f;h[e+48>>3]=g;h[e+56>>3]=f}d=kC(b,d)|0}return}function Po(a,b){a=a|0;b=b|0;var d=0,e=0,f=0.0,g=0.0,i=0,j=0,k=0.0,l=0,m=0.0,n=0,o=0.0,p=0;i=a+16|0;j=c[(c[i>>2]|0)+140>>2]|0;f=+h[j+8>>3];g=+h[j+16>>3];j=(a|0)!=(b|0);a:do if(j){d=jC(a)|0;while(1){if(!d){a=1;break a}e=c[d+16>>2]|0;if((c[e+212>>2]|0)==(a|0)){e=c[e+132>>2]|0;h[e>>3]=+h[e>>3]+f;e=e+8|0;h[e>>3]=+h[e>>3]+g}d=kC(a,d)|0}}else a=1;while(0);while(1){d=c[i>>2]|0;if((a|0)>(c[d+180>>2]|0))break;d=c[(c[d+184>>2]|0)+(a<<2)>>2]|0;if(j){e=c[(c[d+16>>2]|0)+140>>2]|0;p=e+8|0;n=e+16|0;l=e+24|0;e=e+32|0;o=+h[n>>3]+g;m=+h[l>>3]+f;k=+h[e>>3]+g;h[p>>3]=+h[p>>3]+f;h[n>>3]=o;h[l>>3]=m;h[e>>3]=k}Po(d,b);a=a+1|0}return}function Qo(a){a=a|0;var b=0,d=0,e=0.0,f=0.0,g=0.0;b=a+16|0;a=c[b>>2]|0;d=c[a+140>>2]|0;g=+h[d+16>>3]*72.0;f=+h[d+24>>3]*72.0;e=+h[d+32>>3]*72.0;h[a+16>>3]=+h[d+8>>3]*72.0;h[a+24>>3]=g;h[a+32>>3]=f;h[a+40>>3]=e;a=1;while(1){d=c[b>>2]|0;if((a|0)>(c[d+180>>2]|0))break;Qo(c[(c[d+184>>2]|0)+(a<<2)>>2]|0);a=a+1|0}return}function Ro(d,e){d=d|0;e=e|0;var f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;y=l;l=l+160|0;s=y+24|0;t=y+8|0;g=y;f=y+56|0;w=e+16|0;x=c[w>>2]|0;c[w>>2]=x+1;c[s>>2]=x;m4(f,90796,s)|0;if(0>1){x=c[15712]|0;w=KB(d)|0;c[g>>2]=f;c[g+4>>2]=w;w4(x,90803,g)|0};a[s>>0]=a[18588]|0;a[s+1>>0]=a[18589]|0;a[s+2>>0]=a[18590]|0;a[s+3>>0]=a[18591]|0;x=oB(91156,s,0)|0;TC(x,137483,280,1)|0;v=JK(56)|0;w=x+16|0;o=c[w>>2]|0;c[o+140>>2]=v;v=d+16|0;b[o+176>>1]=b[(c[v>>2]|0)+176>>1]|0;_o(d,x,92507);_o(d,x,93112);_o(d,x,91202);o=e+4|0;p=s+16|0;q=s+8|0;r=s+24|0;j=0;n=1;while(1){f=c[v>>2]|0;if((n|0)>(c[f+180>>2]|0))break;c[s>>2]=c[332];c[s+4>>2]=c[333];c[s+8>>2]=c[334];c[s+12>>2]=c[335];c[s+16>>2]=c[336];c[s+20>>2]=c[337];c[s+24>>2]=c[338];c[s+28>>2]=c[339];g=c[(c[f+184>>2]|0)+(n<<2)>>2]|0;uK(g);i=$o(x,KB(g)|0)|0;k=i+16|0;f=c[k>>2]|0;c[f+212>>2]=g;m=j+1|0;c[f+120>>2]=j;if(c[o>>2]|0)ap(g,i,e,s);f=jC(g)|0;while(1){if(!f)break;c[(c[f+16>>2]|0)+164>>2]=i;f=kC(g,f)|0}f=c[k>>2]|0;if(a[f+119>>0]|0){k=c[f+132>>2]|0;h[k>>3]=(+h[p>>3]+ +h[s>>3])*.5;h[k+8>>3]=(+h[r>>3]+ +h[q>>3])*.5}j=m;n=n+1|0}k=jC(d)|0;while(1){if(!k)break;f=k+16|0;g=c[f>>2]|0;if(!(c[g+164>>2]|0)){i=g+212|0;s=c[i>>2]|0;if(s|0?(s|0)!=(c[(c[(c[v>>2]|0)+140>>2]|0)+48>>2]|0):0){u=18;break}c[i>>2]=d;if(!(a[g+118>>0]|0)){i=$o(x,KB(k)|0)|0;g=c[f>>2]|0;c[g+164>>2]=i;i=c[i+16>>2]|0;c[i+120>>2]=j;h[i+32>>3]=+h[g+32>>3];h[i+40>>3]=+h[g+40>>3];h[i+88>>3]=+h[g+88>>3];h[i+96>>3]=+h[g+96>>3];h[i+80>>3]=+h[g+80>>3];c[i+8>>2]=c[g+8>>2];c[i+12>>2]=c[g+12>>2];f=a[g+119>>0]|0;if(f<<24>>24){e=c[g+132>>2]|0;s=c[i+132>>2]|0;h[s>>3]=+h[e>>3];h[s+8>>3]=+h[e+8>>3];a[i+119>>0]=f}c[(c[i+112>>2]|0)+8>>2]=k;f=j+1|0}else f=j}else f=j;k=kC(d,k)|0;j=f}if((u|0)==18){e=KB(k)|0;s=KB(d)|0;u=KB(c[(c[f>>2]|0)+212>>2]|0)|0;c[t>>2]=e;c[t+4>>2]=s;c[t+8>>2]=u;gA(1,90826,t)|0;bb(187212,1)}m=jC(d)|0;while(1){if(!m)break;n=c[(c[m+16>>2]|0)+164>>2]|0;o=n+16|0;i=XA(d,m)|0;while(1){if(!i)break;f=c[(c[(c[((c[i>>2]&3|0)==2?i:i+-48|0)+40>>2]|0)+16>>2]|0)+164>>2]|0;if((f|0)!=(n|0)){if(f>>>0>n>>>0)k=iB(x,n,f,0,1)|0;else k=iB(x,f,n,0,1)|0;TC(k,137460,176,1)|0;g=c[i+16>>2]|0;u=c[k+16>>2]|0;h[u+136>>3]=+h[g+136>>3];h[u+128>>3]=+h[g+128>>3];f=c[(c[f+16>>2]|0)+112>>2]|0;g=f+4|0;c[g>>2]=(c[g>>2]|0)+1;g=c[(c[o>>2]|0)+112>>2]|0;t=g+4|0;c[t>>2]=(c[t>>2]|0)+1;if(!(c[u+172>>2]|0)){c[f>>2]=(c[f>>2]|0)+1;c[g>>2]=(c[g>>2]|0)+1}bp(k,i)}i=ZA(d,i)|0}m=kC(d,m)|0}f=c[(c[v>>2]|0)+140>>2]|0;g=c[f>>2]|0;if(g|0){i=JK((c[f+4>>2]<<4)+16|0)|0;c[c[(c[w>>2]|0)+140>>2]>>2]=i;f=0;while(1){if(!(c[g>>2]|0))break;m=c[(c[(c[g+4>>2]|0)+16>>2]|0)+164>>2]|0;if(m){cp(d,g);n=$o(x,193772)|0;o=n+16|0;c[(c[o>>2]|0)+120>>2]=j;if(n>>>0>m>>>0)k=iB(x,m,n,0,1)|0;else k=iB(x,n,m,0,1)|0;TC(k,137460,176,1)|0;u=c[g>>2]|0;t=c[u+16>>2]|0;v=c[k+16>>2]|0;h[v+136>>3]=+h[t+136>>3];h[v+128>>3]=+h[t+128>>3];bp(k,u);u=c[(c[o>>2]|0)+112>>2]|0;v=u+4|0;c[v>>2]=(c[v>>2]|0)+1;v=c[(c[m+16>>2]|0)+112>>2]|0;t=v+4|0;c[t>>2]=(c[t>>2]|0)+1;c[u>>2]=(c[u>>2]|0)+1;c[v>>2]=(c[v>>2]|0)+1;c[i+4>>2]=n;h[i+8>>3]=+h[g+8>>3];c[i>>2]=k;f=f+1|0;i=i+16|0;j=j+1|0}g=g+16|0}c[(c[(c[w>>2]|0)+140>>2]|0)+4>>2]=f}l=y;return x|0}function So(a,b){a=a|0;b=b|0;var d=0.0,e=0,f=0,g=0,i=0,j=0,k=0,l=0;l=c[a+16>>2]|0;k=c[l+212>>2]|0;l=c[(c[l+112>>2]|0)+4>>2]|0;do if(l|0){j=JK((l<<4)+16|0)|0;f=Xo(a,b)|0;g=f+8|0;b=0;e=f;while(1){if(!(c[e>>2]|0))break;i=e+24|0;if(!(c[i>>2]|0))d=+h[g>>3]+6.283185307179586;else d=+h[e+32>>3];b=Yo(a,e,j,b,d)|0;e=i}if((b|0)==(l|0)){a=c[(c[k+16>>2]|0)+140>>2]|0;c[a>>2]=j;c[a+4>>2]=l;U1(f);break}else qa(90742,90752,766,90761)}while(0);return k|0}function To(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var i=0.0,j=0,k=0.0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0.0,H=0.0;B=l;l=l+32|0;x=B+16|0;A=B;m=c[g+8>>2]|0;j=c[g+12>>2]|0;y=(c[g>>2]|0)==(f|0);z=(b|0)!=0;a:do if(z){p=c[(c[d>>2]|0)+16>>2]|0;k=+h[p+16>>3];m=~~(k+(k>=0.0?.5:-.5));c[A>>2]=m;k=+h[p+24>>3];g=~~(k+(k>=0.0?.5:-.5));u=A+4|0;c[u>>2]=g;k=+h[p+32>>3];n=~~(k+(k>=0.0?.5:-.5));v=A+8|0;c[v>>2]=n;k=+h[p+40>>3];p=~~(k+(k>=0.0?.5:-.5));w=A+12|0;c[w>>2]=p;if((b|0)>1){q=c[e>>2]|0;t=c[e+4>>2]|0;m=q+m|0;c[A>>2]=m;b=t+g|0;c[u>>2]=b;n=q+n|0;c[v>>2]=n;q=x+4|0;r=x+8|0;s=x+12|0;o=e;g=d;t=t+p|0;p=b;while(1){g=g+4|0;j=o+8|0;c[w>>2]=t;b=c[g>>2]|0;if(!b){j=0;r=p;s=t;break a}E=c[b+16>>2]|0;G=+h[E+16>>3];i=+h[E+24>>3];k=+h[E+32>>3];H=+h[E+40>>3];E=~~(H+(H>=0.0?.5:-.5));c[s>>2]=E;b=c[j>>2]|0;F=c[o+12>>2]|0;D=b+~~(G+(G>=0.0?.5:-.5))|0;c[x>>2]=D;C=F+~~(i+(i>=0.0?.5:-.5))|0;c[q>>2]=C;b=b+~~(k+(k>=0.0?.5:-.5))|0;c[r>>2]=b;E=F+E|0;c[s>>2]=E;D=c[((m|0)<(D|0)?A:x)>>2]|0;c[A>>2]=D;C=c[((p|0)<(C|0)?A:x)+4>>2]|0;c[u>>2]=C;b=c[((n|0)>(b|0)?A:x)+8>>2]|0;c[v>>2]=b;o=j;t=c[((t|0)>(E|0)?A:x)+12>>2]|0;m=D;p=C;n=b}}else{j=0;r=g;s=p}}else{c[A>>2]=0;c[A+4>>2]=0;n=ZO(f,m,54,3)|0;c[A+8>>2]=n;s=ZO(f,j,36,3)|0;c[A+12>>2]=s;j=1;m=0;r=0}while(0);b=f+16|0;o=c[b>>2]|0;g=c[o+12>>2]|0;if(g){H=+h[g+24>>3];g=m-n+~~(H+(H>=0.0?.5:-.5))|0;if((g|0)>0){g=g>>>1;m=m-g|0;c[A>>2]=m;n=n+g|0;c[A+8>>2]=n;g=0}else g=0}else g=j;if(y|(g|0)!=0){j=0;g=o}else{j=ZO(a,c[47144]|0,8,0)|0;g=c[b>>2]|0}q=j-m|0;p=~~(+h[g+56>>3]+ +(j-r|0));c[A>>2]=0;c[A+4>>2]=0;o=q+j+n|0;c[A+8>>2]=o;b=~~(+h[g+88>>3]+ +(j+p|0)+ +(s|0));c[A+12>>2]=b;b:do if(z){g=e;c:while(1){n=d+4|0;j=c[d>>2]|0;if(!j)break b;if(!g){m=0;d=q;g=p}else{m=g+8|0;d=(c[g>>2]|0)+q|0;g=(c[g+4>>2]|0)+p|0}k=+(d|0)*.013888888888888888;i=+(g|0)*.013888888888888888;d=jC(j)|0;while(1){if(!d){d=n;g=m;continue c}F=c[(c[d+16>>2]|0)+132>>2]|0;h[F>>3]=+h[F>>3]+k;F=F+8|0;h[F>>3]=+h[F>>3]+i;d=kC(j,d)|0}}}while(0);F=c[(c[a+16>>2]|0)+140>>2]|0;E=F+8|0;c[E>>2]=0;c[E+4>>2]=0;c[E+8>>2]=0;c[E+12>>2]=0;h[F+24>>3]=+(o|0)*.013888888888888888;h[F+32>>3]=+(b|0)*.013888888888888888;l=B;return}function Uo(a,b){a=a|0;b=b|0;var d=0,e=0;while(1){d=c[b>>2]|0;if(!d)break;Vo(d);VC(d,137483)|0;b=b+4|0}b=c[c[(c[a+16>>2]|0)+140>>2]>>2]|0;if(b|0)U1(b);Vo(a);VC(a,137483)|0;d=jC(a)|0;while(1){if(!d)break;e=kC(a,d)|0;b=XA(a,d)|0;while(1){if(!b)break;U1(c[(c[b+16>>2]|0)+172>>2]|0);VC(b,137460)|0;b=ZA(a,b)|0}Wo(d);d=e}sB(a)|0;return}function Vo(a){a=a|0;U1(c[(c[a+16>>2]|0)+140>>2]|0);return}function Wo(a){a=a|0;var b=0;b=a+16|0;U1(c[(c[b>>2]|0)+112>>2]|0);U1(c[(c[b>>2]|0)+132>>2]|0);VC(a,137447)|0;return}function Xo(a,b){a=a|0;b=b|0;var d=0.0,e=0,f=0,g=0.0,i=0,j=0,k=0,l=0,m=0;k=a+16|0;l=c[c[(c[k>>2]|0)+112>>2]>>2]|0;m=JK((l*24|0)+24|0)|0;i=0;j=aB(b,a)|0;while(1){if(!j)break;f=c[j>>2]&3;e=c[((f|0)==2?j:j+-48|0)+40>>2]|0;if((e|0)==(a|0))e=c[((f|0)==3?j:j+48|0)+40>>2]|0;e=c[(c[e+16>>2]|0)+132>>2]|0;f=c[(c[k>>2]|0)+132>>2]|0;g=+h[e>>3]-+h[f>>3];d=+h[e+8>>3]-+h[f+8>>3];c[m+(i*24|0)>>2]=j;h[m+(i*24|0)+8>>3]=+K(+d,+g);h[m+(i*24|0)+16>>3]=d*d+g*g;i=i+1|0;j=bB(b,j,a)|0}if((i|0)!=(l|0))qa(90775,90752,642,90784);o4(m,l,24,67);a:do if((l|0)>1){j=l+-1|0;e=0;b:while(1){if((e|0)>=(j|0))break a;g=+h[m+(e*24|0)+8>>3];f=e+1|0;i=f;while(1){if((i|0)>=(l|0))break;if(!(+h[m+(i*24|0)+8>>3]==g))break;i=i+1|0}if((i|0)==(f|0)){e=f;continue}if((i|0)==(l|0))d=3.141592653589793;else d=+h[m+(i*24|0)+8>>3];d=(d-g)/+(i-e|0);d=d>.03490658503988659?.03490658503988659:d;g=0.0;while(1){if((e|0)>=(i|0))continue b;k=m+(e*24|0)+8|0;h[k>>3]=+h[k>>3]+g;g=g+d;e=e+1|0}}}while(0);return m|0}function Yo(a,d,e,f,g){a=a|0;d=d|0;e=e|0;f=f|0;g=+g;var i=0,j=0,k=0,l=0.0,m=0,n=0,o=0,p=0.0,q=0;k=c[d>>2]|0;n=c[k+16>>2]|0;m=b[n+168>>1]|0;o=m<<16>>16;j=c[k>>2]&3;i=c[((j|0)==2?k:k+-48|0)+40>>2]|0;if((i|0)==(a|0))i=c[((j|0)==3?k:k+48|0)+40>>2]|0;p=+h[d+8>>3];g=(g-p)/+(m<<16>>16);g=g>.03490658503988659?.03490658503988659:g;m=i>>>0>a>>>0;l=m?g:-g;d=m?1:-1;k=0;i=c[n+172>>2]|0;j=m?f:f+-1+o|0;g=m?p:g*+(o+-1|0)+p;while(1){if((k|0)>=(o|0))break;n=c[i>>2]|0;c[e+(j<<4)>>2]=n;m=c[n>>2]&3;q=(m|0)==3?n:n+48|0;c[e+(j<<4)+4>>2]=c[((c[(c[(c[q+40>>2]|0)+16>>2]|0)+164>>2]|0)==(a|0)?q:(m|0)==2?n:n+-48|0)+40>>2];h[e+(j<<4)+8>>3]=g;k=k+1|0;i=i+4|0;j=j+d|0;g=g+l}return o+f|0}function Zo(a,b){a=a|0;b=b|0;var c=0.0,d=0.0;c=+h[a+8>>3];d=+h[b+8>>3];if(!(c>d))if(!(c>3];c=+h[b+16>>3];if(d>c)a=1;else a=(d>31}else a=-1;else a=1;return a|0}function _o(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;d=GA(a,0,c,0)|0;do if(d|0){a=RA(a,d)|0;d=GA(b,0,c,0)|0;if(!d){GA(b,0,c,a)|0;break}else{KA(b,d,a)|0;break}}while(0);return}function $o(a,b){a=a|0;b=b|0;var d=0,f=0;b=tC(a,b,1)|0;TC(b,137447,304,1)|0;f=JK(32)|0;d=b+16|0;c[(c[d>>2]|0)+112>>2]=f;a=KK((e[(c[a+16>>2]|0)+176>>1]|0)<<3)|0;c[(c[d>>2]|0)+132>>2]=a;return b|0}function ap(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0.0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;q=l;l=l+80|0;n=q+56|0;m=q+32|0;p=q;o=q+64|0;i=c[e+4>>2]|0;k=RA(b,i)|0;do if(a[k>>0]|0){if((c[e>>2]|0)!=(b|0)){e=RA(QD(b)|0,i)|0;if((e|0)==(k|0))break;if(!(s2(k,e)|0))break}a[o>>0]=0;e=p+8|0;i=p+16|0;j=p+24|0;c[m>>2]=p;c[m+4>>2]=e;c[m+8>>2]=i;c[m+12>>2]=j;c[m+16>>2]=o;if((b5(k,90937,m)|0)<=3){c[n>>2]=KB(b)|0;c[n+4>>2]=k;gA(0,90955,n)|0;break}g=+h[23293];if(g>0.0){h[p>>3]=+h[p>>3]/g;h[e>>3]=+h[e>>3]/g;h[i>>3]=+h[i>>3]/g;h[j>>3]=+h[j>>3]/g}e=a[o>>0]|0;if(e<<24>>24==33)a[(c[d+16>>2]|0)+119>>0]=3;else a[(c[d+16>>2]|0)+119>>0]=e<<24>>24==63?2:1;c[f>>2]=c[p>>2];c[f+4>>2]=c[p+4>>2];c[f+8>>2]=c[p+8>>2];c[f+12>>2]=c[p+12>>2];c[f+16>>2]=c[p+16>>2];c[f+20>>2]=c[p+20>>2];c[f+24>>2]=c[p+24>>2];c[f+28>>2]=c[p+28>>2]}while(0);l=q;return}function bp(a,d){a=a|0;d=d|0;var e=0,f=0,g=0;g=a+16|0;f=c[g>>2]|0;a=b[f+168>>1]|0;f=c[f+172>>2]|0;if(!f){a=a<<16>>16;e=a;a=KK((a<<2)+4|0)|0}else{a=a<<16>>16;e=a;a=MK(f,(a<<2)+4|0)|0}c[a+(e<<2)>>2]=d;d=c[g>>2]|0;c[d+172>>2]=a;d=d+168|0;b[d>>1]=(b[d>>1]|0)+1<<16>>16;return}function cp(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;i=l;l=l+48|0;h=i+24|0;g=i;e=c[b>>2]|0;d=c[e>>2]&3;f=c[((d|0)==2?e:e+-48|0)+40>>2]|0;d=c[((d|0)==3?e:e+48|0)+40>>2]|0;b=l2(KB(a)|0)|0;j=l2(KB(f)|0)|0;j=(b+8+j+(l2(KB(d)|0)|0)|0)>999;b=KB(a)|0;if(j){d=KB(d)|0;j=KB(f)|0;h=(c[e>>2]|0)>>>4;c[g>>2]=b;c[g+4>>2]=d;c[g+8>>2]=j;j=g+16|0;c[j>>2]=h;c[j+4>>2]=0;m4(193772,90895,g)|0}else{d=c[(c[d+16>>2]|0)+120>>2]|0;j=c[(c[f+16>>2]|0)+120>>2]|0;g=(c[e>>2]|0)>>>4;c[h>>2]=b;c[h+4>>2]=d;c[h+8>>2]=j;j=h+16|0;c[j>>2]=g;c[j+4>>2]=0;m4(193772,90914,h)|0}l=i;return}function dp(a){a=a|0;var d=0,e=0,f=0.0,g=0.0,i=0,j=0,k=0;j=4;i=T1(40)|0;c[i>>2]=0;g=+h[23293];o=0;f=+Z(1,a|0);d=o;o=0;if((d|0)!=0&(p|0)!=0){e=V6(c[d>>2]|0,i|0,j|0)|0;if(!e)bb(d|0,p|0);z=p}else e=-1;if((e|0)!=1){h[23293]=f;o=0;ia(102,a|0);d=o;o=0;if((d|0)!=0&(p|0)!=0){e=V6(c[d>>2]|0,i|0,j|0)|0;if(!e)bb(d|0,p|0);z=p}else e=-1;if((e|0)!=1){i=U6(187212,1,i|0,j|0)|0;j=z;o=0;e=o;o=0;if((e|0)!=0&(p|0)!=0){d=V6(c[e>>2]|0,i|0,j|0)|0;if(!d)bb(e|0,p|0);z=p}else d=-1;if((d|0)!=1)d=0;else d=z}else d=z}else d=z;while(1){if(d|0)break;o=0;ia(103,a|0);d=o;o=0;if((d|0)!=0&(p|0)!=0){e=V6(c[d>>2]|0,i|0,j|0)|0;if(!e)bb(d|0,p|0);z=p}else e=-1;if((e|0)==1){d=z;continue}o=0;$(22,a|0)|0;d=o;o=0;if((d|0)!=0&(p|0)!=0){e=V6(c[d>>2]|0,i|0,j|0)|0;if(!e)bb(d|0,p|0);z=p}else e=-1;if((e|0)==1){d=z;continue}if(b[(c[a+16>>2]|0)+136>>1]&14){o=0;ia(104,a|0);d=o;o=0;if((d|0)!=0&(p|0)!=0){e=V6(c[d>>2]|0,i|0,j|0)|0;if(!e)bb(d|0,p|0);z=p}else e=-1;if((e|0)==1){d=z;continue}}o=0;ja(22,a|0,0);d=o;o=0;if((d|0)!=0&(p|0)!=0){e=V6(c[d>>2]|0,i|0,j|0)|0;if(!e)bb(d|0,p|0);z=p}else e=-1;if((e|0)==1)d=z;else{k=12;break}}if((k|0)==12)h[23293]=g;U1(i|0);return}function ep(a){a=a|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=l;l=l+16|0;g=i;e=a+16|0;f=b[(c[e>>2]|0)+136>>1]&14;d=f&65535;if((f&65535)>8){if(f<<16>>16==12){if(Um(a,22,10)|0){c[47134]=2;h=5}}else h=5;do if((h|0)==5)if(!(b[(c[e>>2]|0)+136>>1]&1)){Wm(a,d)|0;break}else{gA(0,90998,g)|0;d=2;break}while(0);c[47134]=0}if((c[47138]|0)<1)Wm(a,d)|0;l=i;return}function fp(a){a=a|0;var b=0.0,d=0.0,e=0;e=l;l=l+16|0;c[46474]=1;c[46475]=1;c[46477]=-1;c[46479]=50;h[23245]=0.0;h[23240]=0.0;h[23241]=1.0;c[46478]=ZO(a,GA(a,0,91061,0)|0,600,0)|0;d=+_O(a,GA(a,0,91202,0)|0,.3,0.0);h[23242]=d;h[1371]=d;if(-1.0==-1.0)b=+_O(a,GA(a,0,91069,0)|0,-1.0,0.0);else b=-1.0;h[23243]=b;c[46476]=1;a=mm(a,2,185904)|0;c[46488]=a;if(!a){gA(0,91072,e)|0;c[46476]=2}c[46504]=(O(c[46478]|0,c[46479]|0)|0)/100|0;d=+h[23242];h[23247]=d*d;if(c[46474]|0){b=+h[23245];if(b<=0.0){b=d*3.0;h[23245]=b}h[23246]=b*b}l=e;return}function gp(a,b){a=a|0;b=b|0;var d=0,e=0.0,f=0.0,g=0,i=0,j=0;j=l;l=l+16|0;d=j;g=c[c[(c[a+16>>2]|0)+140>>2]>>2]|0;i=hp(a,b)|0;ip(d,a,g);e=+h[d>>3];f=+h[d+8>>3];a:do if(!(c[46474]|0)){b=0;while(1){if((b|0)>=(c[46505]|0))break a;lp(a,+jp(b),g);b=b+1|0}}else{d=Kv(tB(a)|0)|0;Pv(d,tB(a)|0);b=0;while(1){if((b|0)>=(c[46505]|0))break;kp(a,+jp(b),g,d);b=b+1|0}Rv(d)}while(0);b:do if(e!=0.0|f!=0.0){b=jC(a)|0;while(1){if(!b)break b;g=c[(c[b+16>>2]|0)+132>>2]|0;h[g>>3]=+h[g>>3]+e;g=g+8|0;h[g>>3]=+h[g>>3]+f;b=kC(a,b)|0}}while(0);if(i|0)mp();l=j;return}function hp(a,b){a=a|0;b=b|0;var d=0.0,e=0,f=0,g=0,i=0,j=0;if(+h[23243]==-1.0){i=tB(a)|0;d=+h[23242];h[23243]=+h[23241]*.2*d*+C(+(+(i|0)));i=1}else{i=0;d=+h[23242]}g=c[46504]|0;h[b+8>>3]=+jp(g);h[b+16>>3]=d;h[b+24>>3]=+h[23240];e=c[46478]|0;a=e-g|0;c[b>>2]=a;f=c[46477]|0;do if((f|0)>-1){if((f|0)<=(g|0)){c[46505]=f;a=0;j=10;break}if((f|0)<=(e|0)){c[46505]=g;a=f-g|0;j=10}}else{c[46505]=g;j=10}while(0);if((j|0)==10)c[b+32>>2]=a;return i|0}function ip(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0.0,j=0.0,k=0,l=0.0,m=0.0,n=0,o=0.0,p=0.0,q=0,r=0,s=0.0,t=0.0,u=0,v=0,w=0.0,x=0,y=0,z=0;v=tB(d)|0;x=c[(c[(c[d+16>>2]|0)+140>>2]|0)+4>>2]|0;u=jC(d)|0;q=0;r=0;g=0;k=0;n=0;while(1){if(!u)break;f=c[u+16>>2]|0;if(!(a[f+119>>0]|0))f=r;else{f=c[f+132>>2]|0;i=+h[f>>3];if(!q){k=~~i;g=~~+h[f+8>>3];n=g;f=k}else{p=+(r|0);s=+h[f+8>>3];t=+(g|0);w=+(k|0);o=+(n|0);n=~~(s>o?s:o);f=~~(iw?i:w)}q=q+1|0}u=kC(d,u)|0;r=f}i=+h[23242]*(+C(+(+(v-x|0)))+1.0);s=i*.6;h[23249]=s;h[23248]=s;if((q|0)!=1)if((q|0)>1){t=+(k+r|0)*.5;w=+(n+g|0)*.5;o=+(k-r|0);p=o*1.2;l=+(n-g|0);m=l*1.2;i=i*2.4*s;j=m*p/i;do if(!(j>=1.0)){if(j>0.0){i=+C(+j)*2.0;j=p/i;h[23248]=j;i=m/i;z=20;break}if(p>0.0){j=o*.6;h[23248]=j;i=i/p*.5;z=20;break}if(m>0.0){j=i/m*.5;h[23248]=j;i=l*.6;z=20}else{i=s;j=s}}else{j=o*.6;h[23248]=j;i=l*.6;z=20}while(0);if((z|0)==20)h[23249]=i;s=+K(+i,+j);j=j/+E(+s);h[23248]=j;i=i/+F(+s);h[23249]=i}else{t=0.0;w=0.0;j=s;i=s}else{t=+(r|0);w=+(g|0);j=s;i=s}h[23250]=j*j;h[23251]=i*i;if((c[46488]|0)==2)f=c[46476]|0;else{f=X4()|0;f=(db(0)|0)^f}z5(f);a:do if(!e){e=jC(d)|0;if(!q)while(1){if(!e)break a;s=+h[23248];s=(+B5()*2.0+-1.0)*s;z=e+16|0;h[c[(c[z>>2]|0)+132>>2]>>3]=s;s=+h[23249];s=(+B5()*2.0+-1.0)*s;h[(c[(c[z>>2]|0)+132>>2]|0)+8>>3]=s;e=kC(d,e)|0}while(1){if(!e)break a;f=e+16|0;g=c[f>>2]|0;if(!(a[g+119>>0]|0)){s=+h[23248];s=(+B5()*2.0+-1.0)*s;h[c[(c[f>>2]|0)+132>>2]>>3]=s;s=+h[23249];s=(+B5()*2.0+-1.0)*s;h[(c[(c[f>>2]|0)+132>>2]|0)+8>>3]=s}else{z=c[g+132>>2]|0;h[z>>3]=+h[z>>3]-t;z=z+8|0;h[z>>3]=+h[z>>3]-w}e=kC(d,e)|0}}else{while(1){if(!(c[e>>2]|0))break;u=e+8|0;s=+E(+(+h[u>>3]))*+h[23248]+t;x=c[(c[e+4>>2]|0)+16>>2]|0;v=c[x+132>>2]|0;h[v>>3]=s;h[v+8>>3]=+F(+(+h[u>>3]))*+h[23249]+w;a[x+119>>0]=1;e=e+16|0}l=t*.1;m=w*.1;r=jC(d)|0;while(1){if(!r)break a;q=r+16|0;e=c[q>>2]|0;if(!((c[(c[e+112>>2]|0)+8>>2]|0)==0?!(c[e+212>>2]|0):0))z=32;do if((z|0)==32){z=0;if(a[e+119>>0]|0){x=c[e+132>>2]|0;h[x>>3]=+h[x>>3]-t;x=x+8|0;h[x>>3]=+h[x>>3]-w;break}n=aB(d,r)|0;e=0;j=0.0;i=0.0;while(1){if(!n)break;k=c[n>>2]&3;f=(k|0)==2?n:n+-48|0;g=c[f+40>>2]|0;k=(k|0)==3?n:n+48|0;do if((g|0)!=(c[k+40>>2]|0)?(y=c[(c[((g|0)==(r|0)?k:f)+40>>2]|0)+16>>2]|0,(a[y+119>>0]|0)!=0):0)if(!e){x=c[y+132>>2]|0;e=1;j=+h[x>>3];i=+h[x+8>>3];break}else{p=+(e|0);x=c[y+132>>2]|0;e=e+1|0;s=+(e|0);j=(+h[x>>3]+j*p)/s;i=(+h[x+8>>3]+i*p)/s;break}while(0);n=bB(d,n,r)|0}do if((e|0)<=1)if((e|0)==1){f=c[q>>2]|0;e=c[f+132>>2]|0;h[e>>3]=j*.98+l;i=i*.9+m;break}else{i=+B5()*6.283185307179586;s=+B5()*.9;p=s*+h[23248]*+E(+i);f=c[q>>2]|0;e=c[f+132>>2]|0;h[e>>3]=p;i=+h[23249]*s*+F(+i);break}else{f=c[q>>2]|0;e=c[f+132>>2]|0;h[e>>3]=j}while(0);h[e+8>>3]=i;a[f+119>>0]=1}while(0);r=kC(d,r)|0}}while(0);h[b>>3]=t;h[b+8>>3]=w;return}function jp(a){a=a|0;var b=0;b=c[46478]|0;return +(+h[23243]*+(b-a|0)/+(b|0))}function kp(a,b,d,e){a=a|0;b=+b;d=d|0;e=e|0;var f=0,g=0,i=0,j=0.0;if(!(b<=0.0)){Qv(e);f=jC(a)|0;while(1){if(!f)break;i=c[f+16>>2]|0;g=(c[i+112>>2]|0)+16|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;c[g+12>>2]=0;i=c[i+132>>2]|0;j=+h[23245];g=~~+A(+(+h[i>>3]/j));Tv(e,g,~~+A(+(+h[i+8>>3]/j)),f);f=kC(a,f)|0}g=jC(a)|0;while(1){if(!g)break;f=XA(a,g)|0;while(1){if(!f)break;i=c[((c[f>>2]&3|0)==2?f:f+-48|0)+40>>2]|0;if((g|0)!=(i|0))op(g,i,f);f=ZA(a,f)|0}g=kC(a,g)|0}Vv(e,23);pp(a,b,d)}return}function lp(a,b,d){a=a|0;b=+b;d=d|0;var e=0,f=0,g=0;if(!(b<=0.0)){e=jC(a)|0;while(1){if(!e)break;g=(c[(c[e+16>>2]|0)+112>>2]|0)+16|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;c[g+12>>2]=0;e=kC(a,e)|0}g=jC(a)|0;while(1){if(!g)break;else e=g;while(1){e=kC(a,e)|0;if(!e)break;np(g,e)}e=XA(a,g)|0;while(1){if(!e)break;f=c[((c[e>>2]&3|0)==2?e:e+-48|0)+40>>2]|0;if((g|0)!=(f|0))op(g,f,e);e=ZA(a,e)|0}g=kC(a,g)|0}pp(a,b,d)}return}function mp(){h[23243]=-1.0;return}function np(a,b){a=a|0;b=b|0;var d=0.0,e=0.0,f=0,g=0;g=c[(c[b+16>>2]|0)+132>>2]|0;f=c[(c[a+16>>2]|0)+132>>2]|0;d=+h[g>>3]-+h[f>>3];e=+h[g+8>>3]-+h[f+8>>3];qp(a,b,d,e,e*e+d*d);return}function op(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0.0,g=0.0,i=0.0,j=0,k=0;j=b+16|0;k=c[(c[j>>2]|0)+132>>2]|0;a=a+16|0;b=c[(c[a>>2]|0)+132>>2]|0;e=+h[k>>3]-+h[b>>3];f=+h[k+8>>3]-+h[b+8>>3];g=e;i=f;e=e*e;f=f*f;while(1){e=e+f;if(!(e==0.0))break;e=+(5-((x5()|0)%10|0)|0);f=+(5-((x5()|0)%10|0)|0);g=e;i=f;e=e*e;f=f*f}f=+C(+e);b=c[d+16>>2]|0;e=+h[b+128>>3];if(!(c[46475]|0))e=e*f/+h[b+136>>3];else e=(f-+h[b+136>>3])*e/f;g=e*g;k=c[(c[j>>2]|0)+112>>2]|0;j=k+16|0;h[j>>3]=+h[j>>3]-g;i=e*i;k=k+24|0;h[k>>3]=+h[k>>3]-i;k=c[(c[a>>2]|0)+112>>2]|0;j=k+16|0;h[j>>3]=+h[j>>3]+g;k=k+24|0;h[k>>3]=+h[k>>3]+i;return}function pp(b,d,e){b=b|0;d=+d;e=e|0;var f=0.0,g=0.0,i=0.0,j=0.0,k=0,l=0,m=0,n=0,o=0.0;o=d*d;n=(e|0)==0;m=jC(b)|0;while(1){if(!m)break;l=c[m+16>>2]|0;if(!(a[l+119>>0]&2)){k=c[l+112>>2]|0;f=+h[k+16>>3];i=+h[k+24>>3];g=i*i+f*f;if(g>2]|0;j=+h[e>>3]+f;f=+h[e+8>>3]+i}else{g=d/+C(+g);e=c[l+132>>2]|0;j=+h[e>>3]+g*f;f=+h[e+8>>3]+g*i}do if(!n){g=+C(+(f*f/+h[23251]+j*j/+h[23250]));if((c[k+8>>2]|0)==0?(c[l+212>>2]|0)==0:0){h[e>>3]=j/g;f=f/g;break}if(!(g>=1.0)){h[e>>3]=j;break}else{h[e>>3]=j*.95/g;f=f*.95/g;break}}else h[e>>3]=j;while(0);h[e+8>>3]=f}m=kC(b,m)|0}return}function qp(a,b,d,e,f){a=a|0;b=b|0;d=+d;e=+e;f=+f;var g=0.0,i=0,j=0;g=d;d=f;while(1){if(!(d==0.0))break;d=+(5-((x5()|0)%10|0)|0);e=+(5-((x5()|0)%10|0)|0);g=d;d=e*e+d*d}if(!(c[46475]|0))d=+h[23247]/d;else{f=+C(+d);d=+h[23247]/(f*d)}j=c[a+16>>2]|0;a=c[j+112>>2]|0;if(((c[a+8>>2]|0)==0?(c[j+212>>2]|0)==0:0)?(i=c[b+16>>2]|0,(c[(c[i+112>>2]|0)+8>>2]|0)==0):0)d=(c[i+212>>2]|0)==0?d*10.0:d;f=d*g;j=c[(c[b+16>>2]|0)+112>>2]|0;b=j+16|0;h[b>>3]=+h[b>>3]+f;g=d*e;j=j+24|0;h[j>>3]=+h[j>>3]+g;j=a+16|0;h[j>>3]=+h[j>>3]-f;j=a+24|0;h[j>>3]=+h[j>>3]-g;return}function rp(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;f=c[b+8>>2]|0;g=c[b>>2]|0;e=c[b+4>>2]|0;b=f;while(1){if(!b)break;a=f;while(1){if(!a)break;if((b|0)!=(a|0))np(c[b>>2]|0,c[a>>2]|0);a=c[a+4>>2]|0}b=c[b+4>>2]|0}h=g+-1|0;a=e+-1|0;sp(d,h,a,f);sp(d,h,e,f);b=e+1|0;sp(d,h,b,f);sp(d,g,a,f);sp(d,g,b,f);g=g+1|0;sp(d,g,a,f);sp(d,g,e,f);sp(d,g,b,f);return 0}function sp(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,g=0.0,i=0.0,j=0,k=0,l=0,m=0;a=Wv(a,b,d)|0;if((e|0)!=0&(a|0)!=0){k=a+8|0;do{d=c[e>>2]|0;j=d+16|0;a=k;while(1){a=c[a>>2]|0;if(!a)break;b=c[a>>2]|0;m=c[(c[b+16>>2]|0)+132>>2]|0;l=c[(c[j>>2]|0)+132>>2]|0;f=+h[m>>3]-+h[l>>3];g=+h[m+8>>3]-+h[l+8>>3];i=g*g+f*f;if(i<+h[23246])qp(d,b,f,g,i);a=a+4|0}e=c[e+4>>2]|0}while((e|0)!=0)}return}function tp(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;h=l;l=l+16|0;g=h;e=QA(b,92507)|0;if(0)U4(91116,8,1,c[15712]|0)|0;if(!((e|0)!=0?(a[e>>0]|0)!=0:0))e=91125;f=R2(e,58)|0;do if(!f)f=0;else{if((f|0)!=(e|0)?((a[e>>0]|0)+-48|0)>>>0>=10:0){f=0;break}i=q5(e)|0;e=f+1|0;f=(i|0)>0?i:0}while(0);if(0){i=c[15712]|0;c[g>>2]=f;c[g+4>>2]=e;w4(i,91133,g)|0}if(!((f|0)!=0?!(up(b,d,f)|0):0))nr(b,e)|0;l=h;return}function up(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,i=0,j=0,k=0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0,s=0,t=0;t=l;l=l+64|0;r=t;j=t+40|0;s=tB(b)|0;k=uB(b)|0;lr(j,b);c[46842]=c[j>>2];c[46843]=c[j+4>>2];c[46844]=c[j+8>>2];if(a[187376]|0){g[46842]=+g[46842]*.013888888888888888;g[46843]=+g[46843]*.013888888888888888}f=vp(b)|0;a:do if(!f)f=0;else{j=r;i=j+40|0;do{c[j>>2]=c[d>>2];j=j+4|0;d=d+4|0}while((j|0)<(i|0));j=r+16|0;q=+h[j>>3];o=+(k|0)*2.0;p=1.0/+(O(s+-1|0,s)|0);i=0;n=q;while(1){if(!((f|0)!=0&(i|0)<(e|0)))break a;wp(s,r);m=+h[23253]*+h[170];h[23254]=m;h[23255]=o*m*p;d=0;while(1){if((d|0)>=(c[46512]|0))break;m=+xp(d);if(m<=0.0)break;f=yp(b,m)|0;if(!f){f=0;break}else d=d+1|0}m=n+q;h[j>>3]=m;i=i+1|0;n=m}}while(0);l=t;return f|0}function vp(a){a=a|0;var b=0,c=0,d=0,e=0;b=0;e=jC(a)|0;while(1){if(!e)break;else d=e;while(1){c=kC(a,d)|0;if(!c)break;d=c;b=(Bp(e,c)|0)+b|0}e=kC(a,e)|0}return b|0}function wp(a,b){a=a|0;b=b|0;var d=0.0,e=0.0,f=0.0;e=+h[b+16>>3];h[171]=e;c[344]=c[b>>2];f=+h[b+8>>3];h[23257]=f;c[46512]=c[b+32>>2];d=+h[b+24>>3];if(d>0.0)h[170]=d;h[23253]=e*e;if(f==0.0)h[23257]=+C(+(+(a|0)))*.2*e;return}function xp(a){a=a|0;var b=0;b=c[344]|0;return +(+h[23257]*+(b-a|0)/+(b|0))}function yp(b,d){b=b|0;d=+d;var e=0,f=0,g=0,i=0.0,j=0,k=0.0,l=0.0,m=0.0;e=jC(b)|0;while(1){if(!e)break;j=(c[(c[e+16>>2]|0)+112>>2]|0)+16|0;c[j>>2]=0;c[j+4>>2]=0;c[j+8>>2]=0;c[j+12>>2]=0;e=kC(b,e)|0}e=0;j=jC(b)|0;while(1){if(!j)break;else g=j;while(1){f=kC(b,g)|0;if(!f)break;g=f;e=(zp(j,f)|0)+e|0}f=XA(b,j)|0;while(1){if(!f)break;Ap(j,c[((c[f>>2]&3|0)==2?f:f+-48|0)+40>>2]|0);f=ZA(b,f)|0}j=kC(b,j)|0}a:do if(!e)e=0;else{m=d*d;g=jC(b)|0;while(1){if(!g)break a;f=c[g+16>>2]|0;if((a[f+119>>0]|0)!=3){j=c[f+112>>2]|0;k=+h[j+16>>3];i=+h[j+24>>3];l=i*i+k*k;if(l>2]|0;h[f>>3]=+h[f>>3]+k}else{l=+C(+l);f=c[f+132>>2]|0;h[f>>3]=+h[f>>3]+k*d/l;i=i*d/l}j=f+8|0;h[j>>3]=+h[j>>3]+i}g=kC(b,g)|0}}while(0);return e|0}function zp(a,b){a=a|0;b=b|0;var d=0.0,e=0.0,f=0,g=0;g=c[(c[b+16>>2]|0)+132>>2]|0;f=c[(c[a+16>>2]|0)+132>>2]|0;d=+h[g>>3]-+h[f>>3];e=+h[g+8>>3]-+h[f+8>>3];return Dp(a,b,d,e,e*e+d*d)|0}function Ap(a,b){a=a|0;b=b|0;var d=0.0,e=0.0,f=0,g=0.0,i=0,j=0.0,k=0.0,l=0,m=0;if(!(Bp(a,b)|0)){i=c[b+16>>2]|0;m=c[i+132>>2]|0;f=c[a+16>>2]|0;l=c[f+132>>2]|0;e=+h[m>>3]-+h[l>>3];d=+h[m+8>>3]-+h[l+8>>3];g=+C(+(d*d+e*e));j=+Cp(a);j=+Cp(b)+j;k=g-j;g=k*k/((+h[171]+j)*g);e=g*e;b=c[i+112>>2]|0;a=b+16|0;h[a>>3]=+h[a>>3]-e;d=g*d;b=b+24|0;h[b>>3]=+h[b>>3]-d;b=c[f+112>>2]|0;a=b+16|0;h[a>>3]=+h[a>>3]+e;b=b+24|0;h[b>>3]=+h[b>>3]+d}return}function Bp(b,d){b=b|0;d=d|0;var e=0.0,f=0.0,i=0.0,j=0.0,k=0,l=0;k=c[d+16>>2]|0;l=c[k+132>>2]|0;d=c[b+16>>2]|0;b=c[d+132>>2]|0;i=+h[l>>3]-+h[b>>3];j=+h[l+8>>3]-+h[b+8>>3];j=j<0.0?-j:j;b=(a[187376]|0)==0;e=+h[d+32>>3];if(b){f=+g[46842];e=e*.5*f;f=+h[k+32>>3]*.5*f}else{f=+g[46842];e=e*.5+f;f=+h[k+32>>3]*.5+f}if(!((i<0.0?-i:i)<=f+e))d=0;else{e=+h[d+40>>3];if(b){i=+g[46843];f=e*.5*i;e=+h[k+40>>3]*.5*i}else{i=+g[46843];f=e*.5+i;e=+h[k+40>>3]*.5+i}d=j<=e+f&1}return d|0}function Cp(b){b=b|0;var d=0.0,e=0.0;b=c[b+16>>2]|0;d=+h[b+32>>3];if(!(a[187376]|0)){e=d*.5*+g[46842];d=+h[b+40>>3]*.5*+g[46843]}else{e=d*.5+ +g[46842];d=+h[b+40>>3]*.5+ +g[46843]}return +(+C(+(d*d+e*e)))}function Dp(a,b,d,e,f){a=a|0;b=b|0;d=+d;e=+e;f=+f;var g=0,i=0;while(1){if(!(f==0.0))break;f=+(5-((x5()|0)%10|0)|0);e=+(5-((x5()|0)%10|0)|0);d=f;f=e*e+f*f}g=Bp(a,b)|0;f=((g|0)==0?+h[23255]:+h[23254])/f;d=f*d;b=c[(c[b+16>>2]|0)+112>>2]|0;i=b+16|0;h[i>>3]=+h[i>>3]+d;f=f*e;b=b+24|0;h[b>>3]=+h[b>>3]+f;b=c[(c[a+16>>2]|0)+112>>2]|0;a=b+16|0;h[a>>3]=+h[a>>3]-d;b=b+24|0;h[b>>3]=+h[b>>3]-f;return g|0}function Ep(a){a=a|0;oQ(a,2);b[(c[a+16>>2]|0)+176>>1]=2;c[47137]=2;Fp(a);return}function Fp(a){a=a|0;var b=0,d=0,e=0,f=0;e=JK((tB(a)|0)<<2)|0;b=JK(((tB(a)|0)<<2)+4|0)|0;f=a+16|0;c[(c[f>>2]|0)+152>>2]=b;b=jC(a)|0;d=0;while(1){if(!b)break;Zl(b);c[(c[b+16>>2]|0)+112>>2]=e+(d<<2);c[(c[(c[f>>2]|0)+152>>2]|0)+(d<<2)>>2]=b;b=kC(a,b)|0;d=d+1|0}d=jC(a)|0;while(1){if(!d)break;b=XA(a,d)|0;while(1){if(!b)break;Gp(b);b=ZA(a,b)|0}d=kC(a,d)|0}return}function Gp(a){a=a|0;var b=0.0;TC(a,137460,176,1)|0;tP(a)|0;b=+_O(a,c[47174]|0,1.0,0.0);h[(c[a+16>>2]|0)+128>>3]=b;return}function Hp(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+16|0;m=n+4|0;k=n;a[m>>0]=a[18596]|0;a[m+1>>0]=a[18597]|0;a[m+2>>0]=a[18598]|0;a[m+3>>0]=a[18599]|0;m=oB(91156,m,0)|0;TC(m,91164,280,1)|0;c[(c[b+16>>2]|0)+140>>2]=m;e=jC(b)|0;while(1){if(!e)break;f=e+16|0;if(!(c[c[(c[f>>2]|0)+112>>2]>>2]|0)){j=Ip(m,KB(e)|0,e)|0;c[c[(c[f>>2]|0)+112>>2]>>2]=j}e=kC(b,e)|0}f=jC(b)|0;while(1){if(!f)break;e=XA(b,f)|0;while(1){if(!e)break;h=c[e>>2]&3;g=c[c[(c[(c[((h|0)==3?e:e+48|0)+40>>2]|0)+16>>2]|0)+112>>2]>>2]|0;h=c[c[(c[(c[((h|0)==2?e:e+-48|0)+40>>2]|0)+16>>2]|0)+112>>2]>>2]|0;if((g|0)!=(h|0))TC(iB(m,g,h,0,1)|0,137460,176,1)|0;e=ZA(b,e)|0}f=kC(b,f)|0}j=DG(m,k,0)|0;f=0;while(1){if((f|0)>=(c[k>>2]|0))break;h=c[j+(f<<2)>>2]|0;e=jC(h)|0;while(1){if(!e)break;g=XA(b,c[c[(c[e+16>>2]|0)+112>>2]>>2]|0)|0;while(1){if(!g)break;i=c[c[(c[(c[((c[g>>2]&3|0)==2?g:g+-48|0)+40>>2]|0)+16>>2]|0)+112>>2]>>2]|0;if((e|0)!=(i|0)){i=iB(m,e,i,0,1)|0;TC(i,137460,176,1)|0;mB(h,i,1)|0}g=ZA(b,g)|0}e=kC(h,e)|0}f=f+1|0}e=jC(m)|0;while(1){if(!e)break;f=XA(m,e)|0;while(1){if(!f)break;b=JK(8)|0;c[(c[f+16>>2]|0)+120>>2]=b;f=ZA(m,f)|0}e=kC(m,e)|0}c[d>>2]=c[k>>2];l=n;return j|0}function Ip(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;b=tC(a,b,1)|0;TC(b,137447,304,1)|0;e=JK(40)|0;a=b+16|0;c[(c[a>>2]|0)+112>>2]=e;e=JK(c[47137]<<3)|0;a=c[a>>2]|0;c[a+132>>2]=e;e=c[d+16>>2]|0;h[a+88>>3]=+h[e+88>>3];h[a+96>>3]=+h[e+96>>3];h[a+80>>3]=+h[e+80>>3];c[c[a+112>>2]>>2]=d;return b|0}function Jp(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0;h=l;l=l+48|0;b=h+32|0;e=h;if(tB(a)|0){g=Hp(a,b)|0;f=c[b>>2]|0;b=c[g>>2]|0;if((f|0)==1){bx(b,a);Kp(c[g>>2]|0);or(a)|0}else{d=c[b+60>>2]|0;kH(a,2,8,e)|0;b=0;while(1){if((b|0)>=(f|0))break;i=c[g+(b<<2)>>2]|0;bx(i,a);or(i)|0;b=b+1|0}jH(f,g,d,e)|0;b=0;while(1){if((b|0)>=(f|0))break;Kp(c[g+(b<<2)>>2]|0);b=b+1|0}}U1(g)}l=h;return}function Kp(a){a=a|0;var b=0,d=0,e=0;b=jC(a)|0;while(1){if(!b)break;d=c[b+16>>2]|0;e=c[d+132>>2]|0;d=c[(c[(c[c[d+112>>2]>>2]|0)+16>>2]|0)+132>>2]|0;h[d>>3]=+h[e>>3];h[d+8>>3]=+h[e+8>>3];b=kC(a,b)|0}return}function Lp(a){a=a|0;if(tB(a)|0){Ep(a);Jp(a);U1(c[(c[(jC(a)|0)+16>>2]|0)+112>>2]|0);fn(a);tM(a)}return}function Mp(a){a=a|0;var b=0,d=0,e=0;b=jC(a)|0;if(b|0){e=a+16|0;Np(c[(c[e>>2]|0)+140>>2]|0);while(1){if(!b)break;d=XA(a,b)|0;while(1){if(!d)break;YP(d);d=ZA(a,d)|0}WP(b);b=kC(a,b)|0}U1(c[(c[e>>2]|0)+152>>2]|0);if((yC(a)|0)!=(a|0))ZC(a,0,137483)}return}function Np(a){a=a|0;var b=0,d=0;d=jC(a)|0;while(1){if(!d)break;b=XA(a,d)|0;while(1){if(!b)break;U1(c[(c[b+16>>2]|0)+120>>2]|0);b=ZA(a,b)|0}b=d+16|0;U1(c[(c[b>>2]|0)+112>>2]|0);U1(c[(c[b>>2]|0)+132>>2]|0);d=kC(a,d)|0}sB(a)|0;return}function Op(b){b=b|0;var d=0,e=0.0,f=0.0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=l;l=l+112|0;m=s+40|0;n=s+16|0;r=s+100|0;o=s;j=s+88|0;p=s+56|0;Pp(b);i=(c[47137]|0)==2;d=i&1;if(tB(b)|0){q=Yp()|0;Qp(b,q);Nq(b,n,0)|0;if(i&(c[n>>2]|0)==18){c[q+124>>2]=c[n+8>>2];h[q+144>>3]=+h[n+16>>3];lr(j,b);if(!(a[j+8>>0]|0)){f=.05555555555555555;e=.05555555555555555}else{f=+g[j+4>>2]*.013888888888888888;e=+g[j>>2]*.013888888888888888}h[o>>3]=e;h[o+8>>3]=f;d=0}else c[q+124>>2]=-1;if(0)_p(q);k=DG(b,r,0)|0;if((c[r>>2]|0)==1){c[m>>2]=c[o>>2];c[m+4>>2]=c[o+4>>2];c[m+8>>2]=c[o+8>>2];c[m+12>>2]=c[o+12>>2];Rp(b,q,m);if(d|0)Qq(b,n)|0;fn(b);d=0}else{kH(b,2,8,p)|0;c[p+12>>2]=1;j=(d|0)==0;i=0;while(1){d=c[r>>2]|0;if((i|0)>=(d|0))break;d=c[k+(i<<2)>>2]|0;KG(d)|0;c[m>>2]=c[o>>2];c[m+4>>2]=c[o+4>>2];c[m+8>>2]=c[o+8>>2];c[m+12>>2]=c[o+12>>2];Rp(d,q,m);if(!j)Qq(d,n)|0;oQ(d,2);fn(d);i=i+1|0}jH(d,k,b,p)|0;d=0}while(1){if((d|0)>=(c[r>>2]|0))break;wC(b,c[k+(d<<2)>>2]|0)|0;d=d+1|0}U1(k);Zp(q)}tM(b);l=s;return}function Pp(a){a=a|0;var d=0,f=0;oQ(a,2);d=ZO(a,GA(a,0,91368,0)|0,2,2)|0;f=(ZO(a,GA(a,0,91374,0)|0,d,2)|0)&65535;b[(c[(yC(a)|0)+16>>2]|0)+176>>1]=f;if((e[(c[(yC(a)|0)+16>>2]|0)+176>>1]|0)<10)f=b[(c[(yC(a)|0)+16>>2]|0)+176>>1]|0;else f=10;b[(c[(yC(a)|0)+16>>2]|0)+176>>1]=f;f=f&65535;c[47137]=f;b[(c[(yC(a)|0)+16>>2]|0)+178>>1]=(d|0)<(f|0)?d:f;Vp(a);return}function Qp(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;g=l;l=l+16|0;f=g+8|0;d=g+12|0;e=b+108|0;c[d>>2]=c[e>>2];if((mm(a,2,d)|0)!=2)gA(0,91169,g)|0;c[e>>2]=c[d>>2];h[b+24>>3]=+_O(a,GA(a,0,91202,0)|0,-1.0,0.0);h[b>>3]=-+_O(a,GA(a,0,91204,0)|0,1.0001234,0.0);c[b+40>>2]=ZO(a,GA(a,0,91219,0)|0,2147483647,0)|0;c[b+120>>2]=Tp(a,GA(a,0,91226,0)|0)|0;c[b+132>>2]=Up(a,GA(a,0,91236,0)|0)|0;c[b+136>>2]=0;c[b+112>>2]=(eP(QA(a,91245)|0,0)|0)&255;c[b+128>>2]=(eP(QA(a,91254)|0,1)|0)&255;h[b+152>>3]=+_O(a,GA(a,0,91269,0)|0,0.0,-1797693134862315708145274.0e284);d=ZO(a,GA(a,0,91278,0)|0,0,0)|0;a=b+160|0;c[a>>2]=d;if((d|0)>4){c[f>>2]=d;gA(0,91291,f)|0;c[a>>2]=0}l=g;return}function Rp(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;q=l;l=l+48|0;f=q;n=q+32|0;j=q+28|0;g=q+24|0;p=q+20|0;o=q+16|0;c[g>>2]=0;c[p>>2]=0;c[o>>2]=0;i=b+136|0;e=c[47137]|0;if((c[i>>2]|0)==1)m=Kq(a,e,o)|0;else m=Kq(a,e,0)|0;do if((c[b+124>>2]|0)>-1)if((c[b+160>>2]|0)>0){c[f>>2]=c[d>>2];c[f+4>>2]=c[d+4>>2];c[f+8>>2]=c[d+8>>2];c[f+12>>2]=c[d+12>>2];k=Jq(a,f,g,p)|0;break}else{c[f>>2]=c[d>>2];c[f+4>>2]=c[d+4>>2];c[f+8>>2]=c[d+8>>2];c[f+12>>2]=c[d+12>>2];k=Jq(a,f,0,0)|0;break}else k=0;while(0);e=Sp(a)|0;c[n>>2]=e;switch(c[i>>2]|0){case 1:case 0:{wq(c[47137]|0,m,c[o>>2]|0,b,0,k,e,c[g>>2]|0,c[p>>2]|0,j);break}case 5:{Iq(c[47137]|0,m,e,j);break}case 4:{e=c[o>>2]|0;if(!e)e=Qw(m)|0;else e=Aw(e,0)|0;c[o>>2]=e;Dq(c[47137]|0,m,e,n,1,200,.001,j);break}default:{}}e=jC(a)|0;while(1){if(!e)break;d=c[47137]|0;g=c[e+16>>2]|0;b=(c[n>>2]|0)+((O(c[g+120>>2]|0,d)|0)<<3)|0;g=g+132|0;f=0;while(1){if((f|0)>=(d|0))break;h[(c[g>>2]|0)+(f<<3)>>3]=+h[b+(f<<3)>>3];f=f+1|0}e=kC(a,e)|0}U1(k);U1(c[n>>2]|0);qw(m);e=c[o>>2]|0;if(e|0)qw(e);e=c[p>>2]|0;if(e|0)U1(e);l=q;return}function Sp(b){b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0;j=c[47137]|0;j=JK(O(j<<3,tB(b)|0)|0)|0;a:do if(GA(b,1,102623,0)|0){f=jC(b)|0;while(1){if(!f)break a;d=c[f+16>>2]|0;b:do if(a[d+119>>0]|0){g=c[47137]|0;i=O(g,c[d+120>>2]|0)|0;e=d+132|0;d=0;while(1){if((d|0)>=(g|0))break b;h[j+(i+d<<3)>>3]=+h[(c[e>>2]|0)+(d<<3)>>3];d=d+1|0}}while(0);f=kC(b,f)|0}}while(0);return j|0}function Tp(b,c){b=b|0;c=c|0;do if(c){b=RA(b,c)|0;c=a[b>>0]|0;if((c+-48|0)>>>0<10){b=q5(b)|0;b=(b|0)<5?b:0;break}if(b3(c)|0)if(c3(b,91330)|0)if(c3(b,91339)|0)if(c3(b,135709)|0)if(!(c3(b,91350)|0))b=3;else{b=(c3(b,91361)|0)==0;b=b?4:0}else b=0;else b=1;else b=2;else b=0}else b=0;while(0);return b|0}function Up(b,c){b=b|0;c=c|0;do if(c){b=RA(b,c)|0;c=a[b>>0]|0;if((c+-48|0)>>>0<10){b=q5(b)|0;b=b>>>0<3?b:1;break}if(b3(c)|0)if((c3(b,135709)|0)!=0?(c3(b,137308)|0)!=0:0)if(((c3(b,99730)|0)!=0?(c3(b,107652)|0)!=0:0)?(c3(b,107657)|0)!=0:0){b=(c3(b,91325)|0)==0;b=b?2:1}else b=1;else b=0;else b=1}else b=1;while(0);return b|0}function Vp(a){a=a|0;var b=0,c=0;b=jC(a)|0;while(1){if(!b)break;Zl(b);b=kC(a,b)|0}c=jC(a)|0;while(1){if(!c)break;b=XA(a,c)|0;while(1){if(!b)break;Wp(b);b=ZA(a,b)|0}c=kC(a,c)|0}return}function Wp(a){a=a|0;TC(a,137460,176,1)|0;tP(a)|0;return}function Xp(a){a=a|0;var b=0,c=0;c=jC(a)|0;while(1){if(!c)break;b=XA(a,c)|0;while(1){if(!b)break;YP(b);b=ZA(a,b)|0}WP(c);c=kC(a,c)|0}return}function Yp(){var a=0,b=0;a=KK(168)|0;h[a>>3]=-1.0001234;h[a+8>>3]=1.0;c[a+16>>2]=1;h[a+24>>3]=-1.0;h[a+32>>3]=.2;c[a+40>>2]=0;c[a+44>>2]=4;c[a+48>>2]=1;c[a+52>>2]=45;c[a+56>>2]=10;h[a+64>>3]=.6;h[a+72>>3]=.001;c[a+80>>2]=500;h[a+88>>3]=.9;h[a+96>>3]=.1;c[a+104>>2]=1;c[a+108>>2]=123;b=a+112|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;c[b+12>>2]=0;c[a+128>>2]=1;c[a+132>>2]=3;c[a+136>>2]=0;h[a+144>>3]=-4.0;h[a+152>>3]=0.0;c[a+160>>2]=0;return a|0}function Zp(a){a=a|0;U1(a);return}function _p(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,i=0.0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;b=l;l=l+176|0;d=b+160|0;f=b+152|0;g=b+128|0;k=b+112|0;j=b+88|0;m=b+64|0;n=b+56|0;o=b+40|0;q=b+24|0;p=b+16|0;r=b;e=c[15712]|0;U4(91378,27,1,e)|0;i=+h[a+8>>3];h[r>>3]=+h[a>>3];h[r+8>>3]=i;w4(e,91406,r)|0;r=c[a+108>>2]|0;c[p>>2]=c[a+16>>2];c[p+4>>2]=r;w4(e,91457,p)|0;i=+h[a+32>>3];h[q>>3]=+h[a+24>>3];h[q+8>>3]=i;w4(e,91484,q)|0;q=c[a+44>>2]|0;p=c[a+48>>2]|0;c[o>>2]=c[a+40>>2];c[o+4>>2]=q;c[o+8>>2]=p;w4(e,91507,o)|0;o=c[a+56>>2]|0;c[n>>2]=c[a+52>>2];c[n+4>>2]=o;w4(e,91558,n)|0;i=+h[a+72>>3];n=c[a+80>>2]|0;h[m>>3]=+h[a+64>>3];h[m+8>>3]=i;c[m+16>>2]=n;w4(e,91591,m)|0;i=+h[a+96>>3];m=c[a+104>>2]|0;h[j>>3]=+h[a+88>>3];h[j+8>>3]=i;c[j+16>>2]=m;w4(e,91649,j)|0;j=c[a+116>>2]|0;i=+h[a+152>>3];c[k>>2]=c[a+112>>2];c[k+4>>2]=j;h[k+8>>3]=i;w4(e,91695,k)|0;k=c[a+124>>2]|0;j=c[a+128>>2]|0;i=+h[a+144>>3];c[g>>2]=c[17804+(c[a+120>>2]<<2)>>2];c[g+4>>2]=k;c[g+8>>2]=j;h[g+16>>3]=i;w4(e,91748,g)|0;g=c[17848+(c[a+136>>2]<<2)>>2]|0;c[f>>2]=c[17832+(c[a+132>>2]<<2)>>2];c[f+4>>2]=g;w4(e,91813,f)|0;c[d>>2]=c[a+160>>2];w4(e,91843,d)|0;l=b;return}function $p(a){a=a|0;U1(a);return}function aq(a){a=a|0;var b=0;b=KK(184)|0;c[b>>2]=a;c[b+176>>2]=0;return b|0}function bq(a,b){a=a|0;b=+b;var d=0,e=0,f=0;e=c[a>>2]|0;h[a+8+(e<<3)>>3]=b;f=a+176|0;a:do switch(c[f>>2]|0){case 0:{d=c[a>>2]|0;if((d|0)==20){c[f>>2]=-1;d=19}else{c[f>>2]=1;d=(d|0)>19?20:d+1|0}c[a>>2]=d;break}case 1:{d=c[a>>2]|0;if((d|0)<20?+h[a+8+(e+-1<<3)>>3]>b:0){c[a>>2]=d+1;break a}else{c[a>>2]=d+-1;c[f>>2]=-1;break a}}default:{d=c[a>>2]|0;if((d|0)>0?+h[a+8+(e+1<<3)>>3]>b:0){c[a>>2]=d+-1;break a}else{c[a>>2]=d+1;c[f>>2]=1;break a}}}while(0);return}function cq(a){a=a|0;return c[a>>2]|0}function dq(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0.0,g=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0.0;o=c[a+20>>2]|0;p=c[a+24>>2]|0;m=c[a>>2]|0;n=c[o+(m<<2)>>2]|0;if(!n)e=1.0;else{a=0;e=0.0;a:while(1){if((a|0)>=(m|0))break;j=a+1|0;k=c[o+(j<<2)>>2]|0;l=O(a,b)|0;i=c[o+(a<<2)>>2]|0;while(1){if((i|0)>=(k|0)){a=j;continue a}g=p+(i<<2)|0;a=0;f=0.0;while(1){if((a|0)>=(b|0))break;q=+h[d+(a+l<<3)>>3]-+h[d+((O(c[g>>2]|0,b)|0)<<3)>>3];a=a+1|0;f=q*q+f}i=i+1|0;e=+C(+f)+e}}e=e/+(n|0)}return +e}function eq(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=b+10|0;if((c[d>>2]|0)<=(b|0)){c[d>>2]=e;c[a>>2]=MK(c[a>>2]|0,e<<3)|0}return}function fq(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=b+10|0;if((c[d>>2]|0)<=(b|0)){c[d>>2]=e;c[a>>2]=MK(c[a>>2]|0,e<<2)|0}return}function gq(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0.0,f=0.0,g=0.0,i=0,j=0,k=0;k=l;l=l+16|0;j=k;i=O(d,b)|0;b=O(c,b)|0;d=0;while(1){if((d|0)==2)break;h[j+(d<<3)>>3]=+h[a+(d+i<<3)>>3]-+h[a+(d+b<<3)>>3];d=d+1|0}g=+h[j>>3];f=+h[j+8>>3];do if(!((g>=0.0?g:-g)<=(f>=0.0?f:-f)*1.0e-05)){e=+J(+(f/g));if(g>0.0){if(!(f<0.0))break;e=e+6.283185307179586;break}else{if(!(g<0.0))break;e=e+3.141592653589793;break}}else e=f>0.0?1.5707963267948966:4.71238898038469;while(0);l=k;return +e}function hq(a,b){a=a|0;b=b|0;var c=0.0,d=0.0;d=+h[a>>3];c=+h[b>>3];return (d>c?1:(d>31)|0}function iq(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var i=0,j=0.0,k=0,m=0,n=0.0,o=0,p=0.0,q=0.0,r=0,s=0,t=0,u=0,v=0.0,w=0,x=0,y=0,z=0.0,A=0.0,B=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0.0,N=0,P=0,Q=0,R=0.0,S=0,T=0.0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0.0;_=l;l=l+80|0;Z=_+32|0;Y=_;p=+h[d>>3];m=d+24|0;n=+h[m>>3];o=d+32|0;j=+h[o>>3];R=+h[d+72>>3];S=c[d+80>>2]|0;T=+h[d+88>>3];q=+h[d+96>>3];U=c[d+104>>2]|0;V=d+56|0;i=c[V>>2]|0;do if(!((b|0)==0|(S|0)<1)?(W=c[b+4>>2]|0,!((a|0)<1|(W|0)<1)):0){Q=c[b>>2]|0;X=aq(i)|0;c[g>>2]=0;if((Q|0)!=(W|0)){c[g>>2]=-100;$p(X);c[V>>2]=i;break}N=vw(b,1)|0;P=c[N+20>>2]|0;Q=c[N+24>>2]|0;a:do if(c[d+16>>2]|0){w5(c[d+108>>2]|0);k=O(W,a)|0;i=0;while(1){if((i|0)>=(k|0))break a;h[f+(i<<3)>>3]=+Sw();i=i+1|0}}while(0);if(n<0.0){n=+dq(N,a,f);h[m>>3]=n}if(j<0.0){h[o>>3]=.2;j=.2}if(p>=0.0){h[d>>3]=-1.0;p=-1.0}M=+D(+n,+(1.0-p));A=+D(+j,+((2.0-p)*.3333333333333333))/n;B=O(W,a<<3)|0;E=KK(B)|0;F=KK(B)|0;G=d+116|0;H=d+64|0;I=c[15712]|0;J=N+8|0;K=Y+8|0;L=Y+16|0;y=0;z=0.0;v=q;while(1){W6(E|0,f|0,B|0)|0;w=cq(X)|0;x=hw(a,W,w,f,(c[G>>2]|0)==0?0:e)|0;cw(x,F,f,+h[H>>3],p,M,Y,g);m=0;b:while(1){if((m|0)>=(W|0)){q=0.0;k=0;break}o=O(m,a)|0;r=F+(o<<3)|0;s=m+1|0;t=P+(s<<2)|0;k=c[P+(m<<2)>>2]|0;while(1){if((k|0)>=(c[t>>2]|0)){m=s;continue b}u=Q+(k<<2)|0;i=c[u>>2]|0;c:do if((i|0)!=(m|0)){j=+_w(f,a,m,i)*A;i=0;while(1){if((i|0)>=(a|0))break c;q=j*(+h[f+(i+o<<3)>>3]-+h[f+((O(c[u>>2]|0,a)|0)+i<<3)>>3]);$=r+(i<<3)|0;h[$>>3]=+h[$>>3]-q;i=i+1|0}}while(0);k=k+1|0}}while(1){if((k|0)>=(W|0))break;m=O(k,a)|0;o=F+(m<<3)|0;j=0.0;i=0;while(1){if((i|0)>=(a|0))break;aa=+h[o+(i<<3)>>3];j=aa*aa+j;i=i+1|0}j=+C(+j);q=j+q;d:do if(j>0.0){j=1.0/j;i=0;while(1){if((i|0)>=(a|0)){i=0;break d}$=o+(i<<3)|0;h[$>>3]=+h[$>>3]*j;i=i+1|0}}else i=0;while(0);while(1){if((i|0)>=(a|0))break;$=f+(i+m<<3)|0;h[$>>3]=+h[$>>3]+ +h[o+(i<<3)>>3]*v;i=i+1|0}k=k+1|0}y=y+1|0;if(!x){if(0){$=c[J>>2]|0;c[Z>>2]=y;h[Z+8>>3]=v;h[Z+16>>3]=q;c[Z+24>>2]=$;h[Z+32>>3]=n;w4(I,92099,Z)|0}}else{ow(x);bq(X,+h[K>>3]*.85+ +h[Y>>3]+ +h[L>>3]*3.3)}v=+jq(U,v,q,z,T);if(!((y|0)<(S|0)&v>R))break;else z=q}if(c[d+112>>2]|0)kq(a,N,f);$p(X);c[V>>2]=w;U1(E);if((N|0)!=(b|0))qw(N);U1(F)}while(0);l=_;return}function jq(a,b,c,d,e){a=a|0;b=+b;c=+c;d=+d;e=+e;do if(a){if(c>=d){b=e*b;break}if(!(d*.95>2]|0;C=c[b+20>>2]|0;t=c[b+24>>2]|0;c[v>>2]=10;c[A>>2]=10;u=KK(B<<2)|0;f=KK(80)|0;c[y>>2]=f;e=KK(40)|0;c[z>>2]=e;b=0;while(1){if((b|0)>=(B|0)){n=0;r=f;k=e;o=e;m=f;break}c[u+(b<<2)>>2]=0;b=b+1|0}while(1){if((n|0)>=(B|0))break;b=c[C+(n<<2)>>2]|0;a:do if((((c[C+(n+1<<2)>>2]|0)-b|0)==1?(c[u+(n<<2)>>2]|0)==0:0)?(w=c[t+(b<<2)>>2]|0,x=u+(w<<2)|0,(c[x>>2]|0)==0):0){c[x>>2]=1;q=C+(w+1<<2)|0;n=0;s=0;g=0.0;p=c[C+(w<<2)>>2]|0;k=o;b=r;while(1){if((p|0)>=(c[q>>2]|0))break;e=t+(p<<2)|0;f=c[e>>2]|0;if(((c[C+(f+1<<2)>>2]|0)-(c[C+(f<<2)>>2]|0)|0)==1){c[u+(f<<2)>>2]=1;fq(z,s,v);g=+_w(d,a,w,c[e>>2]|0)+g;k=c[z>>2]|0;c[k+(s<<2)>>2]=c[e>>2];e=n;f=s+1|0}else{eq(y,n,A);j=+gq(d,a,w,c[e>>2]|0);b=c[y>>2]|0;h[b+(n<<3)>>3]=j;e=n+1|0;f=s;m=b}n=e;s=f;p=p+1|0}j=g/+(s|0);if((n|0)>0){lq(n,m);b=m}g=(s|0)>1?6.283185307179586/+(s+-1|0):0.0;e=0;i=0.0;while(1){if((e|0)>=(s|0)){o=k;f=k;break a}mq(d,a,j,i,w,c[k+(e<<2)>>2]|0);e=e+1|0;i=i+g}}else{e=n;f=k;b=r}while(0);n=e+1|0;r=b;k=f}U1(u);U1(r);U1(k);l=D;return}function lq(a,b){a=a|0;b=b|0;o4(b,a,8,68);return}function mq(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=f|0;var g=0.0;g=+E(+d)*c;e=O(e,b)|0;f=O(f,b)|0;h[a+(f<<3)>>3]=g+ +h[a+(e<<3)>>3];d=+F(+d)*c;h[a+(f+1<<3)>>3]=d+ +h[a+(e+1<<3)>>3];return}function nq(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var i=0,j=0,k=0.0,l=0.0,m=0,n=0,o=0.0,p=0,q=0,r=0.0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0.0,A=0,B=0.0,E=0.0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,P=0.0,Q=0,R=0.0,S=0,T=0,U=0,V=0,W=0.0;o=+h[d>>3];m=d+24|0;l=+h[m>>3];n=d+32|0;k=+h[n>>3];P=+h[d+72>>3];Q=c[d+80>>2]|0;R=+h[d+88>>3];r=+h[d+96>>3];S=c[d+104>>2]|0;i=c[d+56>>2]|0;U4(92198,32,1,c[15712]|0)|0;if(!((b|0)==0|(Q|0)<1)?(T=c[b>>2]|0,j=c[b+4>>2]|0,!((a|0)<1|(j|0)<1)):0){p=a<<3;U=KK(O(p,j)|0)|0;if((j|0)<(c[d+52>>2]|0)){I=0;J=0;K=0;L=0;M=0;N=0}else{aq(i)|0;L=KK(a*80|0)|0;M=KK(80)|0;N=KK(80)|0;I=N;J=M;K=L}c[g>>2]=0;if((T|0)==(j|0)){F=vw(b,1)|0;G=c[F+20>>2]|0;H=c[F+24>>2]|0;a:do if(c[d+16>>2]|0){w5(c[d+108>>2]|0);j=O(T,a)|0;i=0;while(1){if((i|0)>=(j|0))break a;h[f+(i<<3)>>3]=+Sw();i=i+1|0}}while(0);if(l<0.0){l=+dq(F,a,f);h[m>>3]=l}if(k<0.0){h[n>>3]=.2;k=.2}if(o>=0.0){h[d>>3]=-1.0;o=-1.0}B=1.0-o;E=+D(+l,+B);z=+D(+k,+((2.0-o)*.3333333333333333))/l;A=KK(p)|0;u=O(T,p)|0;v=KK(u)|0;w=O(T,a)|0;x=d+116|0;y=(e|0)!=0;t=o==-1.0;s=0;o=0.0;while(1){i=0;while(1){if((i|0)>=(w|0))break;h[U+(i<<3)>>3]=0.0;i=i+1|0}W6(v|0,f|0,u|0)|0;p=0;while(1){if((p|0)<(T|0))i=0;else{n=0;break}while(1){if((i|0)>=(a|0))break;h[A+(i<<3)>>3]=0.0;i=i+1|0}n=O(p,a)|0;b:do if(y&(c[x>>2]|0)!=0){i=0;while(1){if((i|0)==(T|0)){i=0;break b}c:do if((i|0)!=(p|0)){l=+Zw(f,a,p,i);g=e+(i<<3)|0;m=O(i,a)|0;k=+D(+l,+B);k=1.0/(t?l*l:k);j=0;while(1){if((j|0)>=(a|0))break c;q=A+(j<<3)|0;h[q>>3]=+h[g>>3]*E*(+h[f+(j+n<<3)>>3]-+h[f+(j+m<<3)>>3])*k+ +h[q>>3];j=j+1|0}}while(0);i=i+1|0}}else{i=0;while(1){if((i|0)==(T|0)){i=0;break b}d:do if((i|0)!=(p|0)){l=+Zw(f,a,p,i);g=O(i,a)|0;k=+D(+l,+B);k=1.0/(t?l*l:k);j=0;while(1){if((j|0)>=(a|0))break d;q=A+(j<<3)|0;h[q>>3]=(+h[f+(j+n<<3)>>3]-+h[f+(j+g<<3)>>3])*E*k+ +h[q>>3];j=j+1|0}}while(0);i=i+1|0}}while(0);while(1){if((i|0)>=(a|0))break;q=U+(i+n<<3)|0;h[q>>3]=+h[q>>3]+ +h[A+(i<<3)>>3];i=i+1|0}p=p+1|0}e:while(1){if((n|0)<(T|0))i=0;else{l=0.0;j=0;break}while(1){if((i|0)>=(a|0))break;h[A+(i<<3)>>3]=0.0;i=i+1|0}p=n+1|0;g=G+(p<<2)|0;q=O(n,a)|0;j=c[G+(n<<2)>>2]|0;while(1){if((j|0)>=(c[g>>2]|0)){i=0;break}m=H+(j<<2)|0;i=c[m>>2]|0;f:do if((i|0)!=(n|0)){k=+_w(f,a,n,i)*z;i=0;while(1){if((i|0)>=(a|0))break f;l=k*(+h[f+(i+q<<3)>>3]-+h[f+((O(c[m>>2]|0,a)|0)+i<<3)>>3]);V=A+(i<<3)|0;h[V>>3]=+h[V>>3]-l;i=i+1|0}}while(0);j=j+1|0}while(1){if((i|0)>=(a|0)){n=p;continue e}V=U+(i+q<<3)|0;h[V>>3]=+h[V>>3]+ +h[A+(i<<3)>>3];i=i+1|0}}while(1){if((j|0)>=(T|0))break;g=O(j,a)|0;i=0;while(1){if((i|0)>=(a|0)){k=0.0;i=0;break}h[A+(i<<3)>>3]=+h[U+(i+g<<3)>>3];i=i+1|0}while(1){if((i|0)>=(a|0))break;W=+h[A+(i<<3)>>3];k=W*W+k;i=i+1|0}k=+C(+k);l=k+l;g:do if(k>0.0){k=1.0/k;i=0;while(1){if((i|0)>=(a|0)){i=0;break g}V=A+(i<<3)|0;h[V>>3]=+h[V>>3]*k;i=i+1|0}}else i=0;while(0);while(1){if((i|0)>=(a|0))break;V=f+(i+g<<3)|0;h[V>>3]=+h[V>>3]+ +h[A+(i<<3)>>3]*r;i=i+1|0}j=j+1|0}s=s+1|0;r=+jq(S,r,l,o,R);if(!((s|0)<(Q|0)&r>P))break;else o=l}if(c[d+112>>2]|0)kq(a,F,f);U1(v);if((F|0)!=(b|0))qw(F);U1(A)}else c[g>>2]=-100;if(K|0)U1(L);if(J|0)U1(M);if(I|0)U1(N);U1(U)}return}function oq(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0.0,r=0.0,s=0.0,t=0.0,u=0.0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,E=0.0,F=0,G=0,H=0.0,I=0.0,J=0,K=0,L=0,M=0,N=0.0,P=0.0,Q=0,R=0,S=0,T=0,U=0,V=0.0,W=0,X=0.0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0.0,ia=0;ga=l;l=l+32|0;_=ga+24|0;$=ga+20|0;da=ga+16|0;ea=ga+12|0;fa=ga+8|0;U=ga;s=+h[d>>3];k=d+24|0;r=+h[k>>3];m=d+32|0;q=+h[m>>3];V=+h[d+72>>3];W=c[d+80>>2]|0;X=+h[d+88>>3];t=+h[d+96>>3];Y=c[d+104>>2]|0;c[_>>2]=0;c[$>>2]=10;c[da>>2]=0;c[ea>>2]=0;c[fa>>2]=0;h[U>>3]=0.0;ca=d+56|0;n=c[ca>>2]|0;if(!((b|0)==0|(W|0)<1)?(Z=c[b>>2]|0,i=c[b+4>>2]|0,!((a|0)<1|(i|0)<1)):0){if((i|0)<(c[d+52>>2]|0)){ba=0;aa=0}else{ba=aq(n)|0;c[da>>2]=KK(a*80|0)|0;c[ea>>2]=KK(80)|0;c[fa>>2]=KK(80)|0;aa=1}c[g>>2]=0;a:do if((Z|0)==(i|0)){o=vw(b,1)|0;Q=c[o+20>>2]|0;R=c[o+24>>2]|0;b:do if(c[d+16>>2]|0){w5(c[d+108>>2]|0);j=O(Z,a)|0;i=0;while(1){if((i|0)>=(j|0))break b;h[f+(i<<3)>>3]=+Sw();i=i+1|0}}while(0);if(r<0.0){r=+dq(o,a,f);h[k>>3]=r}if(q<0.0){h[m>>3]=.2;q=.2}if(s>=0.0){h[d>>3]=-1.0;s=-1.0}N=1.0-s;P=+D(+r,+N);I=+D(+q,+((2.0-s)*.3333333333333333))/r;J=a<<3;S=KK(J)|0;J=O(Z,J)|0;T=KK(J)|0;K=(aa|0)!=0;L=d+116|0;M=d+64|0;F=s==-1.0;G=(e|0)!=0;H=1.0/+(Z|0);i=0;B=0;E=0.0;while(1){B=B+1|0;W6(T|0,f|0,J|0)|0;if(K){i=cq(ba)|0;n=i;i=hw(a,Z,i,f,(c[L>>2]|0)==0?0:e)|0}u=0.0;s=0.0;v=0;r=0.0;c:while(1){if((v|0)<(Z|0))j=0;else break;while(1){if((j|0)>=(a|0))break;h[S+(j<<3)>>3]=0.0;j=j+1|0}z=v+1|0;m=Q+(z<<2)|0;A=O(v,a)|0;k=c[Q+(v<<2)>>2]|0;while(1){if((k|0)>=(c[m>>2]|0))break;p=R+(k<<2)|0;j=c[p>>2]|0;d:do if((j|0)!=(v|0)){q=+_w(f,a,v,j)*I;j=0;while(1){if((j|0)>=(a|0))break d;ha=q*(+h[f+(j+A<<3)>>3]-+h[f+((O(c[p>>2]|0,a)|0)+j<<3)>>3]);y=S+(j<<3)|0;h[y>>3]=+h[y>>3]-ha;j=j+1|0}}while(0);k=k+1|0}e:do if(!K)if(G&(c[L>>2]|0)!=0){j=0;while(1){if((j|0)==(Z|0))break e;f:do if((j|0)!=(v|0)){ha=+Zw(f,a,v,j);m=e+(j<<3)|0;p=O(j,a)|0;q=+D(+ha,+N);q=1.0/(F?ha*ha:q);k=0;while(1){if((k|0)>=(a|0))break f;y=S+(k<<3)|0;h[y>>3]=+h[m>>3]*P*(+h[f+(k+A<<3)>>3]-+h[f+(k+p<<3)>>3])*q+ +h[y>>3];k=k+1|0}}while(0);j=j+1|0}}else{j=0;while(1){if((j|0)==(Z|0))break e;g:do if((j|0)!=(v|0)){ha=+Zw(f,a,v,j);m=O(j,a)|0;q=+D(+ha,+N);q=1.0/(F?ha*ha:q);k=0;while(1){if((k|0)>=(a|0))break g;y=S+(k<<3)|0;h[y>>3]=(+h[f+(k+A<<3)>>3]-+h[f+(k+m<<3)>>3])*P*q+ +h[y>>3];k=k+1|0}}while(0);j=j+1|0}}else{bw(i,+h[M>>3],f+(A<<3)|0,v,_,$,da,ea,fa,U,g);u=+h[U>>3]+u;y=c[_>>2]|0;s=s+ +(y|0);if(c[g>>2]|0){m=S;k=T;i=S;j=T;p=67;break a}m=c[fa>>2]|0;p=c[ea>>2]|0;v=c[da>>2]|0;j=0;while(1){if((j|0)>=(y|0))break e;ha=+h[m+(j<<3)>>3];ha=ha>1.0e-15?ha:1.0e-15;w=p+(j<<3)|0;x=O(j,a)|0;q=+D(+ha,+N);q=1.0/(F?ha*ha:q);k=0;while(1){if((k|0)>=(a|0))break;ia=S+(k<<3)|0;h[ia>>3]=+h[w>>3]*P*(+h[f+(k+A<<3)>>3]-+h[v+(k+x<<3)>>3])*q+ +h[ia>>3];k=k+1|0}j=j+1|0}}while(0);q=0.0;j=0;while(1){if((j|0)>=(a|0))break;ha=+h[S+(j<<3)>>3];q=ha*ha+q;j=j+1|0}q=+C(+q);r=q+r;h:do if(q>0.0){q=1.0/q;j=0;while(1){if((j|0)>=(a|0)){j=0;break h}ia=S+(j<<3)|0;h[ia>>3]=+h[ia>>3]*q;j=j+1|0}}else j=0;while(0);while(1){if((j|0)>=(a|0)){v=z;continue c}ia=f+(j+A<<3)|0;h[ia>>3]=+h[ia>>3]+ +h[S+(j<<3)>>3]*t;j=j+1|0}}if(i|0){ow(i);bq(ba,s*H*5.0+u*H)}t=+jq(Y,t,r,E,X);if(!((B|0)<(W|0)&t>V))break;else E=r}if(!(c[d+112>>2]|0)){m=S;k=T;j=T;i=S;p=66}else{kq(a,o,f);m=S;k=T;j=T;i=S;p=66}}else{c[g>>2]=-100;o=b;m=0;k=0;j=0;i=0;p=66}while(0);if((p|0)==66)if(aa)p=67;if((p|0)==67){$p(ba);c[ca>>2]=n}if(k|0)U1(j);if((o|0)!=(b|0))qw(o);if(m|0)U1(i);i=c[da>>2]|0;if(i|0)U1(i);i=c[ea>>2]|0;if(i|0)U1(i);i=c[fa>>2]|0;if(i|0)U1(i)}l=ga;return}function pq(a,b,d,e,f,g,i,j){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;i=+i;j=j|0;var k=0,m=0,n=0,o=0,p=0.0,q=0,r=0.0,s=0,t=0.0,u=0.0,v=0.0,w=0,x=0,y=0.0,z=0,A=0,B=0.0,E=0,F=0.0,G=0.0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0.0,Z=0,_=0.0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0.0,ia=0;ga=l;l=l+48|0;o=ga+8|0;ba=ga+40|0;ca=ga+36|0;W=ga+32|0;ea=ga+28|0;fa=ga+24|0;X=ga;p=+h[e>>3];q=e+32|0;r=+h[q>>3];Y=+h[e+72>>3];Z=c[e+80>>2]|0;_=+h[e+88>>3];t=+h[e+96>>3];$=c[e+104>>2]|0;c[ba>>2]=0;c[ca>>2]=10;c[W>>2]=0;c[ea>>2]=0;c[fa>>2]=0;h[X>>3]=0.0;if(!((b|0)==0|(Z|0)<1)?(aa=c[b>>2]|0,n=c[b+4>>2]|0,!((a|0)<1|(n|0)<1)):0){if((c[e+132>>2]|0)!=0?(n|0)>=(c[e+52>>2]|0):0){m=KK(a*80|0)|0;c[W>>2]=m;c[ea>>2]=KK(80)|0;c[fa>>2]=KK(80)|0;s=1;k=m}else{s=0;k=0;m=0}c[j>>2]=0;if((aa|0)==(n|0)){V=vw(b,1)|0;if(!d){U=0;k=V}else{U=c[d+28>>2]|0;k=d}T=c[k+24>>2]|0;S=c[k+20>>2]|0;if(i<0.0){G=+qq(aa,S,U);F=+(c[S+(aa<<2)>>2]|0);B=+(aa|0);i=F/(B*B-F)*i/+D(+G,+(p+1.0));R=c[15712]|0;h[o>>3]=G;h[o+8>>3]=i;w4(R,92231,o)|0}a:do if(c[e+16>>2]|0){U4(92253,24,1,c[15712]|0)|0;w5(c[e+108>>2]|0);m=O(aa,a)|0;k=0;while(1){if((k|0)>=(m|0))break a;h[g+(k<<3)>>3]=+Sw();k=k+1|0}}while(0);rq(aa,a,g,S,T,U);if(r<0.0)h[q>>3]=.2;if(p>=0.0){h[e>>3]=-1.0;p=-1.0}Q=a<<3;P=KK(Q)|0;Q=O(aa,Q)|0;R=KK(Q)|0;I=(s|0)!=0;J=e+116|0;K=(U|0)==0;L=e+8|0;M=(f|0)!=0;N=p==-1.0;G=1.0-p;H=e+64|0;k=0;E=0;F=0.0;p=1.0;B=t;b:while(1){E=E+1|0;W6(R|0,g|0,Q|0)|0;if(I)k=hw(a,aa,10,g,(c[J>>2]|0)==0?0:f)|0;s=0;t=0.0;c:while(1){if((s|0)<(aa|0))m=0;else break;while(1){if((m|0)>=(a|0))break;h[P+(m<<3)>>3]=0.0;m=m+1|0}A=s+1|0;q=S+(A<<2)|0;z=O(s,a)|0;o=c[S+(s<<2)>>2]|0;while(1){if((o|0)>=(c[q>>2]|0))break;d=T+(o<<2)|0;m=c[d>>2]|0;d:do if((m|0)!=(s|0)){y=+Zw(g,a,s,m);if(!K)p=+h[U+(o<<3)>>3];r=+h[L>>3];e:do if(!(r==2.0))if(r==1.0){r=(y-p)*(1.0/(p*p));u=1.0/y;m=0;while(1){if((m|0)>=(a|0))break e;v=r*(+h[g+(m+z<<3)>>3]-+h[g+((O(c[d>>2]|0,a)|0)+m<<3)>>3])*u;x=P+(m<<3)|0;h[x>>3]=+h[x>>3]-v;m=m+1|0}}else{r=1.0/+D(+p,+(r+1.0));u=y-p;v=1.0/y;m=0;while(1){if((m|0)>=(a|0))break e;ha=+h[g+(m+z<<3)>>3]-+h[g+((O(c[d>>2]|0,a)|0)+m<<3)>>3];ha=r*ha*+D(+u,+(+h[L>>3]))*v;x=P+(m<<3)|0;h[x>>3]=+h[x>>3]-ha;m=m+1|0}}else{r=y-p;r=r*r*(1.0/(p*p*p));u=1.0/y;m=0;while(1){if((m|0)>=(a|0))break e;ha=r*(+h[g+(m+z<<3)>>3]-+h[g+((O(c[d>>2]|0,a)|0)+m<<3)>>3])*u;x=P+(m<<3)|0;h[x>>3]=+h[x>>3]-ha;m=m+1|0}}while(0);if(M&(c[J>>2]|0)!=0){n=f+(o<<3)|0;r=+D(+y,+G);r=1.0/(N?y*y:r);m=0;while(1){if((m|0)>=(a|0))break d;ha=+h[n>>3]*i*(+h[g+(m+z<<3)>>3]-+h[g+((O(c[d>>2]|0,a)|0)+m<<3)>>3])*r;x=P+(m<<3)|0;h[x>>3]=+h[x>>3]-ha;m=m+1|0}}else{r=+D(+y,+G);r=1.0/(N?y*y:r);m=0;while(1){if((m|0)>=(a|0))break d;ha=(+h[g+(m+z<<3)>>3]-+h[g+((O(c[d>>2]|0,a)|0)+m<<3)>>3])*i*r;x=P+(m<<3)|0;h[x>>3]=+h[x>>3]-ha;m=m+1|0}}}while(0);o=o+1|0}f:do if(!I)if(M&(c[J>>2]|0)!=0){m=0;while(1){if((m|0)==(aa|0)){r=0.0;m=0;break f}g:do if((m|0)!=(s|0)){ha=+Zw(g,a,s,m);d=f+(m<<3)|0;o=O(m,a)|0;r=+D(+ha,+G);r=1.0/(N?ha*ha:r);n=0;while(1){if((n|0)>=(a|0))break g;x=P+(n<<3)|0;h[x>>3]=+h[d>>3]*i*(+h[g+(n+z<<3)>>3]-+h[g+(n+o<<3)>>3])*r+ +h[x>>3];n=n+1|0}}while(0);m=m+1|0}}else{m=0;while(1){if((m|0)==(aa|0)){r=0.0;m=0;break f}h:do if((m|0)!=(s|0)){ha=+Zw(g,a,s,m);d=O(m,a)|0;r=+D(+ha,+G);r=1.0/(N?ha*ha:r);n=0;while(1){if((n|0)>=(a|0))break h;x=P+(n<<3)|0;h[x>>3]=(+h[g+(n+z<<3)>>3]-+h[g+(n+d<<3)>>3])*i*r+ +h[x>>3];n=n+1|0}}while(0);m=m+1|0}}else{bw(k,+h[H>>3],g+(z<<3)|0,s,ba,ca,W,ea,fa,X,j);d=c[ba>>2]|0;if(c[j>>2]|0)break b;o=c[fa>>2]|0;q=c[ea>>2]|0;s=c[W>>2]|0;m=0;while(1){if((m|0)>=(d|0)){r=0.0;m=0;break f}ha=+h[o+(m<<3)>>3];ha=ha>1.0e-15?ha:1.0e-15;w=q+(m<<3)|0;x=O(m,a)|0;r=+D(+ha,+G);r=1.0/(N?ha*ha:r);n=0;while(1){if((n|0)>=(a|0))break;ia=P+(n<<3)|0;h[ia>>3]=+h[w>>3]*i*(+h[g+(n+z<<3)>>3]-+h[s+(n+x<<3)>>3])*r+ +h[ia>>3];n=n+1|0}m=m+1|0}}while(0);while(1){if((m|0)>=(a|0))break;ha=+h[P+(m<<3)>>3];r=ha*ha+r;m=m+1|0}r=+C(+r);t=r+t;i:do if(r>0.0){r=1.0/r;m=0;while(1){if((m|0)>=(a|0)){m=0;break i}ia=P+(m<<3)|0;h[ia>>3]=+h[ia>>3]*r;m=m+1|0}}else m=0;while(0);while(1){if((m|0)>=(a|0)){s=A;continue c}ia=g+(m+z<<3)|0;h[ia>>3]=+h[ia>>3]+ +h[P+(m<<3)>>3]*B;m=m+1|0}}if(k|0)ow(k);B=+jq($,B,t,F,_);if(!((E|0)<(Z|0)&B>Y)){da=83;break}else F=t}if((da|0)==83?c[e+112>>2]|0:0)kq(a,V,g);U1(R);if((V|0)!=(b|0))qw(V);U1(P);k=c[W>>2]|0;m=k}else c[j>>2]=-100;if(m|0)U1(k);k=c[ea>>2]|0;if(k|0)U1(k);k=c[fa>>2]|0;if(k|0)U1(k)}l=ga;return}function qq(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0,g=0,i=0,j=0.0;if(!d)e=1.0;else{f=0;e=0.0;a:while(1){if((f|0)>=(a|0))break;g=f+1|0;i=c[b+(g<<2)>>2]|0;f=c[b+(f<<2)>>2]|0;while(1){if((f|0)>=(i|0)){f=g;continue a}j=+h[d+(f<<3)>>3]+e;f=f+1|0;e=j}}e=e/+(c[b+(a<<2)>>2]|0)}return +e}function rq(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var i=0,j=0,k=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0,r=0,s=0,t=0,u=0,v=0,w=0.0;v=l;l=l+16|0;u=v;t=(g|0)==0;k=0.0;m=0.0;n=1.0;j=0;a:while(1){if((j|0)>=(a|0))break;r=j+1|0;s=e+(r<<2)|0;q=c[e+(j<<2)>>2]|0;while(1){if((q|0)>=(c[s>>2]|0)){j=r;continue a}i=c[f+(q<<2)>>2]|0;b:do if((i|0)!=(j|0)){o=+Zw(d,b,j,i);if(!t)n=+h[g+(q<<3)>>3];w=1.0/(n*n);p=n*o*w;o=o*o*w;i=0;while(1){if((i|0)>=(b|0))break b;i=i+1|0;k=k+o;m=m+p}}while(0);q=q+1|0}}k=m/k;j=O(b,a)|0;i=0;while(1){if((i|0)>=(j|0))break;b=d+(i<<3)|0;h[b>>3]=+h[b>>3]*k;i=i+1|0}d=c[15712]|0;h[u>>3]=k;w4(d,92278,u)|0;l=v;return}function sq(a,b,d,e,f,g,i){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;i=i|0;var j=0,k=0,m=0,n=0.0,o=0.0,p=0,q=0,r=0.0,s=0,t=0,u=0,v=0.0,w=0,x=0,y=0,z=0.0,A=0,B=0,E=0,F=0,G=0.0,H=0,I=0.0,J=0,K=0,L=0,M=0.0,N=0.0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0.0,X=0,Y=0.0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0.0,ha=0.0,ia=0;fa=l;l=l+32|0;$=fa+24|0;aa=fa+20|0;ba=fa+16|0;da=fa+12|0;ea=fa+8|0;V=fa;r=+h[e>>3];p=e+24|0;o=+h[p>>3];q=e+32|0;n=+h[q>>3];W=+h[e+72>>3];X=c[e+80>>2]|0;Y=+h[e+88>>3];v=+h[e+96>>3];Z=c[e+104>>2]|0;c[$>>2]=0;c[aa>>2]=10;c[ba>>2]=0;c[da>>2]=0;c[ea>>2]=0;h[V>>3]=0.0;if(!((b|0)==0|(X|0)<1)?(_=c[b>>2]|0,m=c[b+4>>2]|0,!((a|0)<1|(m|0)<1)):0){if((m|0)<(c[e+52>>2]|0)){s=0;j=0;k=0}else{k=KK(a*80|0)|0;c[ba>>2]=k;c[da>>2]=KK(80)|0;c[ea>>2]=KK(80)|0;s=1;j=k}c[i>>2]=0;if((_|0)==(m|0)){Q=vw(b,1)|0;R=c[Q+20>>2]|0;S=c[Q+24>>2]|0;T=c[d+20>>2]|0;U=c[d+24>>2]|0;P=c[d+28>>2]|0;a:do if(c[e+16>>2]|0){w5(c[e+108>>2]|0);k=O(_,a)|0;j=0;while(1){if((j|0)>=(k|0))break a;h[g+(j<<3)>>3]=+Sw();j=j+1|0}}while(0);if(o<0.0){o=+dq(Q,a,g);h[p>>3]=o}if(n<0.0){h[q>>3]=.2;n=.2}if(r>=0.0){h[e>>3]=-1.0;r=-1.0}M=1.0-r;N=+D(+o,+M);I=+D(+n,+((2.0-r)*.3333333333333333))/o;K=a<<3;J=KK(K)|0;K=O(_,K)|0;L=KK(K)|0;E=(s|0)!=0;F=e+116|0;G=I*.2;H=e+64|0;A=r==-1.0;B=(f|0)!=0;j=0;y=0;z=0.0;b:while(1){y=y+1|0;W6(L|0,g|0,K|0)|0;if(E)j=hw(a,_,10,g,(c[F>>2]|0)==0?0:f)|0;s=0;o=0.0;c:while(1){if((s|0)<(_|0))k=0;else break;while(1){if((k|0)>=(a|0))break;h[J+(k<<3)>>3]=0.0;k=k+1|0}w=s+1|0;d=R+(w<<2)|0;x=O(s,a)|0;m=c[R+(s<<2)>>2]|0;while(1){if((m|0)>=(c[d>>2]|0))break;p=S+(m<<2)|0;k=c[p>>2]|0;d:do if((k|0)!=(s|0)){n=+_w(g,a,s,k)*I;k=0;while(1){if((k|0)>=(a|0))break d;r=n*(+h[g+(k+x<<3)>>3]-+h[g+((O(c[p>>2]|0,a)|0)+k<<3)>>3]);u=J+(k<<3)|0;h[u>>3]=+h[u>>3]-r;k=k+1|0}}while(0);m=m+1|0}p=T+(w<<2)|0;d=c[T+(s<<2)>>2]|0;while(1){if((d|0)>=(c[p>>2]|0))break;q=U+(d<<2)|0;k=c[q>>2]|0;e:do if((k|0)!=(s|0)){n=+Zw(g,a,s,k);m=P+(d<<3)|0;r=1.0/n;k=0;while(1){if((k|0)>=(a|0))break e;ha=+h[m>>3];ga=n-ha;ga=ga*ga*G*(+h[g+(k+x<<3)>>3]-+h[g+((O(c[q>>2]|0,a)|0)+k<<3)>>3])*r;u=J+(k<<3)|0;h[u>>3]=(n>3];k=k+1|0}}while(0);d=d+1|0}f:do if(!E)if(B&(c[F>>2]|0)!=0){k=0;while(1){if((k|0)==(_|0)){n=0.0;k=0;break f}g:do if((k|0)!=(s|0)){ha=+Zw(g,a,s,k);d=f+(k<<3)|0;p=O(k,a)|0;n=+D(+ha,+M);n=1.0/(A?ha*ha:n);m=0;while(1){if((m|0)>=(a|0))break g;u=J+(m<<3)|0;h[u>>3]=+h[d>>3]*N*(+h[g+(m+x<<3)>>3]-+h[g+(m+p<<3)>>3])*n+ +h[u>>3];m=m+1|0}}while(0);k=k+1|0}}else{k=0;while(1){if((k|0)==(_|0)){n=0.0;k=0;break f}h:do if((k|0)!=(s|0)){ha=+Zw(g,a,s,k);d=O(k,a)|0;n=+D(+ha,+M);n=1.0/(A?ha*ha:n);m=0;while(1){if((m|0)>=(a|0))break h;u=J+(m<<3)|0;h[u>>3]=(+h[g+(m+x<<3)>>3]-+h[g+(m+d<<3)>>3])*N*n+ +h[u>>3];m=m+1|0}}while(0);k=k+1|0}}else{bw(j,+h[H>>3],g+(x<<3)|0,s,$,aa,ba,da,ea,V,i);d=c[$>>2]|0;if(c[i>>2]|0)break b;p=c[ea>>2]|0;q=c[da>>2]|0;s=c[ba>>2]|0;k=0;while(1){if((k|0)>=(d|0)){n=0.0;k=0;break f}ha=+h[p+(k<<3)>>3];ha=ha>1.0e-15?ha:1.0e-15;t=q+(k<<3)|0;u=O(k,a)|0;n=+D(+ha,+M);n=1.0/(A?ha*ha:n);m=0;while(1){if((m|0)>=(a|0))break;ia=J+(m<<3)|0;h[ia>>3]=+h[t>>3]*N*(+h[g+(m+x<<3)>>3]-+h[s+(m+u<<3)>>3])*n+ +h[ia>>3];m=m+1|0}k=k+1|0}}while(0);while(1){if((k|0)>=(a|0))break;ha=+h[J+(k<<3)>>3];n=ha*ha+n;k=k+1|0}n=+C(+n);o=n+o;i:do if(n>0.0){n=1.0/n;k=0;while(1){if((k|0)>=(a|0)){k=0;break i}ia=J+(k<<3)|0;h[ia>>3]=+h[ia>>3]*n;k=k+1|0}}else k=0;while(0);while(1){if((k|0)>=(a|0)){s=w;continue c}ia=g+(k+x<<3)|0;h[ia>>3]=+h[ia>>3]+ +h[J+(k<<3)>>3]*v;k=k+1|0}}if(j|0)ow(j);v=+jq(Z,v,o,z,Y);if(!((y|0)<(X|0)&v>W)){ca=70;break}else z=o}if((ca|0)==70?c[e+112>>2]|0:0)kq(a,Q,g);U1(L);if((Q|0)!=(b|0))qw(Q);U1(J);j=c[ba>>2]|0;k=j}else c[i>>2]=-100;if(k|0)U1(j);j=c[da>>2]|0;if(j|0)U1(j);j=c[ea>>2]|0;if(j|0)U1(j)}l=fa;return}function tq(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0.0,g=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;n=c[b+20>>2]|0;o=c[b+24>>2]|0;p=KK(a<<3)|0;m=c[b>>2]|0;k=0;a:while(1){if((k|0)<(m|0))b=0;else break;while(1){if((b|0)>=(a|0))break;h[p+(b<<3)>>3]=0.0;b=b+1|0}l=k+1|0;j=c[n+(l<<2)>>2]|0;i=c[n+(k<<2)>>2]|0;b=0;while(1){if((i|0)>=(j|0))break;e=c[o+(i<<2)>>2]|0;if((e|0)!=(k|0)){g=O(e,a)|0;e=0;while(1){if((e|0)>=(a|0))break;q=p+(e<<3)|0;h[q>>3]=+h[q>>3]+ +h[d+(g+e<<3)>>3];e=e+1|0}b=b+1|0}i=i+1|0}if((b|0)<=0){k=l;continue}f=.5/+(b|0);e=O(k,a)|0;b=0;while(1){if((b|0)>=(a|0)){k=l;continue a}q=d+(b+e<<3)|0;h[q>>3]=+h[p+(b<<3)>>3]*f+ +h[q>>3]*.5;b=b+1|0}}U1(p);return}function uq(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0.0;i=c[a+20>>2]|0;j=c[a+24>>2]|0;h=c[a>>2]|0;k=KK((h<<2)+4|0)|0;a=0;while(1){if((a|0)>(h|0)){d=0;e=0;break}c[k+(a<<2)>>2]=0;a=a+1|0}while(1){if((e|0)>=(h|0))break;f=e+1|0;g=c[i+(f<<2)>>2]|0;a=0;b=c[i+(e<<2)>>2]|0;while(1){if((b|0)>=(g|0))break;a=a+((e|0)!=(c[j+(b<<2)>>2]|0)&1)|0;b=b+1|0}g=k+(a<<2)|0;e=(c[g>>2]|0)+1|0;c[g>>2]=e;d=(d|0)>(e|0)?d:e;e=f}l=+(c[k+4>>2]|0);if(+(d|0)*.8=(g|0)){e=0;break}h[n+(e<<3)>>3]=0.0;e=e+1|0}while(1){if((e|0)>=(b|0)){g=0;break}h[j+(e<<3)>>3]=0.0;e=e+1|0}while(1){if((g|0)>=(a|0))break;i=O(g,b)|0;e=0;while(1){if((e|0)>=(b|0))break;m=j+(e<<3)|0;h[m>>3]=+h[m>>3]+ +h[c+(e+i<<3)>>3];e=e+1|0}g=g+1|0}d=1.0/+(a|0);e=0;while(1){if((e|0)>=(b|0)){g=0;break}m=j+(e<<3)|0;h[m>>3]=+h[m>>3]*d;e=e+1|0}while(1){if((g|0)>=(a|0)){i=0;break}i=O(g,b)|0;e=0;while(1){if((e|0)>=(b|0))break;m=c+(e+i<<3)|0;h[m>>3]=+h[m>>3]-+h[j+(e<<3)>>3];e=e+1|0}g=g+1|0}while(1){if((i|0)>=(a|0))break;j=O(i,b)|0;g=0;while(1){if((g|0)>=(b|0))break;k=c+(g+j<<3)|0;m=O(g,b)|0;e=0;while(1){if((e|0)==(b|0))break;p=n+(e+m<<3)|0;h[p>>3]=+h[p>>3]+ +h[c+(e+j<<3)>>3]*+h[k>>3];e=e+1|0}g=g+1|0}i=i+1|0}d=+h[n+8>>3];if(d==0.0)d=0.0;else{q=+h[n>>3];f=+h[n+24>>3];d=-(f-q-+C(+(q*q+d*d*4.0+(q*-2.0+f)*f)))/(d*2.0)}f=+C(+(d*d+1.0));d=d/f;f=1.0/f;e=0;while(1){if((e|0)>=(a|0))break;p=O(e,b)|0;n=c+(p<<3)|0;q=+h[n>>3];p=c+(p+1<<3)|0;r=+h[p>>3];h[n>>3]=r*f+q*d;h[p>>3]=r*d-q*f;e=e+1|0}l=o;return}function wq(a,b,c,d,e,f,g,h,i,j){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;xq(a,b,c,d,e,f,g,h,i,j);return}function xq(a,b,d,e,f,g,i,j,k,m){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;i=i|0;j=j|0;k=k|0;m=m|0;var n=0.0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0;M=l;l=l+192|0;I=M+176|0;H=M+168|0;K=M;W6(K|0,e|0,168)|0;c[m>>2]=0;do if(b|0?(L=c[b+4>>2]|0,!((a|0)<1|(L|0)<1)):0){if((ww(b,0)|0)!=0?(c[b+16>>2]|0)==1:0){if((c[e+136>>2]|0)==1)o=Bw(d)|0;else o=d;J=Bw(b)|0}else t=5;do if((t|0)==5)if((c[e+136>>2]|0)==1){J=Aw(b,0)|0;o=Aw(d,0)|0;break}else{J=Qw(b)|0;o=d;break}while(0);G=e+160|0;p=c[G>>2]|0;if((p|0)==3){if((j|0)>0)t=14}else if((j|0)>0&(p|0)==4)t=14;if((t|0)==14){d=KK(O(a<<3,c[J>>2]|0)|0)|0;L=yq(J,j,k)|0;wq(a,L,0,e,0,0,d,0,0,m);zq(a,J,j,k,i,d);lu(a,J,i,g,c[e+124>>2]|0,+h[e+144>>3],c[G>>2]|0,j,k);qw(L);U1(d);if((J|0)==(b|0))break;qw(J);break}E=fx(c[e+44>>2]|0,c[e+48>>2]|0)|0;c[E+16>>2]=c[e+40>>2];F=tx(J,o,f,E)|0;q=wx(F)|0;if(!(c[q+32>>2]|0))r=i;else r=KK(O(a<<3,c[q+4>>2]|0)|0)|0;p=uq(J)|0;if(+h[e>>3]==-1.0001234)h[e>>3]=(p|0)==0?-1.0:-1.8;v=e+136|0;w=e+24|0;x=e+16|0;y=e+104|0;z=e+96|0;A=a<<3;B=e+132|0;C=c[15712]|0;D=e+80|0;while(1){a:do switch(c[v>>2]|0){case 0:{switch(c[B>>2]|0){case 0:{nq(a,c[q+8>>2]|0,e,c[q+24>>2]|0,r,m);break a}case 2:{p=q+8|0;t=29;break}case 3:{p=q+8|0;s=c[p>>2]|0;if((c[s>>2]|0)>1e4)if(!0)t=29;else{c[H>>2]=1e4;w4(C,92299,H)|0;t=29}else t=30;break}default:{s=c[q+8>>2]|0;t=30}}if((t|0)==29){iq(a,c[p>>2]|0,e,c[q+24>>2]|0,r,m);break a}else if((t|0)==30){oq(a,s,e,c[q+24>>2]|0,r,m);break a}break}case 1:{h[z>>3]=1.0;c[y>>2]=1;u=(c[q+28>>2]|0)==0;n=u?.5:.05;c[D>>2]=u?500:100;u=(c[q+32>>2]|0)==0;p=q+8|0;s=q+12|0;t=q+24|0;pq(a,c[p>>2]|0,c[s>>2]|0,e,c[t>>2]|0,r,n,m);if(u){c[x>>2]=0;h[z>>3]=.05;c[y>>2]=0;pq(a,c[p>>2]|0,c[s>>2]|0,e,c[t>>2]|0,r,n*.5,m);pq(a,c[p>>2]|0,c[s>>2]|0,e,c[t>>2]|0,r,n*.125,m);pq(a,c[p>>2]|0,c[s>>2]|0,e,c[t>>2]|0,r,n*.03125,m)}break}default:{}}while(0);t=c[q+32>>2]|0;if(!t){t=39;break}if(c[m>>2]|0){t=35;break}u=c[q+16>>2]|0;p=c[q+40>>2]|0;if(!(c[t+32>>2]|0))s=i;else s=KK(O(A,c[t+4>>2]|0)|0)|0;Aq(a,c[t+8>>2]|0,u,c[t+20>>2]|0,r,s,p,+h[w>>3]*.001);U1(r);c[x>>2]=0;h[w>>3]=+h[w>>3]*.75;c[y>>2]=0;h[z>>3]=((c[(c[t+28>>2]|0)+40>>2]|0)+-9|0)>>>0<2?1.0:.1;q=t;r=s}if((t|0)==35)U1(r);else if((t|0)==39){Ux(a,J,e,f,i,m);if(0){c[I>>2]=c[e+124>>2];w4(C,92362,I)|0}if((a|0)==2)vq(L,2,i);n=+h[e+152>>3];if(n!=0.0)Bq(L,a,i,n);lu(a,J,i,g,c[e+124>>2]|0,+h[e+144>>3],c[G>>2]|0,j,k)}W6(e|0,K|0,168)|0;if((J|0)!=(b|0))qw(J);if(!((o|0)==0|(o|0)==(d|0)))qw(o);gx(E);hx(F)}while(0);l=M;return}function yq(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;y=l;l=l+16|0;x=y;u=c[a+20>>2]|0;v=c[a+24>>2]|0;w=KK(c[a>>2]<<2)|0;e=0;while(1){if((e|0)>=(c[a>>2]|0)){e=0;break}c[w+(e<<2)>>2]=1;e=e+1|0}while(1){if((e|0)>=(b|0)){e=0;d=0;break}c[w+(c[d+(e<<2)>>2]<<2)>>2]=-1;e=e+1|0}while(1){m=c[a>>2]|0;if((d|0)>=(m|0)){d=0;b=0;break}b=w+(d<<2)|0;if((c[b>>2]|0)>0){c[b>>2]=e;e=e+1|0}d=d+1|0}a:while(1){while(1){if((b|0)>=(m|0))break a;if((c[w+(b<<2)>>2]|0)>=0)break;b=b+1|0}j=b+1|0;k=c[u+(j<<2)>>2]|0;i=c[u+(b<<2)>>2]|0;while(1){if((i|0)>=(k|0)){b=j;continue a}f=c[v+(i<<2)>>2]|0;b:do if((c[w+(f<<2)>>2]|0)>-1)d=d+1|0;else{h=c[u+(f+1<<2)>>2]|0;g=c[u+(f<<2)>>2]|0;while(1){if((g|0)>=(h|0))break b;f=c[v+(g<<2)>>2]|0;if((f|0)!=(b|0))d=((c[w+(f<<2)>>2]|0)>>>31^1)+d|0;g=g+1|0}}while(0);i=i+1|0}}b=d<<2;if((d|0)>0){r=KK(b)|0;s=KK(b)|0;p=s;q=r}else{p=0;q=0;r=0;s=0}t=c[15712]|0;b=0;f=0;c:while(1){d=c[a>>2]|0;while(1){if((b|0)>=(d|0))break c;o=w+(b<<2)|0;if((c[o>>2]|0)>=0)break;b=b+1|0}m=b+1|0;n=u+(m<<2)|0;k=c[u+(b<<2)>>2]|0;d=f;while(1){if((k|0)>=(c[n>>2]|0)){b=m;f=d;continue c}f=v+(k<<2)|0;g=c[f>>2]|0;d:do if((c[w+(g<<2)>>2]|0)>-1){c[q+(d<<2)>>2]=c[o>>2];c[p+(d<<2)>>2]=c[w+(c[f>>2]<<2)>>2];d=d+1|0}else{j=u+(g+1<<2)|0;i=c[u+(g<<2)>>2]|0;while(1){if((i|0)>=(c[j>>2]|0))break d;f=v+(i<<2)|0;h=c[f>>2]|0;do if((h|0)!=(b|0)?(c[w+(h<<2)>>2]|0)>-1:0){c[q+(d<<2)>>2]=c[o>>2];h=d+1|0;c[p+(d<<2)>>2]=c[w+(c[f>>2]<<2)>>2];g=c[o>>2]|0;d=c[w+(c[f>>2]<<2)>>2]|0;if((g|0)!=68)if((d|0)==68)d=68;else{d=h;break}c[x>>2]=g;c[x+4>>2]=d;w4(t,92380,x)|0;d=h}while(0);i=i+1|0}}while(0);k=k+1|0}}x=Dw(f,e,e,q,p,0,8,8)|0;U1(r);U1(s);U1(w);l=y;return x|0}function zq(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var i=0,j=0,k=0.0,l=0,m=0,n=0,o=0,p=0,q=0;p=KK(c[b>>2]<<2)|0;i=0;while(1){if((i|0)>=(c[b>>2]|0)){i=0;break}c[p+(i<<2)>>2]=1;i=i+1|0}while(1){if((i|0)>=(d|0)){i=0;l=0;break}j=c[e+(i<<2)>>2]|0;if((j|0)>-1?(j|0)<(c[b>>2]|0):0)c[p+(j<<2)>>2]=-1;i=i+1|0}while(1){n=c[b>>2]|0;if((l|0)>=(n|0)){l=0;break}j=p+(l<<2)|0;if((c[j>>2]|0)>-1){c[j>>2]=i;i=i+1|0}l=l+1|0}while(1){if((l|0)>=(n|0))break;i=c[p+(l<<2)>>2]|0;a:do if((i|0)>-1){m=O(l,a)|0;j=O(i,a)|0;i=0;while(1){if((i|0)>=(a|0))break a;h[f+(i+m<<3)>>3]=+h[g+(j+i<<3)>>3];i=i+1|0}}while(0);l=l+1|0}o=b+20|0;g=b+24|0;n=0;while(1){if((n|0)>=(d|0))break;b=c[e+(n<<2)>>2]|0;i=c[o>>2]|0;l=c[i+(b+1<<2)>>2]|0;i=c[i+(b<<2)>>2]|0;m=l-i|0;b=O(b,a)|0;j=0;while(1){if((j|0)>=(a|0))break;h[f+(j+b<<3)>>3]=0.0;j=j+1|0}while(1){if((i|0)<(l|0))j=0;else break;while(1){if((j|0)>=(a|0))break;k=+h[f+((O(c[(c[g>>2]|0)+(i<<2)>>2]|0,a)|0)+j<<3)>>3];q=f+(j+b<<3)|0;h[q>>3]=+h[q>>3]+k;j=j+1|0}i=i+1|0}k=1.0/+(m|0);i=0;while(1){if((i|0)>=(a|0))break;q=f+(i+b<<3)|0;h[q>>3]=+h[q>>3]*k;i=i+1|0}n=n+1|0}U1(p);return}function Aq(a,b,d,e,f,g,i,j){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;i=i|0;j=+j;var k=0,m=0,n=0,o=0,p=0,q=0.0;o=l;l=l+16|0;n=o;c[n>>2]=g;Gw(d,0,f,0,n,0,a);a:do if((i+-1|0)>>>0<6){tq(a,b,c[n>>2]|0);k=c[e>>2]|0;m=c[e+20>>2]|0;g=c[e+24>>2]|0;b=0;b:while(1){if((b|0)>=(k|0))break a;i=b+1|0;e=m+(i<<2)|0;b=c[m+(b<<2)>>2]|0;c:while(1){b=b+1|0;if((b|0)>=(c[e>>2]|0)){b=i;continue b}f=g+(b<<2)|0;d=0;while(1){if((d|0)>=(a|0))continue c;q=(+Sw()+-.5)*j;p=(c[n>>2]|0)+((O(c[f>>2]|0,a)|0)+d<<3)|0;h[p>>3]=+h[p>>3]+q;d=d+1|0}}}}while(0);l=o;return}function Bq(a,b,c,d){a=a|0;b=b|0;c=c|0;d=+d;var e=0,f=0.0,g=0,i=0,j=0,k=0,m=0,n=0.0,o=0.0;k=l;l=l+16|0;j=k;e=0;while(1){if((e|0)>=(b|0)){g=0;break}h[j+(e<<3)>>3]=0.0;e=e+1|0}while(1){if((g|0)>=(a|0))break;i=O(g,b)|0;e=0;while(1){if((e|0)>=(b|0))break;m=j+(e<<3)|0;h[m>>3]=+h[m>>3]+ +h[c+(e+i<<3)>>3];e=e+1|0}g=g+1|0}f=1.0/+(a|0);e=0;while(1){if((e|0)>=(b|0)){g=0;break}m=j+(e<<3)|0;h[m>>3]=+h[m>>3]*f;e=e+1|0}while(1){if((g|0)>=(a|0))break;i=O(g,b)|0;e=0;while(1){if((e|0)>=(b|0))break;m=c+(e+i<<3)|0;h[m>>3]=+h[m>>3]-+h[j+(e<<3)>>3];e=e+1|0}g=g+1|0}d=d*-.017453277777777776;f=+E(+d);d=+F(+d);e=0;while(1){if((e|0)>=(a|0))break;m=O(e,b)|0;j=c+(m<<3)|0;n=+h[j>>3];m=c+(m+1<<3)|0;o=+h[m>>3];h[j>>3]=o*d+n*f;h[m>>3]=o*f-n*d;e=e+1|0}l=k;return}function Cq(a,b,d,e,f,g,i){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=+g;i=i|0;var j=0,k=0,l=0,m=0;m=(ww(b,0)|0)==0;j=(c[b+16>>2]|0)==1;if(m)if(j)j=Bw(vw(b,0)|0)|0;else k=5;else if(j)j=b;else k=5;if((k|0)==5)j=Qw(b)|0;m=Bw(j)|0;c[i>>2]=0;j=c[m>>2]|0;if(!d){KK(O(a<<3,j)|0)|0;ab()}l=Gx(m,a,0.0,c[d>>2]|0,(e|0)==0?0:2,1)|0;if(!l)c[i>>2]=-1;else{h[l+40>>3]=.1;c[l+24>>2]=5;+Ix(l,a,c[d>>2]|0,f,g);k=O(j,a)|0;e=l+32|0;j=0;while(1){if((j|0)>=(k|0))break;i=(c[d>>2]|0)+(j<<3)|0;h[i>>3]=+h[i>>3]/+h[e>>3];j=j+1|0}Hx(l)}if((m|0)!=(b|0))qw(m);return}function Dq(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=+g;h=h|0;Cq(a,c,d,e,f,g,h);return}function Eq(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=+e;f=+f;g=g|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0.0;v=c[b>>2]|0;w=c[b+20>>2]|0;t=c[b+24>>2]|0;u=c[b+28>>2]|0;if(!(ww(b,0)|0))qa(95795,92387,37,92404);a=KK(56)|0;k=a+20|0;c[k>>2]=0;c[a+24>>2]=2;c[a+12>>2]=0;j=KK(16)|0;c[k>>2]=j;h[j>>3]=e;h[j+8>>3]=f;c[a+16>>2]=105;h[a+40>>3]=.01;c[a+48>>2]=~~+C(+(+(c[b>>2]|0)));j=b+8|0;k=a+4|0;c[k>>2]=rw(v,v,(c[j>>2]|0)+v|0,1,1)|0;j=rw(v,v,(c[j>>2]|0)+v|0,1,1)|0;c[a+8>>2]=j;k=c[k>>2]|0;l=c[k+28>>2]|0;m=c[j+28>>2]|0;if((j|0)==0|(k|0)==0){Fx(a);a=0}else{n=c[k+20>>2]|0;o=c[k+24>>2]|0;p=c[j+20>>2]|0;q=c[j+24>>2]|0;c[p>>2]=0;c[n>>2]=0;b=0;d=0;while(1){if((b|0)>=(v|0))break;r=b+1|0;s=w+(r<<2)|0;e=0.0;f=0.0;i=c[w+(b<<2)>>2]|0;while(1){if((i|0)>=(c[s>>2]|0))break;g=c[t+(i<<2)>>2]|0;if((g|0)!=(b|0)){x=+h[u+(i<<3)>>3];x=x>=0.0?x:-x;x=x>.01?x:.01;c[o+(d<<2)>>2]=g;c[q+(d<<2)>>2]=g;g=l+(d<<3)|0;h[g>>3]=-1.0;h[m+(d<<3)>>3]=-x;e=+h[g>>3]+e;f=f-x;d=d+1|0}i=i+1|0}c[o+(d<<2)>>2]=b;c[q+(d<<2)>>2]=b;h[l+(d<<3)>>3]=-e;h[m+(d<<3)>>3]=-f;d=d+1|0;c[n+(r<<2)>>2]=d;c[p+(r<<2)>>2]=d;b=r}c[k+8>>2]=d;c[j+8>>2]=d}return a|0}function Fq(a){a=a|0;Fx(a);return}function Gq(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return +(+Jx(a,b,c,d,.001))}function Hq(a,b){a=a|0;b=+b;var d=0,e=0,f=0,g=0;if((c[a+16>>2]|0)==1)d=vw(a,0)|0;else d=Qw(a)|0;f=c[d+28>>2]|0;a:do if(b!=1.0){e=c[d+8>>2]|0;a=0;while(1){if((a|0)>=(e|0))break a;g=f+(a<<3)|0;h[g>>3]=+h[g>>3]*b;a=a+1|0}}while(0);return d|0}function Iq(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0,k=0,l=0.0;j=c[b>>2]|0;c[e>>2]=0;k=O(j,a)|0;e=0;while(1){if((e|0)>=(k|0)){e=1;f=1;break}h[d+(e<<3)>>3]=+Sw()*100.0;e=e+1|0}while(1){if((f|0)>=(j|0))break;i=O(f,a)|0;g=0;while(1){if((g|0)>=(a|0))break;l=+h[d+(g<<3)>>3]-+h[d+(g+i<<3)>>3];if((l>=0.0?l:-l)>1.0e-16){e=0;f=j;break}else g=g+1|0}f=f+1|0}a:do if(e|0){w5(1);e=0;while(1){if((e|0)>=(k|0))break a;h[d+(e<<3)>>3]=+Sw()*100.0;e=e+1|0}}while(0);e=Hq(b,1.0)|0;if(!(ww(e,0)|0))qa(92430,92387,164,92466);else{k=Eq(0,e,0,101.0e5,100.0,0)|0;+Gq(k,a,d,300);Fq(k);k=Eq(0,e,0,101.0e3,100.0,0)|0;+Gq(k,a,d,300);Fq(k);k=Eq(0,e,0,1010.0,100.0,0)|0;+Gq(k,a,d,300);Fq(k);k=Eq(0,e,0,10.1,100.0,0)|0;+Gq(k,a,d,300);Fq(k);ax(0.0,0.0,490.0,700.0,c[b>>2]|0,a,d);qw(e);return}}function Jq(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0,k=0,l=0,m=0;k=KK((tB(a)|0)<<4)|0;i=(e|0)!=0;j=b+8|0;g=jC(a)|0;f=0;while(1){if(!g)break;if(i)f=f+((Q2(KB(g)|0,92481,11)|0)==0&1)|0;m=c[g+16>>2]|0;l=c[m+120>>2]<<1;h[k+(l<<3)>>3]=+h[m+32>>3]*.5+ +h[b>>3];h[k+((l|1)<<3)>>3]=+h[m+40>>3]*.5+ +h[j>>3];g=kC(a,g)|0}if(i&(f|0)!=0){b=KK(f<<2)|0;g=jC(a)|0;f=0;while(1){if(!g)break;if(!(Q2(KB(g)|0,92481,11)|0)){c[b+(f<<2)>>2]=c[(c[g+16>>2]|0)+120>>2];f=f+1|0}g=kC(a,g)|0}c[e>>2]=b;c[d>>2]=f}return k|0}function Kq(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0.0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;z=l;l=l+32|0;w=z+16|0;v=z+8|0;u=z;if(a){x=tB(a)|0;y=uB(a)|0;b=jC(a)|0;e=0;while(1){if(!b)break;c[(c[b+16>>2]|0)+120>>2]=e;b=kC(a,b)|0;e=e+1|0}r=y<<2;q=KK(r)|0;r=KK(r)|0;b=y<<3;s=KK(b)|0;o=GA(a,2,101541,0)|0;t=(d|0)!=0;if(t){e=GA(a,2,92493,0)|0;p=JK(b)|0;n=p}else{n=0;e=0;p=0}j=(o|0)==0;k=(e|0)==0;i=jC(a)|0;b=0;while(1){if(!i)break;m=c[(c[i+16>>2]|0)+120>>2]|0;g=XA(a,i)|0;while(1){if(!g)break;c[q+(b<<2)>>2]=m;c[r+(b<<2)>>2]=c[(c[(c[((c[g>>2]&3|0)==2?g:g+-48|0)+40>>2]|0)+16>>2]|0)+120>>2];if(!j?(A=RA(g,o)|0,c[v>>2]=u,(b5(A,101209,v)|0)==1):0)f=+h[u>>3];else{h[u>>3]=1.0;f=1.0}h[s+(b<<3)>>3]=f;if(!k){A=RA(g,e)|0;c[w>>2]=u;if((b5(A,101209,w)|0)==1)f=+h[u>>3];else{h[u>>3]=1.0;f=1.0}h[n+(b<<3)>>3]=f}g=ZA(a,g)|0;b=b+1|0}i=kC(a,i)|0}b=Dw(y,x,x,q,r,s,1,8)|0;if(t)c[d>>2]=Dw(y,x,x,q,r,p,1,8)|0;U1(q);U1(r);U1(s);if(n)U1(p)}else b=0;l=z;return b|0}function Lq(a){a=a|0;var b=0,d=0,e=0.0,f=0,g=0.0,i=0.0,j=0.0,k=0,m=0,n=0,o=0.0,p=0.0;m=l;l=l+16|0;k=m;a:do if(Mq(a,k)|0){b=c[(c[(jC(a)|0)+16>>2]|0)+132>>2]|0;g=+h[b>>3];e=+h[b+8>>3];b=jC(a)|0;while(1){if(!b)break;f=c[(c[b+16>>2]|0)+132>>2]|0;h[f>>3]=+h[f>>3]-g;f=f+8|0;h[f>>3]=+h[f>>3]-e;b=kC(a,b)|0}b=(g!=0.0|e!=0.0)&1;d=jC(a)|0;while(1){if(!d)break a;f=XA(a,d)|0;if(f|0)break;d=kC(a,d)|0}n=c[f>>2]&3;d=c[(c[(c[((n|0)==2?f:f+-48|0)+40>>2]|0)+16>>2]|0)+132>>2]|0;f=c[(c[(c[((n|0)==3?f:f+48|0)+40>>2]|0)+16>>2]|0)+132>>2]|0;i=+h[f+8>>3];j=+h[f>>3];e=+K(+(+h[d+8>>3]-i),+(+h[d>>3]-j));e=+h[k>>3]-e;h[k>>3]=e;if(e!=0.0){g=+E(+e);e=+F(+e);b=jC(a)|0;while(1){if(!b){b=1;break a}k=c[(c[b+16>>2]|0)+132>>2]|0;p=+h[k>>3]-j;n=k+8|0;o=+h[n>>3]-i;h[k>>3]=p*g+j-o*e;h[n>>3]=p*e+i+o*g;b=kC(a,b)|0}}}else b=0;while(0);l=m;return b|0}function Mq(b,d){b=b|0;d=d|0;var e=0.0,f=0,g=0;g=l;l=l+16|0;f=g;b=QA(b,92497)|0;do if((b|0)!=0?(a[b>>0]|0)!=0:0){e=+s5(b,f);if((c[f>>2]|0)==(b|0))if(!((dP(b)|0)<<24>>24)){b=0;break}else e=0.0;while(1){if(!(e>180.0))break;e=e+-360.0}while(1){if(!(e<=-180.0))break;e=e+360.0}h[d>>3]=e*.017453292519943295;b=1}else b=0;while(0);l=g;return b|0}function Nq(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;d=QA(a,92507)|0;return Oq(a,(d|0)==0?(c|0?c:195059):d,b)|0}function Oq(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0.0;n=l;l=l+32|0;m=n+16|0;j=n+8|0;i=n;if((d|0)!=0?(a[d>>0]|0)!=0:0){f=17896;while(1){g=c[f+4>>2]|0;if(!g)break;if(!(j3(d,g,c[f+8>>2]|0)|0)){k=6;break}f=f+16|0}if((k|0)==6){if(!(c[f+12>>2]|0)){c[i>>2]=g;gA(0,92515,i)|0;f=17896}i=c[f>>2]|0;c[e>>2]=i;c[e+4>>2]=c[f+12>>2];if((i|0)==18)Pq(b,d+(c[f+8>>2]|0)|0,e)}if(!(c[f+4>>2]|0)){f=eP(d,63)|0;if(f<<24>>24==63){c[j>>2]=d;gA(0,92557,j)|0;f=0}else f=f&255;f=(f|0)==0;c[e>>2]=f&1;f=f?92604:135709;k=15}}else{c[e>>2]=0;f=135709;k=15}if((k|0)==15)c[e+4>>2]=f;if(0){k=c[15712]|0;j=c[e+8>>2]|0;o=+h[e+16>>3];c[m>>2]=c[e+4>>2];c[m+4>>2]=j;h[m+8>>3]=o;w4(k,92612,m)|0}l=n;return e|0}function Pq(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e;g=e+4|0;c[f>>2]=g;f=(b5(b,137395,f)|0)>0;b=c[g>>2]|0;c[d+8>>2]=f&(b|0)>-1?b:1e3;h[d+16>>3]=+_O(a,GA(a,0,92648,0)|0,-4.0,-1.0e10);l=e;return}function Qq(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;h=l;l=l+16|0;g=h+8|0;f=h;do if((tB(a)|0)>=2){d=Lq(a)|0;d=(Rq(a)|0)+d|0;e=c[b>>2]|0;if(e){if(0){e=c[15712]|0;j=KB(a)|0;i=c[b+4>>2]|0;c[f>>2]=j;c[f+4>>2]=i;w4(e,92977,f)|0;e=c[b>>2]|0}if(e>>>0>2){switch(e|0){case 3:{e=Sr(a,1)|0;break}case 4:{e=Sr(a,0)|0;break}case 6:case 5:{e=0;break}case 10:case 9:case 7:case 8:case 14:case 13:case 11:case 12:{Cr(a,e)|0;e=0;break}case 15:{e=Sr(a,-1)|0;break}default:{c[g>>2]=c[b+4>>2];gA(0,93e3,g)|0;e=0}}d=e+d|0;break}if(Sq(a)|0){Tq();U1(c[46845]|0);c[46845]=0;break}Uq(a);if((c[b>>2]|0)==2)e=Vq()|0;else e=Wq()|0;if(e|0)Xq();Tq();U1(c[46845]|0);c[46845]=0;d=e+d|0}}else d=0;while(0);l=h;return d|0}function Rq(a){a=a|0;var b=0,d=0.0,e=0,f=0,g=0.0,i=0,j=0,k=0,m=0;m=l;l=l+48|0;i=m+24|0;f=m+16|0;j=m;b=QA(a,140742)|0;a:do if(((b|0)!=0?(k=j+8|0,c[f>>2]=j,c[f+4>>2]=k,e=b5(b,105503,f)|0,(e|0)!=0):0)?(g=+h[j>>3],!(+B(+g)<1.0e-09)):0){if((e|0)!=1){d=+h[k>>3];if(+B(+d)<1.0e-09){b=0;break}}else{h[k>>3]=g;d=g}if(!(d==1.0&g==1.0)){if(0){f=c[15712]|0;h[i>>3]=g;h[i+8>>3]=d;w4(f,93160,i)|0}b=jC(a)|0;while(1){if(!b){b=1;break a}i=c[(c[b+16>>2]|0)+132>>2]|0;h[i>>3]=+h[i>>3]*+h[j>>3];i=i+8|0;h[i>>3]=+h[i>>3]*+h[k>>3];b=kC(a,b)|0}}else b=0}else b=0;while(0);l=m;return b|0}function Sq(b){b=b|0;var d=0,e=0,f=0,i=0.0,j=0.0,k=0,m=0,n=0,o=0;n=l;l=l+16|0;k=n;c[46854]=tB(b)|0;ts();c[46869]=KK((c[46854]|0)*96|0)|0;f=jC(b)|0;d=c[46869]|0;lr(k,b);i=+g[k>>2];j=+g[k+4>>2];k=(a[k+8>>0]|0)==0;j=k?j:j*.013888888888888888;i=k?i:i*.013888888888888888;k=k?2:1;e=0;while(1){if((e|0)>=(c[46854]|0)){d=0;break}o=c[(c[f+16>>2]|0)+132>>2]|0;h[d+8>>3]=+h[o>>3];h[d+16>>3]=+h[o+8>>3];if(mb[k&3](d+40|0,f,i,j)|0){m=4;break}c[d+24>>2]=e;c[d+28>>2]=1;c[d>>2]=f;c[d+88>>2]=0;d=d+96|0;e=e+1|0;f=kC(b,f)|0}if((m|0)==4){U1(c[46869]|0);c[46869]=0;d=1}l=n;return d|0}function Tq(){var a=0,b=0;a=c[46869]|0;b=0;while(1){if((b|0)>=(c[46854]|0))break;pu(a+40|0);a=a+96|0;b=b+1|0}ou();Vs();U1(c[46869]|0);return}function Uq(b){b=b|0;var d=0,e=0,f=0,g=0.0,i=0.0,j=0.0,k=0.0,m=0,n=0,o=0,p=0,q=0.0,r=0.0,s=0.0,t=0.0;o=l;l=l+32|0;m=o+16|0;n=o;p=c[46869]|0;i=+h[p+8>>3];k=+h[p+16>>3];f=c[46854]|0;d=p;e=1;g=+h[p+40>>3]+i;i=+h[p+56>>3]+i;j=+h[p+48>>3]+k;k=+h[p+64>>3]+k;while(1){if((e|0)>=(f|0))break;s=+h[d+104>>3];q=+h[d+112>>3];t=+h[d+136>>3]+s;r=+h[d+144>>3]+q;s=+h[d+152>>3]+s;q=+h[d+160>>3]+q;d=d+96|0;e=e+1|0;g=ti?s:i;j=rk?q:k}d=QA(b,93100)|0;if(d|0?a[d>>0]|0:0)h[173]=+r5(d);s=+h[173];t=s*(k-j);s=s*(i-g);h[m>>3]=g-s;h[m+8>>3]=j-t;h[n>>3]=s+i;h[n+8>>3]=t+k;dr(m,n);l=o;return}function Vq(){var a=0,b=0,d=0,e=0;d=l;l=l+16|0;b=d;if(Yq(0)|0){Zq();a=0;do{kr();a=a+1|0}while((Yq(a)|0)!=0);if(!0)a=1;else{e=c[15712]|0;c[b>>2]=a;w4(e,93028,b)|0;a=1}}else a=0;l=d;return a|0}function Wq(){var a=0,b=0,d=0,e=0,f=0,g=0,h=0,i=0;i=l;l=l+16|0;h=i+8|0;g=i;b=Yq(0)|0;if(!b)a=0;else{Zq();_q(0);Yu(0,1);a=0;e=0;d=0;while(1){ar();d=d+1|0;f=Yq(d)|0;if(!f)break;b=(f|0)<(b|0)?0:e+1|0;c[46846]=1;if(b){br();a=a+1|0}_q(1);Yu(0,1);e=b;b=f}if(0){f=c[15712]|0;c[g>>2]=d;w4(f,93028,g)|0;c[h>>2]=a;w4(f,93055,h)|0}cr();a=1}l=i;return a|0}function Xq(){var a=0,b=0,d=0,e=0;d=c[46854]|0;a=c[46869]|0;b=0;while(1){if((b|0)>=(d|0))break;e=c[(c[(c[a>>2]|0)+16>>2]|0)+132>>2]|0;h[e>>3]=+h[a+8>>3];h[e+8>>3]=+h[a+16>>3];a=a+96|0;b=b+1|0}return}function Yq(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;q=l;l=l+48|0;o=q+24|0;n=q+8|0;p=q;d=c[46869]|0;e=c[46854]|0;b=0;while(1){if((b|0)>=(e|0)){f=0;b=0;break}c[d+(b*96|0)+32>>2]=0;b=b+1|0}a:while(1){if((b|0)>=(e+-1|0))break;m=d+96|0;b=b+1|0;j=d+8|0;k=d+40|0;i=d+32|0;g=m;h=b;while(1){if((h|0)>=(e|0)){d=m;continue a}e=g+8|0;c[n>>2]=c[j>>2];c[n+4>>2]=c[j+4>>2];c[n+8>>2]=c[j+8>>2];c[n+12>>2]=c[j+12>>2];c[o>>2]=c[e>>2];c[o+4>>2]=c[e+4>>2];c[o+8>>2]=c[e+8>>2];c[o+12>>2]=c[e+12>>2];if(!(yu(n,k,o,g+40|0)|0))d=f;else{c[i>>2]=1;c[g+32>>2]=1;d=f+1|0}g=g+96|0;h=h+1|0;f=d;e=c[46854]|0}}if(0>1){o=c[15712]|0;c[p>>2]=a;c[p+4>>2]=f;w4(o,93081,p)|0}l=q;return f|0}function Zq(){var a=0,b=0,d=0,e=0.0,f=0,g=0.0,i=0,j=0,k=0,l=0,m=0,n=0;ir();k=c[46848]|0;l=c[46869]|0;a=c[46845]|0;a:while(1){i=a;if(a>>>0>=k>>>0)break;b=a+4|0;if(b>>>0>=k>>>0){a=b;continue}f=c[b>>2]|0;d=c[a>>2]|0;g=+h[d>>3];if(+h[f>>3]!=g){a=b;continue}e=+h[d+8>>3];if(+h[f+8>>3]!=e){a=b;continue}j=a+8|0;f=2;while(1){if(j>>>0>=k>>>0)break;d=c[j>>2]|0;if(!(+h[d>>3]==g)){m=11;break}if(!(+h[d+8>>3]==e)){m=11;break}j=j+4|0;f=f+1|0}if((m|0)==11){m=0;d=c[j>>2]|0;if(+h[d+8>>3]==e){e=(+h[d>>3]-g)/+(f|0);d=(((j>>>0>b>>>0?j:b)+-1+(0-i)|0)>>>2)+1|0;a=1;while(1){if((a|0)==(d|0)){a=j;continue a}i=c[b>>2]|0;h[i>>3]=+h[i>>3]+e*+(a|0);a=a+1|0;b=b+4|0}}}while(1){if(b>>>0>=j>>>0){a=j;continue a}f=c[a>>2]|0;n=c[f+16>>2]|0;i=c[b>>2]|0;d=c[i+16>>2]|0;h[i>>3]=(+h[l+(n*96|0)+56>>3]-+h[l+(n*96|0)+40>>3]+ +h[l+(d*96|0)+56>>3]-+h[l+(d*96|0)+40>>3])*.5+ +h[f>>3];b=b+4|0;a=a+4|0}}return}function _q(a){a=a|0;var b=0.0,d=0.0,e=0.0,f=0,g=0.0,i=0,j=0,k=0;if(a|0)ir();i=c[46845]|0;j=c[i>>2]|0;d=+h[j>>3];h[23272]=d;k=c[46854]|0;f=1;g=+h[j>>3];while(1){if((f|0)>=(k|0))break;a=c[i+(f<<2)>>2]|0;b=+h[a>>3];if(b>3]}else{e=b;b=d}f=f+1|0;d=b;g=e>g?e:g}e=+h[j+8>>3];h[23273]=e;h[23275]=+h[(c[i+(k+-1<<2)>>2]|0)+8>>3]-e;h[23274]=g-d;return}function $q(){var a=0;a=c[46847]|0;if(a>>>0<(c[46848]|0)>>>0){c[46847]=a+4;a=c[a>>2]|0}else a=0;return a|0}function ar(){var a=0,b=0,d=0;a=c[46869]|0;er();d=(c[46846]|0)==0;b=0;while(1){if((b|0)>=(c[46854]|0))break;if(!(d?!(c[a+32>>2]|0):0))fr(a);a=a+96|0;b=b+1|0}return}function br(){var a=0,b=0,c=0,d=0.0,e=0.0,f=0.0,g=0.0,i=0.0,j=0.0;a=l;l=l+32|0;c=a+16|0;b=a;j=+h[23268];i=+h[23266];g=+h[23269];e=+h[23267];d=(i-e)*.05;f=(j-g)*.05;h[b>>3]=f+j;h[b+8>>3]=i+d;h[c>>3]=g-f;h[c+8>>3]=e-d;dr(c,b);l=a;return}function cr(){Gs();Is();Ku();ms();return}function dr(a,b){a=a|0;b=b|0;var c=0.0,d=0.0,e=0.0,f=0.0;f=+h[a>>3];h[23269]=f;e=+h[b>>3];h[23268]=e;c=+h[a+8>>3];h[23267]=c;d=+h[b+8>>3];h[23266]=d;h[23258]=f;h[23260]=f;h[23262]=e;h[23264]=e;h[23265]=d;h[23261]=d;h[23263]=c;h[23259]=c;return}function er(){var a=0,b=0.0,d=0.0,e=0.0,f=0.0,g=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0.0,s=0.0,t=0.0,u=0.0;m=c[46869]|0;g=m+8|0;f=+us(g,186064);e=+us(g,186080);d=+us(g,186096);a=1;b=+us(g,186112);g=m;i=m;j=m;k=m;while(1){l=m+96|0;if((a|0)>=(c[46854]|0))break;q=m+104|0;r=+us(q,186064);n=r>2]|0;o=k+8|0;b=0.0;d=0.0;e=0.0;k=c[k>>2]|0;while(1){f=c[k>>2]|0;if(!f)break;s=k+8|0;r=f+8|0;c[g>>2]=c[o>>2];c[g+4>>2]=c[o+4>>2];c[g+8>>2]=c[o+8>>2];c[g+12>>2]=c[o+12>>2];c[i>>2]=c[s>>2];c[i+4>>2]=c[s+4>>2];c[i+8>>2]=c[s+8>>2];c[i+12>>2]=c[s+12>>2];c[j>>2]=c[r>>2];c[j+4>>2]=c[r+4>>2];c[j+8>>2]=c[r+8>>2];c[j+12>>2]=c[r+12>>2];q=+gr(g,i,j);c[g>>2]=c[o>>2];c[g+4>>2]=c[o+4>>2];c[g+8>>2]=c[o+8>>2];c[g+12>>2]=c[o+12>>2];c[i>>2]=c[s>>2];c[i+4>>2]=c[s+4>>2];c[i+8>>2]=c[s+8>>2];c[i+12>>2]=c[s+12>>2];c[j>>2]=c[r>>2];c[j+4>>2]=c[r+4>>2];c[j+8>>2]=c[r+8>>2];c[j+12>>2]=c[r+12>>2];hr(g,i,j,m,n);b=+h[n>>3]*q+b;d=+h[m>>3]*q+d;e=q+e;k=f}h[a+8>>3]=d/e;h[a+16>>3]=b/e;l=p;return}function gr(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0,e=0.0,f=0.0;d=+h[b+8>>3];f=+h[c+8>>3];e=+h[a+8>>3];return +(+B(+((f-e)*+h[b>>3]+(d-f)*+h[a>>3]+ +h[c>>3]*(e-d)))*.5)}function hr(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;h[d>>3]=(+h[b>>3]+ +h[a>>3]+ +h[c>>3])*.3333333333333333;h[e>>3]=(+h[b+8>>3]+ +h[a+8>>3]+ +h[c+8>>3])*.3333333333333333;return}function ir(){var a=0,b=0,d=0,e=0;a=c[46845]|0;if(!a){a=KK(c[46854]<<2)|0;c[46845]=a;c[46848]=a+(c[46854]<<2)}d=c[46869]|0;Vs();e=c[46854]|0;b=0;while(1){if((b|0)>=(e|0))break;c[a>>2]=d+8;c[d+88>>2]=0;c[d+28>>2]=1;d=d+96|0;a=a+4|0;b=b+1|0}o4(c[46845]|0,e,4,69);c[46847]=c[46845];return}function jr(a,b){a=a|0;b=b|0;var d=0.0,e=0.0;a=c[a>>2]|0;b=c[b>>2]|0;d=+h[a+8>>3];e=+h[b+8>>3];if(!(de)){e=+h[a>>3];d=+h[b>>3];if(ed&1}else a=1;else a=-1;return a|0}function kr(){var a=0,b=0,d=0,e=0;d=c[46854]|0;a=0;b=c[46869]|0;while(1){if((a|0)>=(d|0))break;e=b+8|0;h[e>>3]=+h[e>>3]*1.05;e=b+16|0;h[e>>3]=+h[e>>3]*1.05;a=a+1|0;b=b+96|0}return}function lr(b,e){b=b|0;e=e|0;var f=0,i=0,j=0,k=0,m=0,n=0.0,o=0.0;m=l;l=l+48|0;k=m;j=m+24|0;f=QA(e,93112)|0;if(!((f|0)!=0?(mr(f,j,1.0,0.0)|0)!=0:0))i=3;do if((i|0)==3){e=QA(e,93116)|0;if(e|0?mr(e,j,.800000011920929,4.0)|0:0)break;g[j+4>>2]=4.0;g[j>>2]=4.0;a[j+8>>0]=1}while(0);if(0){i=c[15712]|0;o=+g[j>>2];n=+g[j+4>>2];c[k>>2]=d[j+8>>0];h[k+8>>3]=o;h[k+16>>3]=n;w4(i,93121,k)|0};c[b>>2]=c[j>>2];c[b+4>>2]=c[j+4>>2];c[b+8>>2]=c[j+8>>2];l=m;return}function mr(b,d,e,f){b=b|0;d=d|0;e=+e;f=+f;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0.0;o=l;l=l+16|0;m=o;j=o+12|0;k=o+8|0;while(1){h=a[b>>0]|0;i=b+1|0;if(!(S2(h<<24>>24)|0))break;else b=i}p=h<<24>>24==43;h=d+8|0;a[h>>0]=p&1;c[m>>2]=j;c[m+4>>2]=k;switch(b5(p?i:b,93154,m)|0){case 0:{b=0;break}case 1:{c[k>>2]=c[j>>2];n=5;break}default:n=5}if((n|0)==5){do if(a[h>>0]|0){if(e>1.0){q=+g[j>>2]/e;g[d>>2]=q>f?f:q;e=+g[k>>2]/e;e=e>f?f:e;break}if(e<1.0){q=+g[j>>2]/e;g[d>>2]=q>2]/e;e=e>2]=c[j>>2];e=+g[k>>2];break}}else{g[d>>2]=+g[j>>2]/e+1.0;e=+g[k>>2]/e+1.0}while(0);g[d+4>>2]=e;b=1}l=o;return b|0}function nr(a,b){a=a|0;b=b|0;var c=0,d=0;d=l;l=l+32|0;c=d;if((tB(a)|0)<2)a=0;else{Oq(a,b,c)|0;a=Qq(a,c)|0}l=d;return a|0}function or(a){a=a|0;return nr(a,QA(a,92507)|0)|0}function pr(b,e){b=b|0;e=e|0;var f=0,i=0,j=0,k=0,m=0,n=0.0,o=0.0;m=l;l=l+48|0;k=m;j=m+24|0;f=QA(e,93116)|0;if(!((f|0)!=0?(mr(f,j,1.0,0.0)|0)!=0:0))i=3;do if((i|0)==3){e=QA(e,93112)|0;if(e|0?mr(e,j,1.25,3.200000047683716)|0:0)break;g[j+4>>2]=3.200000047683716;g[j>>2]=3.200000047683716;a[j+8>>0]=1}while(0);if(0){i=c[15712]|0;o=+g[j>>2];n=+g[j+4>>2];c[k>>2]=d[j+8>>0];h[k+8>>3]=o;h[k+16>>3]=n;w4(i,93183,k)|0};c[b>>2]=c[j>>2];c[b+4>>2]=c[j+4>>2];c[b+8>>2]=c[j+8>>2];l=m;return}function qr(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;p=l;l=l+16|0;o=p;h=0;while(1){if((h|0)>=(d|0))break;c[e+(h<<2)>>2]=-1;h=h+1|0}c[e+(a<<2)>>2]=0;rr(f,a);a:do if(!(c[b+8>>2]|0)){h=2147483647;b:while(1){if(!((sr(f,o)|0)<<24>>24))break a;j=c[o>>2]|0;h=c[e+(j<<2)>>2]|0;i=b+(j*20|0)|0;j=b+(j*20|0)+4|0;k=h+1|0;a=1;while(1){if((a|0)>=(c[i>>2]|0))continue b;m=c[(c[j>>2]|0)+(a<<2)>>2]|0;n=e+(m<<2)|0;if((c[n>>2]|0)<0){c[n>>2]=k;tr(f,m)|0}a=a+1|0}}}else{h=2147483647;c:while(1){if(!((sr(f,o)|0)<<24>>24))break a;k=c[o>>2]|0;h=c[e+(k<<2)>>2]|0;i=b+(k*20|0)|0;j=b+(k*20|0)+4|0;k=b+(k*20|0)+8|0;a=1;while(1){if((a|0)>=(c[i>>2]|0))continue c;m=c[(c[j>>2]|0)+(a<<2)>>2]|0;n=e+(m<<2)|0;if((c[n>>2]|0)<0){c[n>>2]=h+~~+g[(c[k>>2]|0)+(a<<2)>>2];tr(f,m)|0}a=a+1|0}}}while(0);a=h+10|0;h=0;while(1){if((h|0)>=(d|0))break;i=e+(h<<2)|0;if((c[i>>2]|0)<0)c[i>>2]=a;h=h+1|0}l=p;return}function rr(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a+12>>2]=0;c[a+8>>2]=1;return}function sr(a,b){a=a|0;b=b|0;var d=0,e=0;d=a+12|0;e=c[d>>2]|0;if((e|0)<(c[a+8>>2]|0)){a=c[a>>2]|0;c[d>>2]=e+1;c[b>>2]=c[a+(e<<2)>>2];a=1}else a=0;return a|0}function tr(a,b){a=a|0;b=b|0;var d=0,e=0;d=a+8|0;e=c[d>>2]|0;if((e|0)<(c[a+4>>2]|0)){a=c[a>>2]|0;c[d>>2]=e+1;c[a+(e<<2)>>2]=b;a=1}else a=0;return a|0}function ur(a,b){a=a|0;b=b|0;c[a>>2]=KK(b<<2)|0;c[a+4>>2]=b;c[a+8>>2]=0;c[a+12>>2]=0;return}function vr(a){a=a|0;U1(c[a>>2]|0);return}function wr(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0,g=0,i=0;if(!0)g=0;else{U4(93216,25,1,c[15712]|0)|0;g=0}while(1){if((g|0)>=(a|0))break;i=b+(g<<2)|0;f=0;e=0.0;while(1){if((f|0)==(a|0))break;if((g|0)!=(f|0))e=+h[(c[i>>2]|0)+(f<<3)>>3]+e;f=f+1|0}h[(c[i>>2]|0)+(g<<3)>>3]=-e;g=g+1|0}return wt(b,d,a+-1|0)|0}function xr(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0,k=0,l=0.0;j=un(b,b,0.0)|0;k=un(b,b,0.0)|0;e=jC(a)|0;while(1){if(!e)break;d=aB(a,e)|0;while(1){if(!d)break;g=c[d>>2]&3;f=(c[c[((g|0)==3?d:d+48|0)+40>>2]>>2]|0)>>>4;g=(c[c[((g|0)==2?d:d+-48|0)+40>>2]>>2]|0)>>>4;if((f|0)!=(g|0)){l=-1.0/+h[(c[d+16>>2]|0)+136>>3];h[(c[j+(g<<2)>>2]|0)+(f<<3)>>3]=l;h[(c[j+(f<<2)>>2]|0)+(g<<3)>>3]=l}d=bB(a,d,e)|0}e=kC(a,e)|0}i=wr(b,j,k)|0;a:do if(i|0){f=a+16|0;e=0;while(1){if((e|0)>=(b|0))break a;g=k+(e<<2)|0;d=0;while(1){if((d|0)==(b|0))break;a=c[g>>2]|0;h[(c[(c[(c[f>>2]|0)+160>>2]|0)+(e<<2)>>2]|0)+(d<<3)>>3]=+h[(c[k+(d<<2)>>2]|0)+(d<<3)>>3]+ +h[a+(e<<3)>>3]+ +h[a+(d<<3)>>3]*-2.0;d=d+1|0}e=e+1|0}}while(0);vn(j);vn(k);return i|0}function yr(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;var g=0.0,h=0.0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=l;l=l+16|0;j=s;n=d<<3;o=KK(n)|0;p=KK(n)|0;q=KK(n)|0;k=KK(n)|0;m=KK(n)|0;n=KK(n)|0;Ot(d,c,n);Ht(d,n);Ht(d,b);Jt(a,d,b,k);Lt(d,n,k,o);Ot(d,o,p);i=f+-1|0;c=0;g=+Pt(d,o,o);while(1){if((c|0)>=(f|0)){c=0;break}if(!(+Qt(d,o)>e)){c=0;break}Jt(a,d,p,q);h=+Pt(d,p,q);if(h==0.0){c=0;break}h=g/h;Nt(d,p,h,m);Mt(d,b,m,b);if((c|0)<(i|0)){Nt(d,q,h,q);Lt(d,o,q,o);h=+Pt(d,o,o);if(g==0.0){r=7;break}Nt(d,p,h/g,p);Mt(d,o,p,p);g=h}c=c+1|0}if((r|0)==7){gA(1,93242,j)|0;c=1}U1(o);U1(p);U1(q);U1(k);U1(m);U1(n);l=s;return c|0}function zr(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;g=g|0;var h=0.0,i=0.0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=l;l=l+16|0;j=s;o=d<<3;p=KK(o)|0;q=KK(o)|0;k=KK(o)|0;m=KK(o)|0;n=KK(o)|0;o=KK(o)|0;Ot(d,c,o);if(g<<24>>24){Ht(d,o);Ht(d,b)}Kt(a,d,b,m);Lt(d,o,m,p);Ot(d,p,q);g=f+-1|0;c=0;h=+Pt(d,p,p);while(1){if((c|0)>=(f|0)){c=0;break}if(!(+Qt(d,p)>e)){c=0;break}Kt(a,d,q,k);i=+Pt(d,q,k);if(i==0.0){c=0;break}i=h/i;Nt(d,q,i,n);Mt(d,b,n,b);if((c|0)<(g|0)){Nt(d,k,i,k);Lt(d,p,k,p);i=+Pt(d,p,p);if(h==0.0){r=9;break}Nt(d,q,i/h,q);Mt(d,p,q,q);h=i}c=c+1|0}if((r|0)==9){gA(1,93242,j)|0;c=1}U1(p);U1(q);U1(k);U1(m);U1(n);U1(o);l=s;return c|0}function Ar(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;var g=0.0,h=0.0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;q=l;l=l+16|0;j=q;k=d<<2;m=JK(k)|0;n=JK(k)|0;o=JK(k)|0;k=JK(k)|0;St(d,b);St(d,c);Tt(a,d,b,k);St(d,k);Ut(d,c,k,m);Yt(d,m,n);i=f+-1|0;c=0;g=+Zt(d,m,m);while(1){if((c|0)>=(f|0)){c=0;break}if(!(+au(d,m)>e)){c=0;break}St(d,n);St(d,b);St(d,m);Tt(a,d,n,o);St(d,o);h=+Zt(d,n,o);if(h==0.0){c=0;break}h=g/h;Wt(d,b,h,n);if((c|0)<(i|0)){Wt(d,m,-h,o);h=+Zt(d,m,m);if(g==0.0){p=7;break}Xt(d,n,h/g,n);Vt(d,m,n,n);g=h}c=c+1|0}if((p|0)==7){gA(1,93242,j)|0;c=1}U1(m);U1(n);U1(o);U1(k);l=q;return c|0}function Br(a,b,d,e,f,i,j,k,m,n){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;i=i|0;j=j|0;k=k|0;m=m|0;n=+n;var o=0,p=0,q=0.0,r=0,s=0,t=0,u=0,v=0.0,w=0,x=0,y=0,z=0,A=0.0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0.0;M=l;l=l+48|0;F=M+24|0;E=M+16|0;D=M+8|0;C=M;J=M+40|0;K=M+36|0;H=M+32|0;s=j&4;c[J>>2]=0;c[K>>2]=0;a:do if(c[a+16>>2]|0){p=0;o=0;while(1){if((p|0)>=(b|0))break;t=c[a+(p*20|0)>>2]|0;u=a+(p*20|0)+16|0;r=1;while(1){if((r|0)>=(t|0))break;if(!(o<<24>>24))o=+g[(c[u>>2]|0)+(r<<2)>>2]!=0.0;else o=1;r=r+1|0;o=o&1}p=p+1|0}if(o<<24>>24){z=(s|0)!=0;if(z){r=e+4|0;b:do if((i|0)>2){o=i+-1|0;if((on(a,b,d,r,f,o,j,k,15)|0)<0){o=-1;break a}p=e+(o<<2)|0;o=0;while(1){if((o|0)>=(b|0))break b;h[(c[p>>2]|0)+(o<<3)>>3]=+h[(c[r>>2]|0)+(o<<3)>>3];o=o+1|0}}while(0);y=c[e>>2]|0;w=c[r>>2]|0;if((ju(a,b,w,b)|0)==0?(ty(a,b,.01,.1,w,J,K,H)|0)==0:0){x=c[H>>2]|0;if((x|0)<1){o=on(a,b,d,e,f,i,j,k,m)|0;break}c:do if(n>0.0){s=c[J>>2]|0;t=c[K>>2]|0;u=x+-1|0;q=0.0;r=0;while(1){if((r|0)>=(x|0))break c;o=c[t+(r<<2)>>2]|0;A=n-q-+h[w+(c[s+(o<<2)>>2]<<3)>>3]+ +h[w+(c[s+(o+-1<<2)>>2]<<3)>>3];q=(A<0.0?0.0:A)+q;if((r|0)<(u|0))p=c[t+(r+1<<2)>>2]|0;else p=b;while(1){if((o|0)>=(p|0))break;I=w+(c[s+(o<<2)>>2]<<3)|0;h[I>>3]=+h[I>>3]+q;o=o+1|0}r=r+1|0}}while(0);if((i|0)==2?(Qu(a,b,w,y,+h[23294])|0)!=0:0){p=0;o=-1}else L=33}else{p=0;o=-1}}else{hn(a,b,i,e,f)|0;if(!(ty(a,b,.01,.1,0,J,K,H)|0))L=33;else{p=0;o=-1}}d:do if((L|0)==33){if((b|0)==1){o=0;break a}I=KK(c[H>>2]<<2)|0;if(!m){o=0;break a}if(0)TO();switch(k|0){case 2:{if(0)U4(93290,24,1,c[15712]|0)|0;o=nn(a,b)|0;L=46;break}case 1:{o=jn(a,b)|0;if(!o){gA(0,93315,C)|0;gA(3,93364,D)|0;L=47}else G=o;break}case 3:{if(0)U4(93417,21,1,c[15712]|0)|0;o=kn(a,b)|0;L=46;break}default:L=47}if((L|0)==46)if(!o)L=47;else G=o;if((L|0)==47){if(0)U4(93439,26,1,c[15712]|0)|0;G=mn(a,b)|0}if(0){a=c[15712]|0;h[E>>3]=+UO();w4(a,93466,E)|0;U4(93478,25,1,a)|0;TO()}a=b+-1|0;y=(O(a,b)|0)/2|0;E=y+b|0;e:do if(!z){q=1.0;p=0;while(1){if((p|0)>=(i|0))break;r=e+(p<<2)|0;o=0;while(1){if((o|0)>=(b|0))break;A=+B(+(+h[(c[r>>2]|0)+(o<<3)>>3]));q=A>q?A:q;o=o+1|0}p=p+1|0}q=1.0/q;p=0;while(1){if((p|0)>=(i|0))break e;r=e+(p<<2)|0;o=0;while(1){if((o|0)>=(b|0))break;D=(c[r>>2]|0)+(o<<3)|0;h[D>>3]=+h[D>>3]*(10.0*q);o=o+1|0}p=p+1|0}}while(0);f:do if(n>0.0){v=+(y|0);o=0;q=0.0;s=0;g:while(1){if((s|0)>=(a|0))break;t=s+1|0;r=o;p=t;while(1){o=r+1|0;if((p|0)>=(b|0)){s=t;continue g}A=+ft(e,i,s,p);r=o;q=A/+g[G+(o<<2)>>2]+q;p=p+1|0}}q=q/v;o=0;while(1){if((o|0)>=(E|0)){o=0;break f}D=G+(o<<2)|0;g[D>>2]=+g[D>>2]*q;o=o+1|0}}else o=0;while(0);while(1){if((o|0)>=(i|0))break;Ht(b,c[e+(o<<2)>>2]|0);o=o+1|0}p=c[e+4>>2]|0;q=+h[p>>3];o=0;while(1){if((o|0)>=(b|0))break;D=p+(o<<3)|0;h[D>>3]=+h[D>>3]-q;o=o+1|0}u=i<<2;D=KK(u)|0;x=b<<2;w=O(x,i)|0;r=KK(w)|0;o=0;while(1){if((o|0)>=(i|0))break;s=r+((O(o,b)|0)<<2)|0;c[D+(o<<2)>>2]=s;t=e+(o<<2)|0;p=0;while(1){if((p|0)>=(b|0))break;g[s+(p<<2)>>2]=+h[(c[t>>2]|0)+(p<<3)>>3];p=p+1|0}o=o+1|0}v=+(y|0);if(0){C=c[15712]|0;h[F>>3]=+UO();w4(C,93504,F)|0}bu(E,G);cu(E,G);C=KK(b<<3)|0;_t(b,0.0,C);o=0;r=0;while(1){if((r|0)>=(a|0)){o=b;p=0;r=0;break}s=b-r|0;q=0.0;p=1;while(1){o=o+1|0;if((p|0)>=(s|0))break;A=+g[G+(o<<2)>>2];F=C+(p+r<<3)|0;h[F>>3]=+h[F>>3]-A;q=q+A;p=p+1|0}F=C+(r<<3)|0;h[F>>3]=+h[F>>3]-q;r=r+1|0}while(1){if((p|0)>=(b|0))break;g[G+(r<<2)>>2]=+h[C+(p<<3)>>3];F=o+r|0;o=o+-1|0;p=p+1|0;r=F}k=KK(u)|0;c[k>>2]=KK(w)|0;o=1;while(1){if((o|0)>=(i|0))break;c[k+(o<<2)>>2]=(c[k>>2]|0)+((O(o,b)|0)<<2);o=o+1|0}z=KK(x)|0;f=KK(x)|0;j=KK(E<<2)|0;p=Eu(G,b)|0;d=Ju(G,b,c[J>>2]|0,c[K>>2]|0,c[H>>2]|0)|0;y=k+4|0;r=0;A=1797693134862315708145274.0e284;o=0;while(1){if(!(r<<24>>24==0&(o|0)<(m|0)))break;_t(b,0.0,C);du(E,G,j);w=0;t=0;while(1){if((w|0)>=(a|0)){r=0;s=b;t=0;break}x=b-w+-1|0;$t(b,0.0,f);r=0;while(1){if((r|0)>=(i|0))break;H=D+(r<<2)|0;$t(x,+g[(c[H>>2]|0)+(w<<2)>>2],z);Wt(x,z,-1.0,(c[H>>2]|0)+(w<<2)+4|0);bu(x,z);Vt(x,z,f,f);r=r+1|0}eu(x,f);r=0;while(1){if((r|0)>=(x|0))break;s=f+(r<<2)|0;q=+g[s>>2];if(q>=3402823466385288598117041.0e14|q<0.0)g[s>>2]=0.0;r=r+1|0}u=w+1|0;q=0.0;r=t;s=0;while(1){r=r+1|0;if((s|0)>=(x|0))break;H=j+(r<<2)|0;N=+g[H>>2]*+g[f+(s<<2)>>2];g[H>>2]=N;H=C+(u+s<<3)|0;h[H>>3]=+h[H>>3]-N;q=q+N;s=s+1|0}t=C+(w<<3)|0;h[t>>3]=+h[t>>3]-q;w=u;t=r}while(1){if((r|0)>=(b|0)){r=0;break}g[j+(t<<2)>>2]=+h[C+(r<<3)>>3];H=s+t|0;r=r+1|0;s=s+-1|0;t=H}while(1){if((r|0)>=(i|0)){q=0.0;r=0;break}Tt(j,b,c[D+(r<<2)>>2]|0,c[k+(r<<2)>>2]|0);r=r+1|0}while(1){if((r|0)>=(i|0))break;q=+Zt(b,c[D+(r<<2)>>2]|0,c[k+(r<<2)>>2]|0)+q;r=r+1|0}q=q*2.0+v;r=0;while(1){if((r|0)>=(i|0))break;H=D+(r<<2)|0;Tt(G,b,c[H>>2]|0,z);q=q-+Zt(b,c[H>>2]|0,z);r=r+1|0}N=+B(+(q-A))/+B(+(A+1.0e-10));r=((o|0)>1&q>A|N<+h[23294])&1;s=0;while(1){if((s|0)>=(i|0))break;if((s|0)!=1){if(Ar(G,c[D+(s<<2)>>2]|0,c[k+(s<<2)>>2]|0,b,.001,b)|0){o=-1;break d}}else Fu(d,c[y>>2]|0,D,i,1,15,I,n)|0;s=s+1|0}A=q;o=o+1|0}U1(I);Iu(d);if(D|0){r=0;while(1){if((r|0)>=(i|0))break;t=D+(r<<2)|0;u=e+(r<<2)|0;s=0;while(1){if((s|0)>=(b|0))break;h[(c[u>>2]|0)+(s<<3)>>3]=+g[(c[t>>2]|0)+(s<<2)>>2];s=s+1|0}r=r+1|0}U1(c[D>>2]|0);U1(D)}if(k|0){U1(c[k>>2]|0);U1(k)}U1(z);U1(f);U1(C);U1(G);U1(j)}while(0);U1(c[J>>2]|0);U1(c[K>>2]|0);if(p){U1(c[p>>2]|0);U1(p)}}else L=10}else L=10;while(0);if((L|0)==10)o=on(a,b,d,e,f,i,j,k,m)|0;l=M;return o|0}function Cr(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0,k=0,m=0;m=l;l=l+48|0;f=m+24|0;g=m+12|0;d=m;i=tB(a)|0;k=KK(i*48|0)|0;lr(d,a);c[g>>2]=c[d>>2];c[g+4>>2]=c[d+4>>2];c[g+8>>2]=c[d+8>>2];d=jC(a)|0;e=k;while(1){if(!d)break;c[f>>2]=c[g>>2];c[f+4>>2]=c[g+4>>2];c[f+8>>2]=c[g+8>>2];Dr(d,e,f);d=kC(a,d)|0;e=e+48|0}a:do if(!(Er(k,i)|0))d=0;else{switch(b|0){case 9:{Gr(a,k,i,70,1);Ir(a,k,i,71,1);d=0;e=k;break}case 10:{Ir(a,k,i,71,1);Gr(a,k,i,70,1);d=0;e=k;break}case 7:{Gr(a,k,i,72,1);Ir(a,k,i,71,1);j=9;break}case 8:{j=9;break}case 13:{j=10;break}case 14:{Ir(a,k,i,71,0);Gr(a,k,i,70,0);d=0;e=k;break}case 12:{Ir(a,k,i,73,0);Gr(a,k,i,70,0);d=0;e=k;break}default:{Gr(a,k,i,72,0);Ir(a,k,i,71,0);d=0;e=k}}if((j|0)==9){Ir(a,k,i,73,1);Gr(a,k,i,70,1);j=10}if((j|0)==10){Gr(a,k,i,70,0);Ir(a,k,i,71,0);d=0;e=k}while(1){if((d|0)>=(i|0)){d=1;break a}g=c[e+16>>2]|0;j=c[(c[(c[e+20>>2]|0)+16>>2]|0)+132>>2]|0;h[j>>3]=+(c[e+12>>2]|0)*1.3888888888888887e-03;h[j+8>>3]=+(g|0)*1.3888888888888887e-03;d=d+1|0;e=e+48|0}}while(0);U1(k);l=m;return d|0}function Dr(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,i=0,j=0,k=0,l=0.0,m=0.0;f=c[b+16>>2]|0;k=c[f+132>>2]|0;l=+h[k>>3]*720.0;j=~~(l+(l>=0.0?.5:-.5));l=+h[k+8>>3]*720.0;k=~~(l+(l>=0.0?.5:-.5));if(!(a[e+8>>0]|0)){m=+h[f+32>>3]*72.0*(+g[e>>2]*5.0);l=+h[f+40>>3]*72.0*(+g[e+4>>2]*5.0);i=~~(m+(m>=0.0?.5:-.5));f=~~(l+(l>=0.0?.5:-.5))}else{l=+h[f+32>>3]*36.0;m=+h[f+40>>3]*36.0;i=~~((+g[e>>2]+ +(~~(l+(l>=0.0?.5:-.5))|0))*10.0);f=~~((+g[e+4>>2]+ +(~~(m+(m>=0.0?.5:-.5))|0))*10.0)}c[d+12>>2]=j;c[d+16>>2]=k;c[d+20>>2]=b;c[d+32>>2]=j-i;c[d+36>>2]=k-f;c[d+40>>2]=i+j;c[d+44>>2]=f+k;return}function Er(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;k=b+-1|0;d=0;a:while(1){if((d|0)>=(k|0)){a=0;break}j=a+48|0;d=d+1|0;g=a+32|0;h=a+40|0;i=a+36|0;f=a+44|0;a=j;e=d;while(1){if((e|0)>=(b|0)){a=j;continue a}if((((c[g>>2]|0)<=(c[a+40>>2]|0)?(c[a+32>>2]|0)<=(c[h>>2]|0):0)?(c[i>>2]|0)<=(c[a+44>>2]|0):0)?(c[a+36>>2]|0)<=(c[f>>2]|0):0){a=1;break a}a=a+48|0;e=e+1|0}}return a|0}function Fr(a,b){a=a|0;b=b|0;if((c[a+36>>2]|0)>(c[b+44>>2]|0))a=0;else a=(c[b+36>>2]|0)<=(c[a+44>>2]|0)&1;return a|0}function Gr(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;i=Vz(18168,c[4584]|0)|0;g=b;h=0;while(1){if((h|0)>=(d|0))break;c[g+8>>2]=c[g+12>>2];nb[c[i>>2]&63](i,g,1)|0;g=g+48|0;h=h+1|0}if(!f)h=Or(a,i,e,74)|0;else h=Nr(i,e,74)|0;uL(h,2,2147483647)|0;g=0;while(1){if((g|0)>=(d|0))break;f=b+12|0;a=c[(c[(c[b+24>>2]|0)+16>>2]|0)+232>>2]|0;e=a-(c[f>>2]|0)|0;c[f>>2]=a;f=b+32|0;c[f>>2]=(c[f>>2]|0)+e;f=b+40|0;c[f>>2]=(c[f>>2]|0)+e;b=b+48|0;g=g+1|0}Pr(h);Rz(i)|0;return}function Hr(a,b){a=a|0;b=b|0;if((c[a+32>>2]|0)>(c[b+40>>2]|0))a=0;else a=(c[b+32>>2]|0)<=(c[a+40>>2]|0)&1;return a|0}function Ir(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;i=Vz(18168,c[4584]|0)|0;g=b;h=0;while(1){if((h|0)>=(d|0))break;c[g+8>>2]=c[g+16>>2];nb[c[i>>2]&63](i,g,1)|0;g=g+48|0;h=h+1|0}if(!f)h=Or(a,i,e,75)|0;else h=Nr(i,e,75)|0;uL(h,2,2147483647)|0;g=0;while(1){if((g|0)>=(d|0))break;f=b+16|0;a=c[(c[(c[b+24>>2]|0)+16>>2]|0)+232>>2]|0;e=a-(c[f>>2]|0)|0;c[f>>2]=a;f=b+36|0;c[f>>2]=(c[f>>2]|0)+e;f=b+44|0;c[f>>2]=(c[f>>2]|0)+e;b=b+48|0;g=g+1|0}Pr(h);Rz(i)|0;return}function Jr(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;d=a+32|0;e=b+32|0;if((c[a+36>>2]|0)<=(c[b+44>>2]|0)?(c[b+36>>2]|0)<=(c[a+44>>2]|0):0)if((c[a+40>>2]|0)<(c[e>>2]|0))a=1;else{g=Mr(d,e)|0;g=g-(c[b+12>>2]|0)+(c[a+12>>2]|0)|0;b=c[b+16>>2]|0;a=c[a+16>>2]|0;f=(b|0)<(a|0);e=Lr(d,e)|0;a=(g|0)<=(e-(f?a:b)+(f?b:a)|0)&1}else a=0;return a|0}function Kr(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;d=a+32|0;e=b+32|0;if((c[d>>2]|0)<=(c[b+40>>2]|0)?(c[e>>2]|0)<=(c[a+40>>2]|0):0)if((c[a+44>>2]|0)<(c[b+36>>2]|0))a=1;else{g=Lr(d,e)|0;g=g-(c[b+16>>2]|0)+(c[a+16>>2]|0)|0;b=c[b+12>>2]|0;a=c[a+12>>2]|0;f=(b|0)<(a|0);e=Mr(d,e)|0;a=(g|0)<=(e-(f?a:b)+(f?b:a)|0)&1}else a=0;return a|0}function Lr(a,b){a=a|0;b=b|0;return ((c[a+12>>2]|0)-(c[a+4>>2]|0)+(c[b+12>>2]|0)-(c[b+4>>2]|0)|0)/2|0|0}function Mr(a,b){a=a|0;b=b|0;return ((c[a+8>>2]|0)-(c[a>>2]|0)+(c[b+8>>2]|0)-(c[b>>2]|0)|0)/2|0|0}function Nr(d,e,f){d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;x=l;l=l+16|0;v=x;a[v>>0]=a[18588]|0;a[v+1>>0]=a[18589]|0;a[v+2>>0]=a[18590]|0;a[v+3>>0]=a[18591]|0;w=oB(93515,v,0)|0;TC(w,137483,280,1)|0;g=Tz(d)|0;h=-2147483647;u=0;while(1){if(!g)break;s=c[g+8>>2]|0;t=u+((h|0)!=(s|0)&1)|0;g=c[g>>2]|0;h=s;u=t}s=w+16|0;t=(u<<3)+-4|0;n=0;j=0;g=0;h=0;m=0;r=Tz(d)|0;i=-2147483647;while(1){if(!r)break;q=c[r+8>>2]|0;if((i|0)!=(q|0)){p=tC(w,KB(c[r+20>>2]|0)|0,1)|0;TC(p,137447,304,1)|0;o=p+16|0;g=c[o>>2]|0;c[g+112>>2]=r;if(!h){c[(c[s>>2]|0)+192>>2]=p;n=p}else{c[(c[n+16>>2]|0)+164>>2]=p;n=h}c[g+176>>2]=0;k=j+1|0;i=JK(k<<2)|0;c[(c[o>>2]|0)+172>>2]=i;if(!m){j=k;k=p;m=p;g=p;h=n;i=q}else{i=m+16|0;c[(c[i>>2]|0)+184>>2]=0;j=JK((m|0)==(n|0)?t:u-j<<2)|0;c[(c[i>>2]|0)+180>>2]=j;j=iB(w,m,p,0,1)|0;TC(j,137460,176,1)|0;g=c[j+16>>2]|0;b[g+170>>1]=10;c[g+156>>2]=1;g=c[i>>2]|0;h=c[g+180>>2]|0;if(!h)g=KK((c[g+184>>2]<<2)+8|0)|0;else g=MK(h,(c[g+184>>2]<<2)+8|0)|0;m=c[i>>2]|0;c[m+180>>2]=g;m=m+184|0;h=c[m>>2]|0;c[m>>2]=h+1;c[g+(h<<2)>>2]=j;g=c[i>>2]|0;c[(c[g+180>>2]|0)+(c[g+184>>2]<<2)>>2]=0;g=c[o>>2]|0;h=c[g+172>>2]|0;if(!h)g=KK((c[g+176>>2]<<2)+8|0)|0;else g=MK(h,(c[g+176>>2]<<2)+8|0)|0;h=c[o>>2]|0;c[h+172>>2]=g;h=h+176|0;m=c[h>>2]|0;c[h>>2]=m+1;c[g+(m<<2)>>2]=j;j=c[o>>2]|0;c[(c[j+172>>2]|0)+(c[j+176>>2]<<2)>>2]=0;j=k;k=p;m=p;g=p;h=n;i=q}}else{k=g;g=n}c[r+24>>2]=k;n=g;g=k;r=c[r>>2]|0}m=m+16|0;c[(c[m>>2]|0)+184>>2]=0;g=JK(4)|0;c[(c[m>>2]|0)+180>>2]=g;a[v>>0]=a[18588]|0;a[v+1>>0]=a[18589]|0;a[v+2>>0]=a[18590]|0;a[v+3>>0]=a[18591]|0;m=oB(93562,v,0)|0;g=Tz(d)|0;while(1){if(!g)break;v=tC(m,KB(c[g+20>>2]|0)|0,1)|0;TC(v,137447,304,1)|0;c[g+28>>2]=v;c[(c[v+16>>2]|0)+112>>2]=g;g=c[g>>2]|0}g=0;k=Tz(d)|0;h=-2147483647;a:while(1){if(!k)break;j=c[k+8>>2]|0;b:do if((h|0)==(j|0))j=h;else{g=k;while(1){g=c[g>>2]|0;if(!g)break a;if((c[g+8>>2]|0)!=(j|0))break b}}while(0);i=k+28|0;h=g;while(1){if(!h)break;if(lb[e&127](k,h)|0)iB(m,c[i>>2]|0,c[h+28>>2]|0,0,1)|0;h=c[h>>2]|0}k=c[k>>2]|0;h=j}Qr(m,w,f);sB(m)|0;l=x;return w|0}function Or(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;s=l;l=l+16|0;r=s;a[r>>0]=a[18588]|0;a[r+1>>0]=a[18589]|0;a[r+2>>0]=a[18590]|0;a[r+3>>0]=a[18591]|0;r=oB(93515,r,0)|0;TC(r,137483,280,1)|0;k=r+16|0;h=Tz(e)|0;i=0;while(1){if(!h)break;j=tC(r,KB(c[h+20>>2]|0)|0,1)|0;TC(j,137447,304,1)|0;p=j+16|0;n=c[p>>2]|0;c[n+112>>2]=h;c[h+24>>2]=j;c[n+176>>2]=0;n=JK(4)|0;o=c[p>>2]|0;c[o+172>>2]=n;c[o+184>>2]=0;o=JK(4)|0;c[(c[p>>2]|0)+180>>2]=o;if(!i)c[(c[k>>2]|0)+192>>2]=j;else c[(c[i+16>>2]|0)+164>>2]=j;h=c[h>>2]|0;i=j}m=Tz(e)|0;a:while(1){if(!m)break;n=m+32|0;o=m+24|0;p=m+20|0;h=m;while(1){h=c[h>>2]|0;if(!h)break;if(lb[f&127](m,h)|0){i=lb[g&127](n,h+32|0)|0;j=iB(r,c[o>>2]|0,c[h+24>>2]|0,0,1)|0;TC(j,137460,176,1)|0;if((i|0)>=65536){q=13;break a}k=j+16|0;t=c[k>>2]|0;b[t+170>>1]=i;c[t+156>>2]=1;if(j|0?iB(d,c[p>>2]|0,c[h+20>>2]|0,0,0)|0:0)c[(c[k>>2]|0)+156>>2]=100}}m=c[m>>2]|0}if((q|0)==13)qa(93518,93534,254,93547);m=Tz(e)|0;while(1){if(!m)break;k=c[m+24>>2]|0;n=k+16|0;k=XA(r,k)|0;while(1){if(!k)break;h=c[n>>2]|0;i=c[h+180>>2]|0;if(!i)h=KK((c[h+184>>2]<<2)+8|0)|0;else h=MK(i,(c[h+184>>2]<<2)+8|0)|0;i=c[n>>2]|0;c[i+180>>2]=h;i=i+184|0;j=c[i>>2]|0;c[i>>2]=j+1;c[h+(j<<2)>>2]=k;j=c[n>>2]|0;c[(c[j+180>>2]|0)+(c[j+184>>2]<<2)>>2]=0;j=k+-48|0;h=c[(c[((c[k>>2]&3|0)==2?k:j)+40>>2]|0)+16>>2]|0;i=c[h+172>>2]|0;if(!i)h=KK((c[h+176>>2]<<2)+8|0)|0;else h=MK(i,(c[h+176>>2]<<2)+8|0)|0;c[(c[(c[((c[k>>2]&3|0)==2?k:j)+40>>2]|0)+16>>2]|0)+172>>2]=h;g=c[(c[((c[k>>2]&3|0)==2?k:j)+40>>2]|0)+16>>2]|0;q=c[g+172>>2]|0;g=g+176|0;t=c[g>>2]|0;c[g>>2]=t+1;c[q+(t<<2)>>2]=k;t=c[(c[((c[k>>2]&3|0)==2?k:j)+40>>2]|0)+16>>2]|0;c[(c[t+172>>2]|0)+(c[t+176>>2]<<2)>>2]=0;k=ZA(r,k)|0}m=c[m>>2]|0}l=s;return r|0}function Pr(a){a=a|0;var b=0,d=0,e=0,f=0;f=jC(a)|0;while(1){if(!f)break;d=f+16|0;b=c[d>>2]|0;e=c[b+172>>2]|0;if(e){U1(e);b=c[d>>2]|0}b=c[b+180>>2]|0;if(b|0)U1(b);f=kC(a,f)|0}sB(a)|0;return}function Qr(a,d,e){a=a|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;k=jC(a)|0;while(1){if(!k)break;n=c[(c[k+16>>2]|0)+112>>2]|0;m=c[n+24>>2]|0;n=n+32|0;o=m+16|0;l=XA(a,k)|0;while(1){if(!l)break;h=c[(c[(c[((c[l>>2]&3|0)==2?l:l+-48|0)+40>>2]|0)+16>>2]|0)+112>>2]|0;p=lb[e&127](n,h+32|0)|0;h=c[h+24>>2]|0;i=iB(d,m,h,0,1)|0;TC(i,137460,176,1)|0;j=i+16|0;f=c[j>>2]|0;c[f+156>>2]=1;g=b[f+170>>1]|0;if((p|0)>(g&65535|0)){if(!(g<<16>>16)){f=c[o>>2]|0;g=c[f+180>>2]|0;if(!g)f=KK((c[f+184>>2]<<2)+8|0)|0;else f=MK(g,(c[f+184>>2]<<2)+8|0)|0;q=c[o>>2]|0;c[q+180>>2]=f;q=q+184|0;g=c[q>>2]|0;c[q>>2]=g+1;c[f+(g<<2)>>2]=i;f=c[o>>2]|0;c[(c[f+180>>2]|0)+(c[f+184>>2]<<2)>>2]=0;h=h+16|0;f=c[h>>2]|0;g=c[f+172>>2]|0;if(!g)f=KK((c[f+176>>2]<<2)+8|0)|0;else f=MK(g,(c[f+176>>2]<<2)+8|0)|0;g=c[h>>2]|0;c[g+172>>2]=f;g=g+176|0;q=c[g>>2]|0;c[g>>2]=q+1;c[f+(q<<2)>>2]=i;f=c[h>>2]|0;c[(c[f+172>>2]|0)+(c[f+176>>2]<<2)>>2]=0;f=c[j>>2]|0}b[f+170>>1]=p}l=ZA(a,l)|0}k=kC(a,k)|0}return}function Rr(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;return (c[b>>2]|0)-(c[d>>2]|0)|0}function Sr(b,d){b=b|0;d=d|0;var e=0,f=0,i=0.0,j=0.0,k=0.0,m=0.0,n=0.0,o=0.0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0.0,A=0.0;y=l;l=l+64|0;u=y+24|0;s=y+16|0;r=y+52|0;q=y+40|0;t=y;w=tB(b)|0;x=KK(w*72|0)|0;lr(q,b);k=+g[q>>2];m=+g[q+4>>2];q=(a[q+8>>0]|0)!=0;k=q?k*.013888888888888888:k;m=q?m*.013888888888888888:m;n=k*.5;o=m*.5;e=x;f=jC(b)|0;while(1){if(!f)break;p=c[f+16>>2]|0;i=+h[p+32>>3];if(q){j=+h[p+40>>3]*.5+m;i=i*.5+k}else{j=o*+h[p+40>>3];i=n*i}p=c[p+132>>2]|0;A=+h[p>>3];h[e>>3]=A;z=+h[p+8>>3];h[e+8>>3]=z;h[e+16>>3]=A-i;h[e+24>>3]=z-j;h[e+32>>3]=A+i;h[e+40>>3]=z+j;h[e+48>>3]=i;h[e+56>>3]=j;c[e+64>>2]=f;e=e+72|0;f=kC(b,f)|0}do if((d|0)<0){i=+Tr(x,w);if(i==0.0){U1(x);e=0;break}if(!0){k=i;j=i;v=19}else{v=c[15712]|0;h[s>>3]=i;w4(v,93565,s)|0;k=i;j=i;v=19}}else{f=Ur(x,w,r)|0;e=c[r>>2]|0;if(!e){U1(f);U1(x);e=0;break}if(!d){Wr(t,f,e);i=+h[t>>3];j=+h[t+8>>3]}else{j=+Vr(f,e);i=j}U1(f);if(!0){k=i;v=19}else{v=c[15712]|0;h[u>>3]=i;h[u+8>>3]=j;w4(v,93579,u)|0;k=i;v=19}}while(0);if((v|0)==19){e=0;f=x;while(1){if((e|0)>=(w|0))break;v=c[(c[(c[f+64>>2]|0)+16>>2]|0)+132>>2]|0;h[v>>3]=+h[f>>3]*k;h[v+8>>3]=+h[f+8>>3]*j;e=e+1|0;f=f+72|0}U1(x);e=1}l=y;return e|0}function Tr(a,b){a=a|0;b=b|0;var c=0.0,d=0,e=0.0,f=0.0,g=0.0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;c=0.0;d=0;a:while(1){if((d|0)>=(b|0))break;r=a+72|0;d=d+1|0;m=a+16|0;n=a+8|0;o=a+56|0;p=a+48|0;q=a+32|0;k=a+24|0;l=a+40|0;i=d;j=r;while(1){if((i|0)>=(b|0)){a=r;continue a}if(((+h[m>>3]<=+h[j+32>>3]?+h[j+16>>3]<=+h[q>>3]:0)?+h[k>>3]<=+h[j+40>>3]:0)?+h[j+24>>3]<=+h[l>>3]:0){c=0.0;break a}e=+h[a>>3];f=+h[j>>3];if(e==f)g=t;else{g=+B(+(e-f));g=(+h[j+48>>3]+ +h[p>>3])/g}e=+h[n>>3];f=+h[j+8>>3];if(e==f)e=t;else{e=+B(+(e-f));e=(+h[j+56>>3]+ +h[o>>3])/e}g=ec?g:c}}return +c}function Ur(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0.0,g=0.0,i=0,j=0.0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;k=KK((b<<4)+16|0)|0;m=0;e=0;n=k;o=b;i=k;a:while(1){if((e|0)>=(b|0))break;z=a+72|0;e=e+1|0;y=a+16|0;r=a+32|0;s=a+24|0;u=a+40|0;v=a+8|0;w=a+56|0;x=a+48|0;p=e;q=z;l=i;while(1){if((p|0)==(b|0)){a=z;i=l;continue a}if(((+h[y>>3]<=+h[q+32>>3]?+h[q+16>>3]<=+h[r>>3]:0)?+h[s>>3]<=+h[q+40>>3]:0)?+h[q+24>>3]<=+h[u>>3]:0){i=o+b|0;if((m|0)==(o|0)){k=MK(k,(i<<4)+16|0)|0;n=k;l=k}else i=o;f=+h[a>>3];g=+h[q>>3];if(!(f==g)){f=(+h[q+48>>3]+ +h[x>>3])/+B(+(f-g));if(f<1.0){f=1.0;A=13}}else{f=t;A=13}if((A|0)==13)A=0;g=+h[v>>3];j=+h[q+8>>3];if(!(g==j)){g=(+h[q+56>>3]+ +h[w>>3])/+B(+(g-j));if(g<1.0){g=1.0;A=16}}else{g=t;A=16}if((A|0)==16)A=0;m=m+1|0;h[n+(m<<4)>>3]=f;h[n+(m<<4)+8>>3]=g}else i=o;p=p+1|0;q=q+72|0;o=i}}A=MK(i,(m<<4)+16|0)|0;c[d>>2]=m;return A|0}function Vr(a,b){a=a|0;b=b|0;var c=0,d=0,e=0.0,f=0.0,g=0.0;d=1;e=0.0;while(1){c=a+16|0;if((d|0)>(b|0))break;g=+h[c>>3];f=+h[a+24>>3];f=ge?f:e;a=c}return +e}function Wr(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0,e=0,f=0,g=0,i=0.0;h[b>>3]=1.0;h[b+8>>3]=t;o4(b+16|0,c,16,76);g=KK((c<<4)+16|0)|0;h[g+(c<<4)>>3]=+h[b+(c<<4)>>3];f=c;d=1.0;while(1){h[g+(f<<4)+8>>3]=d;e=f+-1|0;if((f|0)<=0){d=t;e=0;f=0;break}h[g+(e<<4)>>3]=+h[b+(e<<4)>>3];i=+h[(+h[b+(f<<4)+8>>3]>d?b:g)+(f<<4)+8>>3];f=e;d=i}while(1){if((f|0)>(c|0))break;i=+h[g+(f<<4)+8>>3]*+h[g+(f<<4)>>3];b=i>3];h[a>>3]=+h[g+(e<<4)>>3];h[a+8>>3]=i;return}else qa(93596,93534,832,93616)}function Xr(a,b){a=a|0;b=b|0;var c=0.0,d=0.0;c=+h[a>>3];d=+h[b>>3];if(!(cd)){d=+h[a+8>>3];c=+h[b+8>>3];if(dc&1}else a=1;else a=-1;return a|0}function Yr(a,b,d){a=a|0;b=b|0;d=d|0;d=l;l=l+16|0;b=d;c[b>>2]=93631;gA(1,93681,b)|0;l=d;return 0}function Zr(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;e=l;l=l+16|0;d=e;c[d>>2]=93631;gA(1,93709,d)|0;l=e;return 0}function _r(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0;a:do switch(d|0){case 2:{e=KK(16)|0;f=KK(24)|0;c[f+8>>2]=0;c[f+4>>2]=e;c[f>>2]=2;c[e>>2]=0;c[e+4>>2]=1;d=e+8|0;c[f+16>>2]=d;c[f+20>>2]=0;c[f+12>>2]=2;c[d>>2]=1;c[e+12>>2]=0;break}case 1:{e=KK(4)|0;f=KK(12)|0;c[f+8>>2]=0;c[f+4>>2]=e;c[f>>2]=1;c[e>>2]=0;break}default:{Yr(0,0,0)|0;a=(d|0)>0;if(!e){if(!a){f=0;break a}ab()}else{if(!a){f=0;break a}ab()}}}while(0);return f|0}function $r(a){a=a|0;var b=0;if(a|0){b=c[a+4>>2]|0;if(b|0)U1(b);b=c[a+8>>2]|0;if(b|0)U1(b);U1(a)}return}function as(a){a=a|0;var b=0;if(a|0){b=c[a+4>>2]|0;if(b|0)U1(b);b=c[a+8>>2]|0;if(b|0)U1(b);b=c[a+16>>2]|0;if(b|0)U1(b);U1(a)}return}function bs(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;o=l;l=l+16|0;n=o+8|0;m=o;k=W1(c[46849]|0,d<<2)|0;c[46849]=k;f=0;while(1){if((f|0)>=(d|0))break;c[e+(f<<2)>>2]=2147483647;f=f+1|0}c[e+(a<<2)>>2]=0;h=b+(a*20|0)|0;i=b+(a*20|0)+8|0;j=b+(a*20|0)+4|0;f=1;while(1){if((f|0)>=(c[h>>2]|0))break;c[e+(c[(c[j>>2]|0)+(f<<2)>>2]<<2)>>2]=~~+g[(c[i>>2]|0)+(f<<2)>>2];f=f+1|0}cs(n,a,k,e,d);i=-2147483639;while(1){if(!((ds(n,m,c[46849]|0,e)|0)<<24>>24)){f=0;break}f=c[m>>2]|0;a=c[e+(f<<2)>>2]|0;if((a|0)==2147483647){f=0;break}i=b+(f*20|0)|0;j=b+(f*20|0)+4|0;h=b+(f*20|0)+8|0;f=1;while(1){if((f|0)>=(c[i>>2]|0))break;es(n,c[(c[j>>2]|0)+(f<<2)>>2]|0,a+~~+g[(c[h>>2]|0)+(f<<2)>>2]|0,c[46849]|0,e);f=f+1|0}i=a+10|0}while(1){if((f|0)>=(d|0))break;h=e+(f<<2)|0;if((c[h>>2]|0)==2147483647)c[h>>2]=i;f=f+1|0}fs(n);l=o;return}function cs(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0;if((f|0)==1)i=0;else i=KK((f<<2)+-4|0)|0;c[a>>2]=i;j=f+-1|0;c[a+4>>2]=j;g=0;h=0;while(1){if((h|0)>=(f|0))break;if((h|0)!=(b|0)){c[i+(g<<2)>>2]=h;c[d+(h<<2)>>2]=g;g=g+1|0}h=h+1|0}g=(j|0)/2|0;while(1){if((g|0)<=-1)break;gs(a,g,d,e);g=g+-1|0}return}function ds(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;f=a+4|0;if(!(c[f>>2]|0))a=0;else{g=c[a>>2]|0;c[b>>2]=c[g>>2];b=c[g+((c[f>>2]|0)+-1<<2)>>2]|0;c[g>>2]=b;c[d+(b<<2)>>2]=0;c[f>>2]=(c[f>>2]|0)+-1;gs(a,0,d,e);a=1}return a|0}function es(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0;g=f+(b<<2)|0;if((c[g>>2]|0)>(d|0)){j=e+(b<<2)|0;i=c[j>>2]|0;c[g>>2]=d;g=c[a>>2]|0;a=i;while(1){if((a|0)<=0)break;h=a>>>1;i=c[g+(h<<2)>>2]|0;if((c[f+(i<<2)>>2]|0)<=(d|0))break;c[g+(a<<2)>>2]=i;c[e+(i<<2)>>2]=a;a=h}c[g+(a<<2)>>2]=b;c[j>>2]=a}return}function fs(a){a=a|0;a=c[a>>2]|0;if(a|0)U1(a);return}function gs(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;i=a+4|0;while(1){f=b<<1;g=f|1;h=c[i>>2]|0;if(!((f|0)<(h|0)?(j=c[a>>2]|0,(c[e+(c[j+(f<<2)>>2]<<2)>>2]|0)<(c[e+(c[j+(b<<2)>>2]<<2)>>2]|0)):0))f=b;if((g|0)<(h|0)){j=c[a>>2]|0;f=(c[e+(c[j+(g<<2)>>2]<<2)>>2]|0)<(c[e+(c[j+(f<<2)>>2]<<2)>>2]|0)?g:f}if((f|0)==(b|0))break;j=c[a>>2]|0;h=j+(f<<2)|0;g=c[h>>2]|0;j=j+(b<<2)|0;c[h>>2]=c[j>>2];c[j>>2]=g;c[d+(c[h>>2]<<2)>>2]=f;c[d+(c[j>>2]<<2)>>2]=b;b=f}return}function hs(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0,k=0.0,m=0,n=0,o=0,p=0;p=l;l=l+16|0;m=p+8|0;n=p;c[n>>2]=0;o=KK(d<<2)|0;f=0;while(1){if((f|0)>=(d|0))break;g[e+(f<<2)>>2]=3402823466385288598117041.0e14;f=f+1|0}g[e+(a<<2)>>2]=0.0;h=c[b+(a*20|0)>>2]|0;i=b+(a*20|0)+8|0;j=b+(a*20|0)+4|0;f=1;while(1){if((f|0)>=(h|0))break;c[e+(c[(c[j>>2]|0)+(f<<2)>>2]<<2)>>2]=c[(c[i>>2]|0)+(f<<2)>>2];f=f+1|0}is(m,a,o,e,d);a:while(1){if(!((js(m,n,o,e)|0)<<24>>24))break;f=c[n>>2]|0;k=+g[e+(f<<2)>>2];if(k==3402823466385288598117041.0e14)break;i=b+(f*20|0)|0;j=b+(f*20|0)+4|0;h=b+(f*20|0)+8|0;f=1;while(1){if((f|0)>=(c[i>>2]|0))continue a;ks(m,c[(c[j>>2]|0)+(f<<2)>>2]|0,+g[(c[h>>2]|0)+(f<<2)>>2]+k,o,e);f=f+1|0}}fs(m);U1(o);l=p;return}function is(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0;i=f+-1|0;j=KK(i<<2)|0;c[a>>2]=j;c[a+4>>2]=i;g=0;h=0;while(1){if((h|0)>=(f|0))break;if((h|0)!=(b|0)){c[j+(g<<2)>>2]=h;c[d+(h<<2)>>2]=g;g=g+1|0}h=h+1|0}g=(i|0)/2|0;while(1){if((g|0)<=-1)break;ls(a,g,d,e);g=g+-1|0}return}function js(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;f=a+4|0;if(!(c[f>>2]|0))a=0;else{g=c[a>>2]|0;c[b>>2]=c[g>>2];b=c[g+((c[f>>2]|0)+-1<<2)>>2]|0;c[g>>2]=b;c[d+(b<<2)>>2]=0;c[f>>2]=(c[f>>2]|0)+-1;ls(a,0,d,e);a=1}return a|0}function ks(a,b,d,e,f){a=a|0;b=b|0;d=+d;e=e|0;f=f|0;var h=0,i=0,j=0,k=0;h=f+(b<<2)|0;if(!(+g[h>>2]<=d)){k=e+(b<<2)|0;j=c[k>>2]|0;g[h>>2]=d;h=c[a>>2]|0;a=j;while(1){if((a|0)<=0)break;i=a>>>1;j=c[h+(i<<2)>>2]|0;if(!(+g[f+(j<<2)>>2]>d))break;c[h+(a<<2)>>2]=j;c[e+(j<<2)>>2]=a;a=i}c[h+(a<<2)>>2]=b;c[k>>2]=a}return}function ls(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0,k=0;j=a+4|0;while(1){f=b<<1;h=f|1;i=c[j>>2]|0;if(!((f|0)<(i|0)?(k=c[a>>2]|0,+g[e+(c[k+(f<<2)>>2]<<2)>>2]<+g[e+(c[k+(b<<2)>>2]<<2)>>2]):0))f=b;if((h|0)<(i|0)?(k=c[a>>2]|0,+g[e+(c[k+(h<<2)>>2]<<2)>>2]<+g[e+(c[k+(f<<2)>>2]<<2)>>2]):0)f=h;if((f|0)==(b|0))break;k=c[a>>2]|0;i=k+(f<<2)|0;h=c[i>>2]|0;k=k+(b<<2)|0;c[i>>2]=c[k>>2];c[k>>2]=h;c[d+(c[i>>2]<<2)>>2]=f;c[d+(c[k>>2]<<2)>>2]=b;b=f}return}function ms(){fu(187400,48);c[46853]=0;return}function ns(a,b){a=a|0;b=b|0;var d=0.0,e=0.0,f=0.0,g=0.0,i=0;i=hu(187400)|0;c[i+32>>2]=a;c[i+36>>2]=b;Pu(a);Pu(b);c[i+24>>2]=0;c[i+28>>2]=0;f=+h[a>>3];g=+h[b>>3]-f;e=+h[a+8>>3];d=+h[b+8>>3]-e;f=d*e+g*f+(d*d+g*g)*.5;b=i+16|0;h[b>>3]=f;if((g>0.0?g:-g)>(d>0.0?d:-d)){h[i>>3]=1.0;e=d/g;d=g;a=i+8|0}else{h[i+8>>3]=1.0;e=g/d;a=i}h[a>>3]=e;h[b>>3]=f/d;b=c[46853]|0;c[i+40>>2]=b;c[46853]=b+1;return i|0}function os(a){a=a|0;var b=0,d=0,e=0.0,f=0.0,g=0.0,i=0.0,j=0.0,k=0.0,l=0.0,m=0;l=+h[a>>3];a:do if(l==1.0){if(!(+h[a+8>>3]>=0.0)){b=c[a+28>>2]|0;d=c[a+24>>2]|0;if(!d)m=9;else m=5}else{b=c[a+24>>2]|0;d=c[a+28>>2]|0;if(!d)m=9;else m=5}do if((m|0)==5){e=+h[d+8>>3];if(e>+h[23266])break a;f=+h[23267];if(!(e>=f)){i=f;e=+h[a+16>>3]-+h[a+8>>3]*f;break}else{i=e;e=+h[d>>3];break}}else if((m|0)==9){f=+h[23267];i=f;e=+h[a+16>>3]-+h[a+8>>3]*f}while(0);do if(b){g=+h[b+8>>3];if(g>3]-+h[a+8>>3]*f;break}else{f=+h[b>>3];break}}else{f=+h[23266];g=f;f=+h[a+16>>3]-+h[a+8>>3]*f}while(0);j=+h[23268];b=e>j;d=f>j;k=+h[23269];if(!(b&d|e>3]-j)/+h[a+8>>3];e=j}if(e>3]-k)/+h[a+8>>3];e=k}if(d){g=(+h[a+16>>3]-j)/+h[a+8>>3];f=j}if(f>3]-k)/+h[a+8>>3];f=k;m=46}else m=46}}else{d=c[a+28>>2]|0;b=c[a+24>>2]|0;do if(b){e=+h[b>>3];if(e>+h[23268])break a;g=+h[23269];if(!(e>=g)){i=+h[a+16>>3]-g*l;e=g;break}else{i=+h[b+8>>3];break}}else{g=+h[23269];i=+h[a+16>>3]-g*l;e=g}while(0);do if(d){f=+h[d>>3];if(f>3]-l*j;f=j;break}else{g=+h[d+8>>3];break}}else{f=+h[23268];g=+h[a+16>>3]-l*f}while(0);j=+h[23266];b=i>j;d=g>j;k=+h[23267];if(!(b&d|i>3]-j)/l}if(i>3]-k)/l}if(d){g=j;f=(+h[a+16>>3]-j)/l}if(g>3]-k)/l;m=46}else m=46}}while(0);if((m|0)==46)ps(a,e,i,f,g);return}function ps(a,b,d,e,f){a=a|0;b=+b;d=+d;e=+e;f=+f;var g=0;g=a+32|0;Ws(c[g>>2]|0,b,d);Ws(c[g>>2]|0,e,f);a=a+36|0;Ws(c[a>>2]|0,b,d);Ws(c[a>>2]|0,e,f);return}function qs(a,b,d){a=a|0;b=b|0;d=d|0;c[a+24+(b<<2)>>2]=d;Pu(d);if(c[a+24+(1-b<<2)>>2]|0){os(a);Ou(c[a+32>>2]|0);Ou(c[a+36>>2]|0);iu(a,187400)}return}function rs(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;p=l;l=l+16|0;o=p;m=b<<2;h=KK(O(m,d)|0)|0;g=c[e>>2]|0;m=KK(m)|0;n=c[a+8>>2]|0;if(g|0){U1(c[g>>2]|0);U1(g)}k=KK(d<<2)|0;c[e>>2]=k;g=0;while(1){if((g|0)>=(d|0))break;c[k+(g<<2)>>2]=h+((O(g,b)|0)<<2);g=g+1|0}j=(f|0)!=0;if(j)dt(a,b);e=(x5()|0)%(b|0)|0;ur(o,b);g=c[k>>2]|0;if(j){bs(e,a,b,g);f=0;g=0}else{qr(e,a,b,g,o);f=0;g=0}while(1){if((g|0)>=(b|0)){i=1;break}h=c[(c[k>>2]|0)+(g<<2)>>2]|0;c[m+(g<<2)>>2]=h;i=(h|0)>(f|0);f=i?h:f;e=i?g:e;g=g+1|0}while(1){if((i|0)>=(d|0))break;h=k+(i<<2)|0;g=c[h>>2]|0;if(j){bs(e,a,b,g);g=0;f=0}else{qr(e,a,b,g,o);g=0;f=0}while(1){if((g|0)>=(b|0))break;s=m+(g<<2)|0;q=c[s>>2]|0;r=c[(c[h>>2]|0)+(g<<2)>>2]|0;r=(q|0)<(r|0)?q:r;c[s>>2]=r;s=(r|0)>(f|0);q=s?g:e;g=g+1|0;f=s?r:f;e=q}i=i+1|0}U1(m);if(j)et(a,b,n);l=p;return}function ss(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0,g=0,h=0,i=0.0,j=0,k=0;i=1.0/+(b|0);h=0;while(1){if((h|0)>=(d|0))break;j=a+(h<<2)|0;e=0.0;f=0;while(1){if((f|0)>=(b|0))break;e=e+ +(c[(c[j>>2]|0)+(f<<2)>>2]|0);f=f+1|0}g=~~(e*i);f=0;while(1){if((f|0)>=(b|0))break;k=(c[j>>2]|0)+(f<<2)|0;c[k>>2]=(c[k>>2]|0)-g;f=f+1|0}h=h+1|0}return}function ts(){c[46855]=~~+C(+(+((c[46854]|0)+4|0)));return}function us(a,b){a=a|0;b=b|0;var c=0.0,d=0.0;c=+h[a>>3]-+h[b>>3];d=+h[a+8>>3]-+h[b+8>>3];return +(d*d+c*c)}function vs(a,b,c){a=a|0;b=b|0;c=c|0;h[a>>3]=+h[b>>3]-+h[c>>3];h[a+8>>3]=+h[b+8>>3]-+h[c+8>>3];return}function ws(a,b,c){a=a|0;b=b|0;c=c|0;h[a>>3]=+h[c>>3]+ +h[b>>3];h[a+8>>3]=+h[c+8>>3]+ +h[b+8>>3];return}function xs(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0,e=0.0;d=+h[b+8>>3];e=+h[b>>3];return +((+h[c>>3]-e)*(+h[a+8>>3]-d)-(+h[a>>3]-e)*(+h[c+8>>3]-d))}function ys(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=l;l=l+48|0;f=e+32|0;g=e+16|0;h=e;c[h>>2]=c[a>>2];c[h+4>>2]=c[a+4>>2];c[h+8>>2]=c[a+8>>2];c[h+12>>2]=c[a+12>>2];c[g>>2]=c[b>>2];c[g+4>>2]=c[b+4>>2];c[g+8>>2]=c[b+8>>2];c[g+12>>2]=c[b+12>>2];c[f>>2]=c[d>>2];c[f+4>>2]=c[d+4>>2];c[f+8>>2]=c[d+8>>2];c[f+12>>2]=c[d+12>>2];d=+xs(h,g,f)>0.0&1;l=e;return d|0}function zs(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0.0,g=0.0,i=0.0,j=0.0,k=0.0,l=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0;o=+h[a>>3];p=+h[d+8>>3];q=+h[c+8>>3];m=(p-q)*o;n=+h[b>>3];l=+h[d>>3];k=+h[b+8>>3];i=+h[a+8>>3];j=k-i;f=+h[c>>3];g=m+n*(q-p)+j*l+f*(i-k);if(g==0.0)d=0;else{p=(f*(i-p)+m+(q-i)*l)/g;q=-(f*j+((q-k)*o+(i-q)*n))/g;h[e>>3]=p*(n-o)+o;h[e+8>>3]=j*p+i;d=q<=1.0&(q>=0.0&(p>=0.0&p<=1.0))&1}return d|0}function As(a,b,d){a=a|0;b=b|0;d=+d;var e=0,f=0,g=0.0,i=0;c[a+20>>2]=b;Pu(b);i=a+24|0;h[i>>3]=+h[b+8>>3]+d;e=c[46856]|0;e=e+((Bs(a)|0)*40|0)|0;while(1){f=e+32|0;e=c[f>>2]|0;if(!e)break;d=+h[i>>3];g=+h[e+24>>3];if(d>g)continue;if(!(d==g))break;if(!(+h[b>>3]>+h[c[e+20>>2]>>3]))break}c[a+32>>2]=e;c[f>>2]=a;c[46857]=(c[46857]|0)+1;return}function Bs(a){a=a|0;var b=0.0,d=0,e=0.0;d=c[46858]|0;e=+(d|0);b=(+h[a+24>>3]-+h[23273])/+h[23275]*e;do if(!(b<0.0))if(!(b>=e)){a=~~b;break}else{a=d+-1|0;break}else a=0;while(0);if((a|0)<(c[46859]|0))c[46859]=a;return a|0}function Cs(a){a=a|0;var b=0,d=0,e=0;d=a+20|0;if(c[d>>2]|0){b=c[46856]|0;b=b+((Bs(a)|0)*40|0)|0;do{e=b+32|0;b=c[e>>2]|0}while((b|0)!=(a|0));c[e>>2]=c[a+32>>2];c[46857]=(c[46857]|0)+-1;Ou(c[d>>2]|0);c[d>>2]=0}return}function Ds(){return (c[46857]|0)==0|0}function Es(a){a=a|0;var b=0,d=0,e=0,f=0.0;b=c[46856]|0;d=c[46859]|0;while(1){e=c[b+(d*40|0)+32>>2]|0;if(e|0)break;e=d+1|0;c[46859]=e;d=e}f=+h[e+24>>3];h[a>>3]=+h[c[e+20>>2]>>3];h[a+8>>3]=f;return}function Fs(){var a=0,b=0;b=(c[46856]|0)+((c[46859]|0)*40|0)+32|0;a=c[b>>2]|0;c[b>>2]=c[a+32>>2];c[46857]=(c[46857]|0)+-1;return a|0}function Gs(){U1(c[46856]|0);c[46856]=0;return}function Hs(){var a=0,b=0,d=0;c[46857]=0;c[46859]=0;a=c[46855]|0;b=a<<2;c[46858]=b;d=c[46856]|0;if(!d){d=KK(a*160|0)|0;c[46856]=d;b=c[46858]|0}a=0;while(1){if((a|0)>=(b|0))break;c[d+(a*40|0)+32>>2]=0;a=a+1|0}return}function Is(){fu(187448,40);U1(c[46865]|0);c[46865]=0;return}function Js(){var a=0,b=0,d=0;fu(187448,40);a=c[46855]|0;b=a<<1;c[46866]=b;d=c[46865]|0;if(!d){d=KK(a<<3)|0;c[46865]=d;b=c[46866]|0}a=0;while(1){if((a|0)>=(b|0))break;c[d+(a<<2)>>2]=0;a=a+1|0}c[46860]=Ks(0,0)|0;c[46861]=Ks(0,0)|0;c[c[46860]>>2]=0;d=c[46861]|0;b=c[46860]|0;c[b+4>>2]=d;c[d>>2]=b;c[(c[46861]|0)+4>>2]=0;d=c[46865]|0;c[d>>2]=c[46860];c[d+((c[46866]|0)+-1<<2)>>2]=c[46861];return}function Ks(b,d){b=b|0;d=d|0;var e=0;e=hu(187448)|0;c[e+8>>2]=b;a[e+16>>0]=d;c[e+32>>2]=0;c[e+20>>2]=0;c[e+12>>2]=0;return e|0}function Ls(b,d){b=b|0;d=d|0;var e=0,f=0.0,g=0.0,i=0,j=0.0,k=0,l=0.0,m=0.0,n=0.0,o=0,p=0.0,q=0.0;i=c[b+8>>2]|0;k=c[d+8>>2]|0;do if((!((i|0)==0|(k|0)==0)?(o=c[i+36>>2]|0,e=c[k+36>>2]|0,(o|0)!=(e|0)):0)?(j=+h[i>>3],f=+h[k+8>>3],g=+h[i+8>>3],l=+h[k>>3],m=f*j-l*g,!(m>-1.0e-10&m<1.0e-10)):0){p=+h[i+16>>3];q=+h[k+16>>3];n=(p*f-q*g)/m;j=(q*j-p*l)/m;f=+h[o+8>>3];g=+h[e+8>>3];do if(f>3]<+h[e>>3]:0){e=o;break}b=d}while(0);b=a[b+16>>0]|0;if(!(n>=+h[e>>3])){if(b<<24>>24==1){b=0;break}}else if(!(b<<24>>24)){b=0;break}b=Lu()|0;c[b+20>>2]=0;h[b>>3]=n;h[b+8>>3]=j}else b=0;while(0);return b|0}function Ms(b,d){b=b|0;d=d|0;var e=0.0,f=0,g=0.0,i=0.0,j=0.0,k=0,l=0.0,m=0,n=0,o=0.0,p=0;n=c[b+8>>2]|0;k=c[n+36>>2]|0;l=+h[d>>3];o=+h[k>>3];m=l>o;p=a[b+16>>0]|0;if(m)if(!(p<<24>>24))b=1;else f=4;else if(p<<24>>24==1)b=0;else f=4;if((f|0)==4){e=+h[n>>3];a:do if(e==1.0){e=+h[d+8>>3];g=e-+h[k+8>>3];i=l-o;j=+h[n+8>>3];d=j<0.0;do if(m?j>=0.0:d){if(g>=j*i){b=1;break a}}else{b=j*e+l>+h[n+16>>3];if(d)if(b){b=0;break a}else break;else if(b)break;else{b=0;break a}}while(0);o=o-+h[c[n+32>>2]>>3];b=j*(i*i-g*g)>3]-l*e;j=+h[d+8>>3]-i;o=l-o;l=i-+h[k+8>>3];b=j*j>l*l+o*o}while(0);b=(b^p<<24>>24!=0)&1}return b|0}function Ns(a,b){a=a|0;b=b|0;c[b>>2]=a;a=a+4|0;c[b+4>>2]=c[a>>2];c[c[a>>2]>>2]=b;c[a>>2]=b;return}function Os(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;f=c[46866]|0;b=~~((+h[a>>3]-+h[23272])/+h[23274]*+(f|0));b=(b|0)>0?b:0;f=(b|0)<(f|0)?b:f+-1|0;b=Ps(f)|0;if(!b){d=1;while(1){b=Ps(f-d|0)|0;if(b|0)break;b=Ps(d+f|0)|0;if(b|0)break;d=d+1|0}c[46867]=(c[46867]|0)+d}c[46868]=(c[46868]|0)+1;e=c[46860]|0;d=c[46861]|0;a:do if((b|0)==(e|0))g=9;else{if((b|0)!=(d|0)?(Ms(b,a)|0)!=0:0){g=9;break}while(1){b=c[b>>2]|0;if((b|0)==(e|0))break a;if(Ms(b,a)|0){e=b;break}}}while(0);if((g|0)==9){while(1){b=c[b+4>>2]|0;if((b|0)==(d|0))break;if(!(Ms(b,a)|0))break;else g=9}e=c[b>>2]|0}if((f|0)>0?(f|0)<((c[46866]|0)+-1|0):0){b=(c[46865]|0)+(f<<2)|0;d=c[b>>2]|0;if(d|0){g=d+12|0;c[g>>2]=(c[g>>2]|0)+-1}c[b>>2]=e;g=e+12|0;c[g>>2]=(c[g>>2]|0)+1}return e|0}function Ps(a){a=a|0;var b=0,d=0;if((a|0)>-1&(c[46866]|0)>(a|0)?(d=(c[46865]|0)+(a<<2)|0,b=c[d>>2]|0,(b|0)!=0):0){if((c[b+8>>2]|0)==(-2|0)){c[d>>2]=0;a=b+12|0;d=(c[a>>2]|0)+-1|0;c[a>>2]=d;if(!d){iu(b,187448);b=0}else b=0}}else b=0;return b|0}function Qs(a){a=a|0;var b=0,d=0;b=a+4|0;d=c[a>>2]|0;c[d+4>>2]=c[b>>2];c[c[b>>2]>>2]=d;c[a+8>>2]=-2;return}function Rs(a){a=a|0;return c[a+4>>2]|0}function Ss(a){a=a|0;return c[a>>2]|0}function Ts(b){b=b|0;var d=0;d=c[b+8>>2]|0;if(!d)b=187672;else b=(a[b+16>>0]|0)==0?d+32|0:d+36|0;return c[b>>2]|0}function Us(b){b=b|0;var d=0;d=c[b+8>>2]|0;if(!d)b=187672;else b=(a[b+16>>0]|0)==0?d+36|0:d+32|0;return c[b>>2]|0}function Vs(){fu(187480,24);return}function Ws(a,b,d){a=a|0;b=+b;d=+d;var e=0,f=0,g=0,i=0,j=0;j=l;l=l+32|0;i=j;g=(c[46869]|0)+((c[a+16>>2]|0)*96|0)+88|0;f=c[g>>2]|0;h[i+8>>3]=b;h[i+16>>3]=d;e=Xs(a,i,f)|0;do if(e|0){if((e|0)<0){i=hu(187480)|0;h[i+8>>3]=b;h[i+16>>3]=d;c[i>>2]=f;c[g>>2]=i;break}while(1){e=c[f>>2]|0;g=Xs(a,i,e)|0;if((g|0)>0)f=e;else break}if(g|0){i=hu(187480)|0;h[i+8>>3]=b;h[i+16>>3]=d;c[f>>2]=i;c[i>>2]=e}}while(0);l=j;return}function Xs(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0,e=0.0,f=0.0,g=0.0,i=0.0,j=0.0,k=0.0;do if(c){e=+h[b+8>>3];i=+h[c+8>>3];d=+h[b+16>>3];f=+h[c+16>>3];if(!(e==i&d==f)){k=+h[a>>3];j=e-k;e=+h[a+8>>3];g=d-e;i=i-k;d=f-e;if(!(j>=0.0)){if(i>=0.0){b=1;break}e=d/i;d=g/j;if(de){b=1;break}b=j>i?-1:1;break}if(!(i<0.0)){b=i>0.0;if(!(j>0.0)){if(b){b=!(g<=0.0)?1:-1;break}if(g0.0?-1:1;break}e=d/i;d=g/j;if(de){b=1;break}b=j>2]|0;d=a+(d*20|0)+4|0;b=1;a=0;while(1){if((b|0)>=(f|0))break;g=a+((c[e+(c[(c[d>>2]|0)+(b<<2)>>2]<<2)>>2]|0)>0&1)|0;b=b+1|0;a=g}return a|0}function Zs(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=a+(b*20|0)|0;b=a+(b*20|0)+4|0;a=1;while(1){if((a|0)>=(c[e>>2]|0))break;c[d+(c[(c[b>>2]|0)+(a<<2)>>2]<<2)>>2]=1;a=a+1|0}return}function _s(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=a+(b*20|0)|0;b=a+(b*20|0)+4|0;a=1;while(1){if((a|0)>=(c[e>>2]|0))break;c[d+(c[(c[b>>2]|0)+(a<<2)>>2]<<2)>>2]=0;a=a+1|0}return}function $s(a,b){a=a|0;b=b|0;if(!(c[a+8>>2]|0))a=bt(a,b)|0;else a=at(a,b)|0;return a|0}function at(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=b<<2;e=KK(O(f,b)|0)|0;f=KK(f)|0;d=0;while(1){if((d|0)>=(b|0)){d=0;break}c[f+(d<<2)>>2]=e+((O(d,b)|0)<<2);d=d+1|0}while(1){if((d|0)>=(b|0))break;bs(d,a,b,c[f+(d<<2)>>2]|0);d=d+1|0}return f|0}function bt(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;h=l;l=l+16|0;f=h;g=b<<2;e=KK(O(g,b)|0)|0;g=KK(g)|0;d=0;while(1){if((d|0)>=(b|0))break;c[g+(d<<2)>>2]=e+((O(d,b)|0)<<2);d=d+1|0}ur(f,b);d=0;while(1){if((d|0)>=(b|0))break;qr(d,a,b,c[g+(d<<2)>>2]|0,f);d=d+1|0}vr(f);l=h;return g|0}function ct(a,b){a=a|0;b=b|0;var d=0,e=0;e=c[a+8>>2]|0;dt(a,b);d=at(a,b)|0;et(a,b,e);return d|0}function dt(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;l=KK(b<<2)|0;d=0;e=0;while(1){if((d|0)>=(b|0))break;k=(c[a+(d*20|0)>>2]|0)+e|0;d=d+1|0;e=k}e=KK(e<<2)|0;d=0;while(1){if((d|0)>=(b|0))break;c[l+(d<<2)>>2]=0;d=d+1|0}f=0;while(1){if((f|0)>=(b|0))break;c[a+(f*20|0)+8>>2]=e;Zs(a,f,l);h=a+(f*20|0)|0;i=c[h>>2]|0;j=a+(f*20|0)+4|0;k=i+-2|0;d=1;while(1){if((d|0)>=(i|0))break;m=c[(c[j>>2]|0)+(d<<2)>>2]|0;n=c[a+(m*20|0)>>2]|0;g[e+(d<<2)>>2]=+(k+n-((Ys(a,0,m,l)|0)<<1)|0);d=d+1|0}_s(a,f,l);e=e+(c[h>>2]<<2)|0;f=f+1|0}U1(l);return}function et(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=a+8|0;U1(c[e>>2]|0);c[e>>2]=0;a:do if(d|0){e=0;while(1){if((e|0)>=(b|0))break a;c[a+(e*20|0)+8>>2]=d;f=d+(c[a+(e*20|0)>>2]<<2)|0;e=e+1|0;d=f}}while(0);return}function ft(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0.0,i=0.0,j=0;f=0;g=0.0;while(1){if((f|0)>=(b|0))break;j=c[a+(f<<2)>>2]|0;i=+h[j+(d<<3)>>3]-+h[j+(e<<3)>>3];f=f+1|0;g=i*i+g}return +(+C(+g))}function gt(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;if((e|0)>(d|0)){c[46873]=a;o4(b+(d<<2)|0,1-d+e|0,4,77)}return}function ht(a,b){a=a|0;b=b|0;var d=0.0,e=0.0,f=0;f=c[46873]|0;e=+g[f+(c[a>>2]<<2)>>2];d=+g[f+(c[b>>2]<<2)>>2];return (ed&1)|0}function it(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;h=l;l=l+16|0;f=h;if((d|0)<(e|0)){jt(a,b,d,e,f);g=c[f>>2]|0;f=g+-1|0;it(a,b,d,f);g=g+1|0;it(a,b,g,e);if(!(kt(a,b,d,f)|0))it(a,b,d,f);if(!(kt(a,b,g,e)|0))it(a,b,g,e)}l=h;return}function jt(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,i=0,j=0,k=0,l=0.0,m=0,n=0;g=x5()|0;g=b+(((((x5()|0)<<16|g)>>>0)%((1-d+e|0)>>>0)|0)+d<<2)|0;j=c[g>>2]|0;k=b+(d<<2)|0;c[g>>2]=c[k>>2];c[k>>2]=j;l=+h[a+(j<<3)>>3];g=d+1|0;d=e;a:while(1){if((g|0)>=(d|0))break;while(1){if((g|0)>=(d|0))break;if(!(+h[a+(c[b+(g<<2)>>2]<<3)>>3]<=l))break;g=g+1|0}while(1){if((g|0)>=(d|0))continue a;e=b+(d<<2)|0;i=c[e>>2]|0;if(!(+h[a+(i<<3)>>3]>l))break;d=d+-1|0}n=b+(g<<2)|0;m=c[n>>2]|0;c[n>>2]=i;c[e>>2]=m;g=g+1|0;d=d+-1|0}n=g+((+h[a+(c[b+(g<<2)>>2]<<3)>>3]>l)<<31>>31)|0;c[f>>2]=n;n=b+(n<<2)|0;c[k>>2]=c[n>>2];c[n>>2]=j;return}function kt(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;g=1;while(1){f=d+1|0;if(!((d|0)<(e|0)&(g|0)!=0))break;g=+h[a+(c[b+(d<<2)>>2]<<3)>>3]>+h[a+(c[b+(f<<2)>>2]<<3)>>3]?0:g;d=f}return g|0}function lt(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0.0,i=0.0,j=0.0,k=0.0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0.0,A=0.0;x=l;l=l+16|0;v=4;w=T1(40)|0;c[w>>2]=0;t=x;o=0;u=$(23,b*40|0)|0;d=o;o=0;if((d|0)!=0&(p|0)!=0){e=V6(c[d>>2]|0,w|0,v|0)|0;if(!e)bb(d|0,p|0);z=p}else e=-1;if((e|0)!=1){d=0;r=0;while(1){if((d|0)>=(b|0))break;s=(c[(c[a+(d<<2)>>2]|0)+4>>2]|0)+r|0;d=d+1|0;r=s}o=0;s=$(23,r*24|0)|0;d=o;o=0;if((d|0)!=0&(p|0)!=0){e=V6(c[d>>2]|0,w|0,v|0)|0;if(!e)bb(d|0,p|0);z=p}else e=-1;if((e|0)!=1){d=0;m=0;while(1){if((m|0)>=(b|0))break;n=u+(m*40|0)|0;c[n>>2]=s+(d*24|0);q=a+(m<<2)|0;f=0;g=1797693134862315708145274.0e284;i=-1797693134862315708145274.0e284;j=-1797693134862315708145274.0e284;k=1797693134862315708145274.0e284;while(1){e=c[q>>2]|0;if((f|0)>=(c[e+4>>2]|0))break;e=c[e>>2]|0;A=+h[e+(f<<4)>>3];y=+h[e+(f<<4)+8>>3];h[s+(d*24|0)>>3]=A;h[s+(d*24|0)+8>>3]=y;c[s+(d*24|0)+16>>2]=n;c[s+(d*24|0)+20>>2]=0;f=f+1|0;d=d+1|0;g=gA?i:A;j=j>y?j:y;k=k>2]=s+((d+-1|0)*24|0);h[u+(m*40|0)+8>>3]=g;h[u+(m*40|0)+16>>3]=k;h[u+(m*40|0)+24>>3]=i;h[u+(m*40|0)+32>>3]=j;m=m+1|0}c[t>>2]=r;c[t+4>>2]=b;w=U6(187496,1,w|0,v|0)|0;v=z;o=0;d=o;o=0;if((d|0)!=0&(p|0)!=0){e=V6(c[d>>2]|0,w|0,v|0)|0;if(!e)bb(d|0,p|0);z=p}else e=-1;if((e|0)==1){d=z;q=s;m=s;n=u}else{d=0;q=s;m=s;n=u}}else{d=z;q=0;m=s;n=u}}else{d=z;q=0;m=0;n=0}while(1){if(d|0){o=0;ia(105,u|0);d=o;o=0;if((d|0)!=0&(p|0)!=0){e=V6(c[d>>2]|0,w|0,v|0)|0;if(!e)bb(d|0,p|0);z=p}else e=-1;if((e|0)==1){f=n;r=m;s=q;d=z;n=f;m=r;q=s;continue}o=0;ia(105,m|0);d=o;o=0;if((d|0)!=0&(p|0)!=0){e=V6(c[d>>2]|0,w|0,v|0)|0;if(!e)bb(d|0,p|0);z=p}else e=-1;if((e|0)==1){f=n;r=m;s=q;d=z;n=f;m=r;q=s;continue}else{e=17;break}}o=0;d=aa(78,q|0,t|0)|0;e=o;o=0;if((e|0)!=0&(p|0)!=0){f=V6(c[e>>2]|0,w|0,v|0)|0;if(!f)bb(e|0,p|0);z=p}else f=-1;if((f|0)==1){f=n;r=m;s=q;d=z;n=f;m=r;q=s;continue}if(!d){o=0;d=ca(24,a|0,b|0,n|0)|0;e=o;o=0;if((e|0)!=0&(p|0)!=0){f=V6(c[e>>2]|0,w|0,v|0)|0;if(!f)bb(e|0,p|0);z=p}else f=-1;if((f|0)==1){f=n;r=m;s=q;d=z;n=f;m=r;q=s;continue}}o=0;ia(105,u|0);e=o;o=0;if((e|0)!=0&(p|0)!=0){f=V6(c[e>>2]|0,w|0,v|0)|0;if(!f)bb(e|0,p|0);z=p}else f=-1;if((f|0)==1){f=n;r=m;s=q;d=z;n=f;m=r;q=s;continue}o=0;ia(105,m|0);e=o;o=0;if((e|0)!=0&(p|0)!=0){f=V6(c[e>>2]|0,w|0,v|0)|0;if(!f)bb(e|0,p|0);z=p}else f=-1;if((f|0)==1){f=n;r=m;s=q;d=z;n=f;m=r;q=s}else{e=24;break}}if((e|0)==17)d=0;else if((e|0)==24)d=(d|0)==0&1;U1(w|0);l=x;return d|0}function mt(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;v=l;l=l+16|0;q=v;o=v+8|0;p=v+4|0;c[b+8>>2]=0;u=KK(c[b>>2]<<2)|0;f=c[b>>2]|0;e=0;while(1){if((e|0)>=(f|0))break;c[u+(e<<2)>>2]=a+(e*24|0);e=e+1|0}o4(u,f,4,79);m=0;g=0;f=0;h=0;a:while(1){if((m|0)>=(c[b>>2]|0)){s=0;d=g;t=h;break}n=u+(m<<2)|0;e=c[n>>2]|0;c[o>>2]=e;a=c[e+16>>2]|0;if((c[a>>2]|0)==(e|0))e=c[a+4>>2]|0;else e=e+-24|0;c[p>>2]=e;k=0;a=g;j=h;while(1){if((k|0)>=2)break;switch(ot(o,p)|0){case -1:{g=0;h=a;while(1){if((g|0)>=(j|0))break;i=pt(c[h>>2]|0,e)|0;if(i|0){s=i;d=a;t=j;break a}g=g+1|0;h=c[h+4>>2]|0}g=KK(12)|0;if(!j){f=0;a=g}else c[f+4>>2]=g;c[g+8>>2]=f;c[g>>2]=e;c[g+4>>2]=0;c[e+20>>2]=g;h=j+1|0;break}case 1:{e=e+20|0;g=c[e>>2]|0;if(!g){r=19;break a}do if((j|0)!=1){if((g|0)==(a|0)){a=c[a+4>>2]|0;c[a+8>>2]=0;break}if((g|0)==(f|0)){f=c[f+8>>2]|0;c[f+4>>2]=0;break}else{i=g+4|0;h=c[g+8>>2]|0;c[h+4>>2]=c[i>>2];c[(c[i>>2]|0)+8>>2]=h;break}}else{a=0;f=0}while(0);U1(g);c[e>>2]=0;g=f;h=j+-1|0;break}default:{g=f;h=j}}e=c[n>>2]|0;f=c[e+16>>2]|0;if((e|0)==(c[f+4>>2]|0))f=c[f>>2]|0;else f=e+24|0;c[p>>2]=f;k=k+1|0;f=g;j=h}m=m+1|0;g=a;h=j}if((r|0)==19){gA(1,93727,q)|0;bb(187496,1)}e=0;while(1){if((e|0)>=(t|0))break;r=c[d+4>>2]|0;U1(d);e=e+1|0;d=r}U1(u);l=v;return s|0}function nt(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0.0,g=0,i=0,j=0.0,k=0.0,m=0,n=0,o=0,p=0,q=0,r=0.0,s=0.0,t=0.0,u=0,v=0.0,w=0.0,x=0.0,y=0.0,z=0,A=0,B=0,C=0,D=0,E=0.0;D=l;l=l+48|0;o=D+24|0;n=D+16|0;u=D;e=0;a:while(1){if((e|0)>=(b|0)){e=0;break}z=c[a+(e<<2)>>2]|0;A=c[z>>2]|0;c[u>>2]=c[A>>2];c[u+4>>2]=c[A+4>>2];c[u+8>>2]=c[A+8>>2];c[u+12>>2]=c[A+12>>2];A=e+1|0;B=d+(e*40|0)+8|0;p=d+(e*40|0)+24|0;q=d+(e*40|0)+32|0;g=d+(e*40|0)+16|0;e=A;while(1){if((e|0)>=(b|0)){e=A;continue a}i=c[a+(e<<2)>>2]|0;j=+h[B>>3];k=+h[d+(e*40|0)+24>>3];m=!(j<=k);f=+h[d+(e*40|0)+8>>3];if((((!(m|!(j>=f))?(r=+h[g>>3],s=+h[d+(e*40|0)+32>>3],r<=s):0)?(t=+h[d+(e*40|0)+16>>3],r>=t):0)?(E=+h[p>>3],!(!(E<=k)|!(E>=f))):0)?(E=+h[q>>3],!(!(E<=s)|!(E>=t))):0){c[n>>2]=c[i>>2];c[n+4>>2]=c[i+4>>2];c[o>>2]=c[u>>2];c[o+4>>2]=c[u+4>>2];c[o+8>>2]=c[u+8>>2];c[o+12>>2]=c[u+12>>2];if(NX(n,o)|0){e=1;break a}}else C=11;if((((((C|0)==11?(C=0,v=+h[p>>3],!(!(f<=v)|!(f>=j))):0)?(w=+h[d+(e*40|0)+16>>3],x=+h[q>>3],w<=x):0)?(y=+h[g>>3],!(!(w>=y)|(!(k<=v)|m))):0)?(E=+h[d+(e*40|0)+32>>3],!(!(E<=x)|!(E>=y))):0)?(m=c[i>>2]|0,c[n>>2]=c[z>>2],c[n+4>>2]=c[z+4>>2],c[o>>2]=c[m>>2],c[o+4>>2]=c[m+4>>2],c[o+8>>2]=c[m+8>>2],c[o+12>>2]=c[m+12>>2],NX(n,o)|0):0){e=1;break a}e=e+1|0}}l=D;return e|0}function ot(a,b){a=a|0;b=b|0;var d=0.0,e=0;e=c[a>>2]|0;a=c[b>>2]|0;d=+h[e>>3]-+h[a>>3];if(!(d!=0.0)){d=+h[e+8>>3]-+h[a+8>>3];if(d==0.0)a=0;else a=d>0.0?1:-1}else a=d>0.0?1:-1;return a|0}function pt(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0,k=0,m=0;m=l;l=l+64|0;g=m+32|0;i=m+24|0;j=m+16|0;k=m;f=m+48|0;qt(a,b,f);d=f+8|0;e=c[d>>2]|0;do if((e|0)>0)d=0;else{if((e|0)<0){qt(b,a,f);d=c[d>>2]|0;if((d|0)>0){d=0;break}if((d|0)<0)d=3;else{d=c[f>>2]|0;d=rt(b,a,(d|0)>-1?d:0-d|0)|0}if(!(st(a,b,i,j,d)|0)){d=0;break}}else{d=c[f>>2]|0;if((d|0)==(c[f+4>>2]|0)){d=rt(a,b,0)|0;d=(rt(a,b,(d|0)<=(rt(a,b,1)|0)&1)|0)<<1}else d=rt(a,b,(d|0)>-1?d:0-d|0)|0;if(!(st(a,b,i,j,d)|0)){d=0;break}}h[k>>3]=+h[i>>3];h[k+8>>3]=+h[j>>3];c[g>>2]=c[k>>2];c[g+4>>2]=c[k+4>>2];c[g+8>>2]=c[k+8>>2];c[g+12>>2]=c[k+12>>2];d=tt(a,b,g)|0}while(0);l=m;return d|0}function qt(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0.0,g=0.0,i=0.0,j=0.0,k=0.0,l=0.0;i=+h[a>>3];j=+h[a+8>>3];e=c[a+16>>2]|0;if((c[e+4>>2]|0)==(a|0)){a=c[e>>2]|0;e=a}else{e=a+24|0;a=a+24|0}g=+h[e>>3]-i;f=+h[a+8>>3]-j;e=c[b+16>>2]|0;if((c[e+4>>2]|0)==(b|0)){a=c[e>>2]|0;e=a}else{e=b+24|0;a=b+24|0}k=+h[e>>3]-i;l=+h[a+8>>3]-j;j=(+h[b+8>>3]-j)*g-(+h[b>>3]-i)*f;b=j==0.0?0:j>0.0?1:-1;c[d>>2]=b;j=l*g-k*f;a=j==0.0?0:j>0.0?1:-1;c[d+4>>2]=a;c[d+8>>2]=O(a,b)|0;return}function rt(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0,g=0.0,i=0.0,j=0.0,k=0.0,l=0.0;k=+h[a>>3];l=+h[a+8>>3];f=c[a+16>>2]|0;if((c[f+4>>2]|0)==(a|0))a=c[f>>2]|0;else a=a+24|0;j=+h[a>>3];i=+h[a+8>>3];do if(d){a=c[b+16>>2]|0;if((c[a+4>>2]|0)==(b|0)){b=c[a>>2]|0;break}else{b=b+24|0;break}}while(0);g=+h[b>>3];e=+h[b+8>>3];if(k==j)if(k==g)b=(vt(l,e,i)|0)!=-1&1;else b=0;else b=vt(k,g,j)|0;return b|0}function st(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,i=0.0,j=0.0,k=0.0,l=0.0,m=0.0,n=0.0,o=0.0,p=0.0;a:do if((f|0)<1)g=0;else{n=+h[a>>3];p=+h[a+8>>3];g=c[a+16>>2]|0;if((c[g+4>>2]|0)==(a|0))g=c[g>>2]|0;else g=a+24|0;l=+h[g>>3];j=+h[g+8>>3];m=+h[b>>3];o=+h[b+8>>3];g=c[b+16>>2]|0;if((c[g+4>>2]|0)==(b|0))g=c[g>>2]|0;else g=b+24|0;k=+h[g>>3];i=+h[g+8>>3];b:do switch(f|0){case 3:{if(n==l){h[d>>3]=n;i=(o-i)/(m-k)*(n-k)+i;break b}if(m==k){h[d>>3]=m;i=(p-j)/(n-l)*(m-l)+j;break b}else{k=(o-i)/(m-k);l=(p-j)/(n-l);o=o-k*m;p=p-l*n;i=k-l;h[d>>3]=(p-o)/i;i=(k*p-o*l)/i;break b}}case 2:{if((rt(a,b,0)|0)==-1)if((rt(b,a,1)|0)==-1){f=(rt(b,a,0)|0)==-1;l=f?l:n;k=m;j=f?j:p;i=o}else{l=k;k=m;j=i;i=o}else if((rt(a,b,1)|0)!=-1)if((rt(b,a,0)|0)==-1){k=n;i=p}else{g=0;break a}else{l=m;j=o}h[d>>3]=(k+l)*.5;i=(i+j)*.5;break}case 1:if((o-p)*(n-l)==(m-n)*(p-j)){h[d>>3]=m;i=o;break b}else{h[d>>3]=k;break b}default:{g=1;break a}}while(0);h[e>>3]=i;g=1}while(0);return g|0}function tt(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0.0,g=0.0,i=0.0,j=0.0,k=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0,r=0,s=0;s=l;l=l+16|0;q=s;o=+h[a>>3];p=+h[a+8>>3];e=c[a+16>>2]|0;if((c[e+4>>2]|0)==(a|0))e=c[e>>2]|0;else e=a+24|0;m=+h[e>>3];j=+h[e+8>>3];k=+h[b>>3];n=+h[b+8>>3];e=c[b+16>>2]|0;if((c[e+4>>2]|0)==(b|0))e=c[e>>2]|0;else e=b+24|0;i=+h[e>>3];g=+h[e+8>>3];a:do if(!(o!=m&k!=i)){do if(o==m){f=+h[d>>3];if(o==f?p==+h[d+8>>3]:0)break;if(!(m==f)){r=18;break a}if(!(j==+h[d+8>>3])){r=18;break a}}while(0);if(k==i){f=+h[d>>3];if(k==f?n==+h[d+8>>3]:0){e=0;break}if(i==f?g==+h[d+8>>3]:0)e=0;else r=18}else e=0}else r=18;while(0);if((r|0)==18)if(0>1){e=c[15712]|0;p=+h[d+8>>3];h[q>>3]=+h[d>>3];h[q+8>>3]=p;w4(e,93756,q)|0;ut(1,a);ut(2,b);e=1}else e=1;l=s;return e|0}function ut(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0.0,i=0.0,j=0,k=0,m=0.0,n=0.0;k=l;l=l+48|0;j=k;f=c[15712]|0;g=+h[b>>3];i=+h[b+8>>3];d=c[b+16>>2]|0;if((c[d+4>>2]|0)==(b|0)){d=c[d>>2]|0;e=d}else{e=b+24|0;d=b+24|0}n=+h[e>>3];m=+h[d+8>>3];c[j>>2]=a;h[j+8>>3]=g;h[j+16>>3]=i;h[j+24>>3]=n;h[j+32>>3]=m;w4(f,93784,j)|0;l=k;return}function vt(a,b,c){a=+a;b=+b;c=+c;return (a==b|b==c?0:(a>3]=0.0;e=e+1|0}h[f+(a<<3)>>3]=1.0;vy(c[b+(a<<2)>>2]|0,f,d);a=a+1|0}U1(f);f=0;while(1){if((f|0)>=(d|0)){a=1;break a}e=b+(f<<2)|0;a=0;while(1){if((a|0)==(f|0))break;j=(c[e>>2]|0)+(a<<3)|0;i=+h[j>>3];g=(c[b+(a<<2)>>2]|0)+(f<<3)|0;h[j>>3]=+h[g>>3];h[g>>3]=i;a=a+1|0}f=f+1|0}}while(0);return a|0}function xt(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var i=0,j=0.0,k=0,l=0.0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;q=b<<3;p=KK(q)|0;q=KK(q)|0;r=b*30|0;n=(d|0)<(b|0)?d:b;o=b+-1|0;m=(g|0)==0;d=0;i=0;a:while(1){if((i|0)>=(n|0))break;k=c[e+(i<<2)>>2]|0;do{b:do if(m)d=0;else{d=0;while(1){if((d|0)==(b|0)){d=0;break b}h[k+(d<<3)>>3]=+((x5()|0)%100|0|0);d=d+1|0}}while(0);while(1){if((d|0)==(i|0))break;g=c[e+(d<<2)>>2]|0;zt(k,0,o,-+yt(g,0,o,k),g);d=d+1|0}j=+At(k,0,o)}while(j<1.0e-10);Bt(k,0,o,1.0/j,k);d=0;do{Ct(q,0,o,k);Dt(a,b,b,k,p);Ct(k,0,o,p);g=0;while(1){if((g|0)==(i|0))break;s=c[e+(g<<2)>>2]|0;zt(k,0,o,-+yt(s,0,o,k),s);g=g+1|0}s=d;d=d+1|0;j=+At(k,0,o);if(!((s|0)<(r|0)&!(j<1.0e-10)))break a;Bt(k,0,o,1.0/j,k);l=+yt(k,0,o,q)}while(+B(+l)<.999);h[f+(i<<3)>>3]=l*j;i=i+1|0}while(1){if((i|0)>=(n|0))break;k=c[e+(i<<2)>>2]|0;g=0;while(1){if((g|0)>=(b|0)){g=0;break}h[k+(g<<3)>>3]=+((x5()|0)%100|0|0);g=g+1|0}while(1){if((g|0)>=(i|0))break;s=c[e+(g<<2)>>2]|0;zt(k,0,o,-+yt(s,0,o,k),s);g=g+1|0}Bt(k,0,o,1.0/+At(k,0,o),k);h[f+(i<<3)>>3]=0.0;i=i+1|0}m=n+-1|0;i=0;while(1){if((i|0)>=(m|0))break;a=f+(i<<3)|0;b=i+1|0;j=+h[a>>3];g=i;k=b;while(1){if((k|0)>=(n|0))break;l=+h[f+(k<<3)>>3];s=j>2]|0);s=e+(g<<2)|0;Ct(c[k>>2]|0,0,o,c[s>>2]|0);Ct(c[s>>2]|0,0,o,p);h[f+(g<<3)>>3]=+h[a>>3];h[a>>3]=j;i=b}U1(p);U1(q);return (d|0)<=(r|0)|0}function yt(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0.0;f=0.0;e=1-b+c|0;d=d+(b<<3)|0;c=a+(b<<3)|0;while(1){if(!e)break;f=+h[d>>3]*+h[c>>3]+f;e=e+-1|0;d=d+8|0;c=c+8|0}return +f}function zt(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;var f=0;f=1-b+c|0;e=e+(b<<3)|0;c=a+(b<<3)|0;while(1){if(!f)break;h[c>>3]=+h[c>>3]+ +h[e>>3]*d;f=f+-1|0;e=e+8|0;c=c+8|0}return}function At(a,b,c){a=a|0;b=b|0;c=c|0;return +(+C(+(+yt(a,b,c,a))))}function Bt(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;var f=0;f=1-b+c|0;e=e+(b<<3)|0;c=a+(b<<3)|0;while(1){if(!f)break;h[c>>3]=+h[e>>3]*d;f=f+-1|0;e=e+8|0;c=c+8|0}return}function Ct(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0;e=1-b+c|0;d=d+(b<<3)|0;c=a+(b<<3)|0;while(1){if(!e)break;h[c>>3]=+h[d>>3];e=e+-1|0;d=d+8|0;c=c+8|0}return}function Dt(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0.0,i=0,j=0,k=0;j=0;while(1){if((j|0)>=(b|0))break;k=a+(j<<2)|0;g=0.0;i=0;while(1){if((i|0)>=(d|0))break;g=+h[e+(i<<3)>>3]*+h[(c[k>>2]|0)+(i<<3)>>3]+g;i=i+1|0}h[f+(j<<3)>>3]=g;j=j+1|0}return}function Et(a,b,d,e,f,i){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;i=i|0;var j=0,k=0,l=0.0,m=0,n=0,o=0,p=0.0;k=c[i>>2]|0;if(!k){o=d<<2;j=T1(O(o,f)|0)|0;o=T1(o)|0}else{o=d<<2;j=W1(c[k>>2]|0,O(o,f)|0)|0;o=W1(k,o)|0}c[i>>2]=o;k=0;while(1){if((k|0)>=(d|0)){i=0;break}c[o+(k<<2)>>2]=j;k=k+1|0;j=j+(f<<2)|0}while(1){if((i|0)>=(d|0))break;m=a+(i<<2)|0;n=o+(i<<2)|0;k=0;while(1){if((k|0)<(f|0)){j=0;l=0.0}else break;while(1){if((j|0)>=(e|0))break;p=+h[(c[m>>2]|0)+(j<<3)>>3]*+g[(c[b+(j<<2)>>2]|0)+(k<<2)>>2]+l;j=j+1|0;l=p}g[(c[n>>2]|0)+(k<<2)>>2]=l;k=k+1|0}i=i+1|0}return}function Ft(a,b,d,e,f,i){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;i=i|0;var j=0,k=0,l=0.0,m=0,n=0,o=0;k=c[i>>2]|0;if(!k){j=T1(O(d<<3,f)|0)|0;o=T1(d<<2)|0}else{j=W1(c[k>>2]|0,O(d<<3,f)|0)|0;o=W1(k,d<<2)|0}c[i>>2]=o;k=0;while(1){if((k|0)>=(d|0)){i=0;break}c[o+(k<<2)>>2]=j;k=k+1|0;j=j+(f<<3)|0}while(1){if((i|0)>=(d|0))break;m=a+(i<<2)|0;n=o+(i<<2)|0;k=0;while(1){if((k|0)<(f|0)){l=0.0;j=0}else break;while(1){if((j|0)>=(e|0))break;l=+h[(c[m>>2]|0)+(j<<3)>>3]*+g[(c[b+(j<<2)>>2]|0)+(k<<2)>>2]+l;j=j+1|0}h[(c[n>>2]|0)+(k<<3)>>3]=l;k=k+1|0}i=i+1|0}return}function Gt(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var i=0,j=0,k=0.0,l=0,m=0,n=0,o=0,p=0,q=0;j=c[f>>2]|0;if(!j){i=T1(O(d*20|0,e)|0)|0;q=T1(d<<2)|0}else{i=W1(c[j>>2]|0,O(d*20|0,e)|0)|0;q=W1(j,d<<2)|0}c[f>>2]=q;j=0;while(1){if((j|0)>=(d|0)){f=0;break}c[q+(j<<2)>>2]=i;j=j+1|0;i=i+(e<<2)|0}while(1){if((f|0)>=(d|0))break;l=c[a+(f*20|0)+4>>2]|0;m=c[a+(f*20|0)+8>>2]|0;n=c[a+(f*20|0)>>2]|0;o=q+(f<<2)|0;i=0;while(1){if((i|0)>=(e|0))break;p=b+(i<<2)|0;k=0.0;j=0;while(1){if((j|0)>=(n|0))break;k=+h[(c[p>>2]|0)+(c[l+(j<<2)>>2]<<3)>>3]*+g[m+(j<<2)>>2]+k;j=j+1|0}g[(c[o>>2]|0)+(i<<2)>>2]=k;i=i+1|0}f=f+1|0}return}function Ht(a,b){a=a|0;b=b|0;var c=0.0,d=0,e=0;c=0.0;d=b;e=a;while(1){if(!e)break;c=+h[d>>3]+c;d=d+8|0;e=e+-1|0}c=c/+(a|0);while(1){if(!a)break;h[b>>3]=+h[b>>3]-c;b=b+8|0;a=a+-1|0}return}function It(a,b){a=a|0;b=b|0;var c=0;c=0;while(1){if((c|0)>=(a|0))break;h[b+(c<<3)>>3]=+((x5()|0)%500|0|0);c=c+1|0}Ht(a,b);return}function Jt(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,i=0,j=0,k=0,l=0,m=0;j=0;while(1){if((j|0)>=(b|0))break;k=c[a+(j*20|0)>>2]|0;l=a+(j*20|0)+8|0;m=a+(j*20|0)+4|0;f=0.0;i=0;while(1){if((i|0)>=(k|0))break;f=+h[d+(c[(c[m>>2]|0)+(i<<2)>>2]<<3)>>3]*+g[(c[l>>2]|0)+(i<<2)>>2]+f;i=i+1|0}h[e+(j<<3)>>3]=f;j=j+1|0}return}function Kt(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,i=0,j=0,k=0;j=0;while(1){if((j|0)>=(b|0))break;k=a+(j<<2)|0;f=0.0;i=0;while(1){if((i|0)==(b|0))break;f=+h[d+(i<<3)>>3]*+g[(c[k>>2]|0)+(i<<2)>>2]+f;i=i+1|0}h[e+(j<<3)>>3]=f;j=j+1|0}return}function Lt(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0;e=0;while(1){if((e|0)>=(a|0))break;h[d+(e<<3)>>3]=+h[b+(e<<3)>>3]-+h[c+(e<<3)>>3];e=e+1|0}return}function Mt(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0;e=0;while(1){if((e|0)>=(a|0))break;h[d+(e<<3)>>3]=+h[c+(e<<3)>>3]+ +h[b+(e<<3)>>3];e=e+1|0}return}function Nt(a,b,c,d){a=a|0;b=b|0;c=+c;d=d|0;var e=0;e=0;while(1){if((e|0)>=(a|0))break;h[d+(e<<3)>>3]=+h[b+(e<<3)>>3]*c;e=e+1|0}return}function Ot(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;d=0;while(1){if((d|0)>=(a|0))break;h[c+(d<<3)>>3]=+h[b+(d<<3)>>3];d=d+1|0}return}function Pt(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0,e=0;d=0.0;e=0;while(1){if((e|0)>=(a|0))break;d=+h[c+(e<<3)>>3]*+h[b+(e<<3)>>3]+d;e=e+1|0}return +d}function Qt(a,b){a=a|0;b=b|0;var c=0,d=0.0,e=0.0;c=0;d=-1.e+50;while(1){if((c|0)>=(a|0))break;e=+B(+(+h[b+(c<<3)>>3]));c=c+1|0;d=e>d?e:d}return +d}function Rt(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0.0,i=0,j=0;j=0;while(1){if((j|0)<(b|0)){g=0.0;i=0}else break;while(1){if((i|0)>=(d|0))break;g=+h[e+(i<<3)>>3]*+h[(c[a+(i<<2)>>2]|0)+(j<<3)>>3]+g;i=i+1|0}h[f+(j<<3)>>3]=g;j=j+1|0}return}function St(a,b){a=a|0;b=b|0;var c=0.0,d=0,e=0;c=0.0;d=b;e=a;while(1){if(!e)break;c=+g[d>>2]+c;d=d+4|0;e=e+-1|0}c=c/+(a|0);while(1){if(!a)break;g[b>>2]=+g[b>>2]-c;b=b+4|0;a=a+-1|0}return}function Tt(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0.0,h=0,i=0,j=0,k=0,l=0.0,m=0,n=0.0,o=0,p=0.0;e=0;while(1){if((e|0)>=(b|0)){h=0;j=0;m=b;break}g[d+(e<<2)>>2]=0.0;e=e+1|0}while(1){if((j|0)>=(b|0))break;l=+g[c+(j<<2)>>2];k=j+1|0;f=+g[a+(h<<2)>>2]*l;i=k;e=h;while(1){e=e+1|0;if((i|0)==(b|0))break;p=+g[a+(e<<2)>>2];n=+g[c+(i<<2)>>2]*p+f;o=d+(i<<2)|0;g[o>>2]=+g[o>>2]+p*l;f=n;i=i+1|0}o=d+(j<<2)|0;g[o>>2]=+g[o>>2]+f;h=h+m|0;j=k;m=m+-1|0}return}function Ut(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0;e=0;while(1){if((e|0)>=(a|0))break;g[d+(e<<2)>>2]=+g[b+(e<<2)>>2]-+g[c+(e<<2)>>2];e=e+1|0}return}function Vt(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0;e=0;while(1){if((e|0)>=(a|0))break;g[d+(e<<2)>>2]=+g[c+(e<<2)>>2]+ +g[b+(e<<2)>>2];e=e+1|0}return}function Wt(a,b,c,d){a=a|0;b=b|0;c=+c;d=d|0;var e=0,f=0;e=0;while(1){if((e|0)>=(a|0))break;f=b+(e<<2)|0;g[f>>2]=+g[d+(e<<2)>>2]*c+ +g[f>>2];e=e+1|0}return}function Xt(a,b,c,d){a=a|0;b=b|0;c=+c;d=d|0;var e=0;e=0;while(1){if((e|0)>=(a|0))break;g[d+(e<<2)>>2]=+g[b+(e<<2)>>2]*c;e=e+1|0}return}function Yt(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=0;while(1){if((e|0)>=(a|0))break;c[d+(e<<2)>>2]=c[b+(e<<2)>>2];e=e+1|0}return}function Zt(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0,e=0;d=0.0;e=0;while(1){if((e|0)>=(a|0))break;d=d+ +g[c+(e<<2)>>2]*+g[b+(e<<2)>>2];e=e+1|0}return +d}function _t(a,b,c){a=a|0;b=+b;c=c|0;var d=0;d=0;while(1){if((d|0)>=(a|0))break;h[c+(d<<3)>>3]=b;d=d+1|0}return}function $t(a,b,c){a=a|0;b=+b;c=c|0;var d=0;d=0;while(1){if((d|0)>=(a|0))break;g[c+(d<<2)>>2]=b;d=d+1|0}return}function au(a,b){a=a|0;b=b|0;var c=0.0,d=0,e=0.0;c=-1000000015047466219876688.0e6;d=0;while(1){if((d|0)>=(a|0))break;e=+B(+(+g[b+(d<<2)>>2]));c=e>c?e:c;d=d+1|0}return +c}function bu(a,b){a=a|0;b=b|0;var c=0,d=0,e=0.0;c=0;while(1){if((c|0)>=(a|0))break;d=b+(c<<2)|0;e=+g[d>>2];g[d>>2]=e*e;c=c+1|0}return}function cu(a,b){a=a|0;b=b|0;var c=0,d=0,e=0.0;c=0;while(1){if((c|0)>=(a|0))break;d=b+(c<<2)|0;e=+g[d>>2];if(e!=0.0)g[d>>2]=1.0/e;c=c+1|0}return}function du(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0.0;d=0;while(1){if((d|0)>=(a|0))break;e=+g[b+(d<<2)>>2];if(e>=0.0)g[c+(d<<2)>>2]=+C(+e);d=d+1|0}return}function eu(a,b){a=a|0;b=b|0;var c=0,d=0,e=0.0;c=0;while(1){if((c|0)>=(a|0))break;d=b+(c<<2)|0;e=+g[d>>2];if(e>0.0)g[d>>2]=1.0/+C(+e);c=c+1|0}return}function fu(a,b){a=a|0;b=b|0;var d=0;c[a>>2]=0;if(b&3)if(!(4%(b>>>0)|0))b=4;else b=O(4/((gu(b)|0)>>>0)|0,b)|0;c[a+8>>2]=b;a=a+4|0;b=c[a>>2]|0;a:do if(b|0)while(1){if(!b)break a;d=c[b>>2]|0;U1(c[b+4>>2]|0);U1(b);b=d}while(0);c[a>>2]=0;return}function gu(a){a=a|0;var b=0,c=0;c=4;a:while(1){b=c;while(1){if((b|0)==(a|0))break a;if((b|0)<=(a|0))break;b=b-a|0}c=b;a=a-b|0}return a|0}function hu(a){a=a|0;var b=0,d=0,e=0,f=0;b=c[a>>2]|0;if(!b){d=c[a+8>>2]|0;e=KK(8)|0;f=KK(O(c[46855]|0,d)|0)|0;c[e+4>>2]=f;b=0;while(1){if((b|0)>=(c[46855]|0))break;iu(f+(O(b,d)|0)|0,a);b=b+1|0}b=a+4|0;c[e>>2]=c[b>>2];c[b>>2]=e;b=c[a>>2]|0}c[a>>2]=c[b>>2];return b|0}function iu(a,b){a=a|0;b=b|0;c[a>>2]=c[b>>2];c[b>>2]=a;return}function ju(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0,k=0,l=0,m=0;m=JK(b<<3)|0;l=a+8|0;f=c[l>>2]|0;ku(a,b,m);It(b,d);h=0;i=0;while(1){if((i|0)>=(b|0))break;h=(c[a+(i*20|0)>>2]|0)+h|0;i=i+1|0}h=KK(h<<2)|0;j=0;while(1){if((j|0)>=(b|0))break;c[a+(j*20|0)+8>>2]=h;k=c[a+(j*20|0)>>2]|0;g[h>>2]=+(1-k|0);i=1;while(1){if((i|0)>=(k|0))break;g[h+(i<<2)>>2]=1.0;i=i+1|0}h=h+(k<<2)|0;j=j+1|0}i=yr(a,d,m,b,.001,e)|0;U1(c[l>>2]|0);h=0;while(1){if((h|0)>=(b|0))break;c[a+(h*20|0)+8>>2]=f;f=f+(c[a+(h*20|0)>>2]<<2)|0;h=h+1|0}U1(m);return i>>>31|0}function ku(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0,i=0,j=0,k=0,l=0,m=0;k=a+16|0;i=0;while(1){if((i|0)>=(b|0))break;if(c[k>>2]|0){l=c[a+(i*20|0)>>2]|0;m=a+(i*20|0)+8|0;j=a+(i*20|0)+16|0;e=0.0;f=1;while(1){if((f|0)>=(l|0))break;e=e+ +g[(c[j>>2]|0)+(f<<2)>>2]*+g[(c[m>>2]|0)+(f<<2)>>2];f=f+1|0}h[d+(i<<3)>>3]=e}i=i+1|0}return}function lu(a,b,d,e,f,g,h,i,j){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=+h;i=i|0;j=j|0;a=l;l=l+16|0;if(!(c[46913]|0)){c[46913]=1;gA(1,93820,a)|0}l=a;return}function mu(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,i=0,j=0.0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0.0;r=KK(f<<2)|0;i=b<<3;g=0;while(1){if((g|0)>=(f|0))break;c[r+(g<<2)>>2]=KK(i)|0;g=g+1|0}p=KK(f<<3)|0;q=KK(b<<2)|0;g=KK(O(i,b)|0)|0;i=0;while(1){if((i|0)>=(b|0))break;c[q+(i<<2)>>2]=g;g=g+(b<<3)|0;i=i+1|0}k=0;o=1;while(1){if((k|0)>=(b|0))break;l=a+(k<<2)|0;m=q+(k<<2)|0;i=0;while(1){if((i|0)==(o|0))break;n=a+(i<<2)|0;g=0;j=0.0;while(1){if((g|0)>=(d|0))break;s=j+ +(O(c[(c[n>>2]|0)+(g<<2)>>2]|0,c[(c[l>>2]|0)+(g<<2)>>2]|0)|0);g=g+1|0;j=s}h[(c[q+(i<<2)>>2]|0)+(k<<3)>>3]=j;h[(c[m>>2]|0)+(i<<3)>>3]=j;i=i+1|0}k=k+1|0;o=o+1|0}xt(q,b,f,r,p,1)|0;i=0;while(1){if((i|0)>=(f|0)){g=0;break}l=r+(i<<2)|0;m=e+(i<<2)|0;k=0;while(1){if((k|0)<(d|0)){g=0;j=0.0}else break;while(1){if((g|0)>=(b|0))break;s=+h[(c[l>>2]|0)+(g<<3)>>3]*+(c[(c[a+(g<<2)>>2]|0)+(k<<2)>>2]|0)+j;g=g+1|0;j=s}h[(c[m>>2]|0)+(k<<3)>>3]=j;k=k+1|0}i=i+1|0}while(1){if((g|0)>=(f|0))break;U1(c[r+(g<<2)>>2]|0);g=g+1|0}U1(r);U1(p);U1(c[q>>2]|0);U1(q);return}function nu(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;f=l;l=l+32|0;g=f+16|0;j=f+20|0;i=f+12|0;h=f+8|0;c[g>>2]=e;c[i>>2]=0;c[h>>2]=0;iy(c[a>>2]|0,d,d<<2,j);Gt(c[j>>2]|0,a,d,b,i);Ft(a,c[i>>2]|0,b,d,b,h);U1(c[c[i>>2]>>2]|0);U1(c[i>>2]|0);e=(xt(c[h>>2]|0,b,1,g,f,1)|0)&255;l=f;return e|0}function ou(){c[46914]=0;U1(c[46915]|0);U1(c[46916]|0);U1(c[46917]|0);c[46915]=0;c[46916]=0;c[46917]=0;return}function pu(a){a=a|0;U1(c[a+36>>2]|0);return}function qu(b,d,e,f){b=b|0;d=d|0;e=+e;f=+f;var g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0.0,t=0.0,u=0.0,v=0.0;r=l;l=l+80|0;o=r+64|0;q=r+68|0;i=r+48|0;j=r+32|0;k=r+16|0;m=r;n=d+16|0;g=c[n>>2]|0;a:do if(!(c[g+212>>2]|0))switch(WM(d)|0){case 1:{g=c[n>>2]|0;j=c[g+12>>2]|0;k=c[j+8>>2]|0;c[q>>2]=k;g=c[c[g+8>>2]>>2]|0;switch(a[g>>0]|0){case 98:{if(!(s2(g,108236)|0))p=11;else p=8;break}case 112:{if((s2(g,105721)|0)==0?(ru(c[j+44>>2]|0,k)|0)!=0:0)p=11;else p=8;break}default:p=8}do if((p|0)==8)if((k|0)<3){c[b+40>>2]=(c[j>>2]|0)==0?0:2;p=17;break}else{g=b+40|0;c[g>>2]=0;break}else if((p|0)==11){g=b+40|0;c[g>>2]=1;if((k|0)<=2)p=17}while(0);if((p|0)==17){i=su(d,q,e,f)|0;p=21;break a}i=KK(k<<4)|0;j=j+44|0;if((c[g>>2]|0)==1){p=c[j>>2]|0;s=e;h[i>>3]=+h[p>>3]*.013888888888888888+s;e=f;h[i+8>>3]=+h[p+8>>3]*.013888888888888888+e;h[i+16>>3]=+h[p+16>>3]*.013888888888888888-s;h[i+24>>3]=+h[p+24>>3]*.013888888888888888+e;h[i+32>>3]=+h[p+32>>3]*.013888888888888888-s;h[i+40>>3]=+h[p+40>>3]*.013888888888888888-e;h[i+48>>3]=+h[p+48>>3]*.013888888888888888+s;h[i+56>>3]=+h[p+56>>3]*.013888888888888888-e;p=21;break a}g=0;while(1){if((g|0)>=(k|0)){p=21;break a}p=c[j>>2]|0;u=+h[p+(g<<4)>>3];s=+h[p+(g<<4)+8>>3];t=+C(+(s*s+u*u));h[i+(g<<4)>>3]=(e/t+1.0)*u*.013888888888888888;h[i+(g<<4)+8>>3]=(f/t+1.0)*s*.013888888888888888;g=g+1|0}}case 2:{c[q>>2]=4;p=KK(64)|0;d=c[(c[n>>2]|0)+12>>2]|0;v=+h[d+32>>3];t=+h[d+40>>3];o=~~+h[d+16>>3];d=~~+h[d+24>>3];u=-e;s=-f;tu(i,o,d,u,s);c[p>>2]=c[i>>2];c[p+4>>2]=c[i+4>>2];c[p+8>>2]=c[i+8>>2];c[p+12>>2]=c[i+12>>2];i=p+16|0;n=~~v;tu(j,n,d,e,s);c[i>>2]=c[j>>2];c[i+4>>2]=c[j+4>>2];c[i+8>>2]=c[j+8>>2];c[i+12>>2]=c[j+12>>2];i=p+32|0;d=~~t;tu(k,n,d,e,f);c[i>>2]=c[k>>2];c[i+4>>2]=c[k+4>>2];c[i+8>>2]=c[k+8>>2];c[i+12>>2]=c[k+12>>2];i=p+48|0;tu(m,o,d,u,f);c[i>>2]=c[m>>2];c[i+4>>2]=c[m+4>>2];c[i+8>>2]=c[m+8>>2];c[i+12>>2]=c[m+12>>2];c[b+40>>2]=1;i=p;p=21;break a}case 3:{c[b+40>>2]=2;i=su(d,q,e,f)|0;p=21;break a}default:{c[o>>2]=c[c[(c[n>>2]|0)+8>>2]>>2];gA(1,93883,o)|0;g=1;break a}}else{c[q>>2]=4;u=+h[g+32>>3]*.5+e;v=+h[g+40>>3]*.5+f;c[b+40>>2]=1;i=KK(64)|0;h[i>>3]=u;h[i+8>>3]=v;t=-u;h[i+16>>3]=t;h[i+24>>3]=v;h[i+32>>3]=t;v=-v;h[i+40>>3]=v;h[i+48>>3]=u;h[i+56>>3]=v;p=21}while(0);if((p|0)==21){c[b+36>>2]=i;g=c[q>>2]|0;c[b+32>>2]=g;uu(i,g,b,b+16|0);if((g|0)>(c[46914]|0)){c[46914]=g;g=0}else g=0}l=r;return g|0}function ru(a,b){a=a|0;b=b|0;var c=0.0,d=0.0;do if((b|0)==4){c=+h[a+8>>3];b=a+16|0;d=+h[a+24>>3];if(c==d){if(!(+h[a+40>>3]==+h[a+56>>3])){b=0;break}if(!(+h[a>>3]==+h[a+48>>3])){b=0;break}b=+h[b>>3]==+h[a+32>>3];break}if((+h[a>>3]==+h[b>>3]?+h[a+32>>3]==+h[a+48>>3]:0)?c==+h[a+56>>3]:0)b=d==+h[a+40>>3];else b=0}else b=0;while(0);return b&1|0}function su(a,b,d,e){a=a|0;b=b|0;d=+d;e=+e;var f=0,g=0.0,i=0,j=0,k=0.0,l=0;f=QA(a,102705)|0;if(!f)f=0;else f=q5(f)|0;i=(f|0)<3?20:f;j=KK(i<<4)|0;a=a+16|0;g=1.0/+(i|0);f=0;while(1){if((f|0)>=(i|0))break;l=c[a>>2]|0;k=g*+(f|0)*6.283185307179586;h[j+(f<<4)>>3]=(+h[l+32>>3]*.5+d)*+E(+k);h[j+(f<<4)+8>>3]=(+h[l+40>>3]*.5+e)*+F(+k);f=f+1|0}c[b>>2]=i;return j|0}function tu(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=+e;h[a>>3]=+(b|0)*.013888888888888888+d;h[a+8>>3]=+(c|0)*.013888888888888888+e;return}function uu(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0.0,g=0.0,i=0.0,j=0.0,k=0,l=0.0,m=0.0;j=+h[a>>3];i=+h[a+8>>3];e=1;f=i;g=j;while(1){if((e|0)>=(b|0))break;k=a+16|0;l=+h[k>>3];m=+h[a+24>>3];e=e+1|0;f=m>f?m:f;g=l>g?l:g;i=m>3]=j;h[c+8>>3]=i;h[d>>3]=g;h[d+8>>3]=f;return}function vu(b,d,e,f){b=b|0;d=d|0;e=+e;f=+f;var g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0.0,t=0.0,u=0.0,v=0.0;r=l;l=l+80|0;n=r+64|0;p=r+68|0;i=r+48|0;j=r+32|0;k=r+16|0;m=r;o=d+16|0;g=c[o>>2]|0;a:do if(!(c[g+212>>2]|0))switch(WM(d)|0){case 1:{m=c[(c[o>>2]|0)+12>>2]|0;n=m+8|0;k=c[n>>2]|0;c[p>>2]=k;b:do if((k|0)>2){i=KK(k<<4)|0;j=m+44|0;g=0;while(1){if((g|0)>=(k|0))break b;d=c[j>>2]|0;h[i+(g<<4)>>3]=+h[d+(g<<4)>>3]*.013888888888888888;h[i+(g<<4)+8>>3]=+h[d+(g<<4)+8>>3]*.013888888888888888;g=g+1|0}}else i=su(d,p,0.0,0.0)|0;while(0);g=c[c[(c[o>>2]|0)+8>>2]>>2]|0;switch(a[g>>0]|0){case 98:{if(!(s2(g,108236)|0))g=1;else q=13;break}case 112:{if((s2(g,105721)|0)==0?(ru(i,c[p>>2]|0)|0)!=0:0)g=1;else q=13;break}default:q=13}do if((q|0)==13){if((c[n>>2]|0)<3?c[m>>2]|0:0){g=2;break}g=0}while(0);c[b+40>>2]=g;q=20;break a}case 2:{c[p>>2]=4;q=KK(64)|0;o=c[(c[o>>2]|0)+12>>2]|0;t=+h[o+16>>3];v=+h[o+24>>3];u=+h[o+32>>3];s=+h[o+40>>3];wu(i,t,v);c[q>>2]=c[i>>2];c[q+4>>2]=c[i+4>>2];c[q+8>>2]=c[i+8>>2];c[q+12>>2]=c[i+12>>2];i=q+16|0;wu(j,u,v);c[i>>2]=c[j>>2];c[i+4>>2]=c[j+4>>2];c[i+8>>2]=c[j+8>>2];c[i+12>>2]=c[j+12>>2];i=q+32|0;wu(k,u,s);c[i>>2]=c[k>>2];c[i+4>>2]=c[k+4>>2];c[i+8>>2]=c[k+8>>2];c[i+12>>2]=c[k+12>>2];i=q+48|0;wu(m,t,s);c[i>>2]=c[m>>2];c[i+4>>2]=c[m+4>>2];c[i+8>>2]=c[m+8>>2];c[i+12>>2]=c[m+12>>2];c[b+40>>2]=1;i=q;q=20;break a}case 3:{c[b+40>>2]=2;i=su(d,p,0.0,0.0)|0;q=20;break a}default:{c[n>>2]=c[c[(c[o>>2]|0)+8>>2]>>2];gA(1,93919,n)|0;g=1;break a}}else{c[p>>2]=4;u=+h[g+32>>3]*.5;v=+h[g+40>>3]*.5;c[b+40>>2]=1;i=KK(64)|0;h[i>>3]=u;h[i+8>>3]=v;t=-u;h[i+16>>3]=t;h[i+24>>3]=v;h[i+32>>3]=t;v=-v;h[i+40>>3]=v;h[i+48>>3]=u;h[i+56>>3]=v;q=20}while(0);if((q|0)==20){g=c[p>>2]|0;if(e!=1.0|f!=1.0)xu(i,g,e,f);c[b+36>>2]=i;c[b+32>>2]=g;uu(i,g,b,b+16|0);if((g|0)>(c[46914]|0)){c[46914]=g;g=0}else g=0}l=r;return g|0}function wu(a,b,c){a=a|0;b=+b;c=+c;h[a>>3]=b*.013888888888888888;h[a+8>>3]=c*.013888888888888888;return}function xu(a,b,c,d){a=a|0;b=b|0;c=+c;d=+d;var e=0,f=0;e=0;while(1){if((e|0)>=(b|0))break;h[a>>3]=+h[a>>3]*c;f=a+8|0;h[f>>3]=+h[f>>3]*d;a=a+16|0;e=e+1|0}return}function yu(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0.0,t=0.0,u=0.0,v=0;r=l;l=l+128|0;o=r+112|0;n=r+96|0;m=r+80|0;f=r+64|0;p=r+48|0;q=r+32|0;j=r+16|0;k=r;c[n>>2]=c[a>>2];c[n+4>>2]=c[a+4>>2];c[n+8>>2]=c[a+8>>2];c[n+12>>2]=c[a+12>>2];c[o>>2]=c[b>>2];c[o+4>>2]=c[b+4>>2];c[o+8>>2]=c[b+8>>2];c[o+12>>2]=c[b+12>>2];ws(p,n,o);g=b+16|0;c[n>>2]=c[a>>2];c[n+4>>2]=c[a+4>>2];c[n+8>>2]=c[a+8>>2];c[n+12>>2]=c[a+12>>2];c[o>>2]=c[g>>2];c[o+4>>2]=c[g+4>>2];c[o+8>>2]=c[g+8>>2];c[o+12>>2]=c[g+12>>2];ws(q,n,o);c[n>>2]=c[d>>2];c[n+4>>2]=c[d+4>>2];c[n+8>>2]=c[d+8>>2];c[n+12>>2]=c[d+12>>2];c[o>>2]=c[e>>2];c[o+4>>2]=c[e+4>>2];c[o+8>>2]=c[e+8>>2];c[o+12>>2]=c[e+12>>2];ws(j,n,o);i=e+16|0;c[n>>2]=c[d>>2];c[n+4>>2]=c[d+4>>2];c[n+8>>2]=c[d+8>>2];c[n+12>>2]=c[d+12>>2];c[o>>2]=c[i>>2];c[o+4>>2]=c[i+4>>2];c[o+8>>2]=c[i+8>>2];c[o+12>>2]=c[i+12>>2];ws(k,n,o);c[f>>2]=c[p>>2];c[f+4>>2]=c[p+4>>2];c[f+8>>2]=c[p+8>>2];c[f+12>>2]=c[p+12>>2];c[m>>2]=c[q>>2];c[m+4>>2]=c[q+4>>2];c[m+8>>2]=c[q+8>>2];c[m+12>>2]=c[q+12>>2];c[n>>2]=c[j>>2];c[n+4>>2]=c[j+4>>2];c[n+8>>2]=c[j+8>>2];c[n+12>>2]=c[j+12>>2];c[o>>2]=c[k>>2];c[o+4>>2]=c[k+4>>2];c[o+8>>2]=c[k+8>>2];c[o+12>>2]=c[k+12>>2];do if(zu(f,m,n,o)|0){f=c[b+40>>2]|0;if(f&1|0?c[e+40>>2]&1|0:0){f=1;break}if(f&2|0?c[e+40>>2]&2|0:0){s=+h[g>>3]-+h[b>>3]+ +h[i>>3]-+h[e>>3];t=+h[a>>3]-+h[d>>3];u=+h[a+8>>3]-+h[d+8>>3];f=!(u*u+t*t>s*s*.25);break}f=c[46915]|0;if(!f){c[46915]=KK(c[46914]<<4)|0;i=KK(c[46914]<<4)|0;c[46916]=i;f=c[46915]|0}else i=c[46916]|0;v=c[b+36>>2]|0;b=b+32|0;g=c[b>>2]|0;c[o>>2]=c[a>>2];c[o+4>>2]=c[a+4>>2];c[o+8>>2]=c[a+8>>2];c[o+12>>2]=c[a+12>>2];Au(v,g,o,f);a=c[e+36>>2]|0;g=e+32|0;e=c[g>>2]|0;c[o>>2]=c[d>>2];c[o+4>>2]=c[d+4>>2];c[o+8>>2]=c[d+8>>2];c[o+12>>2]=c[d+12>>2];Au(a,e,o,i);if(!(Bu(f,i,c[b>>2]|0,c[g>>2]|0)|0)){f=c[46915]|0;c[m>>2]=c[f>>2];c[m+4>>2]=c[f+4>>2];c[m+8>>2]=c[f+8>>2];c[m+12>>2]=c[f+12>>2];c[n>>2]=c[j>>2];c[n+4>>2]=c[j+4>>2];c[n+8>>2]=c[j+8>>2];c[n+12>>2]=c[j+12>>2];c[o>>2]=c[k>>2];c[o+4>>2]=c[k+4>>2];c[o+8>>2]=c[k+8>>2];c[o+12>>2]=c[k+12>>2];if(Cu(m,n,o)|0?(k=c[46916]|0,v=c[g>>2]|0,c[o>>2]=c[f>>2],c[o+4>>2]=c[f+4>>2],c[o+8>>2]=c[f+8>>2],c[o+12>>2]=c[f+12>>2],Du(k,v,o)|0):0){f=1;break}f=c[46916]|0;c[m>>2]=c[f>>2];c[m+4>>2]=c[f+4>>2];c[m+8>>2]=c[f+8>>2];c[m+12>>2]=c[f+12>>2];c[n>>2]=c[p>>2];c[n+4>>2]=c[p+4>>2];c[n+8>>2]=c[p+8>>2];c[n+12>>2]=c[p+12>>2];c[o>>2]=c[q>>2];c[o+4>>2]=c[q+4>>2];c[o+8>>2]=c[q+8>>2];c[o+12>>2]=c[q+12>>2];if(!(Cu(m,n,o)|0))f=0;else{q=c[46915]|0;v=c[b>>2]|0;c[o>>2]=c[f>>2];c[o+4>>2]=c[f+4>>2];c[o+8>>2]=c[f+8>>2];c[o+12>>2]=c[f+12>>2];f=(Du(q,v,o)|0)!=0}}else f=1}else f=0;while(0);l=r;return f&1|0}function zu(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;if((+h[a>>3]<=+h[d>>3]?+h[c>>3]<=+h[b>>3]:0)?+h[a+8>>3]<=+h[d+8>>3]:0)a=+h[c+8>>3]<=+h[b+8>>3]&1;else a=0;return a|0}function Au(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;f=c+8|0;e=0;while(1){if((e|0)>=(b|0))break;h[d>>3]=+h[c>>3]+ +h[a>>3];h[d+8>>3]=+h[f>>3]+ +h[a+8>>3];e=e+1|0;a=a+16|0;d=d+16|0}return}function Bu(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0.0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0;A=l;l=l+112|0;s=A+96|0;r=A+80|0;q=A+64|0;p=A+48|0;u=A+32|0;v=A+16|0;w=A;x=d+-1|0;y=e+-1|0;z=d<<1;t=e<<1;f=0;g=0;h=0;i=0;while(1){B=a+(f<<4)|0;C=a+(((x+f|0)%(d|0)|0)<<4)|0;c[r>>2]=c[B>>2];c[r+4>>2]=c[B+4>>2];c[r+8>>2]=c[B+8>>2];c[r+12>>2]=c[B+12>>2];c[s>>2]=c[C>>2];c[s+4>>2]=c[C+4>>2];c[s+8>>2]=c[C+8>>2];c[s+12>>2]=c[C+12>>2];vs(u,r,s);o=b+(g<<4)|0;n=b+(((y+g|0)%(e|0)|0)<<4)|0;c[r>>2]=c[o>>2];c[r+4>>2]=c[o+4>>2];c[r+8>>2]=c[o+8>>2];c[r+12>>2]=c[o+12>>2];c[s>>2]=c[n>>2];c[s+4>>2]=c[n+4>>2];c[s+8>>2]=c[n+8>>2];c[s+12>>2]=c[n+12>>2];vs(v,r,s);c[q>>2]=c[46540];c[q+4>>2]=c[46541];c[q+8>>2]=c[46542];c[q+12>>2]=c[46543];c[r>>2]=c[u>>2];c[r+4>>2]=c[u+4>>2];c[r+8>>2]=c[u+8>>2];c[r+12>>2]=c[u+12>>2];c[s>>2]=c[v>>2];c[s+4>>2]=c[v+4>>2];c[s+8>>2]=c[v+8>>2];c[s+12>>2]=c[v+12>>2];j=+xs(q,r,s);c[q>>2]=c[C>>2];c[q+4>>2]=c[C+4>>2];c[q+8>>2]=c[C+8>>2];c[q+12>>2]=c[C+12>>2];c[r>>2]=c[B>>2];c[r+4>>2]=c[B+4>>2];c[r+8>>2]=c[B+8>>2];c[r+12>>2]=c[B+12>>2];c[s>>2]=c[o>>2];c[s+4>>2]=c[o+4>>2];c[s+8>>2]=c[o+8>>2];c[s+12>>2]=c[o+12>>2];k=ys(q,r,s)|0;c[q>>2]=c[n>>2];c[q+4>>2]=c[n+4>>2];c[q+8>>2]=c[n+8>>2];c[q+12>>2]=c[n+12>>2];c[r>>2]=c[o>>2];c[r+4>>2]=c[o+4>>2];c[r+8>>2]=c[o+8>>2];c[r+12>>2]=c[o+12>>2];c[s>>2]=c[B>>2];c[s+4>>2]=c[B+4>>2];c[s+8>>2]=c[B+8>>2];c[s+12>>2]=c[B+12>>2];m=ys(q,r,s)|0;c[p>>2]=c[C>>2];c[p+4>>2]=c[C+4>>2];c[p+8>>2]=c[C+8>>2];c[p+12>>2]=c[C+12>>2];c[q>>2]=c[B>>2];c[q+4>>2]=c[B+4>>2];c[q+8>>2]=c[B+8>>2];c[q+12>>2]=c[B+12>>2];c[r>>2]=c[n>>2];c[r+4>>2]=c[n+4>>2];c[r+8>>2]=c[n+8>>2];c[r+12>>2]=c[n+12>>2];c[s>>2]=c[o>>2];c[s+4>>2]=c[o+4>>2];c[s+8>>2]=c[o+8>>2];c[s+12>>2]=c[o+12>>2];if(zs(p,q,r,s,w)|0){f=1;break}n=(k|0)==0;o=(m|0)==0;do if(j!=0.0|(m|k|0)!=0)if(!(j>=0.0))if(o){f=(f+1|0)%(d|0)|0;h=h+1|0;break}else{g=(g+1|0)%(e|0)|0;i=i+1|0;break}else if(n){g=(g+1|0)%(e|0)|0;i=i+1|0;break}else{f=(f+1|0)%(d|0)|0;h=h+1|0;break}else{f=(f+1|0)%(d|0)|0;h=h+1|0}while(0);if(!((i|0)<(t|0)&((h|0)<(z|0)&((i|0)<(e|0)|(h|0)<(d|0))))){f=0;break}}l=A;return f|0}function Cu(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0,e=0.0;e=+h[a>>3];if((e<=+h[c>>3]?e>=+h[b>>3]:0)?(d=+h[a+8>>3],d<=+h[c+8>>3]):0)a=d>=+h[b+8>>3]&1;else a=0;return a|0}function Du(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0.0,g=0,i=0,j=0.0,k=0.0,l=0;e=c[46917]|0;if(!e){e=KK(c[46914]<<4)|0;c[46917]=e}i=d+8|0;g=0;while(1){if((g|0)>=(b|0))break;h[e+(g<<4)>>3]=+h[a+(g<<4)>>3]-+h[d>>3];h[e+(g<<4)+8>>3]=+h[a+(g<<4)+8>>3]-+h[i>>3];g=g+1|0}d=b+-1|0;f=0.0;a=0;a:while(1){if((a|0)>=(b|0)){l=19;break}g=(d+a|0)%(b|0)|0;j=+h[e+(a<<4)+8>>3];i=j==0.0;if(i?+h[e+(g<<4)+8>>3]==0.0:0){if(+h[e+(g<<4)>>3]*+h[e+(a<<4)>>3]<0.0){e=1;break}}else l=11;do if((l|0)==11){l=0;k=+h[e+(g<<4)+8>>3];if(!(j>=0.0)|!(k<=0.0)?!(k>=0.0)|!(j<=0.0):0)break;j=(k*+h[e+(a<<4)>>3]-j*+h[e+(g<<4)>>3])/(k-j);if(j==0.0){e=1;break a}if(j>0.0)if(k==0.0|i){f=f+.5;break}else{f=f+1.0;break}}while(0);a=a+1|0}if((l|0)==19)e=((~~f|0)%2|0|0)==1&1;return e|0}function Eu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;j=KK(b<<2)|0;i=O(b,b)|0;d=KK(i<<2)|0;c[j>>2]=d;$t(i,0.0,d);d=1;while(1){if((d|0)>=(b|0)){d=0;g=0;i=b;break}c[j+(d<<2)>>2]=(c[j>>2]|0)+((O(d,b)|0)<<2);d=d+1|0}while(1){if((g|0)>=(b|0))break;h=j+(g<<2)|0;e=g;f=d;while(1){if((e|0)==(b|0))break;k=c[a+(f<<2)>>2]|0;c[(c[h>>2]|0)+(e<<2)>>2]=k;c[(c[j+(e<<2)>>2]|0)+(g<<2)>>2]=k;e=e+1|0;f=f+1|0}d=d+i|0;g=g+1|0;i=i+-1|0}return j|0}function Fu(a,b,d,e,f,h,i,j){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;j=+j;var k=0.0,l=0.0,m=0.0,n=0,o=0,p=0,q=0.0,r=0,s=0.0,t=0,u=0,v=0,w=0,x=0,y=0.0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0.0;M=c[d+(f<<2)>>2]|0;C=c[a+4>>2]|0;D=c[a>>2]|0;E=c[a+48>>2]|0;F=c[a+52>>2]|0;G=c[a+56>>2]|0;a:do if((h|0)<1)d=0;else{Hu(M,C,E,F,G,j);H=c[a+28>>2]|0;I=c[a+32>>2]|0;J=c[a+36>>2]|0;K=c[a+12>>2]|0;L=c[a+16>>2]|0;f=0;e=0;d=-1;while(1){if((f|0)>=(C|0))break;if((f|0)>=(e|0)){d=d+1|0;if((d|0)==(G|0)){e=C;d=G}else e=c[F+(d<<2)>>2]|0}c[L+(c[E+(f<<2)>>2]<<2)>>2]=d;f=f+1|0}z=c[a+40>>2]|0;A=I+(C+-1<<2)|0;d=0;e=0;while(1){if(e<<24>>24==0&(d|0)<(h|0)){k=-1.0e9;f=0;e=1}else break a;b:while(1){x=f;while(1){if((x|0)>=(C|0))break b;f=c[E+(x<<2)>>2]|0;y=+g[M+(f<<2)>>2];l=y;w=x;m=0.0;while(1){g[z+(f<<2)>>2]=m;f=w+1|0;if((f|0)>=(C|0)){v=0;break}l=(c[L+(f<<2)>>2]|0)>(c[L+(w<<2)>>2]|0)?l+j:l;a=c[E+(f<<2)>>2]|0;m=+g[M+(a<<2)>>2];if(+B(+(m-l))>1.0e-09){v=1;break}w=f;m=m-y;f=a}n=x;while(1){if((n|0)>(w|0)){a=0;o=x;break}o=c[E+(n<<2)>>2]|0;p=c[D+(o<<2)>>2]|0;a=0;l=-+g[b+(o<<2)>>2];while(1){if((a|0)>=(C|0))break;if((a|0)!=(o|0))l=+g[M+(a<<2)>>2]*+g[p+(a<<2)>>2]+l;a=a+1|0}g[H+(o<<2)>>2]=l/-+g[p+(o<<2)>>2]-+g[z+(o<<2)>>2];n=n+1|0}c:while(1){if((o|0)>(w|0)){m=0.0;q=0.0;r=0;break}n=c[L+(c[E+(o<<2)>>2]<<2)>>2]|0;if((n|0)==(G|0))r=f;else{r=c[F+(n<<2)>>2]|0;r=(f|0)<(r|0)?f:r}p=o;while(1){if((p|0)>=(r|0)){p=o;break}n=c[E+(p<<2)>>2]|0;if(+g[H+(n<<2)>>2]>2]=n;a=a+1|0}p=p+1|0}while(1){if((p|0)>=(r|0))break;n=c[E+(p<<2)>>2]|0;if(+g[H+(n<<2)>>2]==y){c[K+(a<<2)>>2]=n;a=a+1|0}p=p+1|0}while(1){if((o|0)>=(r|0)){o=r;continue c}n=c[E+(o<<2)>>2]|0;if(+g[H+(n<<2)>>2]>y){c[K+(a<<2)>>2]=n;a=a+1|0}o=o+1|0}}while(1){if((r|0)>=(a|0))break;o=c[K+(r<<2)>>2]|0;p=c[D+(o<<2)>>2]|0;l=0.0;n=0;while(1){if((n|0)==(r|0))break;l=l-+g[p+(c[K+(n<<2)>>2]<<2)>>2];n=n+1|0}N=l*2.0;u=p+(o<<2)|0;s=+g[u>>2];l=N+m;s=(N*y+m*q-+g[H+(o<<2)>>2]*s)/(l-s);g[I+(r<<2)>>2]=s;m=l-+g[u>>2];q=s;r=r+1|0}p=(a|0)==(C|0);if(p)g[A>>2]=y;u=a+-1|0;m=0.0;q=0.0;o=u;while(1){if((o|0)<=-1)break;r=c[K+(o<<2)>>2]|0;t=c[D+(r<<2)>>2]|0;l=0.0;n=o;while(1){n=n+1|0;if((n|0)>=(a|0))break;l=l-+g[t+(c[K+(n<<2)>>2]<<2)>>2]}l=l*2.0;t=t+(r<<2)|0;N=+g[t>>2];s=l+m;N=(l*y+m*q-+g[H+(r<<2)>>2]*N)/(s-N);g[J+(o<<2)>>2]=N;m=s-+g[t>>2];q=N;o=o+-1|0}if(p){g[J>>2]=y;s=0.0;n=-1;p=0}else{s=0.0;n=-1;p=0}while(1){if((a|0)<=(p|0))break;q=+g[J+(p<<2)>>2];if((p|0)>0)l=+g[I+(p+-1<<2)>>2];else l=q;do if(qy;if(qs;s=t?N:s;n=t?p:n;p=p+1|0}if((n|0)>-1)break;if(v?(c[L+(c[E+(f<<2)>>2]<<2)>>2]|0)>(c[L+(c[E+(w<<2)>>2]<<2)>>2]|0):0){k=+g[M+(c[K+(u<<2)>>2]<<2)>>2]+j;x=f;continue}k=+g[M+(c[K+(u<<2)>>2]<<2)>>2];x=f}m=+g[J+(n<<2)>>2];if(!n)q=m;else q=+g[I+(n+-1<<2)>>2];if(v){t=c[E+(f<<2)>>2]|0;l=+g[M+(t<<2)>>2];l=((c[L+(t<<2)>>2]|0)>(c[L+(c[E+(w<<2)>>2]<<2)>>2]|0)?l-j:l)-+g[z+(c[K+(u<<2)>>2]<<2)>>2]}else l=1.0e9;l=mk?q:k;do if(ly;if(l=(n|0))break;t=c[K+(o<<2)>>2]|0;g[M+(t<<2)>>2]=+g[z+(t<<2)>>2]+l;o=o+1|0}while(1){if((n|0)>=(a|0))break;t=c[K+(n<<2)>>2]|0;g[M+(t<<2)>>2]=+g[z+(t<<2)>>2]+m;n=n+1|0}if(v?(c[L+(c[E+(f<<2)>>2]<<2)>>2]|0)>(c[L+(c[E+(w<<2)>>2]<<2)>>2]|0):0)k=+g[M+(c[K+(u<<2)>>2]<<2)>>2]+j;else k=+g[M+(c[K+(u<<2)>>2]<<2)>>2];a=x;while(1){if((a|0)>(w|0))break;c[E+(a<<2)>>2]=c[K+(a-x<<2)>>2];a=a+1|0}if(e<<24>>24!=0?+B(+(l-y))<.01:0)e=+B(+(m-y))<.01;else e=0;e=e&1}St(C,M);Gu(M,E,F,G,i);d=d+1|0}}while(0);return d|0}function Gu(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0;g=0;while(1){if((g|0)>=(e|0))break;c[f+(g<<2)>>2]=c[a+(c[b+((c[d+(g<<2)>>2]|0)+-1<<2)>>2]<<2)>>2];g=g+1|0}return}function Hu(a,b,d,e,f,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;h=+h;var i=0.0,j=0,k=0,l=0,m=0;i=-1.0e9;k=0;j=-1;m=0;while(1){if((m|0)>=(b|0))break;if((m|0)<(k|0))l=k;else{j=j+1|0;if((j|0)==(f|0))k=b;else k=c[e+(j<<2)>>2]|0;if((m|0)>0)i=+g[a+(c[d+(m+-1<<2)>>2]<<2)>>2]+h;else i=-1.0e9;gt(a,d,m,k+-1|0);l=k}k=a+(c[d+(m<<2)>>2]<<2)|0;if(+g[k>>2]>2]=i;k=l;m=m+1|0}return}function Iu(a){a=a|0;U1(c[c[a>>2]>>2]|0);U1(c[a>>2]|0);U1(c[a+8>>2]|0);U1(c[a+28>>2]|0);U1(c[a+32>>2]|0);U1(c[a+36>>2]|0);U1(c[a+40>>2]|0);U1(c[a+12>>2]|0);U1(c[a+16>>2]|0);U1(c[a+20>>2]|0);U1(c[a+24>>2]|0);U1(a);return}function Ju(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0;k=KK(60)|0;c[k>>2]=0;l=k+4|0;c[l>>2]=b;c[k+48>>2]=d;c[k+52>>2]=e;c[k+56>>2]=f;c[k>>2]=Eu(a,b)|0;i=b<<2;j=KK(i)|0;c[k+8>>2]=j;h=0;b=0;a=-1;while(1){if((h|0)>=(c[l>>2]|0))break;g=a+1|0;if((h|0)>=(b|0)){b=c[((g|0)==(f|0)?l:e+(g<<2)|0)>>2]|0;a=g}c[j+(c[d+(h<<2)>>2]<<2)>>2]=a;h=h+1|0}c[k+28>>2]=KK(i)|0;c[k+32>>2]=KK(i)|0;c[k+36>>2]=KK(i)|0;c[k+40>>2]=KK(i)|0;c[k+12>>2]=KK(i)|0;c[k+16>>2]=KK(i)|0;c[k+20>>2]=KK(i)|0;c[k+24>>2]=KK(i)|0;return k|0}function Ku(){fu(187676,24);c[46922]=0;return}function Lu(){return hu(187676)|0}function Mu(a,b){a=a|0;b=b|0;var c=0.0,d=0.0;c=+h[a>>3]-+h[b>>3];d=+h[a+8>>3]-+h[b+8>>3];return +(+C(+(d*d+c*c)))}function Nu(a){a=a|0;var b=0;b=c[46922]|0;c[a+16>>2]=b;c[46922]=b+1;return}function Ou(a){a=a|0;var b=0,d=0;d=a+20|0;b=(c[d>>2]|0)+-1|0;c[d>>2]=b;if(!b)iu(a,187676);return}function Pu(a){a=a|0;a=a+20|0;c[a>>2]=(c[a>>2]|0)+1;return}function Qu(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=+f;var i=0.0,j=0,k=0,m=0,n=0.0,o=0,p=0.0,q=0,r=0.0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;x=l;l=l+16|0;o=x;c[o>>2]=e;q=b<<2;v=KK(q)|0;m=b<<3;w=KK(m)|0;u=$s(a,b)|0;a=0;while(1){if((a|0)>=(b|0))break;k=u+(a<<2)|0;j=0;while(1){if((j|0)==(b|0))break;s=(c[k>>2]|0)+(j<<2)|0;c[s>>2]=c[s>>2]<<8;j=j+1|0}a=a+1|0}if(!d)qa(93952,93960,283,93974);s=KK(m)|0;a=0;while(1){if((a|0)>=(b|0))break;h[s+(a<<3)>>3]=+h[d+(a<<3)>>3];a=a+1|0}Ru(s,b);i=0.0;n=0.0;m=1;while(1){if((m|0)>=(b|0))break;j=u+(m<<2)|0;k=d+(m<<3)|0;a=0;while(1){if((a|0)==(m|0))break;y=c[(c[j>>2]|0)+(a<<2)>>2]|0;r=+h[k>>3]-+h[d+(a<<3)>>3];i=r*r*(1.0/+(O(y,y)|0))+i;n=+B(+r)*(1.0/+(y|0))+n;a=a+1|0}m=m+1|0}r=n/i;a=0;while(1){if((a|0)>=(b|0))break;y=d+(a<<3)|0;h[y>>3]=+h[y>>3]*r;a=a+1|0}Su(b,o,f,d,u);k=KK(O(q,b)|0)|0;j=0;while(1){if((j|0)>=(b|0)){k=1;break}m=k+((O(j,b)|0)<<2)|0;c[v+(j<<2)>>2]=m;o=u+(j<<2)|0;i=0.0;a=0;while(1){if((a|0)==(b|0))break;if((a|0)!=(j|0)){p=+(c[(c[o>>2]|0)+(a<<2)>>2]|0);p=-1.0/(p*p);g[m+(a<<2)>>2]=p;i=i-p}a=a+1|0}g[m+(j<<2)>>2]=i;j=j+1|0}while(1){if((k|0)>=(b|0)){j=0;break}i=+h[d+(k<<3)>>3];j=u+(k<<2)|0;a=0;while(1){if((a|0)==(k|0))break;y=(c[j>>2]|0)+(a<<2)|0;n=+(c[y>>2]|0);p=i-+h[d+(a<<3)>>3];p=n*n-p*p;q=~~+C(+p);q=p>0.0?q:0;c[(c[u+(a<<2)>>2]|0)+(k<<2)>>2]=q;c[y>>2]=q;a=a+1|0}k=k+1|0}while(1){if((j|0)>=(b|0)){q=0;a=0;break}n=+h[e+(j<<3)>>3];m=w+(j<<3)|0;h[m>>3]=0.0;o=u+(j<<2)|0;k=v+(j<<2)|0;a=0;i=0.0;while(1){if((a|0)==(b|0))break;if((a|0)!=(j|0)){p=+g[(c[k>>2]|0)+(a<<2)>>2]*+(c[(c[o>>2]|0)+(a<<2)>>2]|0);i=i+(n>=+h[e+(a<<3)>>3]?-p:p);h[m>>3]=i}a=a+1|0}j=j+1|0}while(1){if(!(a<<24>>24==0&(q|0)<200)){t=42;break}if((zr(v,e,w,b,f,b,1)|0)<0){a=1;break}else{a=1;o=0}while(1){if((o|0)>=(b|0))break;p=+h[e+(o<<3)>>3];k=u+(o<<2)|0;m=v+(o<<2)|0;i=0.0;j=0;while(1){if((j|0)==(b|0))break;do if((j|0)!=(o|0)){n=+g[(c[m>>2]|0)+(j<<2)>>2]*+(c[(c[k>>2]|0)+(j<<2)>>2]|0);if(!(p>=+h[e+(j<<3)>>3])){i=i+n;break}else{i=i+-n;break}}while(0);j=j+1|0}j=w+(o<<3)|0;p=+h[j>>3];if(i!=p?+B(+(1.0-i/p))>1.0e-05:0){h[j>>3]=i;a=0}o=o+1|0}q=q+1|0}a:do if((t|0)==42){i=1.0/r;a=0;while(1){if((a|0)>=(b|0)){a=0;break a}y=d+(a<<3)|0;h[y>>3]=+h[y>>3]*i;y=e+(a<<3)|0;h[y>>3]=+h[y>>3]*i;a=a+1|0}}while(0);U1(c[u>>2]|0);U1(u);U1(c[v>>2]|0);U1(v);U1(s);U1(w);l=x;return a|0}function Ru(a,b){a=a|0;b=b|0;var c=0,d=0.0,e=0.0,f=0;c=0;d=0.0;while(1){if((c|0)>=(b|0))break;e=+h[a+(c<<3)>>3]+d;c=c+1|0;d=e}d=d/+(b|0);c=0;while(1){if((c|0)>=(b|0))break;f=a+(c<<3)|0;h[f>>3]=+h[f>>3]-d;c=c+1|0}f=b+-1|0;Bt(a,0,f,1.0/+At(a,0,f),a);return}function Su(a,b,d,e,f){a=a|0;b=b|0;d=+d;e=e|0;f=f|0;var g=0,i=0,j=0,k=0,l=0,m=0;k=Tu(f,a)|0;l=KK(8)|0;if(!e){f=0;j=0}else{g=KK(a<<3)|0;f=0;while(1){if((f|0)>=(a|0))break;h[g+(f<<3)>>3]=+h[e+(f<<3)>>3];f=f+1|0}Ru(g,a);f=g;j=g}Uu(k,a,b,l,f,d);e=0;while(1){if((e|0)==1)break;g=l+(e<<3)|0;i=b+(e<<2)|0;f=0;while(1){if((f|0)>=(a|0))break;d=+C(+(+B(+(+h[g>>3]))));m=(c[i>>2]|0)+(f<<3)|0;h[m>>3]=+h[m>>3]*d;f=f+1|0}e=e+1|0}U1(c[k>>2]|0);U1(k);U1(l);U1(j);return}function Tu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,h=0.0,i=0,j=0,k=0,m=0,n=0,o=0,p=0.0;o=l;l=l+16|0;f=o;n=b<<2;e=KK(O(n,b)|0)|0;n=KK(n)|0;d=0;while(1){if((d|0)>=(b|0))break;c[n+(d<<2)>>2]=e+((O(d,b)|0)<<2);d=d+1|0}m=Wu(a,b,f)|0;h=+g[f>>2];e=0;k=1;while(1){if((e|0)>=(b|0))break;f=a+(e<<2)|0;i=m+(e<<2)|0;j=n+(e<<2)|0;d=0;while(1){if((d|0)==(k|0))break;p=+(c[(c[f>>2]|0)+(d<<2)>>2]|0);p=+g[m+(d<<2)>>2]+ +g[i>>2]-p*p-h;g[(c[j>>2]|0)+(d<<2)>>2]=p;g[(c[n+(d<<2)>>2]|0)+(e<<2)>>2]=p;d=d+1|0}e=e+1|0;k=k+1|0}U1(m);l=o;return n|0}function Uu(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=+g;var i=0,j=0,k=0,l=0,m=0.0,n=0.0,o=0,p=0,q=0,r=0,s=0;r=b<<3;q=KK(r)|0;r=KK(r)|0;n=1.0-g;o=(b|0)<1?b:1;p=b+-1|0;k=(f|0)==0;j=0;a:while(1){if((j|0)>=(o|0))break;l=c[d+(j<<2)>>2]|0;do{i=0;while(1){if((i|0)==(b|0))break;h[l+(i<<3)>>3]=+((x5()|0)%100|0|0);i=i+1|0}if(k)i=0;else{zt(l,0,p,-+yt(f,0,p,l),f);i=0}while(1){if((i|0)==(j|0))break;s=d+(i<<2)|0;m=-+yt(c[s>>2]|0,0,p,l);zt(l,0,p,m,c[s>>2]|0);i=i+1|0}g=+At(l,0,p)}while(g<1.0e-10);Bt(l,0,p,1.0/g,l);do{Ct(r,0,p,l);Vu(a,b,b,l,q,f);Ct(l,0,p,q);i=0;while(1){if((i|0)==(j|0))break;s=d+(i<<2)|0;m=-+yt(c[s>>2]|0,0,p,l);zt(l,0,p,m,c[s>>2]|0);i=i+1|0}g=+At(l,0,p);if(g<1.0e-10)break a;Bt(l,0,p,1.0/g,l);m=+yt(l,0,p,r)}while(+B(+m)>3]=m*g;j=j+1|0}while(1){if((j|0)>=(o|0))break;k=c[d+(j<<2)>>2]|0;i=0;while(1){if((i|0)>=(b|0)){i=0;break}h[k+(i<<3)>>3]=+((x5()|0)%100|0|0);i=i+1|0}while(1){if((i|0)>=(j|0))break;s=d+(i<<2)|0;n=-+yt(c[s>>2]|0,0,p,k);zt(k,0,p,n,c[s>>2]|0);i=i+1|0}Bt(k,0,p,1.0/+At(k,0,p),k);h[e+(j<<3)>>3]=0.0;j=j+1|0}l=o+-1|0;j=0;while(1){if((j|0)>=(l|0))break;a=e+(j<<3)|0;f=j+1|0;g=+h[a>>3];i=j;k=f;while(1){if((k|0)>=(o|0))break;n=+h[e+(k<<3)>>3];s=g>2]|0);s=d+(i<<2)|0;Ct(c[b>>2]|0,0,p,c[s>>2]|0);Ct(c[s>>2]|0,0,p,q);h[e+(i<<3)>>3]=+h[a>>3];h[a>>3]=g;j=f}U1(q);U1(r);return}function Vu(a,b,d,e,f,i){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;i=i|0;var j=0,k=0.0,l=0,m=0;j=0;while(1){if((j|0)>=(b|0))break;m=a+(j<<2)|0;k=0.0;l=0;while(1){if((l|0)>=(d|0))break;k=+h[e+(l<<3)>>3]*+g[(c[m>>2]|0)+(l<<2)>>2]+k;l=l+1|0}h[f+(j<<3)>>3]=k;j=j+1|0}j=b+-1|0;if(i|0)zt(f,0,j,-+yt(f,0,j,i),i);return}function Wu(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0.0,h=0,i=0,j=0,k=0.0,l=0,m=0.0;j=KK(b<<2)|0;k=1.0/+(b|0);e=0.0;i=0;while(1){if((i|0)>=(b|0))break;l=a+(i<<2)|0;f=0.0;h=0;while(1){if((h|0)==(b|0))break;m=+(c[(c[l>>2]|0)+(h<<2)>>2]|0);m=m*m;f=m+f;h=h+1|0;e=m+e}g[j+(i<<2)>>2]=k*f;i=i+1|0}g[d>>2]=e/+(O(b,b)|0);return j|0}function Xu(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0.0,g=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0.0,u=0;q=O(d,d)|0;r=KK(q<<3)|0;s=KK(d<<3)|0;e=0;while(1){if((e|0)>=(d|0))break;h[s+(e<<3)>>3]=+h[c+(e<<3)>>3];e=e+1|0}e=0;while(1){if((e|0)>=(q|0))break;h[r+(e<<3)>>3]=+h[a+(e<<3)>>3];e=e+1|0}p=d+-1|0;g=0;o=0;a:while(1){if((o|0)<(p|0)){f=0.0;e=o}else{l=21;break}while(1){if((e|0)>=(d|0))break;t=+B(+(+h[a+((O(e,d)|0)+o<<3)>>3]));m=t=(d|0))break;l=a+(e+i<<3)|0;t=+h[l>>3];m=a+(e+n<<3)|0;h[l>>3]=+h[m>>3];h[m>>3]=t;e=e+1|0}m=c+(g<<3)|0;t=+h[m>>3];j=c+(o<<3)|0;h[m>>3]=+h[j>>3];h[j>>3]=t;m=o+1|0;k=a+(n+o<<3)|0;e=m;while(1){if((e|0)>=(d|0)){o=m;continue a}l=O(e,d)|0;f=+h[a+(l+o<<3)>>3]/+h[k>>3];i=c+(e<<3)|0;h[i>>3]=+h[i>>3]-+h[j>>3]*f;i=0;while(1){if((i|0)>=(d|0))break;u=a+(i+l<<3)|0;h[u>>3]=+h[u>>3]-+h[a+(i+n<<3)>>3]*f;i=i+1|0}e=e+1|0}}if((l|0)==21){f=+h[a+(q+-1<<3)>>3];if(+B(+f)<1.0e-10)l=33;else{h[b+(p<<3)>>3]=+h[c+(p<<3)>>3]/f;e=0;while(1){if((e|0)>=(p|0)){e=0;break}g=d-e|0;i=g+-2|0;f=+h[c+(i<<3)>>3];j=b+(i<<3)|0;h[j>>3]=f;k=O(i,d)|0;g=g+-1|0;while(1){if((g|0)>=(d|0))break;t=f-+h[b+(g<<3)>>3]*+h[a+(g+k<<3)>>3];h[j>>3]=t;g=g+1|0;f=t}h[j>>3]=f/+h[a+(k+i<<3)>>3];e=e+1|0}while(1){if((e|0)>=(d|0)){e=0;break}h[c+(e<<3)>>3]=+h[s+(e<<3)>>3];e=e+1|0}while(1){if((e|0)>=(q|0))break;h[a+(e<<3)>>3]=+h[r+(e<<3)>>3];e=e+1|0}U1(r);U1(s)}}if((l|0)==33){B6(93989)|0;U1(r);U1(s)}return}function Yu(b,d){b=b|0;d=d|0;var e=0.0,f=0.0,g=0.0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;s=l;l=l+16|0;r=s;ms();Ku();Hs();c[46918]=jb[d&3]()|0;Js();q=r+8|0;p=jb[d&3]()|0;e=0.0;f=0.0;a:while(1){n=(p|0)==0;o=p+8|0;while(1){if(!(Ds()|0)){Es(r);e=+h[r>>3];f=+h[q>>3]}if(!n){if(Ds()|0)break;g=+h[o>>3];if(g>3]>2]|0;Nu(j);qs(c[t+8>>2]|0,a[t+16>>0]|0,j);qs(c[v+8>>2]|0,a[v+16>>0]|0,j);Qs(t);Cs(v);Qs(v);v=+h[m+8>>3]>+h[u+8>>3];t=v&1;k=v?u:m;u=ns(k,v?m:u)|0;m=Ks(u,t)|0;Ns(b,m);qs(u,(t^1)&255,j);Ou(j);j=Ls(b,m)|0;if(j|0){Cs(b);As(b,j,+Mu(j,k))}b=Ls(m,i)|0;if(!b)continue;As(m,b,+Mu(b,k))}b=Os(p)|0;k=Rs(b)|0;i=ns(Us(b)|0,p)|0;m=Ks(i,0)|0;Ns(b,m);j=Ls(b,m)|0;if(j|0){Cs(b);As(b,j,+Mu(j,p))}i=Ks(i,1)|0;Ns(m,i);b=Ls(i,k)|0;if(b|0)As(i,b,+Mu(b,p));p=jb[d&3]()|0}b=c[46860]|0;while(1){b=Rs(b)|0;if((b|0)==(c[46861]|0))break;os(c[b+8>>2]|0)}l=s;return}function Zu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;g=l;l=l+16|0;f=g+8|0;e=g;do if((tB(a)|0)!=1){_u(a);if(!b)b=$u(a)|0;d=av(a,b)|0;if(0){h=c[15712]|0;c[e>>2]=KB(b)|0;c[e+4>>2]=d;w4(h,94005,e)|0}if((d|0)<0){gA(1,94039,f)|0;break}else{bv(a);cv(a,b);dv(a,b);ev(a,d);break}}else{h=c[(c[(jC(a)|0)+16>>2]|0)+132>>2]|0;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=0}while(0);l=g;return b|0}function _u(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;d=tB(a)|0;d=O(d,d)|0;b=jC(a)|0;while(1){if(!b)break;e=b+16|0;f=c[(c[e>>2]|0)+112>>2]|0;g=f+24|0;c[g>>2]=d;c[g+4>>2]=0;h[f+48>>3]=10.0;f=(mv(a,b)|0)==0;e=c[(c[e>>2]|0)+112>>2]|0;c[e>>2]=f?d:0;c[e+4>>2]=f?0:0;b=kC(a,b)|0}return}function $u(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;e=(tB(a)|0)<3;b=jC(a)|0;a:do if(!e){while(1){if(!b)break;e=c[(c[b+16>>2]|0)+112>>2]|0;if((c[e>>2]|0)==0&(c[e+4>>2]|0)==0)lv(a,b,0);b=kC(a,b)|0}d=0;b=0;e=jC(a)|0;while(1){if(!e)break a;h=c[(c[e+16>>2]|0)+112>>2]|0;g=c[h>>2]|0;h=c[h+4>>2]|0;f=((d|0)<0)<<31>>31;f=h>>>0>f>>>0|(h|0)==(f|0)&g>>>0>d>>>0;d=f?g:d;b=f?e:b;e=kC(a,e)|0}}while(0);return b|0}function av(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;d=c[(c[b+16>>2]|0)+112>>2]|0;f=d+24|0;e=c[f>>2]|0;c[f>>2]=0;c[f+4>>2]=0;c[d+32>>2]=0;iv(a,b);d=jC(a)|0;e=P6(0,e|0,32)|0;f=z;b=0;while(1){if(!d)break;h=(c[(c[d+16>>2]|0)+112>>2]|0)+24|0;g=c[h>>2]|0;h=c[h+4>>2]|0;if((g|0)==(e|0)&(h|0)==(f|0)){b=-1;break}i=((b|0)<0)<<31>>31;b=h>>>0>i>>>0|(h|0)==(i|0)&g>>>0>b>>>0?g:b;d=kC(a,d)|0}return b|0}function bv(a){a=a|0;var b=0,d=0,e=0,f=0;d=jC(a)|0;while(1){if(!d)break;b=c[(c[d+16>>2]|0)+112>>2]|0;e=b+16|0;a:do if((c[e>>2]|0)==0&(c[e+4>>2]|0)==0)while(1){e=b+8|0;f=e;f=J6(c[f>>2]|0,c[f+4>>2]|0,1,0)|0;c[e>>2]=f;c[e+4>>2]=z;b=c[b+32>>2]|0;if(!b)break a;b=c[(c[b+16>>2]|0)+112>>2]|0}while(0);d=kC(a,d)|0}return}function cv(a,b){a=a|0;b=b|0;h[(c[(c[b+16>>2]|0)+112>>2]|0)+40>>3]=6.283185307179586;hv(a,b);return}function dv(a,b){a=a|0;b=b|0;h[(c[(c[b+16>>2]|0)+112>>2]|0)+48>>3]=0.0;gv(a,b);return}function ev(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0.0,k=0.0;i=l;l=l+16|0;f=i;g=fv(a,b)|0;if(0){e=c[15712]|0;T4(94095,e)|0;d=0;while(1){if((d|0)>(b|0))break;h[f>>3]=+h[g+(d<<3)>>3];w4(e,94114,f)|0;d=d+1|0}T4(153599,e)|0}d=jC(a)|0;while(1){if(!d)break;f=c[d+16>>2]|0;e=c[f+112>>2]|0;j=+h[g+(c[e+24>>2]<<3)>>3];e=e+48|0;k=+E(+(+h[e>>3]))*j;f=c[f+132>>2]|0;h[f>>3]=k;h[f+8>>3]=+F(+(+h[e>>3]))*j;d=kC(a,d)|0}U1(g);l=i;return}function fv(b,d){b=b|0;d=d|0;var e=0.0,f=0.0,g=0,i=0.0,j=0,k=0,m=0,n=0;n=l;l=l+16|0;k=n;m=JK((d<<3)+8|0)|0;b=aP(b,GA(c[b+60>>2]|0,0,101288,0)|0,0)|0;a:do if(!b){f=1.0;e=0.0;b=1}else{i=0.0;e=0.0;g=1;b:while(1){if((g|0)>(d|0)){f=i;b=g;break a}f=+s5(b,k);if(!(f>0.0)){f=i;b=g;break a}i=f>.02?f:.02;e=i+e;j=g+1|0;h[m+(g<<3)>>3]=e;b=c[k>>2]|0;while(1){g=a[b>>0]|0;if(!(g<<24>>24)){g=j;continue b}if(!(g<<24>>24==58|(S2(g<<24>>24)|0)!=0)){g=j;continue b}b=b+1|0}}}while(0);while(1){if((b|0)>(d|0))break;i=e+f;h[m+(b<<3)>>3]=i;b=b+1|0;e=i}l=n;return m|0}function gv(a,b){a=a|0;b=b|0;var d=0,e=0.0,f=0,g=0,i=0,j=0.0;d=c[(c[b+16>>2]|0)+112>>2]|0;if(!(c[d+32>>2]|0))e=0.0;else e=+h[d+48>>3]-+h[d+40>>3]*.5;g=aB(a,b)|0;while(1){if(!g)break;d=c[g>>2]&3;f=c[((d|0)==3?g:g+48|0)+40>>2]|0;if((f|0)==(b|0))f=c[((d|0)==2?g:g+-48|0)+40>>2]|0;d=c[(c[f+16>>2]|0)+112>>2]|0;if((c[d+32>>2]|0)==(b|0)?(i=d+48|0,!(+h[i>>3]!=10.0)):0){j=+h[d+40>>3];h[i>>3]=j*.5+e;e=j+e;d=d+16|0;if(!((c[d>>2]|0)==0&(c[d+4>>2]|0)==0))gv(a,f)}g=bB(a,g,b)|0}return}function hv(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0.0,i=0,j=0;e=c[(c[b+16>>2]|0)+112>>2]|0;f=e+8|0;g=+h[e+40>>3]/(+((c[f>>2]|0)>>>0)+4294967296.0*+((c[f+4>>2]|0)>>>0));f=aB(a,b)|0;while(1){if(!f)break;e=c[f>>2]&3;d=c[((e|0)==3?f:f+48|0)+40>>2]|0;if((d|0)==(b|0))d=c[((e|0)==2?f:f+-48|0)+40>>2]|0;e=c[(c[d+16>>2]|0)+112>>2]|0;if(((c[e+32>>2]|0)==(b|0)?(i=e+40|0,!(+h[i>>3]!=0.0)):0)?(j=e+8|0,h[i>>3]=g*(+((c[j>>2]|0)>>>0)+4294967296.0*+((c[j+4>>2]|0)>>>0)),e=e+16|0,!((c[e>>2]|0)==0&(c[e+4>>2]|0)==0)):0)hv(a,d);f=bB(a,f,b)|0}return}function iv(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;p=l;l=l+16|0;n=p;o=GA(b,2,101541,0)|0;c[n+4>>2]=0;c[n>>2]=0;jv(n,d);j=(o|0)==0;a:while(1){k=kv(n)|0;if(!k)break;m=k+16|0;h=c[(c[(c[m>>2]|0)+112>>2]|0)+24>>2]|0;g=aB(b,k)|0;h=J6(0,h|0,0,1)|0;h=P6(h|0,z|0,32)|0;i=z;while(1){if(!g)continue a;if(!((!j?(a[(RA(g,o)|0)>>0]|0)==48:0)?!(s2(RA(g,o)|0,138394)|0):0)){d=c[g>>2]&3;e=c[((d|0)==3?g:g+48|0)+40>>2]|0;if((e|0)==(k|0))e=c[((d|0)==2?g:g+-48|0)+40>>2]|0;d=c[(c[e+16>>2]|0)+112>>2]|0;f=d+24|0;q=f;r=c[q+4>>2]|0;if(i>>>0>>0|((i|0)==(r|0)?h>>>0<(c[q>>2]|0)>>>0:0)){r=f;c[r>>2]=h;c[r+4>>2]=i;c[d+32>>2]=k;r=(c[(c[m>>2]|0)+112>>2]|0)+16|0;q=r;q=J6(c[q>>2]|0,c[q+4>>2]|0,1,0)|0;c[r>>2]=q;c[r+4>>2]=z;jv(n,e)}}g=bB(b,g,k)|0}}l=p;return}function jv(a,b){a=a|0;b=b|0;var d=0,e=0;d=JK(8)|0;c[d>>2]=b;b=a+4|0;e=c[b>>2]|0;c[((e|0)==0?a:e+4|0)>>2]=d;c[b>>2]=d;return}function kv(a){a=a|0;var b=0,d=0;d=c[a>>2]|0;if(d){b=c[d>>2]|0;c[a>>2]=c[d+4>>2];U1(d);if(!(c[a>>2]|0))c[a+4>>2]=0}else b=0;return b|0}function lv(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;h=c[c[(c[b+16>>2]|0)+112>>2]>>2]|0;g=aB(a,b)|0;h=J6(0,h|0,0,1)|0;h=P6(h|0,z|0,32)|0;i=z;while(1){if(!g)break;f=c[g>>2]&3;e=c[((f|0)==3?g:g+48|0)+40>>2]|0;if((e|0)==(b|0))e=c[((f|0)==2?g:g+-48|0)+40>>2]|0;if((e|0)!=(d|0)?(j=c[(c[e+16>>2]|0)+112>>2]|0,f=j,k=c[f+4>>2]|0,i>>>0>>0|((i|0)==(k|0)?h>>>0<(c[f>>2]|0)>>>0:0)):0){k=j;c[k>>2]=h;c[k+4>>2]=i;lv(a,e,b)}g=bB(a,g,b)|0}return}function mv(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=0;g=aB(a,b)|0;while(1){if(!g){d=1;break}e=c[g>>2]&3;d=c[((e|0)==3?g:g+48|0)+40>>2]|0;if((d|0)==(b|0))d=c[((e|0)==2?g:g+-48|0)+40>>2]|0;if((d|0)!=(b|0)){if(f)if((f|0)==(d|0))d=f;else{d=0;break}}else d=f;f=d;g=bB(a,g,b)|0}return d|0}function nv(a){a=a|0;var b=0,d=0,e=0,f=0.0,g=0;b=l;l=l+32|0;e=b;d=GA(a,1,94122,0)|0;g=GA(a,0,94122,0)|0;a=ov(a,g,d,GA(a,0,94127,0)|0)|0;d=a+16|0;f=+C(+(+h[a>>3]+.1));zv(e,0.0,0.0,f,f);c[d>>2]=c[e>>2];c[d+4>>2]=c[e+4>>2];c[d+8>>2]=c[e+8>>2];c[d+12>>2]=c[e+12>>2];c[d+16>>2]=c[e+16>>2];c[d+20>>2]=c[e+20>>2];c[d+24>>2]=c[e+24>>2];c[d+28>>2]=c[e+28>>2];pv(a);qv(a);rv(a);l=b;return}function ov(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,g=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;o=JK(72)|0;c[o+60>>2]=0;c[o+56>>2]=a;k=a+16|0;f=0.0;l=0;i=1;j=0;m=0;while(1){g=c[k>>2]|0;if((i|0)>(c[g+180>>2]|0))break;g=ov(c[(c[g+184>>2]|0)+(i<<2)>>2]|0,b,d,e)|0;f=+h[g>>3]+f;if(j|0)c[j+52>>2]=g;l=l+1|0;i=i+1|0;j=g;m=(m|0)==0?g:m}n=jC(a)|0;g=m;while(1){if(!n)break;i=n+16|0;if(!(c[c[(c[i>>2]|0)+112>>2]>>2]|0)){k=uv(n,d)|0;f=+h[k>>3]+f;if(j|0)c[j+52>>2]=k;c[c[(c[i>>2]|0)+112>>2]>>2]=a;i=l+1|0;j=k;g=(g|0)==0?k:g}else i=l;n=kC(a,n)|0;l=i}c[o+64>>2]=l;if(!l)f=+wv(a,b);else{h[o+8>>3]=f;f=+vv(o,e)}h[o>>3]=f;c[o+48>>2]=g;return o|0}function pv(a){a=a|0;var b=0,d=0,e=0,f=0,g=0.0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0.0,r=0.0,s=0.0,t=0.0,u=0.0;p=l;l=l+176|0;f=p+144|0;n=p+64|0;k=p+32|0;i=p;o=c[a+64>>2]|0;a:do if(o|0){m=JK(o<<2)|0;b=a+48|0;e=0;d=b;while(1){d=c[d>>2]|0;if((e|0)>=(o|0))break;c[m+(e<<2)>>2]=d;e=e+1|0;d=d+52|0}o4(m,o,4,80);j=JK(o<<3)|0;d=0;while(1){if((d|0)>=(o|0))break;h[j+(d<<3)>>3]=+h[c[m+(d<<2)>>2]>>3];d=d+1|0}g=+h[a+8>>3];if(+h[a>>3]==g){i=a+16|0;c[f>>2]=c[i>>2];c[f+4>>2]=c[i+4>>2];c[f+8>>2]=c[i+8>>2];c[f+12>>2]=c[i+12>>2];c[f+16>>2]=c[i+16>>2];c[f+20>>2]=c[i+20>>2];c[f+24>>2]=c[i+24>>2];c[f+28>>2]=c[i+28>>2];i=xv(o,j,f)|0}else{q=+h[a+40>>3];r=+h[a+32>>3];h[i>>3]=+h[a+16>>3];h[i+8>>3]=+h[a+24>>3];s=q-r;g=(r+q-+C(+(g*4.0+s*s)))*.5;h[i+16>>3]=r-g;h[i+24>>3]=q-g;c[f>>2]=c[i>>2];c[f+4>>2]=c[i+4>>2];c[f+8>>2]=c[i+8>>2];c[f+12>>2]=c[i+12>>2];c[f+16>>2]=c[i+16>>2];c[f+20>>2]=c[i+20>>2];c[f+24>>2]=c[i+24>>2];c[f+28>>2]=c[i+28>>2];i=xv(o,j,f)|0}if(0){f=c[15712]|0;q=+h[a+24>>3];r=+h[a+32>>3];s=+h[a+40>>3];h[k>>3]=+h[a+16>>3];h[k+8>>3]=q;h[k+16>>3]=r;h[k+24>>3]=s;w4(f,94174,k)|0}e=c[15712]|0;d=0;while(1){if((d|0)>=(o|0))break;k=(c[m+(d<<2)>>2]|0)+16|0;f=i+(d<<5)|0;c[k>>2]=c[f>>2];c[k+4>>2]=c[f+4>>2];c[k+8>>2]=c[f+8>>2];c[k+12>>2]=c[f+12>>2];c[k+16>>2]=c[f+16>>2];c[k+20>>2]=c[f+20>>2];c[k+24>>2]=c[f+24>>2];c[k+28>>2]=c[f+28>>2];if(0){g=+h[f>>3];r=+h[i+(d<<5)+16>>3];u=r*.5;q=+h[i+(d<<5)+8>>3];s=+h[i+(d<<5)+24>>3];t=s*.5;h[n>>3]=+h[j+(d<<3)>>3];h[n+8>>3]=g-u;h[n+16>>3]=q-t;h[n+24>>3]=u+g;h[n+32>>3]=t+q;h[n+40>>3]=s*r;h[n+48>>3]=g;h[n+56>>3]=q;h[n+64>>3]=r;h[n+72>>3]=s;w4(e,94191,n)|0}d=d+1|0}U1(m);U1(j);U1(i);d=0;while(1){b=c[b>>2]|0;if((d|0)>=(o|0))break a;if(!(c[b+60>>2]|0))pv(b);b=b+52|0;d=d+1|0}}while(0);l=p;return}function qv(a){a=a|0;var b=0,d=0,e=0,f=0,g=0.0,i=0.0,j=0,k=0.0,m=0.0;f=l;l=l+48|0;e=f;if(c[a+60>>2]|0){k=+h[a+24>>3];i=+h[a+32>>3];g=+h[a+40>>3];b=c[a+56>>2]|0;d=b+16|0;j=c[d>>2]|0;h[j+16>>3]=+h[a+16>>3];h[j+24>>3]=k;a=c[d>>2]|0;h[a+32>>3]=i*.013888888888888888;h[a+40>>3]=g*.013888888888888888;qQ(b,c[(c[(xC(b)|0)+16>>2]|0)+116>>2]&1);sv(b);if(0){j=c[15712]|0;a=KB(b)|0;d=c[d>>2]|0;m=+h[d+16>>3];g=+h[d+24>>3];i=+h[d+80>>3];k=+h[d+96>>3]+ +h[d+88>>3];c[e>>2]=a;h[e+8>>3]=m;h[e+16>>3]=g;h[e+24>>3]=i;h[e+32>>3]=k;w4(j,94133,e)|0}}else{b=a+48|0;while(1){b=c[b>>2]|0;if(!b)break;qv(b);b=b+52|0}i=+h[a+32>>3];m=+h[a+40>>3];g=+h[a+16>>3]-i*.5;k=+h[a+24>>3]-m*.5;j=c[(c[a+56>>2]|0)+16>>2]|0;h[j+16>>3]=g;h[j+24>>3]=k;h[j+32>>3]=g+i;h[j+40>>3]=k+m}l=f;return}function rv(a){a=a|0;var b=0,d=0,e=0;e=c[a+64>>2]|0;b=a+48|0;d=0;while(1){b=c[b>>2]|0;if((d|0)>=(e|0))break;rv(b);b=b+52|0;d=d+1|0}U1(a);return}function sv(b){b=b|0;var d=0,e=0,f=0,g=0;g=l;l=l+48|0;f=g;d=g+8|0;e=c[47150]|0;if(e|0?(a[(RA(b,e)|0)>>0]|0)==0:0){h[f>>3]=+h[(c[b+16>>2]|0)+80>>3]*.7;m4(d,94168,f)|0;KA(b,c[47150]|0,d)|0}sP(b);l=g;return}function tv(a,b){a=a|0;b=b|0;var d=0.0;d=+h[c[a>>2]>>3]-+h[c[b>>2]>>3];return (d<0.0?1:(d>0.0)<<31>>31)|0}function uv(a,b){a=a|0;b=b|0;var d=0;d=JK(72)|0;h[d>>3]=+wv(a,b);c[d+60>>2]=1;c[d+56>>2]=a;return d|0}function vv(a,b){a=a|0;b=b|0;var d=0.0;d=+_O(c[a+56>>2]|0,b,0.0,0.0);if(d==0.0)d=+h[a+8>>3];else{d=+C(+(+h[a+8>>3]))+d*2.0;d=d*d}return +d}function wv(a,b){a=a|0;b=b|0;var c=0.0;c=+_O(a,b,1.0,0.0);return +(c==0.0?1.0e3:c*1.0e3)}function xv(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0.0,g=0,i=0,j=0.0;i=l;l=l+32|0;g=i;e=0;f=0.0;while(1){if((e|0)>=(a|0))break;j=+h[b+(e<<3)>>3]+f;e=e+1|0;f=j}if(f>+h[d+24>>3]*+h[d+16>>3]+.001)e=0;else{e=JK(a<<5)|0;c[g>>2]=c[d>>2];c[g+4>>2]=c[d+4>>2];c[g+8>>2]=c[d+8>>2];c[g+12>>2]=c[d+12>>2];c[g+16>>2]=c[d+16>>2];c[g+20>>2]=c[d+20>>2];c[g+24>>2]=c[d+24>>2];c[g+28>>2]=c[d+28>>2];yv(a,b,e,0,0.0,1.0,0.0,1.0,g)}l=i;return e|0}function yv(a,b,d,e,f,g,i,j,k){a=a|0;b=b|0;d=d|0;e=e|0;f=+f;g=+g;i=+i;j=+j;k=k|0;var m=0,n=0.0,o=0.0,p=0,q=0.0,r=0.0,s=0.0,t=0.0,u=0,v=0.0,w=0,x=0,y=0,z=0,A=0,B=0.0;z=l;l=l+112|0;y=z+72|0;u=z+40|0;p=z+32|0;m=z;w=k+16|0;q=+h[w>>3];x=k+24|0;r=+h[x>>3];v=+h[k+16+((!(q>3];do if((a|0)>=1){if(0){A=c[15712]|0;B=+h[k+8>>3];h[m>>3]=+h[k>>3];h[m+8>>3]=q;h[m+16>>3]=B;h[m+24>>3]=r;w4(A,94228,m)|0;c[p>>2]=e;w4(A,94274,p)|0}if(!e){i=+h[b>>3];B=v*v;v=i/B;B=B/i;c[y>>2]=c[k>>2];c[y+4>>2]=c[k+4>>2];c[y+8>>2]=c[k+8>>2];c[y+12>>2]=c[k+12>>2];c[y+16>>2]=c[k+16>>2];c[y+20>>2]=c[k+20>>2];c[y+24>>2]=c[k+24>>2];c[y+28>>2]=c[k+28>>2];yv(a,b,d,1,i,i,i,v>B?v:B,y);break}if((a|0)>(e|0)?(t=+h[b+(e<<3)>>3],n=tg?g:t,t=t+i,o=t/v,o=o*o,B=o/s,o=n/o,o=B>o?B:o,o<=j):0){c[y>>2]=c[k>>2];c[y+4>>2]=c[k+4>>2];c[y+8>>2]=c[k+8>>2];c[y+12>>2]=c[k+12>>2];c[y+16>>2]=c[k+16>>2];c[y+20>>2]=c[k+20>>2];c[y+24>>2]=c[k+24>>2];c[y+28>>2]=c[k+28>>2];yv(a,b,d,e+1|0,n,s,t,o,y);break}q=i/v;if(0){A=c[15712]|0;c[u>>2]=e;h[u+8>>3]=i;h[u+16>>3]=v;h[u+24>>3]=q;w4(A,94299,u)|0}n=+h[w>>3];if(v==n){o=1.0/q;p=k+8|0;n=+h[k>>3]-n*.5;m=0;while(1){if((m|0)>=(e|0))break;h[d+(m<<5)+24>>3]=q;B=+h[b+(m<<3)>>3]*o;h[d+(m<<5)+16>>3]=B;h[d+(m<<5)+8>>3]=(+h[x>>3]-q)*.5+ +h[p>>3];h[d+(m<<5)>>3]=B*.5+n;n=B+n;m=m+1|0}h[p>>3]=+h[p>>3]-q*.5;m=1}else{o=1.0/q;n=+h[x>>3]*.5+ +h[k+8>>3];m=0;while(1){if((m|0)>=(e|0))break;h[d+(m<<5)+16>>3]=q;B=+h[b+(m<<3)>>3]*o;h[d+(m<<5)+24>>3]=B;h[d+(m<<5)>>3]=(q-+h[w>>3])*.5+ +h[k>>3];h[d+(m<<5)+8>>3]=n-B*.5;n=n-B;m=m+1|0}h[k>>3]=+h[k>>3]+q*.5;m=0}A=k+16+(m<<3)|0;h[A>>3]=+h[A>>3]-q;c[y>>2]=c[k>>2];c[y+4>>2]=c[k+4>>2];c[y+8>>2]=c[k+8>>2];c[y+12>>2]=c[k+12>>2];c[y+16>>2]=c[k+16>>2];c[y+20>>2]=c[k+20>>2];c[y+24>>2]=c[k+24>>2];c[y+28>>2]=c[k+28>>2];yv(a-e|0,b+(e<<3)|0,d+(e<<5)|0,0,0.0,0.0,0.0,1.0,y)}while(0);l=z;return}function zv(a,b,c,d,e){a=a|0;b=+b;c=+c;d=+d;e=+e;h[a>>3]=b;h[a+8>>3]=c;h[a+16>>3]=d;h[a+24>>3]=e;return}function Av(a,d,e){a=a|0;d=d|0;e=e|0;var f=0,i=0,j=0,k=0,m=0.0,n=0.0,o=0.0,p=0.0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0;D=l;l=l+96|0;C=D+48|0;B=D+24|0;A=D+16|0;z=D+8|0;u=D+80|0;v=D;w=a+16|0;x=d+4|0;y=u+4|0;s=jC(a)|0;e=0;f=0;i=0;j=0;while(1){if(!s)break;t=XA(a,s)|0;q=e;r=j;while(1){if(!t)break;e=(b[(c[t+16>>2]|0)+168>>1]|0)==0;do if((s|0)==(c[((c[t>>2]&3|0)==2?t:t+-48|0)+40>>2]|0))if(e){j=q;e=r}else{if(!f){e=JK(96)|0;c[e+84>>2]=JK(((tB(a)|0)<<5)+11520|0)|0;f=e}else e=r;Km(f,t,c[(c[w>>2]|0)+248>>2]|0);j=q}else if(!e){i=Bv(t,d)|0;j=i+8|0;if(lt(c[j>>2]|0,c[i>>2]|0)|0){k=JX(c[j>>2]|0,c[i>>2]|0)|0;if(!k){gA(0,94352,z)|0;j=1;e=r;break}else e=t;while(1){if(!e)break;E=e+16|0;F=(c[E>>2]|0)+144|0;Qm(v,e,k,0,c[j>>2]|0,c[i>>2]|0);H=v;G=c[H+4>>2]|0;c[F>>2]=c[H>>2];c[F+4>>2]=G;Sm(a,e,c[j>>2]|0,c[i>>2]|0,0);e=c[(c[E>>2]|0)+172>>2]|0}Cv(i);j=q;e=r;break}if(!q){lr(u,a);e=lH(a,8,8)|0;gA(0,94436,A)|0;n=+(e|0);o=+g[d>>2];p=+g[x>>2];if(!(o>=n)&!(p>=n)){m=+g[u>>2];n=+g[y>>2];if(!(!(m<=o)&!(n<=p))){h[C>>3]=m;h[C+8>>3]=n;h[C+16>>3]=o;h[C+24>>3]=p;gA(3,94552,C)|0}}else{c[B>>2]=e;h[B+8>>3]=o;h[B+16>>3]=p;gA(3,94502,B)|0}j=1;e=r}else{j=q;e=r}}else{j=q;e=r}while(0);t=ZA(a,t)|0;q=j;r=e}s=kC(a,s)|0;e=q;j=r}Dv(i);if(f|0){U1(c[f+84>>2]|0);U1(j)}l=D;return e|0}function Bv(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;p=l;l=l+16|0;m=p+4|0;n=p;e=c[b>>2]&3;f=c[((e|0)==2?b:b+-48|0)+40>>2]|0;e=c[((e|0)==3?b:b+48|0)+40>>2]|0;q=f+16|0;h=c[(c[q>>2]|0)+212>>2]|0;c[m>>2]=h;i=e+16|0;g=c[(c[i>>2]|0)+212>>2]|0;c[n>>2]=g;k=JK(12)|0;b=h;j=g;if(a[(c[q>>2]|0)+118>>0]|0){b=c[(c[(c[b+16>>2]|0)+140>>2]|0)+48>>2]|0;c[m>>2]=b;f=h;h=b}if(!(a[(c[i>>2]|0)+118>>0]|0))i=j;else{i=c[(c[(c[j+16>>2]|0)+140>>2]|0)+48>>2]|0;c[n>>2]=i;e=g;g=i}h=c[(c[(c[h+16>>2]|0)+140>>2]|0)+44>>2]|0;g=c[(c[(c[g+16>>2]|0)+140>>2]|0)+44>>2]|0;if((h|0)<=(g|0))if((g|0)>(h|0)){Ev(k,g,e,h,n,d);b=c[n>>2]|0;g=b;e=n;o=11}else h=i;else{Ev(k,h,f,g,m,d);b=c[m>>2]|0;f=b;g=e;e=m;o=11}while(1){if((o|0)==11){c[e>>2]=c[(c[(c[b+16>>2]|0)+140>>2]|0)+48>>2];e=g;b=c[m>>2]|0;h=c[n>>2]|0}if((b|0)==(h|0))break;Fv(k,b,0,f,d);Fv(k,h,e,0,d);c[m>>2]=c[(c[(c[b+16>>2]|0)+140>>2]|0)+48>>2];f=b;g=h;e=n;b=h;o=11}Fv(k,h,e,f,d);l=p;return k|0}function Cv(a){a=a|0;c[a>>2]=0;return}function Dv(a){a=a|0;if(a|0){U1(c[a+8>>2]|0);U1(a)}return}function Ev(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0;i=f;while(1){h=c[i>>2]|0;if((b|0)<=(e|0))break;Fv(a,h,d,0,g);b=b+-1|0;i=(c[(c[h+16>>2]|0)+140>>2]|0)+48|0;d=h}c[f>>2]=d;return}function Fv(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0;h=jC(d)|0;while(1){if(!h)break;i=c[h+16>>2]|0;if(!((h|0)==(f|0)|((h|0)==(e|0)?1:(c[i+212>>2]|0)!=(d|0)))?(a[i+118>>0]|0)==0:0)Gv(b,Nm(h,g,0)|0);h=kC(d,h)|0}i=d+16|0;d=1;while(1){h=c[i>>2]|0;if((d|0)>(c[h+180>>2]|0))break;h=c[(c[h+184>>2]|0)+(d<<2)>>2]|0;if(!((h|0)==(e|0)|(h|0)==(f|0)))Gv(b,Hv(h,g)|0);d=d+1|0}return}function Gv(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;e=a+4|0;f=c[e>>2]|0;g=a+8|0;d=c[g>>2]|0;do if((f|0)==(c[a>>2]|0))if(!d){d=KK(400)|0;c[g>>2]=d;c[e>>2]=100;break}else{c[e>>2]=f<<1;d=MK(d,f<<3)|0;c[g>>2]=d;break}while(0);g=c[a>>2]|0;c[a>>2]=g+1;c[d+(g<<2)>>2]=b;return}function Hv(b,d){b=b|0;d=d|0;var e=0.0,f=0.0,i=0.0,j=0.0,k=0.0,l=0.0,m=0,n=0.0,o=0.0,p=0.0;m=JK(8)|0;b=c[b+16>>2]|0;e=+h[b+16>>3];l=+h[b+24>>3];f=+h[b+32>>3];k=+h[b+40>>3];c[m+4>>2]=4;b=JK(64)|0;c[m>>2]=b;if(!(a[d+8>>0]|0)){p=+g[d>>2];o=+g[d+4>>2];i=(f+e)*.5*(p+-1.0);n=(k+l)*.5*(o+-1.0);j=e*p-i;i=f*p-i;f=k*o-n;e=l*o-n}else{i=+g[d>>2];p=+g[d+4>>2];j=e-i;i=f+i;f=k+p;e=l-p}h[b>>3]=j;h[b+8>>3]=e;h[b+16>>3]=j;h[b+24>>3]=f;h[b+32>>3]=i;h[b+40>>3]=f;h[b+48>>3]=i;h[b+56>>3]=e;return m|0}function Iv(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;o=l;l=l+160|0;n=o+16|0;j=o+8|0;g=o;k=o+24|0;m=JK(tB(b)|0)|0;h=b+16|0;f=c[c[(c[h>>2]|0)+140>>2]>>2]|0;a:do if(!f){g=0;f=0}else{p=KB(b)|0;i=c[46923]|0;c[g>>2]=p;c[g+4>>2]=i;m4(k,94612,g)|0;i=ND(b,k,1)|0;TC(i,137483,280,1)|0;g=JK(56)|0;c[(c[i+16>>2]|0)+140>>2]=g;c[g>>2]=f;c[g+4>>2]=c[(c[(c[h>>2]|0)+140>>2]|0)+4>>2];while(1){g=c[f+4>>2]|0;if(!g){g=i;f=1;break a}if(!(a[m+(c[(c[g+16>>2]|0)+120>>2]|0)>>0]|0))Jv(b,g,i,m);f=f+16|0}}while(0);h=0;i=jC(b)|0;while(1){if(!i)break;p=c[i+16>>2]|0;if((a[m+(c[p+120>>2]|0)>>0]|0)==0?(a[p+119>>0]|0)==3:0){if(!g){p=KB(b)|0;g=(c[46923]|0)+f|0;c[j>>2]=p;c[j+4>>2]=g;m4(k,94612,j)|0;g=ND(b,k,1)|0;TC(g,137483,280,1)|0;p=JK(56)|0;c[(c[g+16>>2]|0)+140>>2]=p;f=f+1|0}Jv(b,i,g,m);h=1}i=kC(b,i)|0}if(g|0)KG(g)|0;g=jC(b)|0;while(1){if(!g)break;if(!(a[m+(c[(c[g+16>>2]|0)+120>>2]|0)>>0]|0)){j=KB(b)|0;p=(c[46923]|0)+f|0;c[n>>2]=j;c[n+4>>2]=p;m4(k,94620,n)|0;p=ND(b,k,1)|0;TC(p,137483,280,1)|0;j=JK(56)|0;c[(c[p+16>>2]|0)+140>>2]=j;Jv(b,g,p,m);KG(p)|0;f=f+1|0}g=kC(b,g)|0}U1(m);c[46923]=(c[46923]|0)+f;if(d|0)c[d>>2]=f;if(e|0)c[e>>2]=h;i=JK((f<<2)+4|0)|0;h=i;g=OD(b)|0;while(1){if(!g)break;c[h>>2]=g;h=h+4|0;g=PD(g)|0;f=f+-1|0}if(!f){c[h>>2]=0;l=o;return i|0}else qa(94628,94639,134,94646);return 0}function Jv(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;a[f+(c[(c[d+16>>2]|0)+120>>2]|0)>>0]=1;oC(e,d,1)|0;i=aB(b,d)|0;while(1){if(!i)break;h=c[i>>2]&3;g=c[((h|0)==3?i:i+48|0)+40>>2]|0;if((g|0)==(d|0))g=c[((h|0)==2?i:i+-48|0)+40>>2]|0;if(!(a[f+(c[(c[g+16>>2]|0)+120>>2]|0)>>0]|0))Jv(b,g,e,f);i=bB(b,i,d)|0}return}function Kv(a){a=a|0;var b=0;b=KK(24)|0;c[46924]=b;c[b>>2]=Vz(18204,c[4581]|0)|0;c[b+16>>2]=0;c[b+12>>2]=0;c[b+4>>2]=Lv(a)|0;return b|0}function Lv(a){a=a|0;var b=0,d=0;b=KK(16)|0;c[b+12>>2]=0;d=KK(a*20|0)|0;c[b>>2]=d;c[b+8>>2]=d+(a*20|0);c[b+4>>2]=d;return b|0}function Mv(a,b,d){a=a|0;b=b|0;d=d|0;d=Ov(c[46924]|0)|0;c[d>>2]=c[b>>2];c[d+4>>2]=c[b+4>>2];c[d+8>>2]=0;return d|0}function Nv(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;a=(c[b>>2]|0)-(c[d>>2]|0)|0;if(!a)a=(c[b+4>>2]|0)-(c[d+4>>2]|0)|0;return a|0}function Ov(a){a=a|0;var b=0,d=0,e=0,f=0;f=a+8|0;a=c[f>>2]|0;b=c[a+4>>2]|0;if((b|0)==(c[a+8>>2]|0)){d=a+12|0;e=c[d>>2]|0;if(!e){a=Lv(((b-(c[a>>2]|0)|0)/20|0)<<1)|0;c[d>>2]=a}else a=e;c[f>>2]=a;b=c[a>>2]|0;c[a+4>>2]=b}c[a+4>>2]=b+20;return b|0}function Pv(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=a+12|0;d=c[f>>2]|0;if((d|0)<(b|0)){e=d<<1;e=(e|0)<(b|0)?b:e;b=a+16|0;d=c[b>>2]|0;if(d|0)U1(d);c[b>>2]=KK(e<<3)|0;c[f>>2]=e}return}function Qv(a){a=a|0;var b=0;b=c[a>>2]|0;nb[c[b>>2]&63](b,0,64)|0;c[a+20>>2]=c[a+16>>2];b=c[a+4>>2]|0;c[a+8>>2]=b;c[b+4>>2]=c[b>>2];return}function Rv(a){a=a|0;Rz(c[a>>2]|0)|0;Sv(c[a+4>>2]|0);U1(c[a+16>>2]|0);U1(a);return}function Sv(a){a=a|0;var b=0;while(1){if(!a)break;b=c[a+12>>2]|0;U1(c[a>>2]|0);U1(a);a=b}return}function Tv(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;g=l;l=l+32|0;f=g;h=g+12|0;c[h>>2]=b;c[h+4>>2]=d;i=c[a>>2]|0;h=(nb[c[i>>2]&63](i,h,1)|0)+8|0;c[h>>2]=Uv(a,e,c[h>>2]|0)|0;if(0>2){i=c[15712]|0;h=KB(e)|0;c[f>>2]=b;c[f+4>>2]=d;c[f+8>>2]=h;w4(i,94656,f)|0}l=g;return}function Uv(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=a+20|0;a=c[e>>2]|0;c[e>>2]=a+8;c[a>>2]=b;c[a+4>>2]=d;return a|0}function Vv(a,b){a=a|0;b=b|0;aA(c[a>>2]|0,b,a)|0;return}function Wv(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+32|0;f=e;c[f>>2]=b;c[f+4>>2]=d;d=c[a>>2]|0;d=nb[c[d>>2]&63](d,f,4)|0;l=e;return d|0}function Xv(a){a=a|0;U1(c[a+8>>2]|0);U1(a);return}function Yv(a){a=a|0;return +(+h[a>>3])}function Zv(a){a=a|0;return c[a+8>>2]|0}function _v(a){a=a|0;return ~~+h[a+16>>3]|0}function $v(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;b=c[b>>2]|0;if((b|0)>=(c[d>>2]|0)){b=b+10|0;c[d>>2]=b;c[e>>2]=MK(c[e>>2]|0,O(a<<3,b)|0)|0;c[f>>2]=MK(c[f>>2]|0,c[d>>2]<<3)|0;c[g>>2]=MK(c[g>>2]|0,c[d>>2]<<3)|0}return}function aw(a,b,d,e,f,g,i,j,k,l,m){a=a|0;b=+b;d=d|0;e=e|0;f=f|0;g=g|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;var n=0,o=0,p=0,q=0,r=0.0;h[l>>3]=+h[l>>3]+1.0;a:do if(a|0){q=c[a+16>>2]|0;n=c[a+40>>2]|0;if(n|0)do{$v(q,f,g,i,j,k);if((_v(zy(n)|0)|0)!=(e|0)){p=Zv(zy(n)|0)|0;o=0;while(1){if((o|0)>=(q|0))break;h[(c[i>>2]|0)+((O(c[f>>2]|0,q)|0)+o<<3)>>3]=+h[p+(o<<3)>>3];o=o+1|0}r=+Yv(zy(n)|0);h[(c[j>>2]|0)+(c[f>>2]<<3)>>3]=r;r=+$w(d,p,q);p=c[f>>2]|0;h[(c[k>>2]|0)+(p<<3)>>3]=r;c[f>>2]=p+1}n=Ay(n)|0}while((n|0)!=0);p=a+36|0;if(c[p>>2]|0){r=+$w(c[a+20>>2]|0,d,q);if(!(+h[a+24>>3]=(o|0))break a;aw(c[(c[p>>2]|0)+(n<<2)>>2]|0,b,d,e,f,g,i,j,k,l,m);n=n+1|0}}$v(q,f,g,i,j,k);o=a+32|0;n=0;while(1){if((n|0)>=(q|0))break;h[(c[i>>2]|0)+((O(c[f>>2]|0,q)|0)+n<<3)>>3]=+h[(c[o>>2]|0)+(n<<3)>>3];n=n+1|0}h[(c[j>>2]|0)+(c[f>>2]<<3)>>3]=+h[a+8>>3];r=+$w(c[o>>2]|0,d,q);j=c[f>>2]|0;h[(c[k>>2]|0)+(j<<3)>>3]=r;c[f>>2]=j+1}}while(0);return}function bw(a,b,d,e,f,g,i,j,k,l,m){a=a|0;b=+b;d=d|0;e=e|0;f=f|0;g=g|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;var n=0;n=c[a+16>>2]|0;h[l>>3]=0.0;c[f>>2]=0;c[m>>2]=0;c[g>>2]=10;if(!(c[i>>2]|0))c[i>>2]=KK(n*80|0)|0;if(!(c[j>>2]|0))c[j>>2]=KK(c[g>>2]<<3)|0;if(!(c[k>>2]|0))c[k>>2]=KK(c[g>>2]<<3)|0;aw(a,b,d,e,f,g,i,j,k,l,m);return}function cw(a,b,d,e,f,g,i,j){a=a|0;b=b|0;d=d|0;e=+e;f=+f;g=+g;i=i|0;j=j|0;var k=0,l=0,m=0;m=c[a>>2]|0;l=c[a+16>>2]|0;k=0;while(1){if((k|0)==4)break;h[i+(k<<3)>>3]=0.0;k=k+1|0}c[j>>2]=0;l=O(l,m)|0;k=0;while(1){if((k|0)>=(l|0))break;h[b+(k<<3)>>3]=0.0;k=k+1|0}dw(a,a,d,b,e,f,g,i);ew(a,b,i);e=1.0/+(m|0);k=0;while(1){if((k|0)==4)break;m=i+(k<<3)|0;h[m>>3]=+h[m>>3]*e;k=k+1|0}return}function dw(a,b,d,e,f,g,i,j){a=a|0;b=b|0;d=d|0;e=e|0;f=+f;g=+g;i=+i;j=j|0;var k=0,l=0.0,m=0,n=0.0,o=0,p=0,q=0,r=0.0,s=0,t=0,u=0,v=0,w=0,x=0;a:do if((a|0)!=0&(b|0)!=0){if((c[a>>2]|0)>0?(c[b>>2]|0)>0:0){w=c[a+16>>2]|0;p=c[a+40>>2]|0;v=b+40|0;o=c[v>>2]|0;k=a+32|0;m=b+32|0;r=+$w(c[k>>2]|0,c[m>>2]|0,w);l=+h[a+24>>3];n=+h[b+24>>3];if(n+l>3]=+h[j>>3]+1.0;q=c[k>>2]|0;n=+h[a+8>>3];p=fw(a,w)|0;o=c[m>>2]|0;l=+h[b+8>>3];m=fw(b,w)|0;if(!(r>0.0))qa(94798,94681,191,94764);n=n*i*l;l=+D(+r,+(1.0-g));l=1.0/(g==-1.0?r*r:l);k=0;while(1){if((k|0)>=(w|0))break a;i=n*(+h[q+(k<<3)>>3]-+h[o+(k<<3)>>3])*l;e=p+(k<<3)|0;h[e>>3]=i+ +h[e>>3];e=m+(k<<3)|0;h[e>>3]=+h[e>>3]-i;k=k+1|0}}m=(p|0)!=0;k=(o|0)!=0;u=(a|0)==(b|0);if(m&k){s=j+8|0;t=g==-1.0;f=1.0-g;m=p;while(1){if(!m)break a;p=Zv(zy(m)|0)|0;r=+Yv(zy(m)|0);q=_v(zy(m)|0)|0;a=gw(e,q,m,w)|0;r=r*i;o=c[v>>2]|0;while(1){if(!o)break;b=Zv(zy(o)|0)|0;l=+Yv(zy(o)|0);k=_v(zy(o)|0)|0;j=gw(e,k,o,w)|0;b:do if(!((q|0)==(k|0)|u&(k|0)<(q|0))){h[s>>3]=+h[s>>3]+1.0;g=+Zw(d,w,q,k);l=r*l;n=+D(+g,+f);n=1.0/(t?g*g:n);k=0;while(1){if((k|0)>=(w|0))break b;g=l*(+h[p+(k<<3)>>3]-+h[b+(k<<3)>>3])*n;x=a+(k<<3)|0;h[x>>3]=g+ +h[x>>3];x=j+(k<<3)|0;h[x>>3]=+h[x>>3]-g;k=k+1|0}}while(0);o=Ay(o)|0}m=Ay(m)|0}}if(u){q=1<=(q|0))break a;p=c[(c[o>>2]|0)+(m<<2)>>2]|0;k=m;while(1){if((k|0)==(q|0))break;dw(p,c[(c[o>>2]|0)+(k<<2)>>2]|0,d,e,f,g,i,j);k=k+1|0}m=m+1|0}}if(!(m|!(l>n))){o=1<=(o|0))break a;dw(c[(c[m>>2]|0)+(k<<2)>>2]|0,b,d,e,f,g,i,j);k=k+1|0}}if(!(k|!(n>l))){o=1<=(o|0))break a;dw(c[(c[m>>2]|0)+(k<<2)>>2]|0,a,d,e,f,g,i,j);k=k+1|0}}if(!m){o=1<=(o|0))break a;dw(c[(c[m>>2]|0)+(k<<2)>>2]|0,b,d,e,f,g,i,j);k=k+1|0}}if(k)qa(138394,94681,273,94764);o=1<=(o|0))break a;dw(c[(c[m>>2]|0)+(k<<2)>>2]|0,a,d,e,f,g,i,j);k=k+1|0}}qa(94739,94681,175,94764)}while(0);return}function ew(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0.0,i=0.0,j=0,k=0,l=0,m=0,n=0,o=0;e=c[a+40>>2]|0;m=c[a+16>>2]|0;g=+h[a+8>>3];n=fw(a,m)|0;if(!(g>0.0))qa(94673,94681,289,94692);l=d+16|0;h[l>>3]=+h[l>>3]+1.0;a:do if(!e){l=1<=(l|0))break a;f=c[(c[k>>2]|0)+(a<<2)>>2]|0;if(f|0){if((c[f>>2]|0)<=0)break;j=fw(f,m)|0;i=+h[f+8>>3]*g;e=0;while(1){if((e|0)>=(m|0))break;o=j+(e<<3)|0;h[o>>3]=+h[o>>3]+ +h[n+(e<<3)>>3]*i;e=e+1|0}ew(f,b,d)}a=a+1|0}qa(94728,94681,307,94692)}else{i=1.0/g;while(1){if(!e)break a;f=gw(b,_v(zy(e)|0)|0,e,m)|0;g=+Yv(zy(e)|0)*i;a=0;while(1){if((a|0)>=(m|0))break;o=f+(a<<3)|0;h[o>>3]=+h[o>>3]+ +h[n+(a<<3)>>3]*g;a=a+1|0}e=Ay(e)|0}}while(0);return}function fw(a,b){a=a|0;b=b|0;var d=0;d=a+48|0;a=c[d>>2]|0;a:do if(!a){a=KK(b<<3)|0;c[d>>2]=a;d=0;while(1){if((d|0)>=(b|0))break a;h[a+(d<<3)>>3]=0.0;d=d+1|0}}while(0);return a|0}function gw(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0;f=c[(zy(d)|0)+24>>2]|0;if(!f){f=a+((O(e,b)|0)<<3)|0;c[(zy(d)|0)+24>>2]=f;f=c[(zy(d)|0)+24>>2]|0}return f|0}function hw(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,i=0.0,j=0,k=0,l=0,m=0,n=0,o=0.0,p=0;m=a<<3;k=KK(m)|0;l=KK(m)|0;m=KK(m)|0;if((k|0)!=0&(l|0)!=0&(m|0)!=0){f=0;while(1){if((f|0)>=(a|0)){f=0;break}h[k+(f<<3)>>3]=+h[d+(f<<3)>>3];f=f+1|0}while(1){if((f|0)>=(a|0)){g=1;break}h[l+(f<<3)>>3]=+h[d+(f<<3)>>3];f=f+1|0}while(1){if((g|0)>=(b|0))break;j=O(g,a)|0;f=0;while(1){if((f|0)>=(a|0))break;n=k+(f<<3)|0;i=+h[n>>3];p=d+(f+j<<3)|0;o=+h[p>>3];h[n>>3]=i>3];i=+h[p>>3];h[n>>3]=o>i?o:i;f=f+1|0}g=g+1|0}i=+h[l>>3]-+h[k>>3];f=0;while(1){if((f|0)>=(a|0))break;p=k+(f<<3)|0;n=l+(f<<3)|0;h[m+(f<<3)>>3]=(+h[n>>3]+ +h[p>>3])*.5;o=+h[n>>3]-+h[p>>3];i=i>o?i:o;f=f+1|0}f=iw(a,m,i==0.0?5.2e-06:i*.52,c)|0;a:do if(!e){g=0;while(1){if((g|0)>=(b|0))break a;f=jw(f,d+((O(g,a)|0)<<3)|0,1.0,g)|0;g=g+1|0}}else{g=0;while(1){if((g|0)>=(b|0))break a;p=d+((O(g,a)|0)<<3)|0;f=jw(f,p,+h[e+(g<<3)>>3],g)|0;g=g+1|0}}while(0);U1(k);U1(l);U1(m)}else{U1(k);U1(l);U1(m);f=0}return f|0}function iw(a,b,d,e){a=a|0;b=b|0;d=+d;e=e|0;var f=0,g=0,i=0;g=KK(56)|0;c[g+16>>2]=a;c[g>>2]=0;i=KK(a<<3)|0;c[g+20>>2]=i;f=0;while(1){if((f|0)>=(a|0))break;h[i+(f<<3)>>3]=+h[b+(f<<3)>>3];f=f+1|0}if(d>0.0){h[g+24>>3]=d;h[g+8>>3]=0.0;c[g+32>>2]=0;c[g+36>>2]=0;c[g+40>>2]=0;c[g+44>>2]=e;c[g+48>>2]=0;return g|0}else qa(94896,94681,410,94906);return 0}function jw(a,b,c,d){a=a|0;b=b|0;c=+c;d=d|0;if(!a)a=0;else kw(a,b,c,d,0)|0;return a|0}function kw(a,b,d,e,f){a=a|0;b=b|0;d=+d;e=e|0;f=f|0;var g=0,i=0,j=0,k=0.0,l=0.0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;t=a+16|0;r=c[t>>2]|0;s=c[a+44>>2]|0;m=c[a>>2]|0;do if(!m){c[a>>2]=1;h[a+8>>3]=d;j=KK(r<<3)|0;c[a+32>>2]=j;i=c[t>>2]|0;g=0;while(1){if((g|0)>=(i|0))break;h[j+(g<<3)>>3]=+h[b+(g<<3)>>3];g=g+1|0}g=lw(i,d,b,e)|0;i=a+40|0;if(!(c[i>>2]|0)){c[i>>2]=wy(g)|0;break}else qa(94807,94681,502,94815)}else{if((s|0)<=(f|0)){if(c[a+36>>2]|0)qa(94881,94681,541,94815);g=m+1|0;c[a>>2]=g;i=a+8|0;h[i>>3]=+h[i>>3]+d;i=a+32|0;k=+(g|0);l=1.0/+(m+2|0);g=0;while(1){if((g|0)>=(r|0))break;q=(c[i>>2]|0)+(g<<3)|0;h[q>>3]=(+h[q>>3]*k+ +h[b+(g<<3)>>3])*l;g=g+1|0}g=lw(r,d,b,e)|0;i=a+40|0;j=c[i>>2]|0;if(!j)qa(94891,94681,547,94815);else{c[i>>2]=yy(j,g)|0;break}}i=a+8|0;h[i>>3]=+h[i>>3]+d;i=a+32|0;l=+(m|0);k=1.0/+(m+1|0);g=0;while(1){if((g|0)>=(r|0))break;q=(c[i>>2]|0)+(g<<3)|0;h[q>>3]=(+h[q>>3]*l+ +h[b+(g<<3)>>3])*k;g=g+1|0}q=a+36|0;p=1<>2]|0)){c[q>>2]=KK(p<<2)|0;g=0;while(1){if((g|0)>=(p|0))break a;c[(c[q>>2]|0)+(g<<2)>>2]=0;g=g+1|0}}while(0);n=a+20|0;g=c[n>>2]|0;j=mw(r,g,b)|0;if(!((j|0)<(p|0)&(j|0)>-1))qa(94837,94681,515,94815);i=c[(c[q>>2]|0)+(j<<2)>>2]|0;if(!i){i=nw(c[t>>2]|0,g,+h[a+24>>3]*.5,s,j)|0;c[(c[q>>2]|0)+(j<<2)>>2]=i;i=c[(c[q>>2]|0)+(j<<2)>>2]|0}o=f+1|0;e=kw(i,b,d,e,o)|0;c[(c[q>>2]|0)+(j<<2)>>2]=e;if(!(c[(c[q>>2]|0)+(j<<2)>>2]|0))qa(94860,94681,519,94815);b=a+40|0;g=c[b>>2]|0;do if(g|0){m=_v(zy(g)|0)|0;if((c[a>>2]|0)!=1)qa(94871,94681,523,94815);f=Zv(zy(c[b>>2]|0)|0)|0;k=+Yv(zy(c[b>>2]|0)|0);i=c[n>>2]|0;j=mw(r,i,f)|0;if(!((j|0)<(p|0)&(j|0)>-1))qa(94837,94681,527,94815);g=c[(c[q>>2]|0)+(j<<2)>>2]|0;if(!g){g=nw(c[t>>2]|0,i,+h[a+24>>3]*.5,s,j)|0;c[(c[q>>2]|0)+(j<<2)>>2]=g;g=c[(c[q>>2]|0)+(j<<2)>>2]|0}t=kw(g,f,k,m,o)|0;c[(c[q>>2]|0)+(j<<2)>>2]=t;if(!(c[(c[q>>2]|0)+(j<<2)>>2]|0))qa(94860,94681,532,94815);else{xy(c[b>>2]|0,106);c[b>>2]=0;break}}while(0);c[a>>2]=(c[a>>2]|0)+1}while(0);return a|0}function lw(a,b,d,e){a=a|0;b=+b;d=d|0;e=e|0;var f=0,g=0;g=KK(32)|0;h[g>>3]=b;f=KK(a<<3)|0;c[g+8>>2]=f;h[g+16>>3]=+(e|0);e=0;while(1){if((e|0)>=(a|0))break;h[f+(e<<3)>>3]=+h[d+(e<<3)>>3];e=e+1|0}c[g+24>>2]=0;return g|0}function mw(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;e=0;while(1){d=a+-1|0;if((a|0)<=0)break;a=d;e=e<<1|!(+h[c+(d<<3)>>3]-+h[b+(d<<3)>>3]<0.0)&1}return e|0}function nw(a,b,d,e,f){a=a|0;b=b|0;d=+d;e=e|0;f=f|0;var g=0,i=0,j=0.0;g=iw(a,b,d,e)|0;i=c[g+20>>2]|0;j=-d;e=0;b=f;while(1){if((e|0)>=(a|0))break;f=i+(e<<3)|0;h[f>>3]=+h[f>>3]+((b&1|0)==0?j:d);e=e+1|0;b=(b|0)/2|0}return g|0}function ow(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;if(a|0){b=c[a+16>>2]|0;U1(c[a+20>>2]|0);U1(c[a+32>>2]|0);U1(c[a+48>>2]|0);g=a+36|0;e=c[g>>2]|0;if(e|0){f=1<=(f|0))break;ow(c[b+(d<<2)>>2]|0);d=d+1|0;b=c[g>>2]|0}U1(b)}xy(c[a+40>>2]|0,106);U1(a)}return}function pw(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0.0,r=0,s=0,t=0;a:do if(!a)b=0;else{l=c[a+20>>2]|0;m=c[a+24>>2]|0;d=c[a+8>>2]|0;n=c[a>>2]|0;e=c[a+4>>2]|0;i=a+16|0;if((c[a+32>>2]|0)!=1)qa(94919,94943,76,94958);b=rw(e,n,d,c[i>>2]|0,1)|0;c[b+8>>2]=d;o=c[b+20>>2]|0;k=c[b+24>>2]|0;d=0;while(1){if((d|0)>(e|0)){d=0;break}c[o+(d<<2)>>2]=0;d=d+1|0}b:while(1){if((d|0)>=(n|0)){d=0;break}f=d+1|0;g=l+(f<<2)|0;d=c[l+(d<<2)>>2]|0;while(1){if((d|0)>=(c[g>>2]|0)){d=f;continue b}j=o+((c[m+(d<<2)>>2]|0)+1<<2)|0;c[j>>2]=(c[j>>2]|0)+1;d=d+1|0}}while(1){if((d|0)>=(e|0))break;j=d+1|0;g=o+(j<<2)|0;c[g>>2]=(c[g>>2]|0)+(c[o+(d<<2)>>2]|0);d=j}c:do switch(c[i>>2]|0){case 1:{g=c[a+28>>2]|0;a=c[b+28>>2]|0;f=0;d:while(1){if((f|0)>=(n|0))break c;i=f+1|0;j=l+(i<<2)|0;d=c[l+(f<<2)>>2]|0;while(1){if((d|0)>=(c[j>>2]|0)){f=i;continue d}r=m+(d<<2)|0;c[k+(c[o+(c[r>>2]<<2)>>2]<<2)>>2]=f;q=+h[g+(d<<3)>>3];r=o+(c[r>>2]<<2)|0;p=c[r>>2]|0;c[r>>2]=p+1;h[a+(p<<3)>>3]=q;d=d+1|0}}}case 2:{g=c[a+28>>2]|0;a=c[b+28>>2]|0;f=0;e:while(1){if((f|0)>=(n|0))break c;i=f+1|0;j=l+(i<<2)|0;d=c[l+(f<<2)>>2]|0;while(1){if((d|0)>=(c[j>>2]|0)){f=i;continue e}r=m+(d<<2)|0;c[k+(c[o+(c[r>>2]<<2)>>2]<<2)>>2]=f;t=d<<1;r=o+(c[r>>2]<<2)|0;p=c[r>>2]|0;s=p<<1;h[a+(s<<3)>>3]=+h[g+(t<<3)>>3];h[a+((s|1)<<3)>>3]=+h[g+((t|1)<<3)>>3];c[r>>2]=p+1;d=d+1|0}}}case 4:{g=c[a+28>>2]|0;a=c[b+28>>2]|0;f=0;f:while(1){if((f|0)>=(n|0))break c;i=f+1|0;j=l+(i<<2)|0;d=c[l+(f<<2)>>2]|0;while(1){if((d|0)>=(c[j>>2]|0)){f=i;continue f}r=m+(d<<2)|0;c[k+(c[o+(c[r>>2]<<2)>>2]<<2)>>2]=f;s=c[g+(d<<2)>>2]|0;r=o+(c[r>>2]<<2)|0;t=c[r>>2]|0;c[r>>2]=t+1;c[a+(t<<2)>>2]=s;d=d+1|0}}}case 8:{f=0;g:while(1){if((f|0)>=(n|0))break c;g=f+1|0;a=l+(g<<2)|0;d=c[l+(f<<2)>>2]|0;while(1){if((d|0)>=(c[a>>2]|0)){f=g;continue g}s=o+(c[m+(d<<2)>>2]<<2)|0;t=c[s>>2]|0;c[s>>2]=t+1;c[k+(t<<2)>>2]=f;d=d+1|0}}}case 16:{qw(b);b=0;break a}default:{qw(b);b=0;break a}}while(0);while(1){d=e+-1|0;if((e|0)<=0)break;c[o+(e<<2)>>2]=c[o+(d<<2)>>2];e=d}c[o>>2]=0}while(0);return b|0}function qw(a){a=a|0;var b=0;if(a|0){b=c[a+20>>2]|0;if(b|0)U1(b);b=c[a+24>>2]|0;if(b|0)U1(b);U1(c[a+28>>2]|0);U1(a)}return}function rw(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;a=tw(a,b,d,sw(d)|0,e)|0;if((c|0)>0)uw(a,c)|0;return a|0}function sw(a){a=a|0;switch(a|0){case 1:{a=8;break}case 2:{a=16;break}case 4:{a=4;break}case 8:{a=0;break}case 16:{a=0;break}default:a=0}return a|0}function tw(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0;g=KK(44)|0;c[g>>2]=a;c[g+4>>2]=b;c[g+8>>2]=0;c[g+12>>2]=0;c[g+16>>2]=d;c[g+40>>2]=e;if((f|0)==2)a=0;else a=KK((a<<2)+4|0)|0;c[g+20>>2]=a;c[g+24>>2]=0;c[g+28>>2]=0;c[g+32>>2]=f;c[g+36>>2]=0;return g|0}function uw(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;h=c[a+32>>2]|0;f=a+28|0;c[f>>2]=0;d=b<<2;e=KK(d)|0;if((h|0)!=2){c[a+24>>2]=e;d=c[a+40>>2]|0;if((b|0)!=0&(d|0)>0)g=4}else{c[a+20>>2]=e;c[a+24>>2]=KK(d)|0;d=c[a+40>>2]|0;g=4}if((g|0)==4)c[f>>2]=KK(O(d,b)|0)|0;c[a+12>>2]=b;return a|0}function vw(a,b){a=a|0;b=b|0;if(!(ww(a,b)|0)){b=pw(a)|0;if(!b)b=0;else{a=yw(a,b)|0;qw(b);b=a+36|0;c[b>>2]=c[b>>2]|3;b=a}}else b=xw(a)|0;return b|0}function ww(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0.0;if(a){if((c[a+32>>2]|0)!=1)qa(94919,94943,187,95074);s=a+36|0;d=c[s>>2]|0;if((d&2|0)==0?(p=(b|0)!=0,(d&1|0)==0|p^1):0)if((c[a>>2]|0)==(c[a+4>>2]|0)?(t=pw(a)|0,(t|0)!=0):0){k=c[a+20>>2]|0;l=c[a+24>>2]|0;m=c[t+20>>2]|0;n=c[t+24>>2]|0;o=c[a>>2]|0;q=KK(o<<2)|0;b=0;while(1){if((b|0)>=(o|0))break;c[q+(b<<2)>>2]=-1;b=b+1|0}a:do switch((p?8:c[a+16>>2]|0)|0){case 1:{g=c[a+28>>2]|0;i=c[t+28>>2]|0;b=0;while(1){if((b|0)>(o|0)){d=0;break}if((c[k+(b<<2)>>2]|0)==(c[m+(b<<2)>>2]|0))b=b+1|0;else{b=0;break a}}b:while(1){if((d|0)>=(o|0)){r=54;break a}e=k+(d<<2)|0;f=d+1|0;a=k+(f<<2)|0;b=c[e>>2]|0;while(1){if((b|0)>=(c[a>>2]|0))break;c[q+(c[l+(b<<2)>>2]<<2)>>2]=b;b=b+1|0}b=c[m+(d<<2)>>2]|0;a=c[m+(f<<2)>>2]|0;d=b;while(1){if((d|0)>=(a|0))break;if((c[q+(c[n+(d<<2)>>2]<<2)>>2]|0)<(c[e>>2]|0)){b=0;break a}else d=d+1|0}while(1){if((b|0)>=(a|0)){d=f;continue b}u=+h[i+(b<<3)>>3]-+h[g+(c[q+(c[n+(b<<2)>>2]<<2)>>2]<<3)>>3];if((u>=0.0?u:-u)>1.0e-07){b=0;break a}else b=b+1|0}}}case 2:{i=c[a+28>>2]|0;j=c[t+28>>2]|0;b=0;while(1){if((b|0)>(o|0)){d=0;break}if((c[k+(b<<2)>>2]|0)==(c[m+(b<<2)>>2]|0))b=b+1|0;else{b=0;break a}}c:while(1){if((d|0)>=(o|0)){r=54;break a}f=k+(d<<2)|0;g=d+1|0;a=k+(g<<2)|0;b=c[f>>2]|0;while(1){if((b|0)>=(c[a>>2]|0))break;c[q+(c[l+(b<<2)>>2]<<2)>>2]=b;b=b+1|0}d=c[m+(d<<2)>>2]|0;e=c[m+(g<<2)>>2]|0;b=d;while(1){if((b|0)>=(e|0)){b=d;break}if((c[q+(c[n+(b<<2)>>2]<<2)>>2]|0)<(c[f>>2]|0)){b=0;break a}else b=b+1|0}while(1){if((b|0)>=(e|0)){d=g;continue c}d=b<<1;a=c[q+(c[n+(b<<2)>>2]<<2)>>2]<<1;u=+h[j+(d<<3)>>3]-+h[i+(a<<3)>>3];if((u>=0.0?u:-u)>1.0e-07){b=0;break a}u=+h[j+((d|1)<<3)>>3]-+h[i+((a|1)<<3)>>3];if((u>=0.0?u:-u)>1.0e-07){b=0;break a}else b=b+1|0}}}case 4:{f=c[a+28>>2]|0;g=c[t+28>>2]|0;b=0;d:while(1){if((b|0)>=(o|0)){r=54;break a}e=k+(b<<2)|0;i=b+1|0;a=k+(i<<2)|0;d=c[e>>2]|0;while(1){if((d|0)>=(c[a>>2]|0))break;c[q+(c[l+(d<<2)>>2]<<2)>>2]=d;d=d+1|0}b=c[m+(b<<2)>>2]|0;a=c[m+(i<<2)>>2]|0;d=b;while(1){if((d|0)>=(a|0))break;if((c[q+(c[n+(d<<2)>>2]<<2)>>2]|0)<(c[e>>2]|0)){b=0;break a}else d=d+1|0}while(1){if((b|0)>=(a|0)){b=i;continue d}if((c[g+(b<<2)>>2]|0)==(c[f+(c[q+(c[n+(b<<2)>>2]<<2)>>2]<<2)>>2]|0))b=b+1|0;else{b=0;break a}}}}case 8:{a=0;e:while(1){if((a|0)>=(o|0)){r=54;break a}e=k+(a<<2)|0;f=a+1|0;d=k+(f<<2)|0;b=c[e>>2]|0;while(1){if((b|0)>=(c[d>>2]|0))break;c[q+(c[l+(b<<2)>>2]<<2)>>2]=b;b=b+1|0}d=c[m+(f<<2)>>2]|0;b=c[m+(a<<2)>>2]|0;while(1){if((b|0)>=(d|0)){a=f;continue e}if((c[q+(c[n+(b<<2)>>2]<<2)>>2]|0)<(c[e>>2]|0)){b=0;break a}else b=b+1|0}}}default:b=0}while(0);if((r|0)==54){d=c[s>>2]|0;if(p)b=1;else{c[s>>2]=d|2;b=3}c[s>>2]=b|d;b=1}U1(q);qw(t)}else b=0;else b=1}else b=0;return b|0}function xw(a){a=a|0;var b=0,d=0,e=0,f=0;if(!a)b=0;else{e=a+8|0;f=a+40|0;b=zw(c[a>>2]|0,c[a+4>>2]|0,c[e>>2]|0,c[a+16>>2]|0,c[f>>2]|0,c[a+32>>2]|0)|0;d=a+20|0;W6(c[b+20>>2]|0,c[d>>2]|0,(c[a>>2]<<2)+4|0)|0;W6(c[b+24>>2]|0,c[a+24>>2]|0,c[(c[d>>2]|0)+(c[a>>2]<<2)>>2]<<2|0)|0;d=c[a+28>>2]|0;if(d|0)W6(c[b+28>>2]|0,d|0,O(c[e>>2]|0,c[f>>2]|0)|0)|0;c[b+36>>2]=c[a+36>>2];c[b+8>>2]=c[e>>2]}return b|0}function yw(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;p=c[a+20>>2]|0;r=c[a+24>>2]|0;s=c[b+20>>2]|0;t=c[b+24>>2]|0;if(!((a|0)!=0&(b|0)!=0))qa(94981,94943,973,94988);q=c[a+32>>2]|0;if(!((q|0)==1?(q|0)==(c[b+32>>2]|0):0))qa(95005,94943,974,94988);e=a+16|0;d=c[e>>2]|0;if((d|0)!=(c[b+16>>2]|0))qa(95055,94943,975,94988);o=c[a>>2]|0;f=c[a+4>>2]|0;if(((o|0)==(c[b>>2]|0)?(f|0)==(c[b+4>>2]|0):0)?(u=rw(o,f,(c[b+8>>2]|0)+(c[a+8>>2]|0)|0,d,1)|0,u|0):0){m=c[u+20>>2]|0;n=c[u+24>>2]|0;q=KK(f<<2)|0;d=0;while(1){if((d|0)>=(f|0))break;c[q+(d<<2)>>2]=-1;d=d+1|0}c[m>>2]=0;a:do switch(c[e>>2]|0){case 1:{l=c[a+28>>2]|0;i=c[b+28>>2]|0;j=c[u+28>>2]|0;d=0;f=0;while(1){if((f|0)>=(o|0))break a;k=f+1|0;e=p+(k<<2)|0;a=c[p+(f<<2)>>2]|0;while(1){if((a|0)>=(c[e>>2]|0))break;g=r+(a<<2)|0;c[q+(c[g>>2]<<2)>>2]=d;c[n+(d<<2)>>2]=c[g>>2];h[j+(d<<3)>>3]=+h[l+(a<<3)>>3];a=a+1|0;d=d+1|0}b=s+(k<<2)|0;g=m+(f<<2)|0;f=c[s+(f<<2)>>2]|0;while(1){if((f|0)>=(c[b>>2]|0))break;a=c[t+(f<<2)>>2]|0;e=c[q+(a<<2)>>2]|0;if((e|0)<(c[g>>2]|0)){c[n+(d<<2)>>2]=a;h[j+(d<<3)>>3]=+h[i+(f<<3)>>3];d=d+1|0}else{e=j+(e<<3)|0;h[e>>3]=+h[e>>3]+ +h[i+(f<<3)>>3]}f=f+1|0}c[m+(k<<2)>>2]=d;f=k}}case 2:{l=c[a+28>>2]|0;k=c[b+28>>2]|0;i=c[u+28>>2]|0;f=0;d=0;while(1){if((f|0)>=(o|0))break a;j=f+1|0;e=p+(j<<2)|0;a=c[p+(f<<2)>>2]|0;while(1){if((a|0)>=(c[e>>2]|0))break;b=r+(a<<2)|0;c[q+(c[b>>2]<<2)>>2]=d;c[n+(d<<2)>>2]=c[b>>2];b=a<<1;g=d<<1;h[i+(g<<3)>>3]=+h[l+(b<<3)>>3];h[i+((g|1)<<3)>>3]=+h[l+((b|1)<<3)>>3];a=a+1|0;d=d+1|0}b=s+(j<<2)|0;g=m+(f<<2)|0;f=c[s+(f<<2)>>2]|0;while(1){if((f|0)>=(c[b>>2]|0))break;a=c[t+(f<<2)>>2]|0;e=c[q+(a<<2)>>2]|0;if((e|0)<(c[g>>2]|0)){c[n+(d<<2)>>2]=a;a=f<<1;e=d<<1;h[i+(e<<3)>>3]=+h[k+(a<<3)>>3];h[i+((e|1)<<3)>>3]=+h[k+((a|1)<<3)>>3];d=d+1|0}else{a=f<<1;e=e<<1;v=i+(e<<3)|0;h[v>>3]=+h[v>>3]+ +h[k+(a<<3)>>3];e=i+((e|1)<<3)|0;h[e>>3]=+h[e>>3]+ +h[k+((a|1)<<3)>>3]}f=f+1|0}c[m+(j<<2)>>2]=d;f=j}}case 4:{l=c[a+28>>2]|0;i=c[b+28>>2]|0;j=c[u+28>>2]|0;f=0;d=0;while(1){if((f|0)>=(o|0))break a;k=f+1|0;e=p+(k<<2)|0;a=c[p+(f<<2)>>2]|0;while(1){if((a|0)>=(c[e>>2]|0))break;v=r+(a<<2)|0;c[q+(c[v>>2]<<2)>>2]=d;c[n+(d<<2)>>2]=c[v>>2];c[j+(d<<2)>>2]=c[l+(a<<2)>>2];a=a+1|0;d=d+1|0}b=s+(k<<2)|0;g=m+(f<<2)|0;f=c[s+(f<<2)>>2]|0;while(1){if((f|0)>=(c[b>>2]|0))break;a=c[t+(f<<2)>>2]|0;e=c[q+(a<<2)>>2]|0;if((e|0)<(c[g>>2]|0)){c[n+(d<<2)>>2]=a;c[j+(d<<2)>>2]=c[i+(f<<2)>>2];d=d+1|0}else{v=j+(e<<2)|0;c[v>>2]=(c[v>>2]|0)+(c[i+(f<<2)>>2]|0)}f=f+1|0}c[m+(k<<2)>>2]=d;f=k}}case 8:{d=0;f=0;while(1){if((f|0)>=(o|0))break a;i=f+1|0;e=p+(i<<2)|0;a=c[p+(f<<2)>>2]|0;while(1){if((a|0)>=(c[e>>2]|0))break;v=r+(a<<2)|0;c[q+(c[v>>2]<<2)>>2]=d;c[n+(d<<2)>>2]=c[v>>2];d=d+1|0;a=a+1|0}b=s+(i<<2)|0;g=m+(f<<2)|0;e=c[s+(f<<2)>>2]|0;while(1){if((e|0)>=(c[b>>2]|0))break;a=c[t+(e<<2)>>2]|0;if((c[q+(a<<2)>>2]|0)<(c[g>>2]|0)){c[n+(d<<2)>>2]=a;d=d+1|0}e=e+1|0}c[m+(i<<2)>>2]=d;f=i}}default:d=0}while(0);c[u+8>>2]=d;U1(q);return u|0}return 0}function zw(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;a=tw(a,b,d,e,f)|0;if((c|0)>0)uw(a,c)|0;return a|0}function Aw(a,b){a=a|0;b=b|0;var d=0;if(!(ww(a,b)|0)){b=pw(a)|0;if(!b)b=0;else{d=yw(a,b)|0;qw(b);b=d+36|0;c[b>>2]=c[b>>2]|3;b=d;d=5}}else{b=xw(a)|0;d=5}if((d|0)==5)b=Bw(b)|0;return b|0}function Bw(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,i=0,j=0,k=0,l=0,m=0;a:do if(!a)a=0;else{k=c[a+20>>2]|0;l=c[a+24>>2]|0;d=c[k>>2]|0;b:do switch(c[a+16>>2]|0){case 1:{j=c[a+28>>2]|0;i=0;b=0;while(1){if((i|0)>=(c[a>>2]|0))break b;f=i+1|0;g=k+(f<<2)|0;while(1){e=c[g>>2]|0;if((d|0)>=(e|0))break;e=c[l+(d<<2)>>2]|0;if((e|0)!=(i|0)){c[l+(b<<2)>>2]=e;h[j+(b<<3)>>3]=+h[j+(d<<3)>>3];b=b+1|0}d=d+1|0}c[g>>2]=b;i=f;d=e}}case 2:{j=c[a+28>>2]|0;i=0;b=0;while(1){if((i|0)>=(c[a>>2]|0))break b;f=i+1|0;g=k+(f<<2)|0;while(1){e=c[g>>2]|0;if((d|0)>=(e|0))break;e=c[l+(d<<2)>>2]|0;if((e|0)!=(i|0)){c[l+(b<<2)>>2]=e;m=d<<1;e=b<<1;h[j+(e<<3)>>3]=+h[j+(m<<3)>>3];h[j+((e|1)<<3)>>3]=+h[j+((m|1)<<3)>>3];b=b+1|0}d=d+1|0}c[g>>2]=b;i=f;d=e}}case 4:{j=c[a+28>>2]|0;i=0;b=0;while(1){if((i|0)>=(c[a>>2]|0))break b;f=i+1|0;g=k+(f<<2)|0;while(1){e=c[g>>2]|0;if((d|0)>=(e|0))break;e=c[l+(d<<2)>>2]|0;if((e|0)!=(i|0)){c[l+(b<<2)>>2]=e;c[j+(b<<2)>>2]=c[j+(d<<2)>>2];b=b+1|0}d=d+1|0}c[g>>2]=b;i=f;d=e}}case 8:{i=0;b=0;while(1){if((i|0)>=(c[a>>2]|0))break b;f=i+1|0;g=k+(f<<2)|0;while(1){e=c[g>>2]|0;if((d|0)>=(e|0))break;e=c[l+(d<<2)>>2]|0;if((e|0)!=(i|0)){c[l+(b<<2)>>2]=e;b=b+1|0}d=d+1|0}c[g>>2]=b;i=f;d=e}}default:{a=0;break a}}while(0);c[a+8>>2]=b}while(0);return a|0}function Cw(a){a=a|0;if((c[a+32>>2]|0)==2)return Dw(c[a+8>>2]|0,c[a>>2]|0,c[a+4>>2]|0,c[a+20>>2]|0,c[a+24>>2]|0,c[a+28>>2]|0,c[a+16>>2]|0,c[a+40>>2]|0)|0;else qa(95100,94943,803,95126);return 0}function Dw(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;return Ew(a,b,c,d,e,f,g,h,1)|0} +function J_(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;j=b+72|0;k=b+352|0;l=b+356|0;m=b+360|0;i=0;a:while(1){h=f-e|0;if((h|0)<=0){f=-1;break}switch(a[j+(d[e>>0]|0)>>0]|0){case 8:case 1:case 0:{n=16;break a}case 5:{if((h|0)<2){f=-2;break a}if(lb[c[k>>2]&127](b,e)|0){n=6;break a}h=i;e=e+2|0;i=h;continue a}case 6:{if((h|0)<3){f=-2;break a}if(lb[c[l>>2]&127](b,e)|0){n=10;break a}h=i;e=e+3|0;i=h;continue a}case 7:{if((h|0)<4){f=-2;break a}if(lb[c[m>>2]&127](b,e)|0){n=14;break a}h=i;e=e+4|0;i=h;continue a}case 2:{h=e+1|0;if((f-h|0)<=0){f=-1;break a}if((a[h>>0]|0)!=33){o=i;e=h;i=o;continue a}h=e+2|0;if((f-h|0)<=0){f=-1;break a}o=(a[h>>0]|0)==91;i=i+(o&1)|0;e=o?e+3|0:h;continue a}case 4:{h=e+1|0;if((f-h|0)<=0){f=-1;break a}if((a[h>>0]|0)!=93){o=i;e=h;i=o;continue a}h=e+2|0;if((f-h|0)<=0){f=-1;break a}if((a[h>>0]|0)!=62){o=i;e=h;i=o;continue a}e=e+3|0;if(!i){n=26;break a}i=i+-1|0;continue a}default:{o=i;e=e+1|0;i=o;continue a}}}if((n|0)==6){c[g>>2]=e;f=0}else if((n|0)==10){c[g>>2]=e;f=0}else if((n|0)==14){c[g>>2]=e;f=0}else if((n|0)==16){c[g>>2]=e;f=0}else if((n|0)==26){c[g>>2]=e;f=42}return f|0}function K_(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0;do if(e>>>0>>0){k=f;if((k-e|0)>0){l=b+72|0;i=e;a:while(1){if((k-i|0)<=0){j=24;break}switch(a[l+(d[i>>0]|0)>>0]|0){case 3:{j=8;break a}case 2:{j=11;break a}case 10:{j=12;break a}case 9:{j=15;break a}case 21:{j=19;break a}case 5:{h=2;break}case 6:{h=3;break}case 7:{h=4;break}default:h=1}i=i+h|0}if((j|0)==8)if((i|0)==(e|0)){h=W_(b,e+1|0,f,g)|0;break}else{c[g>>2]=i;h=6;break}else if((j|0)==11){c[g>>2]=i;h=0;break}else if((j|0)==12)if((i|0)==(e|0)){c[g>>2]=e+1;h=7;break}else{c[g>>2]=i;h=6;break}else if((j|0)==15){if((i|0)!=(e|0)){c[g>>2]=i;h=6;break}h=e+1|0;if((k-h|0)<=0){h=-3;break}c[g>>2]=(a[l+(d[h>>0]|0)>>0]|0)==10?e+2|0:h;h=7;break}else if((j|0)==19)if((i|0)==(e|0)){c[g>>2]=e+1;h=39;break}else{c[g>>2]=i;h=6;break}else if((j|0)==24){c[g>>2]=i;h=6;break}}else h=-1}else h=-4;while(0);return h|0}function L_(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0;do if(e>>>0>>0){k=f;if((k-e|0)>0){l=b+72|0;i=e;a:while(1){if((k-i|0)<=0){j=23;break}switch(a[l+(d[i>>0]|0)>>0]|0){case 3:{j=8;break a}case 30:{j=11;break a}case 10:{j=14;break a}case 9:{j=17;break a}case 5:{h=2;break}case 6:{h=3;break}case 7:{h=4;break}default:h=1}i=i+h|0}if((j|0)==8)if((i|0)==(e|0)){h=W_(b,e+1|0,f,g)|0;break}else{c[g>>2]=i;h=6;break}else if((j|0)==11)if((i|0)==(e|0)){h=X_(b,e+1|0,f,g)|0;h=(h|0)==22?0:h;break}else{c[g>>2]=i;h=6;break}else if((j|0)==14)if((i|0)==(e|0)){c[g>>2]=e+1;h=7;break}else{c[g>>2]=i;h=6;break}else if((j|0)==17){if((i|0)!=(e|0)){c[g>>2]=i;h=6;break}h=e+1|0;if((k-h|0)<=0){h=-3;break}c[g>>2]=(a[l+(d[h>>0]|0)>>0]|0)==10?e+2|0:h;h=7;break}else if((j|0)==23){c[g>>2]=i;h=6;break}}else h=-1}else h=-4;while(0);return h|0}function M_(b,c,d,e){b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0;f=d;b=c;while(1){c=a[e>>0]|0;if(!(c<<24>>24)){g=6;break}if((f-b|0)<1){b=0;break}if((a[b>>0]|0)!=c<<24>>24){b=0;break}e=e+1|0;b=b+1|0}if((g|0)==6)b=(b|0)==(d|0)&1;return b|0}function N_(b,c){b=b|0;c=c|0;var e=0,f=0;f=b+72|0;b=c;a:while(1){switch(a[f+(d[b>>0]|0)>>0]|0){case 5:{e=2;break}case 6:{e=3;break}case 7:{e=4;break}case 27:case 26:case 25:case 24:case 23:case 22:case 29:{e=1;break}default:break a}b=b+e|0}return b-c|0}function O_(b,c){b=b|0;c=c|0;b=b+72|0;a:while(1){switch(a[b+(d[c>>0]|0)>>0]|0){case 21:case 9:case 10:break;default:break a}c=c+1|0}return c|0}function P_(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;l=b+72|0;j=0;k=0;b=1;a:while(1){h=e+1|0;i=a[h>>0]|0;do switch(a[l+(i&255)>>0]|0){case 5:{if(!b)if((k|0)<(f|0)){c[g+(k<<4)>>2]=h;a[g+(k<<4)+12>>0]=1;b=1}else b=1;h=k;i=j;e=e+2|0;k=h;j=i;continue a}case 6:{if(!b)if((k|0)<(f|0)){c[g+(k<<4)>>2]=h;a[g+(k<<4)+12>>0]=1;b=1}else b=1;h=k;i=j;e=e+3|0;k=h;j=i;continue a}case 7:{if(!b)if((k|0)<(f|0)){c[g+(k<<4)>>2]=h;a[g+(k<<4)+12>>0]=1;b=1}else b=1;h=k;i=j;e=e+4|0;k=h;j=i;continue a}case 24:case 22:case 29:{if(b|0){o=b;n=k;i=j;e=h;b=o;k=n;j=i;continue a}if((k|0)>=(f|0)){n=k;o=j;b=1;e=h;k=n;j=o;continue a}c[g+(k<<4)>>2]=h;a[g+(k<<4)+12>>0]=1;n=k;o=j;b=1;e=h;k=n;j=o;continue a}case 12:{if((b|0)!=2){if((k|0)>=(f|0)){o=k;j=12;b=2;e=h;k=o;continue a}c[g+(k<<4)+4>>2]=e+2;o=k;j=12;b=2;e=h;k=o;continue a}if((j|0)!=12){n=k;o=j;b=2;e=h;k=n;j=o;continue a}if((k|0)<(f|0))c[g+(k<<4)+8>>2]=h;j=12;k=k+1|0;b=0;e=h;continue a}case 13:{if((b|0)!=2){if((k|0)>=(f|0)){o=k;j=13;b=2;e=h;k=o;continue a}c[g+(k<<4)+4>>2]=e+2;o=k;j=13;b=2;e=h;k=o;continue a}if((j|0)!=13){n=k;o=j;b=2;e=h;k=n;j=o;continue a}if((k|0)<(f|0))c[g+(k<<4)+8>>2]=h;j=13;k=k+1|0;b=0;e=h;continue a}case 3:{if((k|0)>=(f|0)){i=b;n=k;o=j;e=h;b=i;k=n;j=o;continue a}a[g+(k<<4)+12>>0]=0;i=b;n=k;o=j;e=h;b=i;k=n;j=o;continue a}case 21:{switch(b|0){case 1:{n=k;o=j;b=0;e=h;k=n;j=o;continue a}case 2:break;default:{i=b;n=k;o=j;e=h;b=i;k=n;j=o;continue a}}if((k|0)>=(f|0)){n=k;o=j;b=2;e=h;k=n;j=o;continue a}b=g+(k<<4)+12|0;if(!(a[b>>0]|0)){n=k;o=j;b=2;e=h;k=n;j=o;continue a}if(((i<<24>>24==32?(h|0)!=(c[g+(k<<4)+4>>2]|0):0)?(m=a[e+2>>0]|0,m<<24>>24!=32):0)?(j|0)!=(d[l+(m&255)>>0]|0):0){n=k;o=j;b=2;e=h;k=n;j=o;continue a}a[b>>0]=0;n=k;o=j;b=2;e=h;k=n;j=o;continue a}case 10:case 9:{switch(b|0){case 1:{n=k;o=j;b=0;e=h;k=n;j=o;continue a}case 2:break;default:{i=b;n=k;o=j;e=h;b=i;k=n;j=o;continue a}}if((k|0)>=(f|0)){n=k;o=j;b=2;e=h;k=n;j=o;continue a}a[g+(k<<4)+12>>0]=0;n=k;o=j;b=2;e=h;k=n;j=o;continue a}case 17:case 11:if((b|0)==2){n=k;o=j;b=2;e=h;k=n;j=o;continue a}else break a;default:{i=b;n=k;o=j;e=h;b=i;k=n;j=o;continue a}}while(0)}return k|0}function Q_(b,c){b=b|0;c=c|0;var d=0,e=0;b=c+2|0;d=a[b>>0]|0;a:do if(d<<24>>24==120){d=c+3|0;b=0;while(1){b:while(1){e=a[d>>0]|0;c=e<<24>>24;if(e<<24>>24==59){e=14;break a}switch(c|0){case 57:case 56:case 55:case 54:case 53:case 52:case 51:case 50:case 49:case 48:{e=7;break b}case 70:case 69:case 68:case 67:case 66:case 65:{e=8;break b}case 102:case 101:case 100:case 99:case 98:case 97:{e=9;break b}default:{}}d=d+1|0}if((e|0)==7){e=0;b=c+-48|b<<4}else if((e|0)==8){e=0;b=(b<<4)+-55+c|0}else if((e|0)==9){e=0;b=(b<<4)+-87+c|0}if((b|0)<1114112)d=d+1|0;else{b=-1;break}}}else{c=b;b=0;while(1){if(d<<24>>24==59){e=14;break a}b=(d<<24>>24)+-48+(b*10|0)|0;if((b|0)>=1114112){b=-1;break a}d=c+1|0;c=d;d=a[d>>0]|0}}while(0);if((e|0)==14)b=A_(b)|0;return b|0}function R_(b,c,d){b=b|0;c=c|0;d=d|0;var e=0;a:do switch(d-c|0){case 2:{if((a[c+1>>0]|0)==116){b=a[c>>0]|0;b=b<<24>>24==108?60:b<<24>>24==103?62:0}else e=14;break}case 3:{if(((a[c>>0]|0)==97?(a[c+1>>0]|0)==109:0)?(a[c+2>>0]|0)==112:0)b=38;else e=14;break}case 4:switch(a[c>>0]|0){case 113:{if((a[c+1>>0]|0)!=117){e=14;break a}if((a[c+2>>0]|0)!=111){e=14;break a}if((a[c+3>>0]|0)==116){b=34;break a}else{e=14;break a}}case 97:{if((a[c+1>>0]|0)!=112){e=14;break a}if((a[c+2>>0]|0)!=111){e=14;break a}if((a[c+3>>0]|0)==115){b=39;break a}else{e=14;break a}}default:{e=14;break a}}default:e=14}while(0);if((e|0)==14)b=0;return b|0}function S_(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0;h=b+72|0;i=g+4|0;while(1){if((f-e|0)<=0)break;switch(a[h+(d[e>>0]|0)>>0]|0){case 5:{e=e+2|0;break}case 6:{e=e+3|0;break}case 7:{e=e+4|0;break}case 10:{c[i>>2]=-1;c[g>>2]=(c[g>>2]|0)+1;e=e+1|0;break}case 9:{c[g>>2]=(c[g>>2]|0)+1;b=e+1|0;if((f-b|0)>0)e=(a[h+(d[b>>0]|0)>>0]|0)==10?e+2|0:b;else e=b;c[i>>2]=-1;break}default:e=e+1|0}c[i>>2]=(c[i>>2]|0)+1}return}function T_(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;g=e+-1|0;b=b+72|0;a:while(1){d=d+1|0;if((g-d|0)<=0){d=1;break}e=a[d>>0]|0;switch(a[b+(e&255)>>0]|0){case 23:case 19:case 30:case 33:case 16:case 18:case 10:case 9:case 15:case 14:case 17:case 35:case 34:case 32:case 31:case 13:case 27:case 24:case 25:continue a;case 21:if(e<<24>>24==9){h=7;break a}else continue a;case 22:case 26:{if(e<<24>>24>=0)continue a;break}default:{}}switch(e<<24>>24|0){case 64:case 36:break;default:{h=7;break a}}}if((h|0)==7){c[f>>2]=d;d=0}return d|0}function U_(b,e,f,g,h){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0;i=h;while(1){j=c[e>>2]|0;if((j|0)==(f|0)){b=0;break}k=d[j>>0]|0;b=c[g>>2]|0;if(!(k&128)){if((b|0)==(h|0)){b=2;break}c[e>>2]=j+1;j=a[j>>0]|0;k=c[g>>2]|0;c[g>>2]=k+1;a[k>>0]=j;continue}else{if((i-b|0)<2){b=2;break}c[g>>2]=b+1;a[b>>0]=k>>>6|192;j=c[g>>2]|0;c[g>>2]=j+1;a[j>>0]=k&63|128;c[e>>2]=(c[e>>2]|0)+1;continue}}return b|0}function V_(a,e,f,g,h){a=a|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0;while(1){a=c[e>>2]|0;i=a>>>0>>0;j=c[g>>2]|0;if(!(i&j>>>0>>0))break;c[e>>2]=a+1;i=d[a>>0]|0;j=c[g>>2]|0;c[g>>2]=j+2;b[j>>1]=i}return ((j|0)!=(h|0)|i^1?0:2)|0}function W_(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0;k=f;h=k-e|0;a:do if((h|0)>0){l=b+72|0;switch(a[l+(d[e>>0]|0)>>0]|0){case 29:{c[g>>2]=e;f=0;break a}case 24:case 22:{f=1;break}case 5:{if((h|0)<2){f=-2;break a}if(!(lb[c[b+340>>2]&127](b,e)|0)){c[g>>2]=e;f=0;break a}else f=2;break}case 6:{if((h|0)<3){f=-2;break a}if(!(lb[c[b+344>>2]&127](b,e)|0)){c[g>>2]=e;f=0;break a}else f=3;break}case 7:{if((h|0)<4){f=-2;break a}if(!(lb[c[b+348>>2]&127](b,e)|0)){c[g>>2]=e;f=0;break a}else f=4;break}case 19:{f=Y_(b,e+1|0,f,g)|0;break a}default:{c[g>>2]=e;f=0;break a}}h=b+328|0;i=b+332|0;j=b+336|0;e=e+f|0;b:while(1){f=k-e|0;if((f|0)<=0){f=-1;break a}switch(a[l+(d[e>>0]|0)>>0]|0){case 29:{h=18;break b}case 18:{h=29;break b}case 27:case 26:case 25:case 24:case 22:{f=1;break}case 5:{if((f|0)<2){f=-2;break a}if(!(lb[c[h>>2]&127](b,e)|0)){h=21;break b}else f=2;break}case 6:{if((f|0)<3){f=-2;break a}if(!(lb[c[i>>2]&127](b,e)|0)){h=24;break b}else f=3;break}case 7:{if((f|0)<4){f=-2;break a}if(!(lb[c[j>>2]&127](b,e)|0)){h=27;break b}else f=4;break}default:{h=30;break b}}e=e+f|0}if((h|0)==18){c[g>>2]=e;f=0;break}else if((h|0)==21){c[g>>2]=e;f=0;break}else if((h|0)==24){c[g>>2]=e;f=0;break}else if((h|0)==27){c[g>>2]=e;f=0;break}else if((h|0)==29){c[g>>2]=e+1;f=9;break}else if((h|0)==30){c[g>>2]=e;f=0;break}}else f=-1;while(0);return f|0}function X_(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0;h=f-e|0;a:do if((h|0)>0){l=b+72|0;switch(a[l+(d[e>>0]|0)>>0]|0){case 29:{c[g>>2]=e;f=0;break a}case 24:case 22:{h=1;break}case 5:{if((h|0)<2){f=-2;break a}if(!(lb[c[b+340>>2]&127](b,e)|0)){c[g>>2]=e;f=0;break a}else h=2;break}case 6:{if((h|0)<3){f=-2;break a}if(!(lb[c[b+344>>2]&127](b,e)|0)){c[g>>2]=e;f=0;break a}else h=3;break}case 7:{if((h|0)<4){f=-2;break a}if(!(lb[c[b+348>>2]&127](b,e)|0)){c[g>>2]=e;f=0;break a}else h=4;break}case 30:case 9:case 10:case 21:{c[g>>2]=e;f=22;break a}default:{c[g>>2]=e;f=0;break a}}i=b+328|0;j=b+332|0;k=b+336|0;e=e+h|0;b:while(1){h=f-e|0;if((h|0)<=0){f=-1;break a}switch(a[l+(d[e>>0]|0)>>0]|0){case 29:{h=18;break b}case 18:{h=29;break b}case 27:case 26:case 25:case 24:case 22:{h=1;break}case 5:{if((h|0)<2){f=-2;break a}if(!(lb[c[i>>2]&127](b,e)|0)){h=21;break b}else h=2;break}case 6:{if((h|0)<3){f=-2;break a}if(!(lb[c[j>>2]&127](b,e)|0)){h=24;break b}else h=3;break}case 7:{if((h|0)<4){f=-2;break a}if(!(lb[c[k>>2]&127](b,e)|0)){h=27;break b}else h=4;break}default:{h=30;break b}}e=e+h|0}if((h|0)==18){c[g>>2]=e;f=0;break}else if((h|0)==21){c[g>>2]=e;f=0;break}else if((h|0)==24){c[g>>2]=e;f=0;break}else if((h|0)==27){c[g>>2]=e;f=0;break}else if((h|0)==29){c[g>>2]=e+1;f=28;break}else if((h|0)==30){c[g>>2]=e;f=0;break}}else f=-1;while(0);return f|0}function Y_(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0;i=f;a:do if((i-e|0)>0){h=a[e>>0]|0;if(h<<24>>24==120){b=Z_(b,e+1|0,f,g)|0;break}f=b+72|0;if((a[f+(h&255)>>0]|0)!=25){c[g>>2]=e;b=0;break}b:while(1){b=e+1|0;if((i-b|0)<=0){b=-1;break a}switch(a[f+(d[b>>0]|0)>>0]|0){case 25:{e=b;break}case 18:{f=8;break b}default:{f=9;break b}}}if((f|0)==8){c[g>>2]=e+2;b=10;break}else if((f|0)==9){c[g>>2]=b;b=0;break}}else b=-1;while(0);return b|0}function Z_(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0;a:do if((f-e|0)>0){b=b+72|0;if((a[b+(d[e>>0]|0)>>0]&-2)<<24>>24!=24){c[g>>2]=e;f=0;break}b:while(1){h=e+1|0;if((f-h|0)<=0){f=-1;break a}switch(a[b+(d[h>>0]|0)>>0]|0){case 24:case 25:{e=h;break}case 18:{b=6;break b}default:{b=7;break b}}}if((b|0)==6){c[g>>2]=e+2;f=10;break}else if((b|0)==7){c[g>>2]=h;f=0;break}}else f=-1;while(0);return f|0}function __(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;q=f;h=q-e|0;a:do if((h|0)>0){p=b+72|0;switch(a[p+(d[e>>0]|0)>>0]|0){case 29:{c[g>>2]=e;h=0;break a}case 24:case 22:{h=1;break}case 5:{if((h|0)<2){h=-2;break a}if(!(lb[c[b+340>>2]&127](b,e)|0)){c[g>>2]=e;h=0;break a}else h=2;break}case 6:{if((h|0)<3){h=-2;break a}if(!(lb[c[b+344>>2]&127](b,e)|0)){c[g>>2]=e;h=0;break a}else h=3;break}case 7:{if((h|0)<4){h=-2;break a}if(!(lb[c[b+348>>2]&127](b,e)|0)){c[g>>2]=e;h=0;break a}else h=4;break}case 16:{h=e+1|0;if((q-h|0)<=0){h=-1;break a}switch(a[p+(d[h>>0]|0)>>0]|0){case 27:{h=$_(b,e+2|0,f,g)|0;break a}case 20:{h=a$(e+2|0,f,g)|0;break a}default:{c[g>>2]=h;h=0;break a}}}case 15:{h=b$(b,e+1|0,f,g)|0;break a}case 17:{h=c$(b,e+1|0,f,g)|0;break a}default:{c[g>>2]=e;h=0;break a}}j=b+328|0;k=b+332|0;l=b+336|0;m=b+340|0;n=b+344|0;o=b+348|0;i=0;h=e+h|0;b:while(1){e=q-h|0;if((e|0)<=0){h=-1;break a}c:do switch(a[p+(d[h>>0]|0)>>0]|0){case 29:{r=24;break b}case 10:case 9:case 21:{r=50;break b}case 11:{r=64;break b}case 17:break b;case 27:case 26:case 25:case 24:case 22:{e=1;break}case 5:{if((e|0)<2){h=-2;break a}if(!(lb[c[j>>2]&127](b,h)|0)){r=27;break b}else e=2;break}case 6:{if((e|0)<3){h=-2;break a}if(!(lb[c[k>>2]&127](b,h)|0)){r=30;break b}else e=3;break}case 7:{if((e|0)<4){h=-2;break a}if(!(lb[c[l>>2]&127](b,h)|0)){r=33;break b}else e=4;break}case 23:{if(i|0){r=35;break b}i=h+1|0;e=q-i|0;if((e|0)<=0){h=-1;break a}switch(a[p+(d[i>>0]|0)>>0]|0){case 29:{r=38;break b}case 24:case 22:{i=1;e=2;break c}case 5:{if((e|0)<2){h=-2;break a}if(!(lb[c[m>>2]&127](b,i)|0)){r=42;break b}else{i=1;e=3;break c}}case 6:{if((e|0)<3){h=-2;break a}if(!(lb[c[n>>2]&127](b,i)|0)){r=45;break b}else{i=1;e=4;break c}}case 7:{if((e|0)<4){h=-2;break a}if(!(lb[c[o>>2]&127](b,i)|0)){r=48;break b}else{i=1;e=5;break c}}default:{r=49;break b}}}default:{r=69;break b}}while(0);h=h+e|0}d:switch(r|0){case 24:{c[g>>2]=h;h=0;break a}case 27:{c[g>>2]=h;h=0;break a}case 30:{c[g>>2]=h;h=0;break a}case 33:{c[g>>2]=h;h=0;break a}case 35:{c[g>>2]=h;h=0;break a}case 38:{c[g>>2]=i;h=0;break a}case 42:{c[g>>2]=i;h=0;break a}case 45:{c[g>>2]=i;h=0;break a}case 48:{c[g>>2]=i;h=0;break a}case 49:{c[g>>2]=i;h=0;break a}case 50:{e:while(1){r=0;i=h+1|0;e=q-i|0;if((e|0)<=0){h=-1;break a}switch(a[p+(d[i>>0]|0)>>0]|0){case 11:{h=i;r=64;break d}case 17:{h=i;break d}case 10:case 9:case 21:{h=i;r=50;break}case 29:{r=52;break e}case 24:case 22:{i=2;break e}case 5:{r=53;break e}case 6:{r=56;break e}case 7:{r=59;break e}default:{r=62;break e}}}if((r|0)==52){c[g>>2]=i;h=0;break a}else if((r|0)==53){if((e|0)<2){h=-2;break a}if(!(lb[c[m>>2]&127](b,i)|0)){c[g>>2]=i;h=0;break a}else i=3}else if((r|0)==56){if((e|0)<3){h=-2;break a}if(!(lb[c[n>>2]&127](b,i)|0)){c[g>>2]=i;h=0;break a}else i=4}else if((r|0)==59){if((e|0)<4){h=-2;break a}if(!(lb[c[o>>2]&127](b,i)|0)){c[g>>2]=i;h=0;break a}else i=5}else if((r|0)==62){c[g>>2]=i;h=0;break a}h=d$(b,h+i|0,f,g)|0;break a}case 69:{c[g>>2]=h;h=0;break a}}if((r|0)==64){c[g>>2]=h+1;h=2;break}i=h+1|0;if((q-i|0)>0)if((a[i>>0]|0)==62){c[g>>2]=h+2;h=4;break}else{c[g>>2]=i;h=0;break}else h=-1}else h=-1;while(0);return h|0}function $_(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0;a:do if((f-e|0)>0){if((a[e>>0]|0)!=45){c[g>>2]=e;f=0;break}h=b+72|0;i=b+352|0;j=b+356|0;k=b+360|0;l=e+1|0;b:while(1){e=f-l|0;if((e|0)<=0){f=-1;break a}switch(a[h+(d[l>>0]|0)>>0]|0){case 8:case 1:case 0:{e=19;break b}case 5:{if((e|0)<2){f=-2;break a}if(lb[c[i>>2]&127](b,l)|0){e=9;break b}l=l+2|0;continue b}case 6:{if((e|0)<3){f=-2;break a}if(lb[c[j>>2]&127](b,l)|0){e=13;break b}l=l+3|0;continue b}case 7:{if((e|0)<4){f=-2;break a}if(lb[c[k>>2]&127](b,l)|0){e=17;break b}l=l+4|0;continue b}case 27:{e=l+1|0;if((f-e|0)<=0){f=-1;break a}if((a[e>>0]|0)==45){e=22;break b}else{l=e;continue b}}default:{l=l+1|0;continue b}}}if((e|0)==9){c[g>>2]=l;f=0;break}else if((e|0)==13){c[g>>2]=l;f=0;break}else if((e|0)==17){c[g>>2]=l;f=0;break}else if((e|0)==19){c[g>>2]=l;f=0;break}else if((e|0)==22){e=l+2|0;if((f-e|0)<=0){f=-1;break}if((a[e>>0]|0)==62){c[g>>2]=l+3;f=13;break}else{c[g>>2]=e;f=0;break}}}else f=-1;while(0);return f|0}function a$(b,d,e){b=b|0;d=d|0;e=e|0;if((d-b|0)>5){d=0;while(1){if((d|0)>=6){d=8;break}if((a[b>>0]|0)!=(a[144300+d>>0]|0)){d=0;break}d=d+1|0;b=b+1|0}c[e>>2]=b}else d=-1;return d|0}function b$(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;q=l;l=l+16|0;p=q;o=f;f=o-e|0;a:do if((f|0)>0){n=b+72|0;switch(a[n+(d[e>>0]|0)>>0]|0){case 29:{c[g>>2]=e;f=0;break a}case 24:case 22:{f=1;break}case 5:{if((f|0)<2){f=-2;break a}if(!(lb[c[b+340>>2]&127](b,e)|0)){c[g>>2]=e;f=0;break a}else f=2;break}case 6:{if((f|0)<3){f=-2;break a}if(!(lb[c[b+344>>2]&127](b,e)|0)){c[g>>2]=e;f=0;break a}else f=3;break}case 7:{if((f|0)<4){f=-2;break a}if(!(lb[c[b+348>>2]&127](b,e)|0)){c[g>>2]=e;f=0;break a}else f=4;break}default:{c[g>>2]=e;f=0;break a}}i=b+328|0;j=b+332|0;k=b+336|0;f=e+f|0;b:while(1){h=o-f|0;if((h|0)<=0){f=-1;break a}switch(a[n+(d[f>>0]|0)>>0]|0){case 29:{m=17;break b}case 10:case 9:case 21:{m=28;break b}case 15:{m=50;break b}case 27:case 26:case 25:case 24:case 22:{h=1;break}case 5:{if((h|0)<2){f=-2;break a}if(!(lb[c[i>>2]&127](b,f)|0)){m=20;break b}else h=2;break}case 6:{if((h|0)<3){f=-2;break a}if(!(lb[c[j>>2]&127](b,f)|0)){m=23;break b}else h=3;break}case 7:{if((h|0)<4){f=-2;break a}if(!(lb[c[k>>2]&127](b,f)|0)){m=26;break b}else h=4;break}default:break b}f=f+h|0}if((m|0)==17){c[g>>2]=f;f=0;break}else if((m|0)==20){c[g>>2]=f;f=0;break}else if((m|0)==23){c[g>>2]=f;f=0;break}else if((m|0)==26){c[g>>2]=f;f=0;break}else if((m|0)==28){if(!(e$(e,f,p)|0)){c[g>>2]=f;f=0;break}i=b+352|0;j=b+356|0;k=b+360|0;h=f+1|0;c:while(1){f=o-h|0;if((f|0)<=0){f=-1;break a}switch(a[n+(d[h>>0]|0)>>0]|0){case 8:case 1:case 0:{m=45;break c}case 5:{if((f|0)<2){f=-2;break a}if(lb[c[i>>2]&127](b,h)|0){m=35;break c}h=h+2|0;continue c}case 6:{if((f|0)<3){f=-2;break a}if(lb[c[j>>2]&127](b,h)|0){m=39;break c}h=h+3|0;continue c}case 7:{if((f|0)<4){f=-2;break a}if(lb[c[k>>2]&127](b,h)|0){m=43;break c}h=h+4|0;continue c}case 15:{f=h+1|0;if((o-f|0)<=0){f=-1;break a}if((a[f>>0]|0)==62){m=48;break c}else{h=f;continue c}}default:{h=h+1|0;continue c}}}if((m|0)==35){c[g>>2]=h;f=0;break}else if((m|0)==39){c[g>>2]=h;f=0;break}else if((m|0)==43){c[g>>2]=h;f=0;break}else if((m|0)==45){c[g>>2]=h;f=0;break}else if((m|0)==48){c[g>>2]=h+2;f=c[p>>2]|0;break}}else if((m|0)==50){if(!(e$(e,f,p)|0)){c[g>>2]=f;f=0;break}h=f+1|0;if((o-h|0)<=0){f=-1;break}if((a[h>>0]|0)==62){c[g>>2]=f+2;f=c[p>>2]|0;break}else f=h}c[g>>2]=f;f=0}else f=-1;while(0);l=q;return f|0}function c$(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0;h=f-e|0;a:do if((h|0)>0){l=b+72|0;switch(a[l+(d[e>>0]|0)>>0]|0){case 29:{c[g>>2]=e;f=0;break a}case 24:case 22:{h=1;break}case 5:{if((h|0)<2){f=-2;break a}if(!(lb[c[b+340>>2]&127](b,e)|0)){c[g>>2]=e;f=0;break a}else h=2;break}case 6:{if((h|0)<3){f=-2;break a}if(!(lb[c[b+344>>2]&127](b,e)|0)){c[g>>2]=e;f=0;break a}else h=3;break}case 7:{if((h|0)<4){f=-2;break a}if(!(lb[c[b+348>>2]&127](b,e)|0)){c[g>>2]=e;f=0;break a}else h=4;break}default:{c[g>>2]=e;f=0;break a}}i=b+328|0;j=b+332|0;k=b+336|0;h=e+h|0;b:while(1){e=f-h|0;if((e|0)<=0){f=-1;break a}switch(a[l+(d[h>>0]|0)>>0]|0){case 29:{i=17;break b}case 10:case 9:case 21:{i=27;break b}case 11:{i=32;break b}case 23:case 27:case 26:case 25:case 24:case 22:{e=1;break}case 5:{if((e|0)<2){f=-2;break a}if(!(lb[c[i>>2]&127](b,h)|0)){i=20;break b}else e=2;break}case 6:{if((e|0)<3){f=-2;break a}if(!(lb[c[j>>2]&127](b,h)|0)){i=23;break b}else e=3;break}case 7:{if((e|0)<4){f=-2;break a}if(!(lb[c[k>>2]&127](b,h)|0)){i=26;break b}else e=4;break}default:{i=33;break b}}h=h+e|0}if((i|0)==17){c[g>>2]=h;f=0;break}else if((i|0)==20){c[g>>2]=h;f=0;break}else if((i|0)==23){c[g>>2]=h;f=0;break}else if((i|0)==26){c[g>>2]=h;f=0;break}else if((i|0)==27){c:while(1){e=h+1|0;if((f-e|0)<=0){f=-1;break a}switch(a[l+(d[e>>0]|0)>>0]|0){case 10:case 9:case 21:{h=e;i=27;break}case 11:{i=29;break c}default:{i=30;break c}}}if((i|0)==29){c[g>>2]=h+2;f=5;break}else if((i|0)==30){c[g>>2]=e;f=0;break}}else if((i|0)==32){c[g>>2]=h+1;f=5;break}else if((i|0)==33){c[g>>2]=h;f=0;break}}else f=-1;while(0);return f|0}function d$(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;y=l;l=l+16|0;v=y;c[v>>2]=e;w=f;r=b+72|0;s=b+328|0;t=b+332|0;u=b+336|0;k=b+340|0;m=b+344|0;n=b+348|0;o=b+352|0;p=b+356|0;q=b+360|0;i=0;a:while(1){h=w-e|0;if((h|0)<=0){e=-1;break}b:do switch(a[r+(d[e>>0]|0)>>0]|0){case 29:{x=4;break a}case 27:case 26:case 25:case 24:case 22:{h=e+1|0;c[v>>2]=h;j=i;e=h;i=j;continue a}case 5:{if((h|0)<2){e=-2;break a}if(!(lb[c[s>>2]&127](b,e)|0)){x=8;break a}h=e+2|0;c[v>>2]=h;j=i;e=h;i=j;continue a}case 6:{if((h|0)<3){e=-2;break a}if(!(lb[c[t>>2]&127](b,e)|0)){x=12;break a}h=e+3|0;c[v>>2]=h;j=i;e=h;i=j;continue a}case 7:{if((h|0)<4){e=-2;break a}if(!(lb[c[u>>2]&127](b,e)|0)){x=16;break a}h=e+4|0;c[v>>2]=h;j=i;e=h;i=j;continue a}case 23:{if(i|0){x=19;break a}h=e+1|0;c[v>>2]=h;i=w-h|0;if((i|0)<=0){e=-1;break a}switch(a[r+(d[h>>0]|0)>>0]|0){case 29:{x=22;break a}case 24:case 22:{j=e+2|0;c[v>>2]=j;i=1;e=j;continue a}case 5:{if((i|0)<2){e=-2;break a}if(!(lb[c[k>>2]&127](b,h)|0)){x=26;break a}j=e+3|0;c[v>>2]=j;i=1;e=j;continue a}case 6:{if((i|0)<3){e=-2;break a}if(!(lb[c[m>>2]&127](b,h)|0)){x=30;break a}j=e+4|0;c[v>>2]=j;i=1;e=j;continue a}case 7:{if((i|0)<4){e=-2;break a}if(!(lb[c[n>>2]&127](b,h)|0)){x=34;break a}j=e+5|0;c[v>>2]=j;i=1;e=j;continue a}default:{x=36;break a}}}case 10:case 9:case 21:while(1){e=e+1|0;c[v>>2]=e;if((w-e|0)<=0){e=-1;break a}switch(a[r+(d[e>>0]|0)>>0]|0){case 14:break b;case 9:case 10:case 21:break;default:{x=39;break a}}}case 14:break;default:{x=92;break a}}while(0);while(1){h=e+1|0;c[v>>2]=h;if((w-h|0)<=0){e=-1;break a}j=a[r+(d[h>>0]|0)>>0]|0;if((j|1)<<24>>24==13)break;switch(j<<24>>24){case 9:case 10:case 21:{e=h;break}default:{x=43;break a}}}e=e+2|0;c[v>>2]=e;c:while(1){h=w-e|0;if((h|0)<=0){e=-1;break a}i=a[r+(d[e>>0]|0)>>0]|0;if(i<<24>>24==j<<24>>24)break;switch(i<<24>>24){case 8:case 1:case 0:{x=60;break a}case 2:{x=65;break a}case 5:{if((h|0)<2){e=-2;break a}if(lb[c[o>>2]&127](b,e)|0){x=50;break a}i=e+2|0;c[v>>2]=i;e=i;continue c}case 6:{if((h|0)<3){e=-2;break a}if(lb[c[p>>2]&127](b,e)|0){x=54;break a}i=e+3|0;c[v>>2]=i;e=i;continue c}case 7:{if((h|0)<4){e=-2;break a}if(lb[c[q>>2]&127](b,e)|0){x=58;break a}i=e+4|0;c[v>>2]=i;e=i;continue c}case 3:{e=W_(b,e+1|0,f,v)|0;if((e|0)<1){x=63;break a}e=c[v>>2]|0;continue c}default:{i=e+1|0;c[v>>2]=i;e=i;continue c}}}h=e+1|0;c[v>>2]=h;if((w-h|0)<=0){e=-1;break}switch(a[r+(d[h>>0]|0)>>0]|0){case 11:{x=86;break a}case 17:{x=87;break a}case 10:case 9:case 21:{e=h;break}default:{x=69;break a}}d:while(1){h=e+1|0;c[v>>2]=h;i=w-h|0;if((i|0)<=0){e=-1;break a}switch(a[r+(d[h>>0]|0)>>0]|0){case 29:{x=72;break a}case 11:{x=86;break a}case 17:{x=87;break a}case 10:case 9:case 21:{e=h;break}case 24:case 22:{x=73;break d}case 5:{x=74;break d}case 6:{x=78;break d}case 7:{x=82;break d}default:{x=91;break a}}}if((x|0)==73){x=0;e=e+2|0;c[v>>2]=e;i=0;continue}else if((x|0)==74){x=0;if((i|0)<2){e=-2;break}if(!(lb[c[k>>2]&127](b,h)|0)){x=76;break}e=e+3|0;c[v>>2]=e;i=0;continue}else if((x|0)==78){x=0;if((i|0)<3){e=-2;break}if(!(lb[c[m>>2]&127](b,h)|0)){x=80;break}e=e+4|0;c[v>>2]=e;i=0;continue}else if((x|0)==82){x=0;if((i|0)<4){e=-2;break}if(!(lb[c[n>>2]&127](b,h)|0)){x=84;break}e=e+5|0;c[v>>2]=e;i=0;continue}}switch(x|0){case 4:{c[g>>2]=e;e=0;break}case 8:{c[g>>2]=e;e=0;break}case 12:{c[g>>2]=e;e=0;break}case 16:{c[g>>2]=e;e=0;break}case 19:{c[g>>2]=e;e=0;break}case 22:{c[g>>2]=h;e=0;break}case 26:{c[g>>2]=h;e=0;break}case 30:{c[g>>2]=h;e=0;break}case 34:{c[g>>2]=h;e=0;break}case 36:{c[g>>2]=h;e=0;break}case 39:{c[g>>2]=e;e=0;break}case 43:{c[g>>2]=h;e=0;break}case 50:{c[g>>2]=e;e=0;break}case 54:{c[g>>2]=e;e=0;break}case 58:{c[g>>2]=e;e=0;break}case 60:{c[g>>2]=e;e=0;break}case 63:{if(!e){c[g>>2]=c[v>>2];e=0}break}case 65:{c[g>>2]=e;e=0;break}case 69:{c[g>>2]=h;e=0;break}case 72:{c[g>>2]=h;e=0;break}case 76:{c[g>>2]=h;e=0;break}case 80:{c[g>>2]=h;e=0;break}case 84:{c[g>>2]=h;e=0;break}case 86:{c[g>>2]=e+2;e=1;break}case 87:{e=h+1|0;c[v>>2]=e;if((w-e|0)>0)if((a[e>>0]|0)==62){c[g>>2]=h+2;e=3;break}else{c[g>>2]=e;e=0;break}else e=-1;break}case 91:{c[g>>2]=h;e=0;break}case 92:{c[g>>2]=e;e=0;break}}l=y;return e|0}function e$(b,d,e){b=b|0;d=d|0;e=e|0;c[e>>2]=11;a:do if((d-b|0)==3){switch(a[b>>0]|0){case 120:{d=0;break}case 88:{d=1;break}default:{d=1;break a}}switch(a[b+1>>0]|0){case 109:break;case 77:{d=1;break}default:{d=1;break a}}switch(a[b+2>>0]|0){case 108:break;case 76:{d=0;break a}default:{d=1;break a}}if(!d){c[e>>2]=12;d=1}else d=0}else d=1;while(0);return d|0}function f$(b,e,f,g,h){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0;k=e+72|0;l=e+352|0;m=e+356|0;n=e+360|0;a:while(1){i=g-f|0;if((i|0)<=0){g=-1;break}j=a[k+(d[f>>0]|0)>>0]|0;switch(j<<24>>24){case 8:case 1:case 0:{o=16;break a}case 5:{if((i|0)<2){g=-2;break a}if(lb[c[l>>2]&127](e,f)|0){o=6;break a}f=f+2|0;continue a}case 6:{if((i|0)<3){g=-2;break a}if(lb[c[m>>2]&127](e,f)|0){o=10;break a}f=f+3|0;continue a}case 7:{if((i|0)<4){g=-2;break a}if(lb[c[n>>2]&127](e,f)|0){o=14;break a}f=f+4|0;continue a}case 13:case 12:{f=f+1|0;if((j&255|0)==(b|0)){o=18;break a}else continue a}default:{f=f+1|0;continue a}}}b:do if((o|0)==6){c[h>>2]=f;g=0}else if((o|0)==10){c[h>>2]=f;g=0}else if((o|0)==14){c[h>>2]=f;g=0}else if((o|0)==16){c[h>>2]=f;g=0}else if((o|0)==18)if((g-f|0)>0){c[h>>2]=f;switch(a[k+(d[f>>0]|0)>>0]|0){case 20:case 30:case 11:case 10:case 9:case 21:{g=27;break b}default:{}}g=0}else g=-27;while(0);return g|0}function g$(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0;h=f;a:do if((h-e|0)>0){i=b+72|0;switch(a[i+(d[e>>0]|0)>>0]|0){case 27:{b=$_(b,e+1|0,f,g)|0;break a}case 20:{c[g>>2]=e+1;b=33;break a}case 24:case 22:{b:while(1){b=e+1|0;f=h-b|0;if((f|0)<=0){b=-1;break a}switch(a[i+(d[b>>0]|0)>>0]|0){case 24:case 22:{e=b;break}case 30:{j=8;break b}case 10:case 9:case 21:break b;default:{j=12;break b}}}if((j|0)==12){c[g>>2]=b;b=0;break a}c:do if((j|0)==8){if((f|0)<=1){b=-1;break a}switch(a[i+(d[e+2>>0]|0)>>0]|0){case 30:case 10:case 9:case 21:break;default:break c}c[g>>2]=b;b=0;break a}while(0);c[g>>2]=b;b=16;break a}default:{c[g>>2]=e;b=0;break a}}}else b=-1;while(0);return b|0}function h$(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0;h=f-e|0;a:do if((h|0)>0){l=b+72|0;switch(a[l+(d[e>>0]|0)>>0]|0){case 29:{c[g>>2]=e;f=0;break a}case 24:case 22:{h=1;break}case 5:{if((h|0)<2){f=-2;break a}if(!(lb[c[b+340>>2]&127](b,e)|0)){c[g>>2]=e;f=0;break a}else h=2;break}case 6:{if((h|0)<3){f=-2;break a}if(!(lb[c[b+344>>2]&127](b,e)|0)){c[g>>2]=e;f=0;break a}else h=3;break}case 7:{if((h|0)<4){f=-2;break a}if(!(lb[c[b+348>>2]&127](b,e)|0)){c[g>>2]=e;f=0;break a}else h=4;break}default:{c[g>>2]=e;f=0;break a}}i=b+328|0;j=b+332|0;k=b+336|0;e=e+h|0;b:while(1){h=f-e|0;if((h|0)<=0){f=-20;break a}switch(a[l+(d[e>>0]|0)>>0]|0){case 29:{h=17;break b}case 36:case 30:case 11:case 32:case 21:case 10:case 9:{h=28;break b}case 27:case 26:case 25:case 24:case 22:{h=1;break}case 5:{if((h|0)<2){f=-2;break a}if(!(lb[c[i>>2]&127](b,e)|0)){h=20;break b}else h=2;break}case 6:{if((h|0)<3){f=-2;break a}if(!(lb[c[j>>2]&127](b,e)|0)){h=23;break b}else h=3;break}case 7:{if((h|0)<4){f=-2;break a}if(!(lb[c[k>>2]&127](b,e)|0)){h=26;break b}else h=4;break}default:{h=29;break b}}e=e+h|0}if((h|0)==17){c[g>>2]=e;f=0;break}else if((h|0)==20){c[g>>2]=e;f=0;break}else if((h|0)==23){c[g>>2]=e;f=0;break}else if((h|0)==26){c[g>>2]=e;f=0;break}else if((h|0)==28){c[g>>2]=e;f=20;break}else if((h|0)==29){c[g>>2]=e;f=0;break}}else f=-1;while(0);return f|0}function i$(){return 58220}function j$(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;i=l;l=l+16|0;g=i;c[g>>2]=d;h=c[b>>2]|0;a=f-(c[e>>2]|0)|0;if((d-h|0)>(a|0)){a=h+a|0;c[g>>2]=a;f=1}else{f=0;a=d}w_(h,g);h=c[g>>2]|0;d=c[b>>2]|0;g=h-d|0;W6(c[e>>2]|0,d|0,g|0)|0;c[b>>2]=(c[b>>2]|0)+g;c[e>>2]=(c[e>>2]|0)+g;l=i;return (f?2:h>>>0>>0&1)|0}function k$(d,e,f,g,h){d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0;j=d+72|0;k=f;l=h;m=c[e>>2]|0;n=c[g>>2]|0;a:while(1){d=m>>>0>>0;if(!(n>>>0>>0&d)){o=12;break}d=a[m>>0]|0;i=d&255;switch(a[j+i>>0]|0){case 5:{if((k-m|0)<2){d=1;break a}b[n>>1]=(d&31)<<6|a[m+1>>0]&63;m=m+2|0;n=n+2|0;continue a}case 6:{if((k-m|0)<3){d=1;break a}b[n>>1]=(a[m+1>>0]&63)<<6|i<<12|a[m+2>>0]&63;m=m+3|0;n=n+2|0;continue a}case 7:{if((l-n|0)<4){d=2;break a}if((k-m|0)<4){d=1;break a}i=((a[m+1>>0]&63)<<12|(d&7)<<18|(a[m+2>>0]&63)<<6|a[m+3>>0]&63)+-65536|0;b[n>>1]=i>>>10|55296;b[n+2>>1]=i&1023|56320;m=m+4|0;n=n+4|0;continue a}default:{b[n>>1]=d<<24>>24;m=m+1|0;n=n+2|0;continue a}}}if((o|0)==12)d=d?2:0;c[e>>2]=m;c[g>>2]=n;return d|0}function l$(a,b){a=a|0;b=b|0;a=d[b>>0]|0;b=d[b+1>>0]|0;return 1<<(b&31)&c[56940+(((d[144044+(a>>>2&7)>>0]|0)<<3|a<<1&6|b>>>5&1)<<2)>>2]|0}function m$(b,e){b=b|0;e=e|0;var f=0;f=d[e+1>>0]|0;b=d[e+2>>0]|0;return 1<<(b&31)&c[56940+(((d[144044+(f>>>2&15|a[e>>0]<<4&255)>>0]|0)<<3|f<<1&6|b>>>5&1)<<2)>>2]|0}function n$(a,b){a=a|0;b=b|0;return 0}function o$(a,b){a=a|0;b=b|0;a=d[b>>0]|0;b=d[b+1>>0]|0;return 1<<(b&31)&c[56940+(((d[143788+(a>>>2&7)>>0]|0)<<3|a<<1&6|b>>>5&1)<<2)>>2]|0}function p$(b,e){b=b|0;e=e|0;var f=0;f=d[e+1>>0]|0;b=d[e+2>>0]|0;return 1<<(b&31)&c[56940+(((d[143788+(f>>>2&15|a[e>>0]<<4&255)>>0]|0)<<3|f<<1&6|b>>>5&1)<<2)>>2]|0}function q$(a,b){a=a|0;b=b|0;if((d[b>>0]|0)<194)return 1;else{b=d[b+1>>0]|0;return b>>>7^1|(b&192|0)==192|0}return 0}function r$(b,c){b=b|0;c=c|0;var d=0;b=a[c+2>>0]|0;do if(b<<24>>24>-1)b=1;else{d=a[c>>0]|0;if(d<<24>>24==-17?(a[c+1>>0]|0)==-65:0)if((b&255)>189){b=1;break}else{b=191;c=-65}else{if((b&255)>191){b=1;break}c=a[c+1>>0]|0;b=c&255;if(d<<24>>24==-32){b=(c&255)<160|(b&192|0)==192;break}}b=(b&128|0)==0?1:d<<24>>24==-19?(c&255)>159:(b&192|0)==192}while(0);return b&1|0}function s$(b,c){b=b|0;c=c|0;var e=0;e=d[c+3>>0]|0;do if(!((e&128|0)==0|(e&192|0)==192)?(e=d[c+2>>0]|0,!((e&128|0)==0|(e&192|0)==192)):0){e=a[c>>0]|0;b=a[c+1>>0]|0;c=b&255;if(e<<24>>24==-16){b=(b&255)<144|(c&192|0)==192;break}else{b=(c&128|0)==0?1:e<<24>>24==-12?(b&255)>143:(c&192|0)==192;break}}else b=1;while(0);return b&1|0}function t$(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0;a:do if(e>>>0>>0){i=e;m=f-i|0;k=(m&1|0)==0;m=m&-2;l=(m|0)==0;m=k|l?f:e+m|0;if(k|l^1){f=a[e+1>>0]|0;if(!(f<<24>>24)){h=a[e>>0]|0;j=h;h=d[b+72+(h&255)>>0]|0}else{h=a[e>>0]|0;j=h;h=J$(f,h)|0}do switch(h|0){case 12:{f=V$(12,b,e+2|0,m,g)|0;break a}case 13:{f=V$(13,b,e+2|0,m,g)|0;break a}case 2:{h=e+2|0;if((m-h|0)<=1){f=-1;break a}f=a[e+3>>0]|0;if(!(f<<24>>24))f=d[b+72+(d[h>>0]|0)>>0]|0;else f=J$(f,a[h>>0]|0)|0;switch(f|0){case 16:{f=W$(b,e+4|0,m,g)|0;break a}case 15:{f=R$(b,e+4|0,m,g)|0;break a}case 7:case 6:case 5:case 29:case 24:case 22:{c[g>>2]=e;f=29;break a}default:{c[g>>2]=h;f=0;break a}}}case 9:{if((e+2|0)==(m|0)){c[g>>2]=m;f=-15;break a}else i=7;break}case 10:case 21:{i=7;break}case 30:{f=L$(b,e+2|0,m,g)|0;break a}case 35:{c[g>>2]=e+2;f=38;break a}case 20:{c[g>>2]=e+2;f=25;break a}case 4:{h=e+2|0;f=m-h|0;if((f|0)<=1){f=-26;break a}if((a[e+3>>0]|0)==0?(a[h>>0]|0)==93:0){if((f|0)<=3){f=-1;break a}if((a[e+5>>0]|0)==0?(a[e+4>>0]|0)==62:0){c[g>>2]=e+6;f=34;break a}}c[g>>2]=h;f=26;break a}case 31:{c[g>>2]=e+2;f=23;break a}case 32:{h=e+2|0;if((m-h|0)<=1){f=-24;break a}f=a[e+3>>0]|0;if(!(f<<24>>24))f=d[b+72+(d[h>>0]|0)>>0]|0;else f=J$(f,a[h>>0]|0)|0;switch(f|0){case 33:{c[g>>2]=e+4;f=36;break a}case 15:{c[g>>2]=e+4;f=35;break a}case 34:{c[g>>2]=e+4;f=37;break a}case 32:case 36:case 35:case 11:case 21:case 10:case 9:{c[g>>2]=h;f=24;break a}default:{c[g>>2]=h;f=0;break a}}}case 36:{c[g>>2]=e+2;f=21;break a}case 11:{c[g>>2]=e+2;f=17;break a}case 19:{f=X$(b,e+2|0,m,g)|0;break a}case 5:{if((m-i|0)<2){f=-2;break a}c[g>>2]=e;f=0;break a}case 6:{if((m-i|0)<3){f=-2;break a}c[g>>2]=e;f=0;break a}case 7:{if((m-i|0)<4){f=-2;break a}c[g>>2]=e;f=0;break a}case 24:case 22:{f=18;i=61;break}case 23:case 27:case 26:case 25:{f=19;i=61;break}case 29:{i=f&255;h=j&255;f=h>>>5;h=1<<(h&31);if(!(h&c[56940+((f|d[143788+i>>0]<<3)<<2)>>2]))if(!(c[56940+((d[144044+i>>0]<<3|f)<<2)>>2]&h))i=64;else{f=19;i=61}else{f=18;i=61}break}default:i=64}while(0);if((i|0)==7){k=m;b=b+72|0;j=e;b:while(1){i=j;j=j+2|0;if((k-j|0)<=1){i=28;break}f=a[i+3>>0]|0;h=a[j>>0]|0;if(!(f<<24>>24))f=d[b+(h&255)>>0]|0;else f=J$(f,h)|0;switch(f|0){case 10:case 21:continue b;case 9:break;default:{i=27;break b}}if((i+4|0)==(m|0)){i=27;break}}if((i|0)==27){c[g>>2]=j;f=15;break}else if((i|0)==28){c[g>>2]=j;f=15;break}}else if((i|0)==61){l=b+72|0;h=e+2|0;c:while(1){e=f&255;d:while(1){k=m-h|0;if((k|0)<=1){i=104;break c}i=a[h+1>>0]|0;j=a[h>>0]|0;if(!(i<<24>>24))b=d[l+(j&255)>>0]|0;else b=J$(i,j)|0;switch(b|0){case 5:{i=73;break c}case 6:{i=74;break c}case 7:{i=76;break c}case 10:case 9:case 21:case 30:case 20:case 36:case 35:case 32:case 11:{i=78;break c}case 34:{i=94;break c}case 33:{i=97;break c}case 15:{i=100;break c}case 29:{k=j&255;if(!(1<<(k&31)&c[56940+((k>>>5|d[144044+(i&255)>>0]<<3)<<2)>>2])){i=71;break c}break}case 27:case 26:case 25:case 24:case 22:break;case 23:{k=h+2|0;switch(e&63){case 41:{f=19;h=k;continue c}case 18:break d;default:{h=k;continue d}}}default:{i=103;break c}}h=h+2|0}b=m-k|0;if((b|0)<=1){f=-1;break a}f=a[h+3>>0]|0;i=a[k>>0]|0;if(!(f<<24>>24))j=d[l+(i&255)>>0]|0;else j=J$(f,i)|0;switch(j|0){case 5:{i=89;break c}case 6:{i=90;break c}case 7:{i=92;break c}case 29:{e=i&255;if(!(1<<(e&31)&c[56940+((e>>>5|d[144044+(f&255)>>0]<<3)<<2)>>2])){i=87;break c}break}case 27:case 26:case 25:case 24:case 22:break;default:{f=19;h=k;continue c}}f=41;h=h+4|0}switch(i|0){case 71:{c[g>>2]=h;f=0;break a}case 73:{c[g>>2]=h;f=0;break a}case 74:{if((k|0)<3){f=-2;break a}c[g>>2]=h;f=0;break a}case 76:{if((k|0)<4){f=-2;break a}c[g>>2]=h;f=0;break a}case 78:{c[g>>2]=h;break a}case 87:{c[g>>2]=k;f=0;break a}case 89:{c[g>>2]=k;f=0;break a}case 90:{if((b|0)<3){f=-2;break a}c[g>>2]=k;f=0;break a}case 92:{if((b|0)<4){f=-2;break a}c[g>>2]=k;f=0;break a}case 94:if((f|0)==19){c[g>>2]=h;f=0;break a}else{c[g>>2]=h+2;f=32;break a}case 97:if((f|0)==19){c[g>>2]=h;f=0;break a}else{c[g>>2]=h+2;f=31;break a}case 100:if((f|0)==19){c[g>>2]=h;f=0;break a}else{c[g>>2]=h+2;f=30;break a}case 103:{c[g>>2]=h;f=0;break a}case 104:{f=0-f|0;break a}}}else if((i|0)==64){c[g>>2]=e;f=0;break}}else f=-1}else f=-4;while(0);return f|0}function u$(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;a:do if(e>>>0>>0){h=e;i=f-h|0;k=(i&1|0)==0;i=i&-2;j=(i|0)==0;i=k|j?f:e+i|0;if(k|j^1){f=a[e+1>>0]|0;if(!(f<<24>>24))f=d[b+72+(d[e>>0]|0)>>0]|0;else f=J$(f,a[e>>0]|0)|0;do switch(f|0){case 2:{f=O$(b,e+2|0,i,g)|0;break a}case 3:{f=K$(b,e+2|0,i,g)|0;break a}case 9:{h=e+2|0;if((i-h|0)<=1){f=-3;break a}f=a[e+3>>0]|0;if(!(f<<24>>24))f=d[b+72+(d[h>>0]|0)>>0]|0;else f=J$(f,a[h>>0]|0)|0;c[g>>2]=(f|0)==10?e+4|0:h;f=7;break a}case 10:{c[g>>2]=e+2;f=7;break a}case 4:{h=e+2|0;if((i-h|0)<=1){f=-5;break a}if((a[e+3>>0]|0)==0?(a[h>>0]|0)==93:0){f=e+4|0;if((i-f|0)<=1){f=-5;break a}if((a[e+5>>0]|0)==0?(a[f>>0]|0)==62:0){c[g>>2]=f;f=0;break a}else f=i}else f=i;break}case 5:{f=i;if((f-h|0)<2){f=-2;break a}h=e+2|0;break}case 6:{f=i;if((f-h|0)<3){f=-2;break a}h=e+3|0;break}case 7:{f=i;if((f-h|0)<4){f=-2;break a}h=e+4|0;break}case 8:case 1:case 0:{c[g>>2]=e;f=0;break a}default:{h=e+2|0;f=i}}while(0);j=b+72|0;b=h;b:while(1){e=f-b|0;if((e|0)<=1){h=52;break}h=a[b+1>>0]|0;i=a[b>>0]|0;if(!(h<<24>>24))h=d[j+(i&255)>>0]|0;else h=J$(h,i)|0;switch(h|0){case 10:case 9:case 8:case 1:case 0:case 2:case 3:{h=50;break b}case 5:{b=b+2|0;continue b}case 6:{if((e|0)<3){h=38;break b}b=b+3|0;continue b}case 7:{if((e|0)<4){h=41;break b}b=b+4|0;continue b}case 4:{if((e|0)<=3){h=50;break b}h=b+2|0;if(a[b+3>>0]|0){b=h;continue b}if((a[h>>0]|0)!=93){b=h;continue b}if((e|0)<=5){h=50;break b}i=b+4|0;if(a[b+5>>0]|0){b=h;continue b}if((a[i>>0]|0)==62){h=49;break b}else{b=h;continue b}}default:{b=b+2|0;continue b}}}if((h|0)==38){c[g>>2]=b;f=6;break}else if((h|0)==41){c[g>>2]=b;f=6;break}else if((h|0)==49){c[g>>2]=i;f=0;break}else if((h|0)==50){c[g>>2]=b;f=6;break}else if((h|0)==52){c[g>>2]=b;f=6;break}}else f=-1}else f=-4;while(0);return f|0}function v$(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;a:do if(e>>>0>>0){h=e;i=f-h|0;k=(i&1|0)==0;i=i&-2;j=(i|0)==0;i=k|j?f:e+i|0;if(k|j^1){f=a[e+1>>0]|0;if(!(f<<24>>24))f=d[b+72+(d[e>>0]|0)>>0]|0;else f=J$(f,a[e>>0]|0)|0;switch(f|0){case 4:{h=e+2|0;if((i-h|0)<=1){f=-1;break a}if((a[e+3>>0]|0)==0?(a[h>>0]|0)==93:0){f=e+4|0;if((i-f|0)<=1){f=-1;break a}if((a[e+5>>0]|0)==0?(a[f>>0]|0)==62:0){c[g>>2]=e+6;f=40;break a}}break}case 9:{h=e+2|0;if((i-h|0)<=1){f=-1;break a}f=a[e+3>>0]|0;if(!(f<<24>>24))f=d[b+72+(d[h>>0]|0)>>0]|0;else f=J$(f,a[h>>0]|0)|0;c[g>>2]=(f|0)==10?e+4|0:h;f=7;break a}case 10:{c[g>>2]=e+2;f=7;break a}case 5:{f=i;if((f-h|0)<2){f=-2;break a}h=e+2|0;i=f;break}case 6:{f=i;if((f-h|0)<3){f=-2;break a}h=e+3|0;i=f;break}case 7:{f=i;if((f-h|0)<4){f=-2;break a}h=e+4|0;i=f;break}case 8:case 1:case 0:{c[g>>2]=e;f=0;break a}default:h=e+2|0}j=b+72|0;b=h;b:while(1){e=i-b|0;if((e|0)<=1){h=40;break}f=a[b+1>>0]|0;h=a[b>>0]|0;if(!(f<<24>>24))f=d[j+(h&255)>>0]|0;else f=J$(f,h)|0;switch(f|0){case 10:case 9:case 8:case 1:case 0:case 4:{h=38;break b}case 6:{if((e|0)<3){h=35;break b}else f=3;break}case 7:{if((e|0)<4){h=37;break b}else f=4;break}default:f=2}b=b+f|0}if((h|0)==35){c[g>>2]=b;f=6;break}else if((h|0)==37){c[g>>2]=b;f=6;break}else if((h|0)==38){c[g>>2]=b;f=6;break}else if((h|0)==40){c[g>>2]=b;f=6;break}}else f=-1}else f=-4;while(0);return f|0}function w$(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0;k=f-e|0;k=(k&1|0)==0?f:e+(k&-2)|0;j=b+72|0;i=0;f=e;a:while(1){h=k-f|0;if((h|0)<=1){f=-1;break}b=a[f+1>>0]|0;e=a[f>>0]|0;if(!(b<<24>>24))b=d[j+(e&255)>>0]|0;else b=J$(b,e)|0;switch(b|0){case 8:case 1:case 0:{l=12;break a}case 5:{h=i;f=f+2|0;i=h;continue a}case 6:{if((h|0)<3){f=-2;break a}h=i;f=f+3|0;i=h;continue a}case 7:{if((h|0)<4){f=-2;break a}h=i;f=f+4|0;i=h;continue a}case 2:{b=f+2|0;if((k-b|0)<=1){f=-1;break a}if(a[f+3>>0]|0){h=i;f=b;i=h;continue a}if((a[b>>0]|0)!=33){h=i;f=b;i=h;continue a}b=f+4|0;if((k-b|0)<=1){f=-1;break a}if(a[f+5>>0]|0){h=i;f=b;i=h;continue a}h=(a[b>>0]|0)==91;i=i+(h&1)|0;f=h?f+6|0:b;continue a}case 4:{b=f+2|0;if((k-b|0)<=1){f=-1;break a}if(a[f+3>>0]|0){h=i;f=b;i=h;continue a}if((a[b>>0]|0)!=93){h=i;f=b;i=h;continue a}b=f+4|0;if((k-b|0)<=1){f=-1;break a}if(a[f+5>>0]|0){h=i;f=b;i=h;continue a}if((a[b>>0]|0)!=62){h=i;f=b;i=h;continue a}f=f+6|0;if(!i){l=26;break a}i=i+-1|0;continue a}default:{h=i;f=f+2|0;i=h;continue a}}}if((l|0)==12){c[g>>2]=f;f=0}else if((l|0)==26){c[g>>2]=f;f=42}return f|0}function x$(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0;do if(e>>>0>>0){k=f;if((k-e|0)>1){l=b+72|0;j=e;a:while(1){if((k-j|0)<=1){i=30;break}h=a[j+1>>0]|0;i=a[j>>0]|0;if(!(h<<24>>24))h=d[l+(i&255)>>0]|0;else h=J$(h,i)|0;switch(h|0){case 3:{i=11;break a}case 2:{i=14;break a}case 10:{i=15;break a}case 9:{i=18;break a}case 21:{i=25;break a}case 5:{h=2;break}case 6:{h=3;break}case 7:{h=4;break}default:h=2}j=j+h|0}if((i|0)==11)if((j|0)==(e|0)){h=K$(b,e+2|0,f,g)|0;break}else{c[g>>2]=j;h=6;break}else if((i|0)==14){c[g>>2]=j;h=0;break}else if((i|0)==15)if((j|0)==(e|0)){c[g>>2]=e+2;h=7;break}else{c[g>>2]=j;h=6;break}else if((i|0)==18){if((j|0)!=(e|0)){c[g>>2]=j;h=6;break}j=e+2|0;if((k-j|0)<=1){h=-3;break}h=a[e+3>>0]|0;i=a[j>>0]|0;if(!(h<<24>>24))h=d[l+(i&255)>>0]|0;else h=J$(h,i)|0;c[g>>2]=(h|0)==10?e+4|0:j;h=7;break}else if((i|0)==25)if((j|0)==(e|0)){c[g>>2]=e+2;h=39;break}else{c[g>>2]=j;h=6;break}else if((i|0)==30){c[g>>2]=j;h=6;break}}else h=-1}else h=-4;while(0);return h|0}function y$(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0;do if(e>>>0>>0){k=f;if((k-e|0)>1){l=b+72|0;j=e;a:while(1){if((k-j|0)<=1){i=29;break}h=a[j+1>>0]|0;i=a[j>>0]|0;if(!(h<<24>>24))h=d[l+(i&255)>>0]|0;else h=J$(h,i)|0;switch(h|0){case 3:{i=11;break a}case 30:{i=14;break a}case 10:{i=17;break a}case 9:{i=20;break a}case 5:{h=2;break}case 6:{h=3;break}case 7:{h=4;break}default:h=2}j=j+h|0}if((i|0)==11)if((j|0)==(e|0)){h=K$(b,e+2|0,f,g)|0;break}else{c[g>>2]=j;h=6;break}else if((i|0)==14)if((j|0)==(e|0)){h=L$(b,e+2|0,f,g)|0;h=(h|0)==22?0:h;break}else{c[g>>2]=j;h=6;break}else if((i|0)==17)if((j|0)==(e|0)){c[g>>2]=e+2;h=7;break}else{c[g>>2]=j;h=6;break}else if((i|0)==20){if((j|0)!=(e|0)){c[g>>2]=j;h=6;break}j=e+2|0;if((k-j|0)<=1){h=-3;break}h=a[e+3>>0]|0;i=a[j>>0]|0;if(!(h<<24>>24))h=d[l+(i&255)>>0]|0;else h=J$(h,i)|0;c[g>>2]=(h|0)==10?e+4|0:j;h=7;break}else if((i|0)==29){c[g>>2]=j;h=6;break}}else h=-1}else h=-4;while(0);return h|0}function z$(b,c,d,e){b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0;f=d;b=c;while(1){c=a[e>>0]|0;if(!(c<<24>>24)){g=7;break}if((f-b|0)<2){b=0;break}if(a[b+1>>0]|0){b=0;break}if((a[b>>0]|0)!=c<<24>>24){b=0;break}e=e+1|0;b=b+2|0}if((g|0)==7)b=(b|0)==(d|0)&1;return b|0}function A$(b,c){b=b|0;c=c|0;var e=0,f=0,g=0;g=b+72|0;f=c;a:while(1){b=a[f+1>>0]|0;e=a[f>>0]|0;if(!(b<<24>>24))b=d[g+(e&255)>>0]|0;else b=J$(b,e)|0;switch(b|0){case 5:{b=2;break}case 6:{b=3;break}case 7:{b=4;break}case 27:case 26:case 25:case 24:case 23:case 22:case 29:{b=2;break}default:break a}f=f+b|0}return f-c|0}function B$(b,c){b=b|0;c=c|0;var e=0,f=0;f=b+72|0;a:while(1){b=a[c+1>>0]|0;e=a[c>>0]|0;if(!(b<<24>>24))b=d[f+(e&255)>>0]|0;else b=J$(b,e)|0;switch(b|0){case 21:case 9:case 10:break;default:break a}c=c+2|0}return c|0}function C$(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;o=b+72|0;m=0;n=0;b=1;a:while(1){l=e+2|0;i=e+3|0;h=a[i>>0]|0;j=h<<24>>24==0;k=a[l>>0]|0;if(j)h=d[o+(k&255)>>0]|0;else h=J$(h,k)|0;do switch(h|0){case 5:{if(b|0){i=b;j=n;k=m;e=l;b=i;n=j;m=k;continue a}if((n|0)>=(f|0)){j=n;k=m;b=1;e=l;n=j;m=k;continue a}c[g+(n<<4)>>2]=l;a[g+(n<<4)+12>>0]=1;j=n;k=m;b=1;e=l;n=j;m=k;continue a}case 6:{if(b|0){j=b;k=n;l=m;e=i;b=j;n=k;m=l;continue a}if((n|0)>=(f|0)){k=n;l=m;b=1;e=i;n=k;m=l;continue a}c[g+(n<<4)>>2]=l;a[g+(n<<4)+12>>0]=1;k=n;l=m;b=1;e=i;n=k;m=l;continue a}case 7:{if(!b)if((n|0)<(f|0)){c[g+(n<<4)>>2]=l;a[g+(n<<4)+12>>0]=1;b=1}else b=1;k=n;l=m;e=e+4|0;n=k;m=l;continue a}case 24:case 22:case 29:{if(b|0){i=b;j=n;k=m;e=l;b=i;n=j;m=k;continue a}if((n|0)>=(f|0)){j=n;k=m;b=1;e=l;n=j;m=k;continue a}c[g+(n<<4)>>2]=l;a[g+(n<<4)+12>>0]=1;j=n;k=m;b=1;e=l;n=j;m=k;continue a}case 12:{if((b|0)!=2){if((n|0)>=(f|0)){k=n;m=12;b=2;e=l;n=k;continue a}c[g+(n<<4)+4>>2]=e+4;k=n;m=12;b=2;e=l;n=k;continue a}if((m|0)!=12){j=n;k=m;b=2;e=l;n=j;m=k;continue a}if((n|0)<(f|0))c[g+(n<<4)+8>>2]=l;m=12;n=n+1|0;b=0;e=l;continue a}case 13:{if((b|0)!=2){if((n|0)>=(f|0)){k=n;m=13;b=2;e=l;n=k;continue a}c[g+(n<<4)+4>>2]=e+4;k=n;m=13;b=2;e=l;n=k;continue a}if((m|0)!=13){j=n;k=m;b=2;e=l;n=j;m=k;continue a}if((n|0)<(f|0))c[g+(n<<4)+8>>2]=l;m=13;n=n+1|0;b=0;e=l;continue a}case 3:{if((n|0)>=(f|0)){i=b;j=n;k=m;e=l;b=i;n=j;m=k;continue a}a[g+(n<<4)+12>>0]=0;i=b;j=n;k=m;e=l;b=i;n=j;m=k;continue a}case 21:{switch(b|0){case 1:{j=n;k=m;b=0;e=l;n=j;m=k;continue a}case 2:break;default:{i=b;j=n;k=m;e=l;b=i;n=j;m=k;continue a}}if((n|0)>=(f|0)){j=n;k=m;b=2;e=l;n=j;m=k;continue a}i=g+(n<<4)+12|0;if(!(a[i>>0]|0)){j=n;k=m;b=2;e=l;n=j;m=k;continue a}do if(j&(l|0)!=(c[g+(n<<4)+4>>2]|0)&k<<24>>24==32){h=a[e+5>>0]|0;b=a[e+4>>0]|0;if(!(h<<24>>24)){if(b<<24>>24==32)break;b=d[o+(b&255)>>0]|0}else b=J$(h,b)|0;if((b|0)!=(m|0)){j=n;k=m;b=2;e=l;n=j;m=k;continue a}}while(0);a[i>>0]=0;j=n;k=m;b=2;e=l;n=j;m=k;continue a}case 10:case 9:{switch(b|0){case 1:{j=n;k=m;b=0;e=l;n=j;m=k;continue a}case 2:break;default:{i=b;j=n;k=m;e=l;b=i;n=j;m=k;continue a}}if((n|0)>=(f|0)){j=n;k=m;b=2;e=l;n=j;m=k;continue a}a[g+(n<<4)+12>>0]=0;j=n;k=m;b=2;e=l;n=j;m=k;continue a}case 17:case 11:if((b|0)==2){j=n;k=m;b=2;e=l;n=j;m=k;continue a}else break a;default:{i=b;j=n;k=m;e=l;b=i;n=j;m=k;continue a}}while(0)}return n|0}function D$(b,c){b=b|0;c=c|0;var d=0,e=0;b=c+4|0;a:do if((a[c+5>>0]|0)==0?(a[b>>0]|0)==120:0){c=c+6|0;b=0;while(1){b:while(1){if(!(a[c+1>>0]|0)){d=a[c>>0]|0;if(d<<24>>24==59){e=17;break a}d=d<<24>>24;switch(d|0){case 57:case 56:case 55:case 54:case 53:case 52:case 51:case 50:case 49:case 48:{e=8;break b}case 70:case 69:case 68:case 67:case 66:case 65:{e=9;break b}case 102:case 101:case 100:case 99:case 98:case 97:{e=10;break b}default:{}}}c=c+2|0}if((e|0)==8){e=0;b=d+-48|b<<4}else if((e|0)==9){e=0;b=(b<<4)+-55+d|0}else if((e|0)==10){e=0;b=(b<<4)+-87+d|0}if((b|0)<1114112)c=c+2|0;else{b=-1;break}}}else{d=b;b=0;e=13}while(0);c:do if((e|0)==13)while(1){e=0;if(!(a[d+1>>0]|0)){c=a[d>>0]|0;if(c<<24>>24==59){e=17;break c}c=c<<24>>24}else c=-1;b=(b*10|0)+-48+c|0;if((b|0)>=1114112){b=-1;break}else{d=d+2|0;e=13}}while(0);if((e|0)==17)b=A_(b)|0;return b|0}function E$(b,c,d){b=b|0;c=c|0;d=d|0;var e=0;a:do switch((d-c|0)/2|0|0){case 2:{if((a[c+3>>0]|0)==0?(a[c+2>>0]|0)==116:0){if(!(a[c+1>>0]|0))b=a[c>>0]|0;else b=-1;b=(b|0)==108?60:(b|0)==103?62:0}else e=27;break}case 3:{if((((((a[c+1>>0]|0)==0?(a[c>>0]|0)==97:0)?(a[c+3>>0]|0)==0:0)?(a[c+2>>0]|0)==109:0)?(a[c+5>>0]|0)==0:0)?(a[c+4>>0]|0)==112:0)b=38;else e=27;break}case 4:{if(!(a[c+1>>0]|0))switch(a[c>>0]|0){case 113:{if(a[c+3>>0]|0){e=27;break a}if((a[c+2>>0]|0)!=117){e=27;break a}if(a[c+5>>0]|0){e=27;break a}if((a[c+4>>0]|0)!=111){e=27;break a}if(a[c+7>>0]|0){e=27;break a}if((a[c+6>>0]|0)==116){b=34;break a}else{e=27;break a}}case 97:{if(a[c+3>>0]|0){e=27;break a}if((a[c+2>>0]|0)!=112){e=27;break a}if(a[c+5>>0]|0){e=27;break a}if((a[c+4>>0]|0)!=111){e=27;break a}if(a[c+7>>0]|0){e=27;break a}if((a[c+6>>0]|0)==115){b=39;break a}else{e=27;break a}}default:{e=27;break a}}else e=27;break}default:e=27}while(0);if((e|0)==27)b=0;return b|0}function F$(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;j=b+72|0;k=g+4|0;while(1){if((f-e|0)<=1)break;b=a[e+1>>0]|0;h=a[e>>0]|0;if(!(b<<24>>24))b=d[j+(h&255)>>0]|0;else b=J$(b,h)|0;switch(b|0){case 5:{e=e+2|0;break}case 6:{e=e+3|0;break}case 7:{e=e+4|0;break}case 10:{c[k>>2]=-1;c[g>>2]=(c[g>>2]|0)+1;e=e+2|0;break}case 9:{c[g>>2]=(c[g>>2]|0)+1;i=e+2|0;if((f-i|0)>1){b=a[e+3>>0]|0;h=a[i>>0]|0;if(!(b<<24>>24))b=d[j+(h&255)>>0]|0;else b=J$(b,h)|0;e=(b|0)==10?e+4|0:i}else e=i;c[k>>2]=-1;break}default:e=e+2|0}c[k>>2]=(c[k>>2]|0)+1}return}function G$(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;j=f+-2|0;i=b+72|0;f=e;a:while(1){h=f+2|0;if((j-h|0)<=1){f=1;break}f=a[f+3>>0]|0;b=f<<24>>24==0;e=a[h>>0]|0;if(b)f=d[i+(e&255)>>0]|0;else f=J$(f,e)|0;switch(f|0){case 23:case 19:case 30:case 33:case 16:case 18:case 10:case 9:case 15:case 14:case 17:case 35:case 34:case 32:case 31:case 13:case 27:case 24:case 25:{f=h;continue a}case 21:if(b&e<<24>>24==9){k=12;break a}else{f=h;continue a}case 22:case 26:{if(!b){k=12;break a}if(e<<24>>24>=0){f=h;continue a}break}default:if(!b){k=12;break a}}switch(e<<24>>24|0){case 64:case 36:{f=h;break}default:{k=12;break a}}}if((k|0)==12){c[g>>2]=h;f=0}return f|0}function H$(b,e,f,g,h){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0;j=c[e>>2]|0;k=j+(f-j&-2)|0;l=k;m=h;a:while(1){if(j>>>0>=k>>>0){b=0;break}i=a[j>>0]|0;b=a[j+1>>0]|0;f=b&255;switch(b<<24>>24){case 0:{if(i<<24>>24>-1){b=c[g>>2]|0;if((b|0)==(h|0)){b=2;break a}c[g>>2]=b+1;a[b>>0]=i;b=j}else n=7;break}case 7:case 6:case 5:case 4:case 3:case 2:case 1:{n=7;break}case -37:case -38:case -39:case -40:{b=c[g>>2]|0;if((m-b|0)<4){b=2;break a}if((l-j|0)<4){b=1;break a}o=i&255;i=(f<<2&12|o>>>6)+1|0;c[g>>2]=b+1;a[b>>0]=i>>>2|240;b=c[g>>2]|0;c[g>>2]=b+1;a[b>>0]=o>>>2&15|i<<4&48|128;b=j+2|0;i=d[b>>0]|0;f=(o<<4&48|i>>>6|a[j+3>>0]<<2&12|128)&255;j=c[g>>2]|0;c[g>>2]=j+1;a[j>>0]=f;j=c[g>>2]|0;c[g>>2]=j+1;a[j>>0]=i&63|128;break}default:{b=c[g>>2]|0;if((m-b|0)<3){b=2;break a}c[g>>2]=b+1;a[b>>0]=f>>>4|224;o=i&255;b=c[g>>2]|0;c[g>>2]=b+1;a[b>>0]=o>>>6|f<<2&60|128;b=c[g>>2]|0;c[g>>2]=b+1;a[b>>0]=o&63|128;b=j}}if((n|0)==7){n=0;b=c[g>>2]|0;if((m-b|0)<2){b=2;break}o=i&255;c[g>>2]=b+1;a[b>>0]=o>>>6|f<<2|192;b=c[g>>2]|0;c[g>>2]=b+1;a[b>>0]=o&63|128;b=j}j=b+2|0}c[e>>2]=j;return b|0}function I$(e,f,g,h,i){e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0;j=c[f>>2]|0;l=g-j&-2;e=j+l|0;if((l|0)>(i-(c[h>>2]|0)|0)){k=e+-2|0;g=(a[k+1>>0]&-8)<<24>>24==-40;l=g&1;e=g?k:e}else l=0;g=j;while(1){j=g>>>0>>0;k=c[h>>2]|0;if(!(j&k>>>0>>0))break;j=((d[g+1>>0]|0)<<8|(d[g>>0]|0))&65535;c[h>>2]=k+2;b[k>>1]=j;k=(c[f>>2]|0)+2|0;c[f>>2]=k;g=k}return ((k|0)!=(i|0)|j^1?l:2)|0}function J$(a,b){a=a|0;b=b|0;var c=0;switch(a<<24>>24){case -37:case -38:case -39:case -40:{a=7;break}case -33:case -34:case -35:case -36:{a=8;break}case -1:{if((b&255)>253)a=0;else c=4;break}default:c=4}if((c|0)==4)a=29;return a|0}function K$(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0;l=f;j=l-e|0;a:do if((j|0)>1){k=a[e+1>>0]|0;if(!(k<<24>>24)){i=a[e>>0]|0;h=d[b+72+(i&255)>>0]|0}else{i=a[e>>0]|0;h=J$(k,i)|0}switch(h|0){case 29:{j=i&255;if(!(1<<(j&31)&c[56940+((j>>>5|(d[143788+(k&255)>>0]|0)<<3)<<2)>>2])){c[g>>2]=e;b=0;break a}break}case 24:case 22:break;case 5:{c[g>>2]=e;b=0;break a}case 6:{if((j|0)<3){b=-2;break a}c[g>>2]=e;b=0;break a}case 7:{if((j|0)<4){b=-2;break a}c[g>>2]=e;b=0;break a}case 19:{b=M$(b,e+2|0,f,g)|0;break a}default:{c[g>>2]=e;b=0;break a}}k=b+72|0;j=e;b:while(1){i=j+2|0;e=l-i|0;if((e|0)<=1){b=-1;break a}b=a[j+3>>0]|0;h=a[i>>0]|0;if(!(b<<24>>24))f=d[k+(h&255)>>0]|0;else f=J$(b,h)|0;switch(f|0){case 27:case 26:case 25:case 24:case 22:{j=i;continue b}case 5:{h=23;break b}case 6:{h=24;break b}case 7:{h=26;break b}case 18:{h=28;break b}case 29:break;default:{h=29;break b}}e=h&255;if(!(1<<(e&31)&c[56940+((e>>>5|(d[144044+(b&255)>>0]|0)<<3)<<2)>>2])){h=22;break}else j=i}if((h|0)==22){c[g>>2]=i;b=0;break}else if((h|0)==23){c[g>>2]=i;b=0;break}else if((h|0)==24){if((e|0)<3){b=-2;break}c[g>>2]=i;b=0;break}else if((h|0)==26){if((e|0)<4){b=-2;break}c[g>>2]=i;b=0;break}else if((h|0)==28){c[g>>2]=j+4;b=9;break}else if((h|0)==29){c[g>>2]=i;b=0;break}}else b=-1;while(0);return b|0}function L$(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0;j=f-e|0;a:do if((j|0)>1){k=a[e+1>>0]|0;if(!(k<<24>>24)){i=a[e>>0]|0;h=d[b+72+(i&255)>>0]|0}else{i=a[e>>0]|0;h=J$(k,i)|0}switch(h|0){case 29:{l=i&255;if(!(1<<(l&31)&c[56940+((l>>>5|(d[143788+(k&255)>>0]|0)<<3)<<2)>>2])){c[g>>2]=e;f=0;break a}break}case 24:case 22:break;case 5:{c[g>>2]=e;f=0;break a}case 6:{if((j|0)<3){f=-2;break a}c[g>>2]=e;f=0;break a}case 7:{if((j|0)<4){f=-2;break a}c[g>>2]=e;f=0;break a}case 30:case 9:case 10:case 21:{c[g>>2]=e;f=22;break a}default:{c[g>>2]=e;f=0;break a}}l=b+72|0;b=e;b:while(1){k=b+2|0;e=f-k|0;if((e|0)<=1){f=-1;break a}h=a[b+3>>0]|0;i=a[k>>0]|0;if(!(h<<24>>24))j=d[l+(i&255)>>0]|0;else j=J$(h,i)|0;switch(j|0){case 27:case 26:case 25:case 24:case 22:{b=k;continue b}case 5:{h=23;break b}case 6:{h=24;break b}case 7:{h=26;break b}case 18:{h=28;break b}case 29:break;default:{h=29;break b}}e=i&255;if(!(1<<(e&31)&c[56940+((e>>>5|(d[144044+(h&255)>>0]|0)<<3)<<2)>>2])){h=22;break}else b=k}if((h|0)==22){c[g>>2]=k;f=0;break}else if((h|0)==23){c[g>>2]=k;f=0;break}else if((h|0)==24){if((e|0)<3){f=-2;break}c[g>>2]=k;f=0;break}else if((h|0)==26){if((e|0)<4){f=-2;break}c[g>>2]=k;f=0;break}else if((h|0)==28){c[g>>2]=b+4;f=28;break}else if((h|0)==29){c[g>>2]=k;f=0;break}}else f=-1;while(0);return f|0}function M$(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;k=f;a:do if((k-e|0)>1){i=a[e+1>>0]|0;h=a[e>>0]|0;do if(!(i<<24>>24))if(h<<24>>24==120){h=N$(b,e+2|0,f,g)|0;break a}else{h=d[b+72+(h&255)>>0]|0;break}else h=J$(i,h)|0;while(0);if((h|0)!=25){c[g>>2]=e;h=0;break}j=b+72|0;b=e;b:while(1){i=b+2|0;if((k-i|0)<=1){h=-1;break a}h=a[b+3>>0]|0;f=a[i>>0]|0;if(!(h<<24>>24))h=d[j+(f&255)>>0]|0;else h=J$(h,f)|0;switch(h|0){case 25:{b=i;break}case 18:{f=15;break b}default:{f=16;break b}}}if((f|0)==15){c[g>>2]=b+4;h=10;break}else if((f|0)==16){c[g>>2]=i;h=0;break}}else h=-1;while(0);return h|0}function N$(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0;a:do if((f-e|0)>1){h=a[e+1>>0]|0;if(!(h<<24>>24))h=d[b+72+(d[e>>0]|0)>>0]|0;else h=J$(h,a[e>>0]|0)|0;if((h&-2|0)!=24){c[g>>2]=e;f=0;break}j=b+72|0;b:while(1){i=e+2|0;if((f-i|0)<=1){f=-1;break a}h=a[e+3>>0]|0;b=a[i>>0]|0;if(!(h<<24>>24))h=d[j+(b&255)>>0]|0;else h=J$(h,b)|0;switch(h|0){case 24:case 25:{e=i;break}case 18:{h=13;break b}default:{h=14;break b}}}if((h|0)==13){c[g>>2]=e+4;f=10;break}else if((h|0)==14){c[g>>2]=i;f=0;break}}else f=-1;while(0);return f|0}function O$(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;o=f;j=o-e|0;a:do if((j|0)>1){k=a[e+1>>0]|0;if(!(k<<24>>24)){i=a[e>>0]|0;h=d[b+72+(i&255)>>0]|0}else{i=a[e>>0]|0;h=J$(k,i)|0}switch(h|0){case 29:{m=i&255;if(!(1<<(m&31)&c[56940+((m>>>5|d[143788+(k&255)>>0]<<3)<<2)>>2])){c[g>>2]=e;h=0;break a}break}case 24:case 22:break;case 5:{c[g>>2]=e;h=0;break a}case 6:{if((j|0)<3){h=-2;break a}c[g>>2]=e;h=0;break a}case 7:{if((j|0)<4){h=-2;break a}c[g>>2]=e;h=0;break a}case 16:{i=e+2|0;if((o-i|0)<=1){h=-1;break a}h=a[e+3>>0]|0;if(!(h<<24>>24))h=d[b+72+(d[i>>0]|0)>>0]|0;else h=J$(h,a[i>>0]|0)|0;switch(h|0){case 27:{h=P$(b,e+4|0,f,g)|0;break a}case 20:{h=Q$(e+4|0,f,g)|0;break a}default:{c[g>>2]=i;h=0;break a}}}case 15:{h=R$(b,e+2|0,f,g)|0;break a}case 17:{h=S$(b,e+2|0,f,g)|0;break a}default:{c[g>>2]=e;h=0;break a}}m=b+72|0;l=0;h=e+2|0;b:while(1){c:while(1){i=o-h|0;if((i|0)<=1){h=-1;break a}j=a[h+1>>0]|0;k=a[h>>0]|0;if(!(j<<24>>24))e=d[m+(k&255)>>0]|0;else e=J$(j,k)|0;switch(e|0){case 5:{n=34;break b}case 6:{n=35;break b}case 7:{n=37;break b}case 10:case 9:case 21:{n=55;break b}case 11:{n=69;break b}case 17:break b;case 23:break c;case 29:{e=k&255;if(!(1<<(e&31)&c[56940+((e>>>5|d[144044+(j&255)>>0]<<3)<<2)>>2])){n=32;break b}break}case 27:case 26:case 25:case 24:case 22:break;default:{n=75;break b}}h=h+2|0}if(l|0){n=40;break}k=h+2|0;e=o-k|0;if((e|0)<=1){h=-1;break a}l=a[h+3>>0]|0;i=a[k>>0]|0;if(!(l<<24>>24))j=d[m+(i&255)>>0]|0;else j=J$(l,i)|0;switch(j|0){case 5:{n=49;break b}case 6:{n=50;break b}case 7:{n=52;break b}case 29:{e=i&255;if(!(1<<(e&31)&c[56940+((e>>>5|d[143788+(l&255)>>0]<<3)<<2)>>2])){n=47;break b}break}case 24:case 22:break;default:{n=54;break b}}l=1;h=h+4|0}d:switch(n|0){case 32:{c[g>>2]=h;h=0;break a}case 34:{c[g>>2]=h;h=0;break a}case 35:{if((i|0)<3){h=-2;break a}c[g>>2]=h;h=0;break a}case 37:{if((i|0)<4){h=-2;break a}c[g>>2]=h;h=0;break a}case 40:{c[g>>2]=h;h=0;break a}case 47:{c[g>>2]=k;h=0;break a}case 49:{c[g>>2]=k;h=0;break a}case 50:{if((e|0)<3){h=-2;break a}c[g>>2]=k;h=0;break a}case 52:{if((e|0)<4){h=-2;break a}c[g>>2]=k;h=0;break a}case 54:{c[g>>2]=k;h=0;break a}case 55:{e:while(1){n=0;i=h+2|0;j=o-i|0;if((j|0)<=1){h=-1;break a}k=a[h+3>>0]|0;e=a[i>>0]|0;if(!(k<<24>>24))l=d[m+(e&255)>>0]|0;else l=J$(k,e)|0;switch(l|0){case 11:{h=i;n=69;break d}case 17:{h=i;break d}case 10:case 9:case 21:{h=i;n=55;break}case 29:{n=60;break e}case 24:case 22:break e;case 5:{n=63;break e}case 6:{n=64;break e}case 7:{n=66;break e}default:{n=68;break e}}}if((n|0)==60){o=e&255;if(!(1<<(o&31)&c[56940+((o>>>5|d[143788+(k&255)>>0]<<3)<<2)>>2])){c[g>>2]=i;h=0;break a}}else if((n|0)==63){c[g>>2]=i;h=0;break a}else if((n|0)==64){if((j|0)<3){h=-2;break a}c[g>>2]=i;h=0;break a}else if((n|0)==66){if((j|0)<4){h=-2;break a}c[g>>2]=i;h=0;break a}else if((n|0)==68){c[g>>2]=i;h=0;break a}h=T$(b,h+4|0,f,g)|0;break a}case 75:{c[g>>2]=h;h=0;break a}}if((n|0)==69){c[g>>2]=h+2;h=2;break}i=h+2|0;if((o-i|0)>1){if((a[h+3>>0]|0)==0?(a[i>>0]|0)==62:0){c[g>>2]=h+4;h=4;break}c[g>>2]=i;h=0}else h=-1}else h=-1;while(0);return h|0}function P$(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;j=f;a:do if((j-e|0)>1){if((a[e+1>>0]|0)==0?(a[e>>0]|0)==45:0){i=b+72|0;h=e+2|0;b:while(1){e=j-h|0;if((e|0)<=1){f=-1;break a}f=a[h+1>>0]|0;b=a[h>>0]|0;if(!(f<<24>>24))f=d[i+(b&255)>>0]|0;else f=J$(f,b)|0;switch(f|0){case 8:case 1:case 0:{k=16;break b}case 5:{h=h+2|0;continue b}case 6:{if((e|0)<3){f=-2;break a}h=h+3|0;continue b}case 7:{if((e|0)<4){f=-2;break a}h=h+4|0;continue b}case 27:{f=h+2|0;if((j-f|0)<=1){f=-1;break a}if(a[h+3>>0]|0){h=f;continue b}if((a[f>>0]|0)==45)break b;else{h=f;continue b}}default:{h=h+2|0;continue b}}}if((k|0)==16){c[g>>2]=h;f=0;break}f=h+4|0;if((j-f|0)<=1){f=-1;break}if((a[h+5>>0]|0)==0?(a[f>>0]|0)==62:0){c[g>>2]=h+6;f=13;break}c[g>>2]=f;f=0;break}c[g>>2]=e;f=0}else f=-1;while(0);return f|0}function Q$(b,d,e){b=b|0;d=d|0;e=e|0;if((d-b|0)>11){d=0;while(1){if((d|0)>=6){d=8;break}if(a[b+1>>0]|0){d=0;break}if((a[b>>0]|0)!=(a[144300+d>>0]|0)){d=0;break}d=d+1|0;b=b+2|0}c[e>>2]=b}else d=-1;return d|0}function R$(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;q=l;l=l+16|0;p=q;o=f;j=o-e|0;a:do if((j|0)>1){f=a[e+1>>0]|0;if(!(f<<24>>24)){i=a[e>>0]|0;h=d[b+72+(i&255)>>0]|0}else{i=a[e>>0]|0;h=J$(f,i)|0}switch(h|0){case 29:{m=i&255;if(!(1<<(m&31)&c[56940+((m>>>5|d[143788+(f&255)>>0]<<3)<<2)>>2])){c[g>>2]=e;f=0;break a}break}case 24:case 22:break;case 5:{c[g>>2]=e;f=0;break a}case 6:{if((j|0)<3){f=-2;break a}c[g>>2]=e;f=0;break a}case 7:{if((j|0)<4){f=-2;break a}c[g>>2]=e;f=0;break a}default:{c[g>>2]=e;f=0;break a}}m=b+72|0;k=e;b:while(1){f=k+2|0;h=o-f|0;if((h|0)<=1){f=-1;break a}i=a[k+3>>0]|0;j=a[f>>0]|0;if(!(i<<24>>24))b=d[m+(j&255)>>0]|0;else b=J$(i,j)|0;switch(b|0){case 27:case 26:case 25:case 24:case 22:{k=f;continue b}case 5:{n=22;break b}case 6:{n=23;break b}case 7:{n=25;break b}case 10:case 9:case 21:{n=27;break b}case 15:{n=46;break b}case 29:break;default:break b}k=j&255;if(!(1<<(k&31)&c[56940+((k>>>5|d[144044+(i&255)>>0]<<3)<<2)>>2])){n=21;break}else k=f}if((n|0)==21){c[g>>2]=f;f=0;break}else if((n|0)==22){c[g>>2]=f;f=0;break}else if((n|0)==23){if((h|0)<3){f=-2;break}c[g>>2]=f;f=0;break}else if((n|0)==25){if((h|0)<4){f=-2;break}c[g>>2]=f;f=0;break}else if((n|0)==27){if(!(U$(e,f,p)|0)){c[g>>2]=f;f=0;break}j=k+4|0;c:while(1){i=o-j|0;if((i|0)<=1){f=-1;break a}f=a[j+1>>0]|0;h=a[j>>0]|0;if(!(f<<24>>24))f=d[m+(h&255)>>0]|0;else f=J$(f,h)|0;switch(f|0){case 8:case 1:case 0:{n=40;break c}case 5:{j=j+2|0;continue c}case 6:{if((i|0)<3){f=-2;break a}j=j+3|0;continue c}case 7:{if((i|0)<4){f=-2;break a}j=j+4|0;continue c}case 15:{f=j+2|0;if((o-f|0)<=1){f=-1;break a}if(a[j+3>>0]|0){j=f;continue c}if((a[f>>0]|0)==62){n=44;break c}else{j=f;continue c}}default:{j=j+2|0;continue c}}}if((n|0)==40){c[g>>2]=j;f=0;break}else if((n|0)==44){c[g>>2]=j+4;f=c[p>>2]|0;break}}else if((n|0)==46){if(!(U$(e,f,p)|0)){c[g>>2]=f;f=0;break}f=k+4|0;if((o-f|0)<=1){f=-1;break}if((a[k+5>>0]|0)==0?(a[f>>0]|0)==62:0){c[g>>2]=k+6;f=c[p>>2]|0;break}}c[g>>2]=f;f=0}else f=-1;while(0);l=q;return f|0}function S$(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0;j=f-e|0;a:do if((j|0)>1){k=a[e+1>>0]|0;if(!(k<<24>>24)){i=a[e>>0]|0;h=d[b+72+(i&255)>>0]|0}else{i=a[e>>0]|0;h=J$(k,i)|0}switch(h|0){case 29:{l=i&255;if(!(1<<(l&31)&c[56940+((l>>>5|(d[143788+(k&255)>>0]|0)<<3)<<2)>>2])){c[g>>2]=e;f=0;break a}break}case 24:case 22:break;case 5:{c[g>>2]=e;f=0;break a}case 6:{if((j|0)<3){f=-2;break a}c[g>>2]=e;f=0;break a}case 7:{if((j|0)<4){f=-2;break a}c[g>>2]=e;f=0;break a}default:{c[g>>2]=e;f=0;break a}}l=b+72|0;b=e;b:while(1){j=b+2|0;e=f-j|0;if((e|0)<=1){f=-1;break a}h=a[b+3>>0]|0;i=a[j>>0]|0;if(!(h<<24>>24))k=d[l+(i&255)>>0]|0;else k=J$(h,i)|0;switch(k|0){case 23:case 27:case 26:case 25:case 24:case 22:{b=j;continue b}case 5:{h=22;break b}case 6:{h=23;break b}case 7:{h=25;break b}case 10:case 9:case 21:{h=27;break b}case 11:{h=34;break b}case 29:break;default:{h=35;break b}}e=i&255;if(!(1<<(e&31)&c[56940+((e>>>5|(d[144044+(h&255)>>0]|0)<<3)<<2)>>2])){h=21;break}else b=j}if((h|0)==21){c[g>>2]=j;f=0;break}else if((h|0)==22){c[g>>2]=j;f=0;break}else if((h|0)==23){if((e|0)<3){f=-2;break}c[g>>2]=j;f=0;break}else if((h|0)==25){if((e|0)<4){f=-2;break}c[g>>2]=j;f=0;break}else if((h|0)==27){c:while(1){k=j+2|0;if((f-k|0)<=1){f=-1;break a}h=a[j+3>>0]|0;i=a[k>>0]|0;if(!(h<<24>>24))h=d[l+(i&255)>>0]|0;else h=J$(h,i)|0;switch(h|0){case 10:case 9:case 21:{j=k;h=27;break}case 11:{h=32;break c}default:{h=33;break c}}}if((h|0)==32){c[g>>2]=j+4;f=5;break}else if((h|0)==33){c[g>>2]=k;f=0;break}}else if((h|0)==34){c[g>>2]=b+4;f=5;break}else if((h|0)==35){c[g>>2]=j;f=0;break}}else f=-1;while(0);return f|0}function T$(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=l;l=l+16|0;q=s;c[q>>2]=e;r=f;o=b+72|0;h=0;a:while(1){b:while(1){m=r-e|0;if((m|0)<=1){e=-1;break a}i=a[e+1>>0]|0;j=a[e>>0]|0;if(!(i<<24>>24))k=d[o+(j&255)>>0]|0;else k=J$(i,j)|0;switch(k|0){case 5:{p=11;break a}case 6:{p=12;break a}case 7:{p=14;break a}case 23:{p=16;break b}case 10:case 9:case 21:{p=31;break b}case 14:{p=37;break b}case 29:{n=j&255;if(!(1<<(n&31)&c[56940+((n>>>5|d[144044+(i&255)>>0]<<3)<<2)>>2])){p=9;break a}break}case 27:case 26:case 25:case 24:case 22:break;default:{p=89;break a}}n=e+2|0;c[q>>2]=n;e=n}c:do if((p|0)==16){p=0;if(h|0){p=17;break a}h=e+2|0;c[q>>2]=h;i=h;j=r-i|0;if((j|0)<=1){e=-1;break a}k=a[e+3>>0]|0;m=a[h>>0]|0;if(!(k<<24>>24))n=d[o+(m&255)>>0]|0;else n=J$(k,m)|0;switch(n|0){case 5:{p=25;break a}case 6:{p=26;break a}case 7:{p=28;break a}case 24:case 22:{h=1;break c}case 29:break;default:{p=30;break a}}n=m&255;if(!(1<<(n&31)&c[56940+((n>>>5|d[143788+(k&255)>>0]<<3)<<2)>>2])){p=24;break a}else h=1}else if((p|0)==31)while(1){p=0;i=e+2|0;c[q>>2]=i;j=i;if((r-j|0)<=1){e=-1;break a}e=a[e+3>>0]|0;h=a[i>>0]|0;if(!(e<<24>>24))e=d[o+(h&255)>>0]|0;else e=J$(e,h)|0;switch(e|0){case 14:{e=i;p=37;break c}case 9:case 10:case 21:{e=i;p=31;break}default:{p=36;break a}}}while(0);d:do if((p|0)==37){while(1){p=0;j=e+2|0;c[q>>2]=j;k=j;if((r-k|0)<=1){e=-1;break a}h=a[e+3>>0]|0;i=a[j>>0]|0;if(!(h<<24>>24))m=d[o+(i&255)>>0]|0;else m=J$(h,i)|0;if((m|1|0)==13)break;switch(m|0){case 9:case 10:case 21:{e=j;p=37;break}default:{p=43;break a}}}e=e+4|0;c[q>>2]=e;e:while(1){j=r-e|0;if((j|0)<=1){e=-1;break a}h=a[e+1>>0]|0;i=a[e>>0]|0;if(!(h<<24>>24))h=d[o+(i&255)>>0]|0;else h=J$(h,i)|0;if((h|0)==(m|0))break;switch(h|0){case 8:case 1:case 0:{p=56;break a}case 2:{p=61;break a}case 5:{n=e+2|0;c[q>>2]=n;e=n;continue e}case 6:{if((j|0)<3){e=-2;break a}n=e+3|0;c[q>>2]=n;e=n;continue e}case 7:{if((j|0)<4){e=-2;break a}n=e+4|0;c[q>>2]=n;e=n;continue e}case 3:{e=K$(b,e+2|0,f,q)|0;if((e|0)<1){p=59;break a}e=c[q>>2]|0;continue e}default:{n=e+2|0;c[q>>2]=n;e=n;continue e}}}i=e+2|0;c[q>>2]=i;k=i;if((r-k|0)<=1){e=-1;break a}h=a[e+3>>0]|0;j=a[i>>0]|0;if(!(h<<24>>24))h=d[o+(j&255)>>0]|0;else h=J$(h,j)|0;switch(h|0){case 11:{p=81;break a}case 17:{p=82;break a}case 10:case 9:case 21:{e=i;break}default:{p=68;break a}}f:while(1){i=e+2|0;c[q>>2]=i;h=i;j=r-h|0;if((j|0)<=1){e=-1;break a}k=a[e+3>>0]|0;m=a[i>>0]|0;if(!(k<<24>>24))n=d[o+(m&255)>>0]|0;else n=J$(k,m)|0;switch(n|0){case 5:{p=76;break a}case 6:{p=77;break a}case 7:{p=79;break a}case 11:{p=81;break a}case 17:{p=82;break a}case 24:case 22:{h=0;break d}case 10:case 9:case 21:{e=i;break}case 29:break f;default:{p=87;break a}}}n=m&255;if(!(1<<(n&31)&c[56940+((n>>>5|d[143788+(k&255)>>0]<<3)<<2)>>2])){p=75;break a}else h=0}while(0);e=e+4|0;c[q>>2]=e}switch(p|0){case 9:{c[g>>2]=e;e=0;break}case 11:{c[g>>2]=e;e=0;break}case 12:{if((m|0)<3)e=-2;else{c[g>>2]=e;e=0}break}case 14:{if((m|0)<4)e=-2;else{c[g>>2]=e;e=0}break}case 17:{c[g>>2]=e;e=0;break}case 24:{c[g>>2]=h;e=0;break}case 25:{c[g>>2]=h;e=0;break}case 26:{if((j|0)<3)e=-2;else{c[g>>2]=h;e=0}break}case 28:{if((j|0)<4)e=-2;else{c[g>>2]=h;e=0}break}case 30:{c[g>>2]=i;e=0;break}case 36:{c[g>>2]=j;e=0;break}case 43:{c[g>>2]=k;e=0;break}case 56:{c[g>>2]=e;e=0;break}case 59:{if(!e){c[g>>2]=c[q>>2];e=0}break}case 61:{c[g>>2]=e;e=0;break}case 68:{c[g>>2]=k;e=0;break}case 75:{c[g>>2]=i;e=0;break}case 76:{c[g>>2]=i;e=0;break}case 77:{if((j|0)<3)e=-2;else{c[g>>2]=i;e=0}break}case 79:{if((j|0)<4)e=-2;else{c[g>>2]=i;e=0}break}case 81:{c[g>>2]=e+4;e=1;break}case 82:{h=i+2|0;c[q>>2]=h;e=h;if((r-e|0)>1){if((a[i+3>>0]|0)==0?(a[h>>0]|0)==62:0){c[g>>2]=i+4;e=3;break}c[g>>2]=e;e=0}else e=-1;break}case 87:{c[g>>2]=h;e=0;break}case 89:{c[g>>2]=e;e=0;break}}l=s;return e|0}function U$(b,d,e){b=b|0;d=d|0;e=e|0;c[e>>2]=11;a:do if((d-b|0)==6?(a[b+1>>0]|0)==0:0){switch(a[b>>0]|0){case 120:{d=0;break}case 88:{d=1;break}default:{d=1;break a}}if(!(a[b+3>>0]|0)){switch(a[b+2>>0]|0){case 109:break;case 77:{d=1;break}default:{d=1;break a}}if(!(a[b+5>>0]|0)){switch(a[b+4>>0]|0){case 108:break;case 76:{d=0;break a}default:{d=1;break a}}if(!d){c[e>>2]=12;d=1}else d=0}else d=1}else d=1}else d=1;while(0);return d|0}function V$(b,e,f,g,h){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0;k=e+72|0;a:while(1){b:while(1){j=g-f|0;if((j|0)<=1){f=-1;break a}e=a[f+1>>0]|0;i=a[f>>0]|0;if(!(e<<24>>24))e=d[k+(i&255)>>0]|0;else e=J$(e,i)|0;switch(e|0){case 8:case 1:case 0:{l=10;break a}case 6:{l=9;break b}case 7:{l=19;break b}case 5:{f=f+2|0;continue b}case 13:case 12:{i=f+2|0;if((e|0)==(b|0)){l=12;break a}else{f=i;continue b}}default:{f=f+2|0;continue b}}}if((l|0)==9){l=0;if((j|0)<3){f=-2;break}else{f=f+3|0;continue}}else if((l|0)==19){l=0;if((j|0)<4){f=-2;break}else{f=f+4|0;continue}}}c:do if((l|0)==10){c[h>>2]=f;f=0}else if((l|0)==12)if((g-i|0)>1){c[h>>2]=i;g=a[f+3>>0]|0;f=a[i>>0]|0;if(!(g<<24>>24))f=d[k+(f&255)>>0]|0;else f=J$(g,f)|0;switch(f|0){case 20:case 30:case 11:case 10:case 9:case 21:{f=27;break c}default:{}}f=0}else f=-27;while(0);return f|0}function W$(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0;k=f;a:do if((k-e|0)>1){h=a[e+1>>0]|0;if(!(h<<24>>24))h=d[b+72+(d[e>>0]|0)>>0]|0;else h=J$(h,a[e>>0]|0)|0;switch(h|0){case 27:{h=P$(b,e+2|0,f,g)|0;break a}case 20:{c[g>>2]=e+2;h=33;break a}case 24:case 22:{j=b+72|0;b:while(1){i=e+2|0;f=k-i|0;if((f|0)<=1){h=-1;break a}h=a[e+3>>0]|0;b=a[i>>0]|0;if(!(h<<24>>24))h=d[j+(b&255)>>0]|0;else h=J$(h,b)|0;switch(h|0){case 24:case 22:{e=i;break}case 30:{l=15;break b}case 10:case 9:case 21:break b;default:{l=22;break b}}}if((l|0)==22){c[g>>2]=i;h=0;break a}c:do if((l|0)==15){if((f|0)<=3){h=-1;break a}b=a[e+5>>0]|0;h=a[e+4>>0]|0;if(!(b<<24>>24))h=d[j+(h&255)>>0]|0;else h=J$(b,h)|0;switch(h|0){case 30:case 10:case 9:case 21:break;default:break c}c[g>>2]=i;h=0;break a}while(0);c[g>>2]=i;h=16;break a}default:{c[g>>2]=e;h=0;break a}}}else h=-1;while(0);return h|0}function X$(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;j=f-e|0;a:do if((j|0)>1){k=a[e+1>>0]|0;if(!(k<<24>>24)){i=a[e>>0]|0;h=d[b+72+(i&255)>>0]|0}else{i=a[e>>0]|0;h=J$(k,i)|0}switch(h|0){case 29:{j=i&255;if(!(1<<(j&31)&c[56940+((j>>>5|(d[143788+(k&255)>>0]|0)<<3)<<2)>>2])){c[g>>2]=e;f=0;break a}break}case 24:case 22:break;case 5:{c[g>>2]=e;f=0;break a}case 6:{if((j|0)<3){f=-2;break a}c[g>>2]=e;f=0;break a}case 7:{if((j|0)<4){f=-2;break a}c[g>>2]=e;f=0;break a}default:{c[g>>2]=e;f=0;break a}}b=b+72|0;k=e;b:while(1){h=k;k=k+2|0;e=f-k|0;if((e|0)<=1){f=-20;break a}h=a[h+3>>0]|0;i=a[k>>0]|0;if(!(h<<24>>24))j=d[b+(i&255)>>0]|0;else j=J$(h,i)|0;switch(j|0){case 27:case 26:case 25:case 24:case 22:continue b;case 5:{h=22;break b}case 6:{h=23;break b}case 7:{h=25;break b}case 36:case 30:case 11:case 32:case 21:case 10:case 9:{h=27;break b}case 29:break;default:{h=28;break b}}e=i&255;if(!(1<<(e&31)&c[56940+((e>>>5|(d[144044+(h&255)>>0]|0)<<3)<<2)>>2])){h=21;break}}if((h|0)==21){c[g>>2]=k;f=0;break}else if((h|0)==22){c[g>>2]=k;f=0;break}else if((h|0)==23){if((e|0)<3){f=-2;break}c[g>>2]=k;f=0;break}else if((h|0)==25){if((e|0)<4){f=-2;break}c[g>>2]=k;f=0;break}else if((h|0)==27){c[g>>2]=k;f=20;break}else if((h|0)==28){c[g>>2]=k;f=0;break}}else f=-1;while(0);return f|0}function Y$(b,d,e){b=b|0;d=d|0;e=e|0;e=Z$(e)|0;if((e|0)==-1)e=0;else{a[b+69>>0]=e;c[b>>2]=67;c[b+4>>2]=68;c[b+48>>2]=31;c[b+72>>2]=d;c[d>>2]=b;e=1}return e|0}function Z$(a){a=a|0;var b=0;a:do if(!a)b=6;else{b=0;while(1){if((b|0)>=6){b=-1;break a}if(H0(a,c[60068+(b<<2)>>2]|0)|0)break a;b=b+1|0}}while(0);return b|0}function _$(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return b0(58948,a,0,b,c,d)|0}function $$(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return b0(58948,a,1,b,c,d)|0}function a0(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;S_(58584,b,c,d);return}function b0(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0;a:do if(f>>>0>>0){l=c[d+72>>2]|0;i=f+1|0;b:do if((i|0)==(g|0)){i=a[d+69>>0]|0;if(((i<<24>>24)+-3|0)>>>0<3){i=-1;break a}switch(a[f>>0]|0){case 60:case 0:{i=-1;break a}case -17:case -1:case -2:break;default:break b}if(!((e|0)==1&i<<24>>24==0)){i=-1;break a}}else{k=a[f>>0]|0;i=a[i>>0]|0;j=((k&255)<<8|i&255)&65535;c:do if(j<<16>>16<-2){if(j<<16>>16>=-257){switch(j<<16>>16){case -257:break;default:break c}if((e|0)==1&(a[d+69>>0]|0)==0)break b;c[h>>2]=f+2;c[l>>2]=c[b+16>>2];i=14;break a}switch(j<<16>>16){case -4165:break;default:break c}if((e|0)==1)switch(a[d+69>>0]|0){case 0:case 3:case 4:case 5:break b;default:{}}i=f+2|0;if((i|0)==(g|0)){i=-1;break a}if((a[i>>0]|0)!=-65)break b;c[h>>2]=f+3;c[l>>2]=c[b+8>>2];i=14;break a}else{if(j<<16>>16<15360){switch(j<<16>>16){case -2:break;default:break c}if((e|0)==1&(a[d+69>>0]|0)==0)break b;c[h>>2]=f+2;c[l>>2]=c[b+20>>2];i=14;break a}switch(j<<16>>16){case 15360:break;default:break c}i=a[d+69>>0]|0;if(i<<24>>24==4){if((e|0)==1)break b}else if((e|0)==1&i<<24>>24==3)break b;i=c[b+20>>2]|0;c[l>>2]=i;i=ob[c[i+(e<<2)>>2]&127](i,f,g,h)|0;break a}while(0);if(k<<24>>24){if((e|0)==1|i<<24>>24!=0)break;i=c[b+20>>2]|0;c[l>>2]=i;i=ob[c[i+(e<<2)>>2]&127](i,f,g,h)|0;break a}if((e|0)==1?(a[d+69>>0]|0)==5:0)break;i=c[b+16>>2]|0;c[l>>2]=i;i=ob[c[i+(e<<2)>>2]&127](i,f,g,h)|0;break a}while(0);i=c[b+(a[d+69>>0]<<2)>>2]|0;c[l>>2]=i;i=ob[c[i+(e<<2)>>2]&127](i,f,g,h)|0}else i=-4;while(0);return i|0}function c0(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0;a:do if(e>>>0>>0){i=e;m=f-i|0;k=(m&1|0)==0;m=m&-2;l=(m|0)==0;m=k|l?f:e+m|0;if(k|l^1){f=a[e>>0]|0;if(!(f<<24>>24)){h=a[e+1>>0]|0;j=h;h=d[b+72+(h&255)>>0]|0}else{h=a[e+1>>0]|0;j=h;h=J$(f,h)|0}do switch(h|0){case 12:{f=D0(12,b,e+2|0,m,g)|0;break a}case 13:{f=D0(13,b,e+2|0,m,g)|0;break a}case 2:{h=e+2|0;if((m-h|0)<=1){f=-1;break a}f=a[h>>0]|0;if(!(f<<24>>24))f=d[b+72+(d[e+3>>0]|0)>>0]|0;else f=J$(f,a[e+3>>0]|0)|0;switch(f|0){case 16:{f=E0(b,e+4|0,m,g)|0;break a}case 15:{f=z0(b,e+4|0,m,g)|0;break a}case 7:case 6:case 5:case 29:case 24:case 22:{c[g>>2]=e;f=29;break a}default:{c[g>>2]=h;f=0;break a}}}case 9:{if((e+2|0)==(m|0)){c[g>>2]=m;f=-15;break a}else i=7;break}case 10:case 21:{i=7;break}case 30:{f=t0(b,e+2|0,m,g)|0;break a}case 35:{c[g>>2]=e+2;f=38;break a}case 20:{c[g>>2]=e+2;f=25;break a}case 4:{h=e+2|0;f=m-h|0;if((f|0)<=1){f=-26;break a}if((a[h>>0]|0)==0?(a[e+3>>0]|0)==93:0){if((f|0)<=3){f=-1;break a}if((a[e+4>>0]|0)==0?(a[e+5>>0]|0)==62:0){c[g>>2]=e+6;f=34;break a}}c[g>>2]=h;f=26;break a}case 31:{c[g>>2]=e+2;f=23;break a}case 32:{h=e+2|0;if((m-h|0)<=1){f=-24;break a}f=a[h>>0]|0;if(!(f<<24>>24))f=d[b+72+(d[e+3>>0]|0)>>0]|0;else f=J$(f,a[e+3>>0]|0)|0;switch(f|0){case 33:{c[g>>2]=e+4;f=36;break a}case 15:{c[g>>2]=e+4;f=35;break a}case 34:{c[g>>2]=e+4;f=37;break a}case 32:case 36:case 35:case 11:case 21:case 10:case 9:{c[g>>2]=h;f=24;break a}default:{c[g>>2]=h;f=0;break a}}}case 36:{c[g>>2]=e+2;f=21;break a}case 11:{c[g>>2]=e+2;f=17;break a}case 19:{f=F0(b,e+2|0,m,g)|0;break a}case 5:{if((m-i|0)<2){f=-2;break a}c[g>>2]=e;f=0;break a}case 6:{if((m-i|0)<3){f=-2;break a}c[g>>2]=e;f=0;break a}case 7:{if((m-i|0)<4){f=-2;break a}c[g>>2]=e;f=0;break a}case 24:case 22:{f=18;i=61;break}case 23:case 27:case 26:case 25:{f=19;i=61;break}case 29:{i=f&255;h=j&255;f=h>>>5;h=1<<(h&31);if(!(h&c[56940+((f|d[143788+i>>0]<<3)<<2)>>2]))if(!(c[56940+((d[144044+i>>0]<<3|f)<<2)>>2]&h))i=64;else{f=19;i=61}else{f=18;i=61}break}default:i=64}while(0);if((i|0)==7){k=m;b=b+72|0;j=e;b:while(1){i=j;j=j+2|0;if((k-j|0)<=1){i=28;break}f=a[j>>0]|0;h=a[i+3>>0]|0;if(!(f<<24>>24))f=d[b+(h&255)>>0]|0;else f=J$(f,h)|0;switch(f|0){case 10:case 21:continue b;case 9:break;default:{i=27;break b}}if((i+4|0)==(m|0)){i=27;break}}if((i|0)==27){c[g>>2]=j;f=15;break}else if((i|0)==28){c[g>>2]=j;f=15;break}}else if((i|0)==61){l=b+72|0;h=e+2|0;c:while(1){e=f&255;d:while(1){k=m-h|0;if((k|0)<=1){i=104;break c}i=a[h>>0]|0;j=a[h+1>>0]|0;if(!(i<<24>>24))b=d[l+(j&255)>>0]|0;else b=J$(i,j)|0;switch(b|0){case 5:{i=73;break c}case 6:{i=74;break c}case 7:{i=76;break c}case 10:case 9:case 21:case 30:case 20:case 36:case 35:case 32:case 11:{i=78;break c}case 34:{i=94;break c}case 33:{i=97;break c}case 15:{i=100;break c}case 29:{k=j&255;if(!(1<<(k&31)&c[56940+((k>>>5|d[144044+(i&255)>>0]<<3)<<2)>>2])){i=71;break c}break}case 27:case 26:case 25:case 24:case 22:break;case 23:{k=h+2|0;switch(e&63){case 41:{f=19;h=k;continue c}case 18:break d;default:{h=k;continue d}}}default:{i=103;break c}}h=h+2|0}b=m-k|0;if((b|0)<=1){f=-1;break a}f=a[k>>0]|0;i=a[h+3>>0]|0;if(!(f<<24>>24))j=d[l+(i&255)>>0]|0;else j=J$(f,i)|0;switch(j|0){case 5:{i=89;break c}case 6:{i=90;break c}case 7:{i=92;break c}case 29:{e=i&255;if(!(1<<(e&31)&c[56940+((e>>>5|d[144044+(f&255)>>0]<<3)<<2)>>2])){i=87;break c}break}case 27:case 26:case 25:case 24:case 22:break;default:{f=19;h=k;continue c}}f=41;h=h+4|0}switch(i|0){case 71:{c[g>>2]=h;f=0;break a}case 73:{c[g>>2]=h;f=0;break a}case 74:{if((k|0)<3){f=-2;break a}c[g>>2]=h;f=0;break a}case 76:{if((k|0)<4){f=-2;break a}c[g>>2]=h;f=0;break a}case 78:{c[g>>2]=h;break a}case 87:{c[g>>2]=k;f=0;break a}case 89:{c[g>>2]=k;f=0;break a}case 90:{if((b|0)<3){f=-2;break a}c[g>>2]=k;f=0;break a}case 92:{if((b|0)<4){f=-2;break a}c[g>>2]=k;f=0;break a}case 94:if((f|0)==19){c[g>>2]=h;f=0;break a}else{c[g>>2]=h+2;f=32;break a}case 97:if((f|0)==19){c[g>>2]=h;f=0;break a}else{c[g>>2]=h+2;f=31;break a}case 100:if((f|0)==19){c[g>>2]=h;f=0;break a}else{c[g>>2]=h+2;f=30;break a}case 103:{c[g>>2]=h;f=0;break a}case 104:{f=0-f|0;break a}}}else if((i|0)==64){c[g>>2]=e;f=0;break}}else f=-1}else f=-4;while(0);return f|0}function d0(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;a:do if(e>>>0>>0){h=e;i=f-h|0;k=(i&1|0)==0;i=i&-2;j=(i|0)==0;i=k|j?f:e+i|0;if(k|j^1){f=a[e>>0]|0;if(!(f<<24>>24))f=d[b+72+(d[e+1>>0]|0)>>0]|0;else f=J$(f,a[e+1>>0]|0)|0;do switch(f|0){case 2:{f=w0(b,e+2|0,i,g)|0;break a}case 3:{f=s0(b,e+2|0,i,g)|0;break a}case 9:{h=e+2|0;if((i-h|0)<=1){f=-3;break a}f=a[h>>0]|0;if(!(f<<24>>24))f=d[b+72+(d[e+3>>0]|0)>>0]|0;else f=J$(f,a[e+3>>0]|0)|0;c[g>>2]=(f|0)==10?e+4|0:h;f=7;break a}case 10:{c[g>>2]=e+2;f=7;break a}case 4:{h=e+2|0;if((i-h|0)<=1){f=-5;break a}if((a[h>>0]|0)==0?(a[e+3>>0]|0)==93:0){f=e+4|0;if((i-f|0)<=1){f=-5;break a}if((a[f>>0]|0)==0?(a[e+5>>0]|0)==62:0){c[g>>2]=f;f=0;break a}else f=i}else f=i;break}case 5:{f=i;if((f-h|0)<2){f=-2;break a}h=e+2|0;break}case 6:{f=i;if((f-h|0)<3){f=-2;break a}h=e+3|0;break}case 7:{f=i;if((f-h|0)<4){f=-2;break a}h=e+4|0;break}case 8:case 1:case 0:{c[g>>2]=e;f=0;break a}default:{h=e+2|0;f=i}}while(0);j=b+72|0;b=h;b:while(1){e=f-b|0;if((e|0)<=1){h=52;break}h=a[b>>0]|0;i=a[b+1>>0]|0;if(!(h<<24>>24))h=d[j+(i&255)>>0]|0;else h=J$(h,i)|0;switch(h|0){case 10:case 9:case 8:case 1:case 0:case 2:case 3:{h=50;break b}case 5:{b=b+2|0;continue b}case 6:{if((e|0)<3){h=38;break b}b=b+3|0;continue b}case 7:{if((e|0)<4){h=41;break b}b=b+4|0;continue b}case 4:{if((e|0)<=3){h=50;break b}h=b+2|0;if(a[h>>0]|0){b=h;continue b}if((a[b+3>>0]|0)!=93){b=h;continue b}if((e|0)<=5){h=50;break b}i=b+4|0;if(a[i>>0]|0){b=h;continue b}if((a[b+5>>0]|0)==62){h=49;break b}else{b=h;continue b}}default:{b=b+2|0;continue b}}}if((h|0)==38){c[g>>2]=b;f=6;break}else if((h|0)==41){c[g>>2]=b;f=6;break}else if((h|0)==49){c[g>>2]=i;f=0;break}else if((h|0)==50){c[g>>2]=b;f=6;break}else if((h|0)==52){c[g>>2]=b;f=6;break}}else f=-1}else f=-4;while(0);return f|0}function e0(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;a:do if(e>>>0>>0){h=e;i=f-h|0;k=(i&1|0)==0;i=i&-2;j=(i|0)==0;i=k|j?f:e+i|0;if(k|j^1){f=a[e>>0]|0;if(!(f<<24>>24))f=d[b+72+(d[e+1>>0]|0)>>0]|0;else f=J$(f,a[e+1>>0]|0)|0;switch(f|0){case 4:{h=e+2|0;if((i-h|0)<=1){f=-1;break a}if((a[h>>0]|0)==0?(a[e+3>>0]|0)==93:0){f=e+4|0;if((i-f|0)<=1){f=-1;break a}if((a[f>>0]|0)==0?(a[e+5>>0]|0)==62:0){c[g>>2]=e+6;f=40;break a}}break}case 9:{h=e+2|0;if((i-h|0)<=1){f=-1;break a}f=a[h>>0]|0;if(!(f<<24>>24))f=d[b+72+(d[e+3>>0]|0)>>0]|0;else f=J$(f,a[e+3>>0]|0)|0;c[g>>2]=(f|0)==10?e+4|0:h;f=7;break a}case 10:{c[g>>2]=e+2;f=7;break a}case 5:{f=i;if((f-h|0)<2){f=-2;break a}h=e+2|0;i=f;break}case 6:{f=i;if((f-h|0)<3){f=-2;break a}h=e+3|0;i=f;break}case 7:{f=i;if((f-h|0)<4){f=-2;break a}h=e+4|0;i=f;break}case 8:case 1:case 0:{c[g>>2]=e;f=0;break a}default:h=e+2|0}j=b+72|0;b=h;b:while(1){e=i-b|0;if((e|0)<=1){h=40;break}f=a[b>>0]|0;h=a[b+1>>0]|0;if(!(f<<24>>24))f=d[j+(h&255)>>0]|0;else f=J$(f,h)|0;switch(f|0){case 10:case 9:case 8:case 1:case 0:case 4:{h=38;break b}case 6:{if((e|0)<3){h=35;break b}else f=3;break}case 7:{if((e|0)<4){h=37;break b}else f=4;break}default:f=2}b=b+f|0}if((h|0)==35){c[g>>2]=b;f=6;break}else if((h|0)==37){c[g>>2]=b;f=6;break}else if((h|0)==38){c[g>>2]=b;f=6;break}else if((h|0)==40){c[g>>2]=b;f=6;break}}else f=-1}else f=-4;while(0);return f|0}function f0(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0;k=f-e|0;k=(k&1|0)==0?f:e+(k&-2)|0;j=b+72|0;i=0;f=e;a:while(1){h=k-f|0;if((h|0)<=1){f=-1;break}b=a[f>>0]|0;e=a[f+1>>0]|0;if(!(b<<24>>24))b=d[j+(e&255)>>0]|0;else b=J$(b,e)|0;switch(b|0){case 8:case 1:case 0:{l=12;break a}case 5:{h=i;f=f+2|0;i=h;continue a}case 6:{if((h|0)<3){f=-2;break a}h=i;f=f+3|0;i=h;continue a}case 7:{if((h|0)<4){f=-2;break a}h=i;f=f+4|0;i=h;continue a}case 2:{b=f+2|0;if((k-b|0)<=1){f=-1;break a}if(a[b>>0]|0){h=i;f=b;i=h;continue a}if((a[f+3>>0]|0)!=33){h=i;f=b;i=h;continue a}b=f+4|0;if((k-b|0)<=1){f=-1;break a}if(a[b>>0]|0){h=i;f=b;i=h;continue a}h=(a[f+5>>0]|0)==91;i=i+(h&1)|0;f=h?f+6|0:b;continue a}case 4:{b=f+2|0;if((k-b|0)<=1){f=-1;break a}if(a[b>>0]|0){h=i;f=b;i=h;continue a}if((a[f+3>>0]|0)!=93){h=i;f=b;i=h;continue a}b=f+4|0;if((k-b|0)<=1){f=-1;break a}if(a[b>>0]|0){h=i;f=b;i=h;continue a}if((a[f+5>>0]|0)!=62){h=i;f=b;i=h;continue a}f=f+6|0;if(!i){l=26;break a}i=i+-1|0;continue a}default:{h=i;f=f+2|0;i=h;continue a}}}if((l|0)==12){c[g>>2]=f;f=0}else if((l|0)==26){c[g>>2]=f;f=42}return f|0}function g0(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0;do if(e>>>0>>0){k=f;if((k-e|0)>1){l=b+72|0;j=e;a:while(1){if((k-j|0)<=1){i=30;break}h=a[j>>0]|0;i=a[j+1>>0]|0;if(!(h<<24>>24))h=d[l+(i&255)>>0]|0;else h=J$(h,i)|0;switch(h|0){case 3:{i=11;break a}case 2:{i=14;break a}case 10:{i=15;break a}case 9:{i=18;break a}case 21:{i=25;break a}case 5:{h=2;break}case 6:{h=3;break}case 7:{h=4;break}default:h=2}j=j+h|0}if((i|0)==11)if((j|0)==(e|0)){h=s0(b,e+2|0,f,g)|0;break}else{c[g>>2]=j;h=6;break}else if((i|0)==14){c[g>>2]=j;h=0;break}else if((i|0)==15)if((j|0)==(e|0)){c[g>>2]=e+2;h=7;break}else{c[g>>2]=j;h=6;break}else if((i|0)==18){if((j|0)!=(e|0)){c[g>>2]=j;h=6;break}j=e+2|0;if((k-j|0)<=1){h=-3;break}h=a[j>>0]|0;i=a[e+3>>0]|0;if(!(h<<24>>24))h=d[l+(i&255)>>0]|0;else h=J$(h,i)|0;c[g>>2]=(h|0)==10?e+4|0:j;h=7;break}else if((i|0)==25)if((j|0)==(e|0)){c[g>>2]=e+2;h=39;break}else{c[g>>2]=j;h=6;break}else if((i|0)==30){c[g>>2]=j;h=6;break}}else h=-1}else h=-4;while(0);return h|0}function h0(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0;do if(e>>>0>>0){k=f;if((k-e|0)>1){l=b+72|0;j=e;a:while(1){if((k-j|0)<=1){i=29;break}h=a[j>>0]|0;i=a[j+1>>0]|0;if(!(h<<24>>24))h=d[l+(i&255)>>0]|0;else h=J$(h,i)|0;switch(h|0){case 3:{i=11;break a}case 30:{i=14;break a}case 10:{i=17;break a}case 9:{i=20;break a}case 5:{h=2;break}case 6:{h=3;break}case 7:{h=4;break}default:h=2}j=j+h|0}if((i|0)==11)if((j|0)==(e|0)){h=s0(b,e+2|0,f,g)|0;break}else{c[g>>2]=j;h=6;break}else if((i|0)==14)if((j|0)==(e|0)){h=t0(b,e+2|0,f,g)|0;h=(h|0)==22?0:h;break}else{c[g>>2]=j;h=6;break}else if((i|0)==17)if((j|0)==(e|0)){c[g>>2]=e+2;h=7;break}else{c[g>>2]=j;h=6;break}else if((i|0)==20){if((j|0)!=(e|0)){c[g>>2]=j;h=6;break}j=e+2|0;if((k-j|0)<=1){h=-3;break}h=a[j>>0]|0;i=a[e+3>>0]|0;if(!(h<<24>>24))h=d[l+(i&255)>>0]|0;else h=J$(h,i)|0;c[g>>2]=(h|0)==10?e+4|0:j;h=7;break}else if((i|0)==29){c[g>>2]=j;h=6;break}}else h=-1}else h=-4;while(0);return h|0}function i0(b,c,d,e){b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0;f=d;b=c;while(1){c=a[e>>0]|0;if(!(c<<24>>24)){g=7;break}if((f-b|0)<2){b=0;break}if(a[b>>0]|0){b=0;break}if((a[b+1>>0]|0)!=c<<24>>24){b=0;break}e=e+1|0;b=b+2|0}if((g|0)==7)b=(b|0)==(d|0)&1;return b|0}function j0(b,c){b=b|0;c=c|0;var e=0,f=0,g=0;g=b+72|0;f=c;a:while(1){b=a[f>>0]|0;e=a[f+1>>0]|0;if(!(b<<24>>24))b=d[g+(e&255)>>0]|0;else b=J$(b,e)|0;switch(b|0){case 5:{b=2;break}case 6:{b=3;break}case 7:{b=4;break}case 27:case 26:case 25:case 24:case 23:case 22:case 29:{b=2;break}default:break a}f=f+b|0}return f-c|0}function k0(b,c){b=b|0;c=c|0;var e=0,f=0;f=b+72|0;a:while(1){b=a[c>>0]|0;e=a[c+1>>0]|0;if(!(b<<24>>24))b=d[f+(e&255)>>0]|0;else b=J$(b,e)|0;switch(b|0){case 21:case 9:case 10:break;default:break a}c=c+2|0}return c|0}function l0(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;o=b+72|0;m=0;n=0;b=1;a:while(1){l=e+2|0;h=a[l>>0]|0;j=h<<24>>24==0;i=e+3|0;k=a[i>>0]|0;if(j)h=d[o+(k&255)>>0]|0;else h=J$(h,k)|0;do switch(h|0){case 5:{if(b|0){i=b;j=n;k=m;e=l;b=i;n=j;m=k;continue a}if((n|0)>=(f|0)){j=n;k=m;b=1;e=l;n=j;m=k;continue a}c[g+(n<<4)>>2]=l;a[g+(n<<4)+12>>0]=1;j=n;k=m;b=1;e=l;n=j;m=k;continue a}case 6:{if(b|0){j=b;k=n;l=m;e=i;b=j;n=k;m=l;continue a}if((n|0)>=(f|0)){k=n;l=m;b=1;e=i;n=k;m=l;continue a}c[g+(n<<4)>>2]=l;a[g+(n<<4)+12>>0]=1;k=n;l=m;b=1;e=i;n=k;m=l;continue a}case 7:{if(!b)if((n|0)<(f|0)){c[g+(n<<4)>>2]=l;a[g+(n<<4)+12>>0]=1;b=1}else b=1;k=n;l=m;e=e+4|0;n=k;m=l;continue a}case 24:case 22:case 29:{if(b|0){i=b;j=n;k=m;e=l;b=i;n=j;m=k;continue a}if((n|0)>=(f|0)){j=n;k=m;b=1;e=l;n=j;m=k;continue a}c[g+(n<<4)>>2]=l;a[g+(n<<4)+12>>0]=1;j=n;k=m;b=1;e=l;n=j;m=k;continue a}case 12:{if((b|0)!=2){if((n|0)>=(f|0)){k=n;m=12;b=2;e=l;n=k;continue a}c[g+(n<<4)+4>>2]=e+4;k=n;m=12;b=2;e=l;n=k;continue a}if((m|0)!=12){j=n;k=m;b=2;e=l;n=j;m=k;continue a}if((n|0)<(f|0))c[g+(n<<4)+8>>2]=l;m=12;n=n+1|0;b=0;e=l;continue a}case 13:{if((b|0)!=2){if((n|0)>=(f|0)){k=n;m=13;b=2;e=l;n=k;continue a}c[g+(n<<4)+4>>2]=e+4;k=n;m=13;b=2;e=l;n=k;continue a}if((m|0)!=13){j=n;k=m;b=2;e=l;n=j;m=k;continue a}if((n|0)<(f|0))c[g+(n<<4)+8>>2]=l;m=13;n=n+1|0;b=0;e=l;continue a}case 3:{if((n|0)>=(f|0)){i=b;j=n;k=m;e=l;b=i;n=j;m=k;continue a}a[g+(n<<4)+12>>0]=0;i=b;j=n;k=m;e=l;b=i;n=j;m=k;continue a}case 21:{switch(b|0){case 1:{j=n;k=m;b=0;e=l;n=j;m=k;continue a}case 2:break;default:{i=b;j=n;k=m;e=l;b=i;n=j;m=k;continue a}}if((n|0)>=(f|0)){j=n;k=m;b=2;e=l;n=j;m=k;continue a}i=g+(n<<4)+12|0;if(!(a[i>>0]|0)){j=n;k=m;b=2;e=l;n=j;m=k;continue a}do if(j&(l|0)!=(c[g+(n<<4)+4>>2]|0)&k<<24>>24==32){h=a[e+4>>0]|0;b=a[e+5>>0]|0;if(!(h<<24>>24)){if(b<<24>>24==32)break;b=d[o+(b&255)>>0]|0}else b=J$(h,b)|0;if((b|0)!=(m|0)){j=n;k=m;b=2;e=l;n=j;m=k;continue a}}while(0);a[i>>0]=0;j=n;k=m;b=2;e=l;n=j;m=k;continue a}case 10:case 9:{switch(b|0){case 1:{j=n;k=m;b=0;e=l;n=j;m=k;continue a}case 2:break;default:{i=b;j=n;k=m;e=l;b=i;n=j;m=k;continue a}}if((n|0)>=(f|0)){j=n;k=m;b=2;e=l;n=j;m=k;continue a}a[g+(n<<4)+12>>0]=0;j=n;k=m;b=2;e=l;n=j;m=k;continue a}case 17:case 11:if((b|0)==2){j=n;k=m;b=2;e=l;n=j;m=k;continue a}else break a;default:{i=b;j=n;k=m;e=l;b=i;n=j;m=k;continue a}}while(0)}return n|0}function m0(b,c){b=b|0;c=c|0;var d=0,e=0;b=c+4|0;a:do if(!(a[b>>0]|0))if((a[c+5>>0]|0)==120){c=c+6|0;b=0;while(1){b:while(1){if(!(a[c>>0]|0)){d=a[c+1>>0]|0;if(d<<24>>24==59){e=18;break a}d=d<<24>>24;switch(d|0){case 57:case 56:case 55:case 54:case 53:case 52:case 51:case 50:case 49:case 48:{e=8;break b}case 70:case 69:case 68:case 67:case 66:case 65:{e=9;break b}case 102:case 101:case 100:case 99:case 98:case 97:{e=10;break b}default:{}}}c=c+2|0}if((e|0)==8)b=d+-48|b<<4;else if((e|0)==9)b=(b<<4)+-55+d|0;else if((e|0)==10)b=(b<<4)+-87+d|0;if((b|0)<1114112)c=c+2|0;else{b=-1;e=19;break}}}else{c=b;b=0;e=13}else{d=b;b=0;c=-1;e=16}while(0);while(1)if((e|0)==13){if(a[c>>0]|0){d=c;c=-1;e=16;continue}if((a[c+1>>0]|0)==59){e=18;continue}d=c;c=a[c+1>>0]|0;e=16;continue}else if((e|0)==16){b=(b*10|0)+-48+c|0;if((b|0)>=1114112){b=-1;e=19;continue}c=d+2|0;e=13;continue}else if((e|0)==18){b=A_(b)|0;e=19;continue}else if((e|0)==19)return b|0;return 0}function n0(b,c,d){b=b|0;c=c|0;d=d|0;var e=0;a:do switch((d-c|0)/2|0|0){case 2:{if((a[c+2>>0]|0)==0?(a[c+3>>0]|0)==116:0){if(!(a[c>>0]|0))b=a[c+1>>0]|0;else b=-1;b=(b|0)==108?60:(b|0)==103?62:0}else e=27;break}case 3:{if((((((a[c>>0]|0)==0?(a[c+1>>0]|0)==97:0)?(a[c+2>>0]|0)==0:0)?(a[c+3>>0]|0)==109:0)?(a[c+4>>0]|0)==0:0)?(a[c+5>>0]|0)==112:0)b=38;else e=27;break}case 4:{if(!(a[c>>0]|0))switch(a[c+1>>0]|0){case 113:{if(a[c+2>>0]|0){e=27;break a}if((a[c+3>>0]|0)!=117){e=27;break a}if(a[c+4>>0]|0){e=27;break a}if((a[c+5>>0]|0)!=111){e=27;break a}if(a[c+6>>0]|0){e=27;break a}if((a[c+7>>0]|0)==116){b=34;break a}else{e=27;break a}}case 97:{if(a[c+2>>0]|0){e=27;break a}if((a[c+3>>0]|0)!=112){e=27;break a}if(a[c+4>>0]|0){e=27;break a}if((a[c+5>>0]|0)!=111){e=27;break a}if(a[c+6>>0]|0){e=27;break a}if((a[c+7>>0]|0)==115){b=39;break a}else{e=27;break a}}default:{e=27;break a}}else e=27;break}default:e=27}while(0);if((e|0)==27)b=0;return b|0}function o0(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;j=b+72|0;k=g+4|0;while(1){if((f-e|0)<=1)break;b=a[e>>0]|0;h=a[e+1>>0]|0;if(!(b<<24>>24))b=d[j+(h&255)>>0]|0;else b=J$(b,h)|0;switch(b|0){case 5:{e=e+2|0;break}case 6:{e=e+3|0;break}case 7:{e=e+4|0;break}case 10:{c[k>>2]=-1;c[g>>2]=(c[g>>2]|0)+1;e=e+2|0;break}case 9:{c[g>>2]=(c[g>>2]|0)+1;i=e+2|0;if((f-i|0)>1){b=a[i>>0]|0;h=a[e+3>>0]|0;if(!(b<<24>>24))b=d[j+(h&255)>>0]|0;else b=J$(b,h)|0;e=(b|0)==10?e+4|0:i}else e=i;c[k>>2]=-1;break}default:e=e+2|0}c[k>>2]=(c[k>>2]|0)+1}return}function p0(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0;k=f+-2|0;j=b+72|0;a:while(1){h=e+2|0;if((k-h|0)<=1){f=1;break}f=a[h>>0]|0;i=f<<24>>24==0;b=a[e+3>>0]|0;if(i)f=d[j+(b&255)>>0]|0;else f=J$(f,b)|0;switch(f|0){case 23:case 19:case 30:case 33:case 16:case 18:case 10:case 9:case 15:case 14:case 17:case 35:case 34:case 32:case 31:case 13:case 27:case 24:case 25:{e=h;continue a}case 21:if(i&b<<24>>24==9){l=12;break a}else{e=h;continue a}case 22:case 26:{if(!i){l=12;break a}if(b<<24>>24>=0){e=h;continue a}break}default:if(!i){l=12;break a}}switch(b<<24>>24|0){case 64:case 36:{e=h;break}default:{l=12;break a}}}if((l|0)==12){c[g>>2]=h;f=0}return f|0}function q0(b,e,f,g,h){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0;j=c[e>>2]|0;k=j+(f-j&-2)|0;l=k;m=h;a:while(1){if(j>>>0>=k>>>0){b=0;break}i=a[j+1>>0]|0;b=a[j>>0]|0;f=b&255;switch(b<<24>>24){case 0:{if(i<<24>>24>-1){b=c[g>>2]|0;if((b|0)==(h|0)){b=2;break a}c[g>>2]=b+1;a[b>>0]=i;b=j}else n=7;break}case 7:case 6:case 5:case 4:case 3:case 2:case 1:{n=7;break}case -37:case -38:case -39:case -40:{b=c[g>>2]|0;if((m-b|0)<4){b=2;break a}if((l-j|0)<4){b=1;break a}o=i&255;i=(f<<2&12|o>>>6)+1|0;c[g>>2]=b+1;a[b>>0]=i>>>2|240;b=c[g>>2]|0;c[g>>2]=b+1;a[b>>0]=o>>>2&15|i<<4&48|128;b=j+2|0;i=d[j+3>>0]|0;f=(o<<4&48|i>>>6|a[b>>0]<<2&12|128)&255;j=c[g>>2]|0;c[g>>2]=j+1;a[j>>0]=f;j=c[g>>2]|0;c[g>>2]=j+1;a[j>>0]=i&63|128;break}default:{b=c[g>>2]|0;if((m-b|0)<3){b=2;break a}c[g>>2]=b+1;a[b>>0]=f>>>4|224;o=i&255;b=c[g>>2]|0;c[g>>2]=b+1;a[b>>0]=o>>>6|f<<2&60|128;b=c[g>>2]|0;c[g>>2]=b+1;a[b>>0]=o&63|128;b=j}}if((n|0)==7){n=0;b=c[g>>2]|0;if((m-b|0)<2){b=2;break}o=i&255;c[g>>2]=b+1;a[b>>0]=o>>>6|f<<2|192;b=c[g>>2]|0;c[g>>2]=b+1;a[b>>0]=o&63|128;b=j}j=b+2|0}c[e>>2]=j;return b|0}function r0(e,f,g,h,i){e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0;j=c[f>>2]|0;l=g-j&-2;e=j+l|0;if((l|0)>(i-(c[h>>2]|0)|0)){k=e+-2|0;g=(a[k>>0]&-8)<<24>>24==-40;l=g&1;e=g?k:e}else l=0;g=j;while(1){j=g>>>0>>0;k=c[h>>2]|0;if(!(j&k>>>0>>0))break;j=((d[g>>0]|0)<<8|(d[g+1>>0]|0))&65535;c[h>>2]=k+2;b[k>>1]=j;k=(c[f>>2]|0)+2|0;c[f>>2]=k;g=k}return ((k|0)!=(i|0)|j^1?l:2)|0}function s0(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0;l=f;j=l-e|0;a:do if((j|0)>1){k=a[e>>0]|0;if(!(k<<24>>24)){i=a[e+1>>0]|0;h=d[b+72+(i&255)>>0]|0}else{i=a[e+1>>0]|0;h=J$(k,i)|0}switch(h|0){case 29:{j=i&255;if(!(1<<(j&31)&c[56940+((j>>>5|(d[143788+(k&255)>>0]|0)<<3)<<2)>>2])){c[g>>2]=e;b=0;break a}break}case 24:case 22:break;case 5:{c[g>>2]=e;b=0;break a}case 6:{if((j|0)<3){b=-2;break a}c[g>>2]=e;b=0;break a}case 7:{if((j|0)<4){b=-2;break a}c[g>>2]=e;b=0;break a}case 19:{b=u0(b,e+2|0,f,g)|0;break a}default:{c[g>>2]=e;b=0;break a}}k=b+72|0;j=e;b:while(1){i=j+2|0;e=l-i|0;if((e|0)<=1){b=-1;break a}b=a[i>>0]|0;f=a[j+3>>0]|0;if(!(b<<24>>24))h=d[k+(f&255)>>0]|0;else h=J$(b,f)|0;switch(h|0){case 27:case 26:case 25:case 24:case 22:{j=i;continue b}case 5:{f=23;break b}case 6:{f=24;break b}case 7:{f=26;break b}case 18:{f=28;break b}case 29:break;default:{f=29;break b}}e=f&255;if(!(1<<(e&31)&c[56940+((e>>>5|(d[144044+(b&255)>>0]|0)<<3)<<2)>>2])){f=22;break}else j=i}if((f|0)==22){c[g>>2]=i;b=0;break}else if((f|0)==23){c[g>>2]=i;b=0;break}else if((f|0)==24){if((e|0)<3){b=-2;break}c[g>>2]=i;b=0;break}else if((f|0)==26){if((e|0)<4){b=-2;break}c[g>>2]=i;b=0;break}else if((f|0)==28){c[g>>2]=j+4;b=9;break}else if((f|0)==29){c[g>>2]=i;b=0;break}}else b=-1;while(0);return b|0}function t0(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0;j=f-e|0;a:do if((j|0)>1){k=a[e>>0]|0;if(!(k<<24>>24)){i=a[e+1>>0]|0;h=d[b+72+(i&255)>>0]|0}else{i=a[e+1>>0]|0;h=J$(k,i)|0}switch(h|0){case 29:{l=i&255;if(!(1<<(l&31)&c[56940+((l>>>5|(d[143788+(k&255)>>0]|0)<<3)<<2)>>2])){c[g>>2]=e;f=0;break a}break}case 24:case 22:break;case 5:{c[g>>2]=e;f=0;break a}case 6:{if((j|0)<3){f=-2;break a}c[g>>2]=e;f=0;break a}case 7:{if((j|0)<4){f=-2;break a}c[g>>2]=e;f=0;break a}case 30:case 9:case 10:case 21:{c[g>>2]=e;f=22;break a}default:{c[g>>2]=e;f=0;break a}}l=b+72|0;b=e;b:while(1){k=b+2|0;e=f-k|0;if((e|0)<=1){f=-1;break a}h=a[k>>0]|0;i=a[b+3>>0]|0;if(!(h<<24>>24))j=d[l+(i&255)>>0]|0;else j=J$(h,i)|0;switch(j|0){case 27:case 26:case 25:case 24:case 22:{b=k;continue b}case 5:{h=23;break b}case 6:{h=24;break b}case 7:{h=26;break b}case 18:{h=28;break b}case 29:break;default:{h=29;break b}}e=i&255;if(!(1<<(e&31)&c[56940+((e>>>5|(d[144044+(h&255)>>0]|0)<<3)<<2)>>2])){h=22;break}else b=k}if((h|0)==22){c[g>>2]=k;f=0;break}else if((h|0)==23){c[g>>2]=k;f=0;break}else if((h|0)==24){if((e|0)<3){f=-2;break}c[g>>2]=k;f=0;break}else if((h|0)==26){if((e|0)<4){f=-2;break}c[g>>2]=k;f=0;break}else if((h|0)==28){c[g>>2]=b+4;f=28;break}else if((h|0)==29){c[g>>2]=k;f=0;break}}else f=-1;while(0);return f|0}function u0(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;k=f;a:do if((k-e|0)>1){i=a[e>>0]|0;h=a[e+1>>0]|0;do if(!(i<<24>>24))if(h<<24>>24==120){h=v0(b,e+2|0,f,g)|0;break a}else{h=d[b+72+(h&255)>>0]|0;break}else h=J$(i,h)|0;while(0);if((h|0)!=25){c[g>>2]=e;h=0;break}j=b+72|0;b=e;b:while(1){i=b+2|0;if((k-i|0)<=1){h=-1;break a}h=a[i>>0]|0;f=a[b+3>>0]|0;if(!(h<<24>>24))h=d[j+(f&255)>>0]|0;else h=J$(h,f)|0;switch(h|0){case 25:{b=i;break}case 18:{f=15;break b}default:{f=16;break b}}}if((f|0)==15){c[g>>2]=b+4;h=10;break}else if((f|0)==16){c[g>>2]=i;h=0;break}}else h=-1;while(0);return h|0}function v0(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0;a:do if((f-e|0)>1){h=a[e>>0]|0;if(!(h<<24>>24))h=d[b+72+(d[e+1>>0]|0)>>0]|0;else h=J$(h,a[e+1>>0]|0)|0;if((h&-2|0)!=24){c[g>>2]=e;f=0;break}j=b+72|0;b:while(1){i=e+2|0;if((f-i|0)<=1){f=-1;break a}h=a[i>>0]|0;b=a[e+3>>0]|0;if(!(h<<24>>24))h=d[j+(b&255)>>0]|0;else h=J$(h,b)|0;switch(h|0){case 24:case 25:{e=i;break}case 18:{h=13;break b}default:{h=14;break b}}}if((h|0)==13){c[g>>2]=e+4;f=10;break}else if((h|0)==14){c[g>>2]=i;f=0;break}}else f=-1;while(0);return f|0}function w0(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;o=f;j=o-e|0;a:do if((j|0)>1){k=a[e>>0]|0;if(!(k<<24>>24)){i=a[e+1>>0]|0;h=d[b+72+(i&255)>>0]|0}else{i=a[e+1>>0]|0;h=J$(k,i)|0}switch(h|0){case 29:{m=i&255;if(!(1<<(m&31)&c[56940+((m>>>5|d[143788+(k&255)>>0]<<3)<<2)>>2])){c[g>>2]=e;h=0;break a}break}case 24:case 22:break;case 5:{c[g>>2]=e;h=0;break a}case 6:{if((j|0)<3){h=-2;break a}c[g>>2]=e;h=0;break a}case 7:{if((j|0)<4){h=-2;break a}c[g>>2]=e;h=0;break a}case 16:{i=e+2|0;if((o-i|0)<=1){h=-1;break a}h=a[i>>0]|0;if(!(h<<24>>24))h=d[b+72+(d[e+3>>0]|0)>>0]|0;else h=J$(h,a[e+3>>0]|0)|0;switch(h|0){case 27:{h=x0(b,e+4|0,f,g)|0;break a}case 20:{h=y0(e+4|0,f,g)|0;break a}default:{c[g>>2]=i;h=0;break a}}}case 15:{h=z0(b,e+2|0,f,g)|0;break a}case 17:{h=A0(b,e+2|0,f,g)|0;break a}default:{c[g>>2]=e;h=0;break a}}m=b+72|0;l=0;h=e+2|0;b:while(1){c:while(1){i=o-h|0;if((i|0)<=1){h=-1;break a}j=a[h>>0]|0;k=a[h+1>>0]|0;if(!(j<<24>>24))e=d[m+(k&255)>>0]|0;else e=J$(j,k)|0;switch(e|0){case 5:{n=34;break b}case 6:{n=35;break b}case 7:{n=37;break b}case 10:case 9:case 21:{n=55;break b}case 11:{n=69;break b}case 17:break b;case 23:break c;case 29:{e=k&255;if(!(1<<(e&31)&c[56940+((e>>>5|d[144044+(j&255)>>0]<<3)<<2)>>2])){n=32;break b}break}case 27:case 26:case 25:case 24:case 22:break;default:{n=75;break b}}h=h+2|0}if(l|0){n=40;break}e=h+2|0;l=o-e|0;if((l|0)<=1){h=-1;break a}i=a[e>>0]|0;j=a[h+3>>0]|0;if(!(i<<24>>24))k=d[m+(j&255)>>0]|0;else k=J$(i,j)|0;switch(k|0){case 5:{n=49;break b}case 6:{n=50;break b}case 7:{n=52;break b}case 29:{l=j&255;if(!(1<<(l&31)&c[56940+((l>>>5|d[143788+(i&255)>>0]<<3)<<2)>>2])){n=47;break b}break}case 24:case 22:break;default:{n=54;break b}}l=1;h=h+4|0}d:switch(n|0){case 32:{c[g>>2]=h;h=0;break a}case 34:{c[g>>2]=h;h=0;break a}case 35:{if((i|0)<3){h=-2;break a}c[g>>2]=h;h=0;break a}case 37:{if((i|0)<4){h=-2;break a}c[g>>2]=h;h=0;break a}case 40:{c[g>>2]=h;h=0;break a}case 47:{c[g>>2]=e;h=0;break a}case 49:{c[g>>2]=e;h=0;break a}case 50:{if((l|0)<3){h=-2;break a}c[g>>2]=e;h=0;break a}case 52:{if((l|0)<4){h=-2;break a}c[g>>2]=e;h=0;break a}case 54:{c[g>>2]=e;h=0;break a}case 55:{e:while(1){n=0;i=h+2|0;j=o-i|0;if((j|0)<=1){h=-1;break a}k=a[i>>0]|0;e=a[h+3>>0]|0;if(!(k<<24>>24))l=d[m+(e&255)>>0]|0;else l=J$(k,e)|0;switch(l|0){case 11:{h=i;n=69;break d}case 17:{h=i;break d}case 10:case 9:case 21:{h=i;n=55;break}case 29:{n=60;break e}case 24:case 22:break e;case 5:{n=63;break e}case 6:{n=64;break e}case 7:{n=66;break e}default:{n=68;break e}}}if((n|0)==60){o=e&255;if(!(1<<(o&31)&c[56940+((o>>>5|d[143788+(k&255)>>0]<<3)<<2)>>2])){c[g>>2]=i;h=0;break a}}else if((n|0)==63){c[g>>2]=i;h=0;break a}else if((n|0)==64){if((j|0)<3){h=-2;break a}c[g>>2]=i;h=0;break a}else if((n|0)==66){if((j|0)<4){h=-2;break a}c[g>>2]=i;h=0;break a}else if((n|0)==68){c[g>>2]=i;h=0;break a}h=B0(b,h+4|0,f,g)|0;break a}case 75:{c[g>>2]=h;h=0;break a}}if((n|0)==69){c[g>>2]=h+2;h=2;break}i=h+2|0;if((o-i|0)>1){if((a[i>>0]|0)==0?(a[h+3>>0]|0)==62:0){c[g>>2]=h+4;h=4;break}c[g>>2]=i;h=0}else h=-1}else h=-1;while(0);return h|0}function x0(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;j=f;a:do if((j-e|0)>1){if((a[e>>0]|0)==0?(a[e+1>>0]|0)==45:0){i=b+72|0;h=e+2|0;b:while(1){e=j-h|0;if((e|0)<=1){f=-1;break a}f=a[h>>0]|0;b=a[h+1>>0]|0;if(!(f<<24>>24))f=d[i+(b&255)>>0]|0;else f=J$(f,b)|0;switch(f|0){case 8:case 1:case 0:{k=16;break b}case 5:{h=h+2|0;continue b}case 6:{if((e|0)<3){f=-2;break a}h=h+3|0;continue b}case 7:{if((e|0)<4){f=-2;break a}h=h+4|0;continue b}case 27:{f=h+2|0;if((j-f|0)<=1){f=-1;break a}if(a[f>>0]|0){h=f;continue b}if((a[h+3>>0]|0)==45)break b;else{h=f;continue b}}default:{h=h+2|0;continue b}}}if((k|0)==16){c[g>>2]=h;f=0;break}f=h+4|0;if((j-f|0)<=1){f=-1;break}if((a[f>>0]|0)==0?(a[h+5>>0]|0)==62:0){c[g>>2]=h+6;f=13;break}c[g>>2]=f;f=0;break}c[g>>2]=e;f=0}else f=-1;while(0);return f|0}function y0(b,d,e){b=b|0;d=d|0;e=e|0;if((d-b|0)>11){d=0;while(1){if((d|0)>=6){d=8;break}if(a[b>>0]|0){d=0;break}if((a[b+1>>0]|0)!=(a[144300+d>>0]|0)){d=0;break}d=d+1|0;b=b+2|0}c[e>>2]=b}else d=-1;return d|0}function z0(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;q=l;l=l+16|0;p=q;o=f;i=o-e|0;a:do if((i|0)>1){j=a[e>>0]|0;if(!(j<<24>>24)){h=a[e+1>>0]|0;f=d[b+72+(h&255)>>0]|0}else{h=a[e+1>>0]|0;f=J$(j,h)|0}switch(f|0){case 29:{m=h&255;if(!(1<<(m&31)&c[56940+((m>>>5|d[143788+(j&255)>>0]<<3)<<2)>>2])){c[g>>2]=e;f=0;break a}break}case 24:case 22:break;case 5:{c[g>>2]=e;f=0;break a}case 6:{if((i|0)<3){f=-2;break a}c[g>>2]=e;f=0;break a}case 7:{if((i|0)<4){f=-2;break a}c[g>>2]=e;f=0;break a}default:{c[g>>2]=e;f=0;break a}}m=b+72|0;k=e;b:while(1){f=k+2|0;h=o-f|0;if((h|0)<=1){f=-1;break a}i=a[f>>0]|0;j=a[k+3>>0]|0;if(!(i<<24>>24))b=d[m+(j&255)>>0]|0;else b=J$(i,j)|0;switch(b|0){case 27:case 26:case 25:case 24:case 22:{k=f;continue b}case 5:{n=22;break b}case 6:{n=23;break b}case 7:{n=25;break b}case 10:case 9:case 21:{n=27;break b}case 15:{n=46;break b}case 29:break;default:break b}k=j&255;if(!(1<<(k&31)&c[56940+((k>>>5|d[144044+(i&255)>>0]<<3)<<2)>>2])){n=21;break}else k=f}if((n|0)==21){c[g>>2]=f;f=0;break}else if((n|0)==22){c[g>>2]=f;f=0;break}else if((n|0)==23){if((h|0)<3){f=-2;break}c[g>>2]=f;f=0;break}else if((n|0)==25){if((h|0)<4){f=-2;break}c[g>>2]=f;f=0;break}else if((n|0)==27){if(!(C0(e,f,p)|0)){c[g>>2]=f;f=0;break}j=k+4|0;c:while(1){i=o-j|0;if((i|0)<=1){f=-1;break a}f=a[j>>0]|0;h=a[j+1>>0]|0;if(!(f<<24>>24))f=d[m+(h&255)>>0]|0;else f=J$(f,h)|0;switch(f|0){case 8:case 1:case 0:{n=40;break c}case 5:{j=j+2|0;continue c}case 6:{if((i|0)<3){f=-2;break a}j=j+3|0;continue c}case 7:{if((i|0)<4){f=-2;break a}j=j+4|0;continue c}case 15:{f=j+2|0;if((o-f|0)<=1){f=-1;break a}if(a[f>>0]|0){j=f;continue c}if((a[j+3>>0]|0)==62){n=44;break c}else{j=f;continue c}}default:{j=j+2|0;continue c}}}if((n|0)==40){c[g>>2]=j;f=0;break}else if((n|0)==44){c[g>>2]=j+4;f=c[p>>2]|0;break}}else if((n|0)==46){if(!(C0(e,f,p)|0)){c[g>>2]=f;f=0;break}f=k+4|0;if((o-f|0)<=1){f=-1;break}if((a[f>>0]|0)==0?(a[k+5>>0]|0)==62:0){c[g>>2]=k+6;f=c[p>>2]|0;break}}c[g>>2]=f;f=0}else f=-1;while(0);l=q;return f|0}function A0(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0;j=f-e|0;a:do if((j|0)>1){k=a[e>>0]|0;if(!(k<<24>>24)){i=a[e+1>>0]|0;h=d[b+72+(i&255)>>0]|0}else{i=a[e+1>>0]|0;h=J$(k,i)|0}switch(h|0){case 29:{l=i&255;if(!(1<<(l&31)&c[56940+((l>>>5|(d[143788+(k&255)>>0]|0)<<3)<<2)>>2])){c[g>>2]=e;f=0;break a}break}case 24:case 22:break;case 5:{c[g>>2]=e;f=0;break a}case 6:{if((j|0)<3){f=-2;break a}c[g>>2]=e;f=0;break a}case 7:{if((j|0)<4){f=-2;break a}c[g>>2]=e;f=0;break a}default:{c[g>>2]=e;f=0;break a}}l=b+72|0;b=e;b:while(1){j=b+2|0;e=f-j|0;if((e|0)<=1){f=-1;break a}h=a[j>>0]|0;i=a[b+3>>0]|0;if(!(h<<24>>24))k=d[l+(i&255)>>0]|0;else k=J$(h,i)|0;switch(k|0){case 23:case 27:case 26:case 25:case 24:case 22:{b=j;continue b}case 5:{h=22;break b}case 6:{h=23;break b}case 7:{h=25;break b}case 10:case 9:case 21:{h=27;break b}case 11:{h=34;break b}case 29:break;default:{h=35;break b}}e=i&255;if(!(1<<(e&31)&c[56940+((e>>>5|(d[144044+(h&255)>>0]|0)<<3)<<2)>>2])){h=21;break}else b=j}if((h|0)==21){c[g>>2]=j;f=0;break}else if((h|0)==22){c[g>>2]=j;f=0;break}else if((h|0)==23){if((e|0)<3){f=-2;break}c[g>>2]=j;f=0;break}else if((h|0)==25){if((e|0)<4){f=-2;break}c[g>>2]=j;f=0;break}else if((h|0)==27){c:while(1){k=j+2|0;if((f-k|0)<=1){f=-1;break a}h=a[k>>0]|0;i=a[j+3>>0]|0;if(!(h<<24>>24))h=d[l+(i&255)>>0]|0;else h=J$(h,i)|0;switch(h|0){case 10:case 9:case 21:{j=k;h=27;break}case 11:{h=32;break c}default:{h=33;break c}}}if((h|0)==32){c[g>>2]=j+4;f=5;break}else if((h|0)==33){c[g>>2]=k;f=0;break}}else if((h|0)==34){c[g>>2]=b+4;f=5;break}else if((h|0)==35){c[g>>2]=j;f=0;break}}else f=-1;while(0);return f|0}function B0(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=l;l=l+16|0;q=s;c[q>>2]=e;r=f;o=b+72|0;h=0;a:while(1){b:while(1){m=r-e|0;if((m|0)<=1){e=-1;break a}i=a[e>>0]|0;j=a[e+1>>0]|0;if(!(i<<24>>24))k=d[o+(j&255)>>0]|0;else k=J$(i,j)|0;switch(k|0){case 5:{p=11;break a}case 6:{p=12;break a}case 7:{p=14;break a}case 23:{p=16;break b}case 10:case 9:case 21:{p=31;break b}case 14:{p=37;break b}case 29:{n=j&255;if(!(1<<(n&31)&c[56940+((n>>>5|d[144044+(i&255)>>0]<<3)<<2)>>2])){p=9;break a}break}case 27:case 26:case 25:case 24:case 22:break;default:{p=89;break a}}n=e+2|0;c[q>>2]=n;e=n}c:do if((p|0)==16){p=0;if(h|0){p=17;break a}h=e+2|0;c[q>>2]=h;i=h;j=r-i|0;if((j|0)<=1){e=-1;break a}k=a[h>>0]|0;m=a[e+3>>0]|0;if(!(k<<24>>24))n=d[o+(m&255)>>0]|0;else n=J$(k,m)|0;switch(n|0){case 5:{p=25;break a}case 6:{p=26;break a}case 7:{p=28;break a}case 24:case 22:{h=1;break c}case 29:break;default:{p=30;break a}}n=m&255;if(!(1<<(n&31)&c[56940+((n>>>5|d[143788+(k&255)>>0]<<3)<<2)>>2])){p=24;break a}else h=1}else if((p|0)==31)while(1){p=0;i=e+2|0;c[q>>2]=i;j=i;if((r-j|0)<=1){e=-1;break a}h=a[i>>0]|0;e=a[e+3>>0]|0;if(!(h<<24>>24))e=d[o+(e&255)>>0]|0;else e=J$(h,e)|0;switch(e|0){case 14:{e=i;p=37;break c}case 9:case 10:case 21:{e=i;p=31;break}default:{p=36;break a}}}while(0);d:do if((p|0)==37){while(1){p=0;j=e+2|0;c[q>>2]=j;k=j;if((r-k|0)<=1){e=-1;break a}h=a[j>>0]|0;i=a[e+3>>0]|0;if(!(h<<24>>24))m=d[o+(i&255)>>0]|0;else m=J$(h,i)|0;if((m|1|0)==13)break;switch(m|0){case 9:case 10:case 21:{e=j;p=37;break}default:{p=43;break a}}}e=e+4|0;c[q>>2]=e;e:while(1){j=r-e|0;if((j|0)<=1){e=-1;break a}h=a[e>>0]|0;i=a[e+1>>0]|0;if(!(h<<24>>24))h=d[o+(i&255)>>0]|0;else h=J$(h,i)|0;if((h|0)==(m|0))break;switch(h|0){case 8:case 1:case 0:{p=56;break a}case 2:{p=61;break a}case 5:{n=e+2|0;c[q>>2]=n;e=n;continue e}case 6:{if((j|0)<3){e=-2;break a}n=e+3|0;c[q>>2]=n;e=n;continue e}case 7:{if((j|0)<4){e=-2;break a}n=e+4|0;c[q>>2]=n;e=n;continue e}case 3:{e=s0(b,e+2|0,f,q)|0;if((e|0)<1){p=59;break a}e=c[q>>2]|0;continue e}default:{n=e+2|0;c[q>>2]=n;e=n;continue e}}}i=e+2|0;c[q>>2]=i;k=i;if((r-k|0)<=1){e=-1;break a}h=a[i>>0]|0;j=a[e+3>>0]|0;if(!(h<<24>>24))h=d[o+(j&255)>>0]|0;else h=J$(h,j)|0;switch(h|0){case 11:{p=81;break a}case 17:{p=82;break a}case 10:case 9:case 21:{e=i;break}default:{p=68;break a}}f:while(1){i=e+2|0;c[q>>2]=i;h=i;j=r-h|0;if((j|0)<=1){e=-1;break a}k=a[i>>0]|0;m=a[e+3>>0]|0;if(!(k<<24>>24))n=d[o+(m&255)>>0]|0;else n=J$(k,m)|0;switch(n|0){case 5:{p=76;break a}case 6:{p=77;break a}case 7:{p=79;break a}case 11:{p=81;break a}case 17:{p=82;break a}case 24:case 22:{h=0;break d}case 10:case 9:case 21:{e=i;break}case 29:break f;default:{p=87;break a}}}n=m&255;if(!(1<<(n&31)&c[56940+((n>>>5|d[143788+(k&255)>>0]<<3)<<2)>>2])){p=75;break a}else h=0}while(0);e=e+4|0;c[q>>2]=e}switch(p|0){case 9:{c[g>>2]=e;e=0;break}case 11:{c[g>>2]=e;e=0;break}case 12:{if((m|0)<3)e=-2;else{c[g>>2]=e;e=0}break}case 14:{if((m|0)<4)e=-2;else{c[g>>2]=e;e=0}break}case 17:{c[g>>2]=e;e=0;break}case 24:{c[g>>2]=h;e=0;break}case 25:{c[g>>2]=h;e=0;break}case 26:{if((j|0)<3)e=-2;else{c[g>>2]=h;e=0}break}case 28:{if((j|0)<4)e=-2;else{c[g>>2]=h;e=0}break}case 30:{c[g>>2]=i;e=0;break}case 36:{c[g>>2]=j;e=0;break}case 43:{c[g>>2]=k;e=0;break}case 56:{c[g>>2]=e;e=0;break}case 59:{if(!e){c[g>>2]=c[q>>2];e=0}break}case 61:{c[g>>2]=e;e=0;break}case 68:{c[g>>2]=k;e=0;break}case 75:{c[g>>2]=i;e=0;break}case 76:{c[g>>2]=i;e=0;break}case 77:{if((j|0)<3)e=-2;else{c[g>>2]=i;e=0}break}case 79:{if((j|0)<4)e=-2;else{c[g>>2]=i;e=0}break}case 81:{c[g>>2]=e+4;e=1;break}case 82:{h=i+2|0;c[q>>2]=h;e=h;if((r-e|0)>1){if((a[h>>0]|0)==0?(a[i+3>>0]|0)==62:0){c[g>>2]=i+4;e=3;break}c[g>>2]=e;e=0}else e=-1;break}case 87:{c[g>>2]=h;e=0;break}case 89:{c[g>>2]=e;e=0;break}}l=s;return e|0}function C0(b,d,e){b=b|0;d=d|0;e=e|0;c[e>>2]=11;a:do if((d-b|0)==6?(a[b>>0]|0)==0:0){switch(a[b+1>>0]|0){case 120:{d=0;break}case 88:{d=1;break}default:{d=1;break a}}if(!(a[b+2>>0]|0)){switch(a[b+3>>0]|0){case 109:break;case 77:{d=1;break}default:{d=1;break a}}if(!(a[b+4>>0]|0)){switch(a[b+5>>0]|0){case 108:break;case 76:{d=0;break a}default:{d=1;break a}}if(!d){c[e>>2]=12;d=1}else d=0}else d=1}else d=1}else d=1;while(0);return d|0}function D0(b,e,f,g,h){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0;k=e+72|0;a:while(1){b:while(1){j=g-f|0;if((j|0)<=1){f=-1;break a}e=a[f>>0]|0;i=a[f+1>>0]|0;if(!(e<<24>>24))i=d[k+(i&255)>>0]|0;else i=J$(e,i)|0;switch(i|0){case 8:case 1:case 0:{l=10;break a}case 6:{l=9;break b}case 7:{l=19;break b}case 5:{f=f+2|0;continue b}case 13:case 12:{e=f+2|0;if((i|0)==(b|0)){l=12;break a}else{f=e;continue b}}default:{f=f+2|0;continue b}}}if((l|0)==9){l=0;if((j|0)<3){f=-2;break}else{f=f+3|0;continue}}else if((l|0)==19){l=0;if((j|0)<4){f=-2;break}else{f=f+4|0;continue}}}c:do if((l|0)==10){c[h>>2]=f;f=0}else if((l|0)==12)if((g-e|0)>1){c[h>>2]=e;g=a[e>>0]|0;f=a[f+3>>0]|0;if(!(g<<24>>24))f=d[k+(f&255)>>0]|0;else f=J$(g,f)|0;switch(f|0){case 20:case 30:case 11:case 10:case 9:case 21:{f=27;break c}default:{}}f=0}else f=-27;while(0);return f|0}function E0(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0;k=f;a:do if((k-e|0)>1){h=a[e>>0]|0;if(!(h<<24>>24))h=d[b+72+(d[e+1>>0]|0)>>0]|0;else h=J$(h,a[e+1>>0]|0)|0;switch(h|0){case 27:{h=x0(b,e+2|0,f,g)|0;break a}case 20:{c[g>>2]=e+2;h=33;break a}case 24:case 22:{j=b+72|0;b:while(1){i=e+2|0;f=k-i|0;if((f|0)<=1){h=-1;break a}h=a[i>>0]|0;b=a[e+3>>0]|0;if(!(h<<24>>24))h=d[j+(b&255)>>0]|0;else h=J$(h,b)|0;switch(h|0){case 24:case 22:{e=i;break}case 30:{l=15;break b}case 10:case 9:case 21:break b;default:{l=22;break b}}}if((l|0)==22){c[g>>2]=i;h=0;break a}c:do if((l|0)==15){if((f|0)<=3){h=-1;break a}b=a[e+4>>0]|0;h=a[e+5>>0]|0;if(!(b<<24>>24))h=d[j+(h&255)>>0]|0;else h=J$(b,h)|0;switch(h|0){case 30:case 10:case 9:case 21:break;default:break c}c[g>>2]=i;h=0;break a}while(0);c[g>>2]=i;h=16;break a}default:{c[g>>2]=e;h=0;break a}}}else h=-1;while(0);return h|0}function F0(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;j=f-e|0;a:do if((j|0)>1){k=a[e>>0]|0;if(!(k<<24>>24)){i=a[e+1>>0]|0;h=d[b+72+(i&255)>>0]|0}else{i=a[e+1>>0]|0;h=J$(k,i)|0}switch(h|0){case 29:{j=i&255;if(!(1<<(j&31)&c[56940+((j>>>5|(d[143788+(k&255)>>0]|0)<<3)<<2)>>2])){c[g>>2]=e;f=0;break a}break}case 24:case 22:break;case 5:{c[g>>2]=e;f=0;break a}case 6:{if((j|0)<3){f=-2;break a}c[g>>2]=e;f=0;break a}case 7:{if((j|0)<4){f=-2;break a}c[g>>2]=e;f=0;break a}default:{c[g>>2]=e;f=0;break a}}b=b+72|0;k=e;b:while(1){h=k;k=k+2|0;e=f-k|0;if((e|0)<=1){f=-20;break a}j=a[k>>0]|0;h=a[h+3>>0]|0;if(!(j<<24>>24))i=d[b+(h&255)>>0]|0;else i=J$(j,h)|0;switch(i|0){case 27:case 26:case 25:case 24:case 22:continue b;case 5:{h=22;break b}case 6:{h=23;break b}case 7:{h=25;break b}case 36:case 30:case 11:case 32:case 21:case 10:case 9:{h=27;break b}case 29:break;default:{h=28;break b}}e=h&255;if(!(1<<(e&31)&c[56940+((e>>>5|(d[144044+(j&255)>>0]|0)<<3)<<2)>>2])){h=21;break}}if((h|0)==21){c[g>>2]=k;f=0;break}else if((h|0)==22){c[g>>2]=k;f=0;break}else if((h|0)==23){if((e|0)<3){f=-2;break}c[g>>2]=k;f=0;break}else if((h|0)==25){if((e|0)<4){f=-2;break}c[g>>2]=k;f=0;break}else if((h|0)==27){c[g>>2]=k;f=20;break}else if((h|0)==28){c[g>>2]=k;f=0;break}}else f=-1;while(0);return f|0}function G0(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0;while(1){b=c[d>>2]|0;h=b>>>0>>0;i=c[f>>2]|0;if(!(h&i>>>0>>0))break;c[d>>2]=b+1;h=a[b>>0]|0;i=c[f>>2]|0;c[f>>2]=i+1;a[i>>0]=h}return ((i|0)!=(g|0)|h^1?0:2)|0}function H0(b,c){b=b|0;c=c|0;var d=0,e=0,f=0,g=0;a:while(1){f=a[b>>0]|0;g=a[c>>0]|0;f=(f+-97&255)<26?(f&255)+224&255:f;switch((f<<24>>24==((g+-97&255)<26?(g&255)+224&255:g)<<24>>24?(f<<24>>24==0?2:0):1)&3){case 0:{c=c+1|0;b=b+1|0;break}case 1:{e=3;break a}case 2:{d=1;break a}default:{e=5;break a}}}if((e|0)==3)d=0;return d|0}function I0(a,b,c,d,e,f,g,h,i,j){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;return K0(39,a,b,c,d,e,f,g,h,i,j)|0}function J0(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;h=l;l=l+144|0;i=h+4|0;f=h+8|0;g=h;c[i>>2]=d;c[g>>2]=f;pb[c[b+56>>2]&127](b,i,e,g,f+127|0)|0;do if((c[i>>2]|0)==(e|0)){a[c[g>>2]>>0]=0;if(H0(f,144315)|0?(c[b+64>>2]|0)==2:0)break;b=Z$(f)|0;if((b|0)!=-1)b=c[58948+(b<<2)>>2]|0;else b=0}else b=0;while(0);l=h;return b|0}function K0(a,b,d,e,f,g,h,i,j,k,m){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;m=m|0;var n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;v=l;l=l+16|0;t=v+8|0;q=v+12|0;o=v+4|0;p=v;c[q>>2]=0;c[o>>2]=0;c[p>>2]=0;u=d+64|0;s=c[u>>2]|0;r=e+(s*5|0)|0;c[t>>2]=r;s=f+(0-(s<<1))|0;r=(L0(d,r,s,o,p,q,t)|0)!=0;n=c[o>>2]|0;e=n;a:do if(r&(n|0)!=0){r=d+24|0;f=c[p>>2]|0;do if(!(ob[c[r>>2]&127](d,n,f,144340)|0)){if(!b){c[g>>2]=e;e=0;break a}}else{if(h|0)c[h>>2]=c[q>>2];if(!i)e=c[t>>2]|0;else{e=c[t>>2]|0;c[i>>2]=e}if(!(L0(d,e,s,o,p,q,t)|0)){c[g>>2]=c[t>>2];e=0;break a}f=c[o>>2]|0;if(f|0){e=f;n=f;f=c[p>>2]|0;break}if(!b){e=1;break a}c[g>>2]=c[t>>2];e=0;break a}while(0);if(ob[c[r>>2]&127](d,n,f,144348)|0){f=c[q>>2]|0;e=f;if((((M0(d,f,s)|0)&-33)+-65|0)>>>0>=26){c[g>>2]=e;e=0;break}if(j|0)c[j>>2]=e;e=c[t>>2]|0;if(k|0)c[k>>2]=nb[a&63](d,f,e+(0-(c[u>>2]|0))|0)|0;if(!(L0(d,e,s,o,p,q,t)|0)){c[g>>2]=c[t>>2];e=0;break}e=c[o>>2]|0;if(!e){e=1;break}n=e;f=c[p>>2]|0}if((b|0)!=0|(ob[c[r>>2]&127](d,n,f,144357)|0)==0){c[g>>2]=e;e=0;break}f=c[q>>2]|0;e=c[t>>2]|0;n=f;if(!(ob[c[r>>2]&127](d,f,e+(0-(c[u>>2]|0))|0,107657)|0)){if(!(ob[c[r>>2]&127](d,f,e+(0-(c[u>>2]|0))|0,107649)|0)){c[g>>2]=n;e=0;break}if(m)c[m>>2]=0}else if(m)c[m>>2]=1;while(1){if(!(N0(M0(d,e,s)|0)|0))break;e=e+(c[u>>2]|0)|0}c[t>>2]=e;if((e|0)==(s|0))e=1;else{c[g>>2]=e;e=0}}else{c[g>>2]=c[t>>2];e=0}while(0);l=v;return e|0}function L0(a,b,d,e,f,g,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0;a:do if((b|0)!=(d|0)){if(!(N0(M0(a,b,d)|0)|0)){c[h>>2]=b;b=0;break}j=a+64|0;do b=b+(c[j>>2]|0)|0;while((N0(M0(a,b,d)|0)|0)!=0);if((b|0)==(d|0)){c[e>>2]=0;b=1;break}c[e>>2]=b;b:while(1){i=M0(a,b,d)|0;switch(i|0){case -1:{i=11;break b}case 61:{i=12;break b}default:{}}if(N0(i)|0){i=14;break}b=b+(c[j>>2]|0)|0}if((i|0)==11){c[h>>2]=b;b=0;break}else if((i|0)==12)c[f>>2]=b;else if((i|0)==14){c[f>>2]=b;do{b=b+(c[j>>2]|0)|0;i=M0(a,b,d)|0}while((N0(i)|0)!=0);if((i|0)!=61){c[h>>2]=b;b=0;break}}if((b|0)==(c[e>>2]|0)){c[h>>2]=b;b=0;break}do{b=b+(c[j>>2]|0)|0;i=M0(a,b,d)|0}while((N0(i)|0)!=0);switch(i|0){case 34:case 39:break;default:{c[h>>2]=b;b=0;break a}}f=b+(c[j>>2]|0)|0;c[g>>2]=f;b=i<<24>>24;c:while(1){i=M0(a,f,d)|0;if((i|0)==(b|0)){i=30;break}if((i+-48|0)>>>0>9&((i&-33)+-65|0)>>>0>25)switch(i|0){case 45:case 46:case 95:break;default:{i=28;break c}}f=f+(c[j>>2]|0)|0}if((i|0)==28){c[h>>2]=f;b=0;break}else if((i|0)==30){c[h>>2]=f+(c[j>>2]|0);b=1;break}}else{c[e>>2]=0;b=1}while(0);return b|0}function M0(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;h=l;l=l+16|0;i=h+4|0;f=h+8|0;g=h;c[i>>2]=d;c[g>>2]=f;pb[c[b+56>>2]&127](b,i,e,g,f+1|0)|0;l=h;return ((c[g>>2]|0)==(f|0)?-1:a[f>>0]|0)|0}function N0(a){a=a|0;switch(a|0){case 9:case 10:case 13:case 32:{a=1;break}default:a=0}return a|0}function O0(){return 60092}function P0(b,d,e){b=b|0;d=d|0;e=e|0;e=Z$(e)|0;if((e|0)==-1)e=0;else{a[b+69>>0]=e;c[b>>2]=69;c[b+4>>2]=70;c[b+48>>2]=31;c[b+72>>2]=d;c[d>>2]=b;e=1}return e|0}function Q0(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return b0(60456,a,0,b,c,d)|0}function R0(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return b0(60456,a,1,b,c,d)|0}function S0(a,b,c,d,e,f,g,h,i,j){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;return K0(40,a,b,c,d,e,f,g,h,i,j)|0}function T0(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;h=l;l=l+144|0;i=h+4|0;f=h+8|0;g=h;c[i>>2]=d;c[g>>2]=f;pb[c[b+56>>2]&127](b,i,e,g,f+127|0)|0;do if((c[i>>2]|0)==(e|0)){a[c[g>>2]>>0]=0;if(H0(f,144315)|0?(c[b+64>>2]|0)==2:0)break;b=Z$(f)|0;if((b|0)!=-1)b=c[60456+(b<<2)>>2]|0;else b=0}else b=0;while(0);l=h;return b|0}function U0(b,c,d,e){b=b|0;c=c|0;d=d|0;e=e|0;b=z_(b,c,d,e)|0;if(b|0)a[b+72+58>>0]=23;return b|0}function V0(a){a=a|0;c[a>>2]=15;c[a+16>>2]=1;c[a+12>>2]=0;c[a+20>>2]=0;return}function W0(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0;switch(b|0){case 15:{c[a>>2]=16;a=0;break}case 12:{c[a>>2]=16;a=1;break}case 11:{c[a>>2]=16;a=55;break}case 13:{c[a>>2]=16;a=56;break}case 14:{a=0;break}case 16:{if(!(ob[c[f+24>>2]&127](f,d+(c[f+64>>2]<<1)|0,e,144368)|0))g=9;else{c[a>>2]=17;a=3}break}case 29:{c[a>>2]=18;a=2;break}default:g=9}if((g|0)==9)a=_0(a,b)|0;return a|0}function X0(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0;switch(b|0){case 14:case 15:{a=0;break}case 11:{a=55;break}case 13:{a=56;break}case 16:{if(!(ob[c[f+24>>2]&127](f,d+(c[f+64>>2]<<1)|0,e,144368)|0))g=7;else{c[a>>2]=17;a=3}break}case 29:{c[a>>2]=18;a=2;break}default:g=7}if((g|0)==7)a=_0(a,b)|0;return a|0}function Y0(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;switch(b|0){case 15:{a=3;break}case 41:case 18:{c[a>>2]=19;a=4;break}default:a=_0(a,b)|0}return a|0}function Z0(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return 0}function _0(a,b){a=a|0;b=b|0;if((b|0)==28&(c[a+16>>2]|0)==0)a=59;else{c[a>>2]=18;a=-1}return a|0}function $0(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;a:do switch(b|0){case 15:{a=3;break}case 25:{c[a>>2]=20;a=7;break}case 17:{c[a>>2]=21;a=8;break}case 18:{g=f+24|0;if(ob[c[g>>2]&127](f,d,e,144376)|0){c[a>>2]=22;a=3;break a}if(!(ob[c[g>>2]&127](f,d,e,144383)|0))h=8;else{c[a>>2]=23;a=3}break}default:h=8}while(0);if((h|0)==8)a=_0(a,b)|0;return a|0}function a1(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;a:do switch(b|0){case -4:case 15:{a=0;break}case 16:{g=f+24|0;h=f+64|0;if(ob[c[g>>2]&127](f,d+(c[h>>2]<<1)|0,e,144390)|0){c[a>>2]=24;a=11;break a}if(ob[c[g>>2]&127](f,d+(c[h>>2]<<1)|0,e,144397)|0){c[a>>2]=25;a=33;break a}if(ob[c[g>>2]&127](f,d+(c[h>>2]<<1)|0,e,144405)|0){c[a>>2]=26;a=39;break a}if(!(ob[c[g>>2]&127](f,d+(c[h>>2]<<1)|0,e,144413)|0))i=14;else{c[a>>2]=27;a=17}break}case 11:{a=55;break}case 13:{a=56;break}case 28:{a=60;break}case 26:{c[a>>2]=28;a=3;break}default:i=14}while(0);if((i|0)==14)a=_0(a,b)|0;return a|0}function b1(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;f=b+-11|0;switch(f>>>1|f<<31|0){case 2:{a=0;break}case 0:{a=55;break}case 1:{a=56;break}case 9:{c[a>>2]=18;a=2;break}default:a=_0(a,b)|0}return a|0}function c1(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;switch(b|0){case 15:{a=3;break}case 27:{c[a>>2]=29;a=5;break}default:a=_0(a,b)|0}return a|0}function d1(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;switch(b|0){case 15:{a=3;break}case 27:{c[a>>2]=22;a=6;break}default:a=_0(a,b)|0}return a|0}function e1(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;switch(b|0){case 15:{a=3;break}case 25:{c[a>>2]=20;a=7;break}case 17:{c[a>>2]=21;a=8;break}default:a=_0(a,b)|0}return a|0}function f1(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;switch(b|0){case 15:{a=11;break}case 22:{c[a>>2]=30;a=11;break}case 18:{c[a>>2]=31;a=9;break}default:a=_0(a,b)|0}return a|0}function g1(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;switch(b|0){case 15:{a=33;break}case 41:case 18:{c[a>>2]=32;a=34;break}default:a=_0(a,b)|0}return a|0}function h1(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;switch(b|0){case 15:{a=39;break}case 41:case 18:{c[a>>2]=33;a=40;break}default:a=_0(a,b)|0}return a|0}function i1(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;switch(b|0){case 15:{a=17;break}case 18:{c[a>>2]=34;a=18;break}default:a=_0(a,b)|0}return a|0}function j1(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;switch(b|0){case 15:{a=3;break}case 17:{c[a>>2]=21;a=8;break}default:a=_0(a,b)|0}return a|0}function k1(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;a:do switch(b|0){case 15:{a=17;break}case 18:{g=f+24|0;if(ob[c[g>>2]&127](f,d,e,144376)|0){c[a>>2]=35;a=17;break a}if(!(ob[c[g>>2]&127](f,d,e,144383)|0))h=6;else{c[a>>2]=36;a=17}break}default:h=6}while(0);if((h|0)==6)a=_0(a,b)|0;return a|0}function l1(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;switch(b|0){case 15:{a=17;break}case 27:{c[a>>2]=37;c[a+8>>2]=17;a=19;break}default:a=_0(a,b)|0}return a|0}function m1(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;switch(b|0){case 15:{a=17;break}case 27:{c[a>>2]=38;a=21;break}default:a=_0(a,b)|0}return a|0}function n1(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;switch(b|0){case 15:{a=17;break}case 27:{c[a>>2]=37;c[a+8>>2]=17;a=19;break}case 17:{c[a>>2]=c[a+16>>2]|0?20:39;a=20;break}default:a=_0(a,b)|0}return a|0}function o1(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;switch(b|0){case 15:{a=c[a+8>>2]|0;break}case 17:{c[a>>2]=c[a+16>>2]|0?20:39;a=c[a+8>>2]|0;break}default:a=_0(a,b)|0}return a|0}function p1(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0;switch(b|0){case 33:{c[a>>2]=40;d=0;break}case 34:{d=a+12|0;e=c[d>>2]|0;if(!e)g=7;else{c[d>>2]=e+-1;d=0}break}case 15:{d=0;break}case 26:{g=7;break}case -4:{if(!(c[a+12>>2]|0))d=0;else g=7;break}default:d=a1(a,b,d,e,f)|0}if((g|0)==7)d=_0(a,b)|0;return d|0}function q1(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;a:do switch(b|0){case 15:{a=0;break}case 18:{g=f+24|0;if(ob[c[g>>2]&127](f,d,e,144422)|0){c[a>>2]=41;a=0;break a}if(!(ob[c[g>>2]&127](f,d,e,144430)|0))h=6;else{c[a>>2]=42;a=0}break}default:h=6}while(0);if((h|0)==6)a=_0(a,b)|0;return a|0}function r1(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;switch(b|0){case 15:{a=0;break}case 25:{c[a>>2]=39;a=a+12|0;c[a>>2]=(c[a>>2]|0)+1;a=0;break}default:a=_0(a,b)|0}return a|0}function s1(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;switch(b|0){case 15:{a=0;break}case 25:{c[a>>2]=39;a=58;break}default:a=_0(a,b)|0}return a|0}function t1(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;a:do switch(b|0){case 15:{a=39;break}case 18:{g=f+24|0;if(ob[c[g>>2]&127](f,d,e,144437)|0){c[a>>2]=37;c[a+8>>2]=39;a=42;break a}if(!(ob[c[g>>2]&127](f,d,e,144443)|0))h=7;else{c[a>>2]=37;c[a+8>>2]=39;a=41}break}case 23:{c[a>>2]=43;c[a+4>>2]=1;a=44;break}default:h=7}while(0);if((h|0)==7)a=_0(a,b)|0;return a|0}function u1(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0;switch(b|0){case 15:{a=39;break}case 20:{if(!(ob[c[f+24>>2]&127](f,d+(c[f+64>>2]|0)|0,e,144447)|0))g=9;else{c[a>>2]=44;a=43}break}case 23:{c[a+4>>2]=2;c[a>>2]=45;a=44;break}case 41:case 18:{c[a>>2]=46;a=51;break}case 30:{c[a>>2]=46;a=53;break}case 31:{c[a>>2]=46;a=52;break}case 32:{c[a>>2]=46;a=54;break}default:g=9}if((g|0)==9)a=_0(a,b)|0;return a|0}function v1(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;switch(b|0){case 15:{a=39;break}case 24:{c[a>>2]=37;c[a+8>>2]=39;a=45;break}case 36:{c[a>>2]=37;c[a+8>>2]=39;a=46;break}case 21:{c[a>>2]=47;a=39;break}default:a=_0(a,b)|0}return a|0}function w1(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;switch(b|0){case 15:{a=39;break}case 23:{a=a+4|0;c[a>>2]=(c[a>>2]|0)+1;a=44;break}case 41:case 18:{c[a>>2]=46;a=51;break}case 30:{c[a>>2]=46;a=53;break}case 31:{c[a>>2]=46;a=52;break}case 32:{c[a>>2]=46;a=54;break}default:a=_0(a,b)|0}return a|0}function x1(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;switch(b|0){case 15:{a=39;break}case 24:{e=a+4|0;f=(c[e>>2]|0)+-1|0;c[e>>2]=f;if(!f){c[a>>2]=37;c[a+8>>2]=39;a=45}else a=45;break}case 36:{e=a+4|0;f=(c[e>>2]|0)+-1|0;c[e>>2]=f;if(!f){c[a>>2]=37;c[a+8>>2]=39;a=46}else a=46;break}case 35:{e=a+4|0;f=(c[e>>2]|0)+-1|0;c[e>>2]=f;if(!f){c[a>>2]=37;c[a+8>>2]=39;a=47}else a=47;break}case 37:{e=a+4|0;f=(c[e>>2]|0)+-1|0;c[e>>2]=f;if(!f){c[a>>2]=37;c[a+8>>2]=39;a=48}else a=48;break}case 38:{c[a>>2]=45;a=50;break}case 21:{c[a>>2]=45;a=49;break}default:a=_0(a,b)|0}return a|0}function y1(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;switch(b|0){case 15:{a=39;break}case 41:case 18:{c[a>>2]=48;a=51;break}default:a=_0(a,b)|0}return a|0}function z1(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;switch(b|0){case 15:{a=39;break}case 36:{c[a>>2]=37;c[a+8>>2]=39;a=46;break}case 21:{c[a>>2]=47;a=39;break}default:a=_0(a,b)|0}return a|0}function A1(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;switch(b|0){case 15:{a=33;break}case 17:{c[a>>2]=c[a+16>>2]|0?20:39;a=33;break}case 41:case 18:{c[a>>2]=49;a=22;break}default:a=_0(a,b)|0}return a|0}function B1(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0;a:do switch(b|0){case 15:{g=33;break}case 18:{h=f+24|0;g=0;while(1){i=c[h>>2]|0;if((g|0)>=8)break;if(ob[i&127](f,d,e,c[62304+(g<<2)>>2]|0)|0){j=6;break}g=g+1|0}if((j|0)==6){c[a>>2]=50;g=g+23|0;break a}if(!(ob[i&127](f,d,e,144413)|0))j=10;else{c[a>>2]=51;g=33}break}case 23:{c[a>>2]=52;g=33;break}default:j=10}while(0);if((j|0)==10)g=_0(a,b)|0;return g|0}function C1(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;a:do switch(b|0){case 15:{a=33;break}case 20:{g=f+24|0;h=f+64|0;if(ob[c[g>>2]&127](f,d+(c[h>>2]|0)|0,e,144454)|0){c[a>>2]=32;a=35;break a}if(ob[c[g>>2]&127](f,d+(c[h>>2]|0)|0,e,144462)|0){c[a>>2]=32;a=36;break a}if(!(ob[c[g>>2]&127](f,d+(c[h>>2]|0)|0,e,144471)|0))i=9;else{c[a>>2]=53;a=33}break}case 27:{c[a>>2]=32;a=37;break}default:i=9}while(0);if((i|0)==9)a=_0(a,b)|0;return a|0}function D1(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;switch(b|0){case 15:{a=33;break}case 23:{c[a>>2]=54;a=33;break}default:a=_0(a,b)|0}return a|0}function E1(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;switch(b|0){case 15:{a=33;break}case 41:case 18:case 19:{c[a>>2]=55;a=31;break}default:a=_0(a,b)|0}return a|0}function F1(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;switch(b|0){case 15:{a=33;break}case 24:{c[a>>2]=50;a=33;break}case 21:{c[a>>2]=52;a=33;break}default:a=_0(a,b)|0}return a|0}function G1(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;switch(b|0){case 15:{a=33;break}case 18:{c[a>>2]=56;a=32;break}default:a=_0(a,b)|0}return a|0}function H1(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;switch(b|0){case 15:{a=33;break}case 24:{c[a>>2]=50;a=33;break}case 21:{c[a>>2]=54;a=33;break}default:a=_0(a,b)|0}return a|0}function I1(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;switch(b|0){case 15:{a=33;break}case 27:{c[a>>2]=32;a=38;break}default:a=_0(a,b)|0}return a|0}function J1(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;switch(b|0){case 15:{a=11;break}case 18:{c[a>>2]=57;a=10;break}default:a=_0(a,b)|0}return a|0}function K1(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;a:do switch(b|0){case 15:{a=11;break}case 18:{g=f+24|0;if(ob[c[g>>2]&127](f,d,e,144376)|0){c[a>>2]=58;a=11;break a}if(!(ob[c[g>>2]&127](f,d,e,144383)|0))h=7;else{c[a>>2]=59;a=11}break}case 27:{c[a>>2]=37;c[a+8>>2]=11;a=12;break}default:h=7}while(0);if((h|0)==7)a=_0(a,b)|0;return a|0}function L1(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;switch(b|0){case 15:{a=11;break}case 27:{c[a>>2]=60;a=13;break}default:a=_0(a,b)|0}return a|0}function M1(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;switch(b|0){case 15:{a=11;break}case 27:{c[a>>2]=58;a=14;break}default:a=_0(a,b)|0}return a|0}function N1(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0;switch(b|0){case 15:{a=11;break}case 17:{c[a>>2]=c[a+16>>2]|0?20:39;a=15;break}case 18:{if(!(ob[c[f+24>>2]&127](f,d,e,144525)|0))g=5;else{c[a>>2]=61;a=11}break}default:g=5}if((g|0)==5)a=_0(a,b)|0;return a|0}function O1(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;switch(b|0){case 15:{a=11;break}case 18:{c[a>>2]=37;c[a+8>>2]=11;a=16;break}default:a=_0(a,b)|0}return a|0}function P1(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;a:do switch(b|0){case 15:{a=11;break}case 18:{g=f+24|0;if(ob[c[g>>2]&127](f,d,e,144376)|0){c[a>>2]=62;a=11;break a}if(!(ob[c[g>>2]&127](f,d,e,144383)|0))h=7;else{c[a>>2]=63;a=11}break}case 27:{c[a>>2]=37;c[a+8>>2]=11;a=12;break}default:h=7}while(0);if((h|0)==7)a=_0(a,b)|0;return a|0}function Q1(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;switch(b|0){case 15:{a=11;break}case 27:{c[a>>2]=64;a=13;break}default:a=_0(a,b)|0}return a|0}function R1(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;switch(b|0){case 15:{a=11;break}case 27:{c[a>>2]=62;a=14;break}default:a=_0(a,b)|0}return a|0}function S1(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;switch(b|0){case 15:{a=11;break}case 17:{c[a>>2]=c[a+16>>2]|0?20:39;a=15;break}default:a=_0(a,b)|0}return a|0}function T1(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;x=l;l=l+16|0;p=x;do if(a>>>0<245){m=a>>>0<11?16:a+11&-8;a=m>>>3;o=c[47519]|0;d=o>>>a;if(d&3|0){b=(d&1^1)+a|0;a=190116+(b<<1<<2)|0;d=a+8|0;e=c[d>>2]|0;f=e+8|0;g=c[f>>2]|0;if((g|0)==(a|0))c[47519]=o&~(1<>2]=a;c[d>>2]=g}w=b<<3;c[e+4>>2]=w|3;w=e+w+4|0;c[w>>2]=c[w>>2]|1;w=f;l=x;return w|0}n=c[47521]|0;if(m>>>0>n>>>0){if(d|0){b=2<>>12&16;b=b>>>i;d=b>>>5&8;b=b>>>d;g=b>>>2&4;b=b>>>g;a=b>>>1&2;b=b>>>a;e=b>>>1&1;e=(d|i|g|a|e)+(b>>>e)|0;b=190116+(e<<1<<2)|0;a=b+8|0;g=c[a>>2]|0;i=g+8|0;d=c[i>>2]|0;if((d|0)==(b|0)){a=o&~(1<>2]=b;c[a>>2]=d;a=o}w=e<<3;h=w-m|0;c[g+4>>2]=m|3;f=g+m|0;c[f+4>>2]=h|1;c[g+w>>2]=h;if(n|0){e=c[47524]|0;b=n>>>3;d=190116+(b<<1<<2)|0;b=1<>2]|0}c[a>>2]=e;c[b+12>>2]=e;c[e+8>>2]=b;c[e+12>>2]=d}c[47521]=h;c[47524]=f;w=i;l=x;return w|0}j=c[47520]|0;if(j){d=(j&0-j)+-1|0;i=d>>>12&16;d=d>>>i;h=d>>>5&8;d=d>>>h;k=d>>>2&4;d=d>>>k;e=d>>>1&2;d=d>>>e;a=d>>>1&1;a=c[190380+((h|i|k|e|a)+(d>>>a)<<2)>>2]|0;d=(c[a+4>>2]&-8)-m|0;e=c[a+16+(((c[a+16>>2]|0)==0&1)<<2)>>2]|0;if(!e){k=a;h=d}else{do{i=(c[e+4>>2]&-8)-m|0;k=i>>>0>>0;d=k?i:d;a=k?e:a;e=c[e+16+(((c[e+16>>2]|0)==0&1)<<2)>>2]|0}while((e|0)!=0);k=a;h=d}i=k+m|0;if(i>>>0>k>>>0){f=c[k+24>>2]|0;b=c[k+12>>2]|0;do if((b|0)==(k|0)){a=k+20|0;b=c[a>>2]|0;if(!b){a=k+16|0;b=c[a>>2]|0;if(!b){d=0;break}}while(1){d=b+20|0;e=c[d>>2]|0;if(e|0){b=e;a=d;continue}d=b+16|0;e=c[d>>2]|0;if(!e)break;else{b=e;a=d}}c[a>>2]=0;d=b}else{d=c[k+8>>2]|0;c[d+12>>2]=b;c[b+8>>2]=d;d=b}while(0);do if(f|0){b=c[k+28>>2]|0;a=190380+(b<<2)|0;if((k|0)==(c[a>>2]|0)){c[a>>2]=d;if(!d){c[47520]=j&~(1<>2]|0)!=(k|0)&1)<<2)>>2]=d;if(!d)break}c[d+24>>2]=f;b=c[k+16>>2]|0;if(b|0){c[d+16>>2]=b;c[b+24>>2]=d}b=c[k+20>>2]|0;if(b|0){c[d+20>>2]=b;c[b+24>>2]=d}}while(0);if(h>>>0<16){w=h+m|0;c[k+4>>2]=w|3;w=k+w+4|0;c[w>>2]=c[w>>2]|1}else{c[k+4>>2]=m|3;c[i+4>>2]=h|1;c[i+h>>2]=h;if(n|0){e=c[47524]|0;b=n>>>3;d=190116+(b<<1<<2)|0;b=1<>2]|0}c[a>>2]=e;c[b+12>>2]=e;c[e+8>>2]=b;c[e+12>>2]=d}c[47521]=h;c[47524]=i}w=k+8|0;l=x;return w|0}else n=m}else n=m}else n=m}else if(a>>>0<=4294967231){a=a+11|0;m=a&-8;k=c[47520]|0;if(k){e=0-m|0;a=a>>>8;if(a)if(m>>>0>16777215)j=31;else{o=(a+1048320|0)>>>16&8;v=a<>>16&4;v=v<>>16&2;j=14-(n|o|j)+(v<>>15)|0;j=m>>>(j+7|0)&1|j<<1}else j=0;d=c[190380+(j<<2)>>2]|0;a:do if(!d){d=0;a=0;v=57}else{a=0;i=d;h=m<<((j|0)==31?0:25-(j>>>1)|0);d=0;while(1){f=(c[i+4>>2]&-8)-m|0;if(f>>>0>>0)if(!f){e=0;d=i;a=i;v=61;break a}else{a=i;e=f}f=c[i+20>>2]|0;i=c[i+16+(h>>>31<<2)>>2]|0;d=(f|0)==0|(f|0)==(i|0)?d:f;f=(i|0)==0;if(f){v=57;break}else h=h<<((f^1)&1)}}while(0);if((v|0)==57){if((d|0)==0&(a|0)==0){a=2<>>12&16;o=o>>>i;h=o>>>5&8;o=o>>>h;j=o>>>2&4;o=o>>>j;n=o>>>1&2;o=o>>>n;d=o>>>1&1;a=0;d=c[190380+((h|i|j|n|d)+(o>>>d)<<2)>>2]|0}if(!d){i=a;h=e}else v=61}if((v|0)==61)while(1){v=0;n=(c[d+4>>2]&-8)-m|0;o=n>>>0>>0;e=o?n:e;a=o?d:a;d=c[d+16+(((c[d+16>>2]|0)==0&1)<<2)>>2]|0;if(!d){i=a;h=e;break}else v=61}if((i|0)!=0?h>>>0<((c[47521]|0)-m|0)>>>0:0){g=i+m|0;if(g>>>0<=i>>>0){w=0;l=x;return w|0}f=c[i+24>>2]|0;b=c[i+12>>2]|0;do if((b|0)==(i|0)){a=i+20|0;b=c[a>>2]|0;if(!b){a=i+16|0;b=c[a>>2]|0;if(!b){b=0;break}}while(1){d=b+20|0;e=c[d>>2]|0;if(e|0){b=e;a=d;continue}d=b+16|0;e=c[d>>2]|0;if(!e)break;else{b=e;a=d}}c[a>>2]=0}else{w=c[i+8>>2]|0;c[w+12>>2]=b;c[b+8>>2]=w}while(0);do if(f){a=c[i+28>>2]|0;d=190380+(a<<2)|0;if((i|0)==(c[d>>2]|0)){c[d>>2]=b;if(!b){e=k&~(1<>2]|0)!=(i|0)&1)<<2)>>2]=b;if(!b){e=k;break}}c[b+24>>2]=f;a=c[i+16>>2]|0;if(a|0){c[b+16>>2]=a;c[a+24>>2]=b}a=c[i+20>>2]|0;if(a){c[b+20>>2]=a;c[a+24>>2]=b;e=k}else e=k}else e=k;while(0);do if(h>>>0>=16){c[i+4>>2]=m|3;c[g+4>>2]=h|1;c[g+h>>2]=h;b=h>>>3;if(h>>>0<256){d=190116+(b<<1<<2)|0;a=c[47519]|0;b=1<>2]|0}c[a>>2]=g;c[b+12>>2]=g;c[g+8>>2]=b;c[g+12>>2]=d;break}b=h>>>8;if(b)if(h>>>0>16777215)b=31;else{v=(b+1048320|0)>>>16&8;w=b<>>16&4;w=w<>>16&2;b=14-(u|v|b)+(w<>>15)|0;b=h>>>(b+7|0)&1|b<<1}else b=0;d=190380+(b<<2)|0;c[g+28>>2]=b;a=g+16|0;c[a+4>>2]=0;c[a>>2]=0;a=1<>2]=g;c[g+24>>2]=d;c[g+12>>2]=g;c[g+8>>2]=g;break}a=h<<((b|0)==31?0:25-(b>>>1)|0);d=c[d>>2]|0;while(1){if((c[d+4>>2]&-8|0)==(h|0)){v=97;break}e=d+16+(a>>>31<<2)|0;b=c[e>>2]|0;if(!b){v=96;break}else{a=a<<1;d=b}}if((v|0)==96){c[e>>2]=g;c[g+24>>2]=d;c[g+12>>2]=g;c[g+8>>2]=g;break}else if((v|0)==97){v=d+8|0;w=c[v>>2]|0;c[w+12>>2]=g;c[v>>2]=g;c[g+8>>2]=w;c[g+12>>2]=d;c[g+24>>2]=0;break}}else{w=h+m|0;c[i+4>>2]=w|3;w=i+w+4|0;c[w>>2]=c[w>>2]|1}while(0);w=i+8|0;l=x;return w|0}else n=m}else n=m}else n=-1;while(0);d=c[47521]|0;if(d>>>0>=n>>>0){b=d-n|0;a=c[47524]|0;if(b>>>0>15){w=a+n|0;c[47524]=w;c[47521]=b;c[w+4>>2]=b|1;c[a+d>>2]=b;c[a+4>>2]=n|3}else{c[47521]=0;c[47524]=0;c[a+4>>2]=d|3;w=a+d+4|0;c[w>>2]=c[w>>2]|1}w=a+8|0;l=x;return w|0}i=c[47522]|0;if(i>>>0>n>>>0){u=i-n|0;c[47522]=u;w=c[47525]|0;v=w+n|0;c[47525]=v;c[v+4>>2]=u|1;c[w+4>>2]=n|3;w=w+8|0;l=x;return w|0}if(!(c[47637]|0)){c[47639]=4096;c[47638]=4096;c[47640]=-1;c[47641]=-1;c[47642]=0;c[47630]=0;c[47637]=p&-16^1431655768;a=4096}else a=c[47639]|0;j=n+48|0;k=n+47|0;h=a+k|0;f=0-a|0;m=h&f;if(m>>>0<=n>>>0){w=0;l=x;return w|0}a=c[47629]|0;if(a|0?(o=c[47627]|0,p=o+m|0,p>>>0<=o>>>0|p>>>0>a>>>0):0){w=0;l=x;return w|0}b:do if(!(c[47630]&4)){d=c[47525]|0;c:do if(d){e=190524;while(1){a=c[e>>2]|0;if(a>>>0<=d>>>0?(s=e+4|0,(a+(c[s>>2]|0)|0)>>>0>d>>>0):0)break;a=c[e+8>>2]|0;if(!a){v=118;break c}else e=a}b=h-i&f;if(b>>>0<2147483647){a=Z6(b|0)|0;if((a|0)==((c[e>>2]|0)+(c[s>>2]|0)|0)){if((a|0)!=(-1|0)){h=b;g=a;v=135;break b}}else{e=a;v=126}}else b=0}else v=118;while(0);do if((v|0)==118){d=Z6(0)|0;if((d|0)!=(-1|0)?(b=d,q=c[47638]|0,r=q+-1|0,b=((r&b|0)==0?0:(r+b&0-q)-b|0)+m|0,q=c[47627]|0,r=b+q|0,b>>>0>n>>>0&b>>>0<2147483647):0){s=c[47629]|0;if(s|0?r>>>0<=q>>>0|r>>>0>s>>>0:0){b=0;break}a=Z6(b|0)|0;if((a|0)==(d|0)){h=b;g=d;v=135;break b}else{e=a;v=126}}else b=0}while(0);do if((v|0)==126){d=0-b|0;if(!(j>>>0>b>>>0&(b>>>0<2147483647&(e|0)!=(-1|0))))if((e|0)==(-1|0)){b=0;break}else{h=b;g=e;v=135;break b}a=c[47639]|0;a=k-b+a&0-a;if(a>>>0>=2147483647){h=b;g=e;v=135;break b}if((Z6(a|0)|0)==(-1|0)){Z6(d|0)|0;b=0;break}else{h=a+b|0;g=e;v=135;break b}}while(0);c[47630]=c[47630]|4;v=133}else{b=0;v=133}while(0);if(((v|0)==133?m>>>0<2147483647:0)?(g=Z6(m|0)|0,s=Z6(0)|0,t=s-g|0,u=t>>>0>(n+40|0)>>>0,!((g|0)==(-1|0)|u^1|g>>>0>>0&((g|0)!=(-1|0)&(s|0)!=(-1|0))^1)):0){h=u?t:b;v=135}if((v|0)==135){b=(c[47627]|0)+h|0;c[47627]=b;if(b>>>0>(c[47628]|0)>>>0)c[47628]=b;j=c[47525]|0;do if(j){b=190524;while(1){a=c[b>>2]|0;d=b+4|0;e=c[d>>2]|0;if((g|0)==(a+e|0)){v=143;break}f=c[b+8>>2]|0;if(!f)break;else b=f}if(((v|0)==143?(c[b+12>>2]&8|0)==0:0)?g>>>0>j>>>0&a>>>0<=j>>>0:0){c[d>>2]=e+h;w=(c[47522]|0)+h|0;u=j+8|0;u=(u&7|0)==0?0:0-u&7;v=j+u|0;u=w-u|0;c[47525]=v;c[47522]=u;c[v+4>>2]=u|1;c[j+w+4>>2]=40;c[47526]=c[47641];break}if(g>>>0<(c[47523]|0)>>>0)c[47523]=g;a=g+h|0;b=190524;while(1){if((c[b>>2]|0)==(a|0)){v=151;break}b=c[b+8>>2]|0;if(!b){a=190524;break}}if((v|0)==151)if(!(c[b+12>>2]&8)){c[b>>2]=g;m=b+4|0;c[m>>2]=(c[m>>2]|0)+h;m=g+8|0;m=g+((m&7|0)==0?0:0-m&7)|0;b=a+8|0;b=a+((b&7|0)==0?0:0-b&7)|0;k=m+n|0;i=b-m-n|0;c[m+4>>2]=n|3;do if((j|0)!=(b|0)){if((c[47524]|0)==(b|0)){w=(c[47521]|0)+i|0;c[47521]=w;c[47524]=k;c[k+4>>2]=w|1;c[k+w>>2]=w;break}a=c[b+4>>2]|0;if((a&3|0)==1){h=a&-8;e=a>>>3;d:do if(a>>>0<256){a=c[b+8>>2]|0;d=c[b+12>>2]|0;if((d|0)==(a|0)){c[47519]=c[47519]&~(1<>2]=d;c[d+8>>2]=a;break}}else{g=c[b+24>>2]|0;a=c[b+12>>2]|0;do if((a|0)==(b|0)){e=b+16|0;d=e+4|0;a=c[d>>2]|0;if(!a){a=c[e>>2]|0;if(!a){a=0;break}else d=e}while(1){e=a+20|0;f=c[e>>2]|0;if(f|0){a=f;d=e;continue}e=a+16|0;f=c[e>>2]|0;if(!f)break;else{a=f;d=e}}c[d>>2]=0}else{w=c[b+8>>2]|0;c[w+12>>2]=a;c[a+8>>2]=w}while(0);if(!g)break;d=c[b+28>>2]|0;e=190380+(d<<2)|0;do if((c[e>>2]|0)!=(b|0)){c[g+16+(((c[g+16>>2]|0)!=(b|0)&1)<<2)>>2]=a;if(!a)break d}else{c[e>>2]=a;if(a|0)break;c[47520]=c[47520]&~(1<>2]=g;d=b+16|0;e=c[d>>2]|0;if(e|0){c[a+16>>2]=e;c[e+24>>2]=a}d=c[d+4>>2]|0;if(!d)break;c[a+20>>2]=d;c[d+24>>2]=a}while(0);b=b+h|0;f=h+i|0}else f=i;b=b+4|0;c[b>>2]=c[b>>2]&-2;c[k+4>>2]=f|1;c[k+f>>2]=f;b=f>>>3;if(f>>>0<256){d=190116+(b<<1<<2)|0;a=c[47519]|0;b=1<>2]|0}c[a>>2]=k;c[b+12>>2]=k;c[k+8>>2]=b;c[k+12>>2]=d;break}b=f>>>8;do if(!b)b=0;else{if(f>>>0>16777215){b=31;break}v=(b+1048320|0)>>>16&8;w=b<>>16&4;w=w<>>16&2;b=14-(u|v|b)+(w<>>15)|0;b=f>>>(b+7|0)&1|b<<1}while(0);e=190380+(b<<2)|0;c[k+28>>2]=b;a=k+16|0;c[a+4>>2]=0;c[a>>2]=0;a=c[47520]|0;d=1<>2]=k;c[k+24>>2]=e;c[k+12>>2]=k;c[k+8>>2]=k;break}a=f<<((b|0)==31?0:25-(b>>>1)|0);d=c[e>>2]|0;while(1){if((c[d+4>>2]&-8|0)==(f|0)){v=192;break}e=d+16+(a>>>31<<2)|0;b=c[e>>2]|0;if(!b){v=191;break}else{a=a<<1;d=b}}if((v|0)==191){c[e>>2]=k;c[k+24>>2]=d;c[k+12>>2]=k;c[k+8>>2]=k;break}else if((v|0)==192){v=d+8|0;w=c[v>>2]|0;c[w+12>>2]=k;c[v>>2]=k;c[k+8>>2]=w;c[k+12>>2]=d;c[k+24>>2]=0;break}}else{w=(c[47522]|0)+i|0;c[47522]=w;c[47525]=k;c[k+4>>2]=w|1}while(0);w=m+8|0;l=x;return w|0}else a=190524;while(1){b=c[a>>2]|0;if(b>>>0<=j>>>0?(w=b+(c[a+4>>2]|0)|0,w>>>0>j>>>0):0)break;a=c[a+8>>2]|0}f=w+-47|0;a=f+8|0;a=f+((a&7|0)==0?0:0-a&7)|0;f=j+16|0;a=a>>>0>>0?j:a;b=a+8|0;d=h+-40|0;u=g+8|0;u=(u&7|0)==0?0:0-u&7;v=g+u|0;u=d-u|0;c[47525]=v;c[47522]=u;c[v+4>>2]=u|1;c[g+d+4>>2]=40;c[47526]=c[47641];d=a+4|0;c[d>>2]=27;c[b>>2]=c[47631];c[b+4>>2]=c[47632];c[b+8>>2]=c[47633];c[b+12>>2]=c[47634];c[47631]=g;c[47632]=h;c[47634]=0;c[47633]=b;b=a+24|0;do{v=b;b=b+4|0;c[b>>2]=7}while((v+8|0)>>>0>>0);if((a|0)!=(j|0)){g=a-j|0;c[d>>2]=c[d>>2]&-2;c[j+4>>2]=g|1;c[a>>2]=g;b=g>>>3;if(g>>>0<256){d=190116+(b<<1<<2)|0;a=c[47519]|0;b=1<>2]|0}c[a>>2]=j;c[b+12>>2]=j;c[j+8>>2]=b;c[j+12>>2]=d;break}b=g>>>8;if(b)if(g>>>0>16777215)d=31;else{v=(b+1048320|0)>>>16&8;w=b<>>16&4;w=w<>>16&2;d=14-(u|v|d)+(w<>>15)|0;d=g>>>(d+7|0)&1|d<<1}else d=0;e=190380+(d<<2)|0;c[j+28>>2]=d;c[j+20>>2]=0;c[f>>2]=0;b=c[47520]|0;a=1<>2]=j;c[j+24>>2]=e;c[j+12>>2]=j;c[j+8>>2]=j;break}a=g<<((d|0)==31?0:25-(d>>>1)|0);d=c[e>>2]|0;while(1){if((c[d+4>>2]&-8|0)==(g|0)){v=213;break}e=d+16+(a>>>31<<2)|0;b=c[e>>2]|0;if(!b){v=212;break}else{a=a<<1;d=b}}if((v|0)==212){c[e>>2]=j;c[j+24>>2]=d;c[j+12>>2]=j;c[j+8>>2]=j;break}else if((v|0)==213){v=d+8|0;w=c[v>>2]|0;c[w+12>>2]=j;c[v>>2]=j;c[j+8>>2]=w;c[j+12>>2]=d;c[j+24>>2]=0;break}}}else{w=c[47523]|0;if((w|0)==0|g>>>0>>0)c[47523]=g;c[47631]=g;c[47632]=h;c[47634]=0;c[47528]=c[47637];c[47527]=-1;c[47532]=190116;c[47531]=190116;c[47534]=190124;c[47533]=190124;c[47536]=190132;c[47535]=190132;c[47538]=190140;c[47537]=190140;c[47540]=190148;c[47539]=190148;c[47542]=190156;c[47541]=190156;c[47544]=190164;c[47543]=190164;c[47546]=190172;c[47545]=190172;c[47548]=190180;c[47547]=190180;c[47550]=190188;c[47549]=190188;c[47552]=190196;c[47551]=190196;c[47554]=190204;c[47553]=190204;c[47556]=190212;c[47555]=190212;c[47558]=190220;c[47557]=190220;c[47560]=190228;c[47559]=190228;c[47562]=190236;c[47561]=190236;c[47564]=190244;c[47563]=190244;c[47566]=190252;c[47565]=190252;c[47568]=190260;c[47567]=190260;c[47570]=190268;c[47569]=190268;c[47572]=190276;c[47571]=190276;c[47574]=190284;c[47573]=190284;c[47576]=190292;c[47575]=190292;c[47578]=190300;c[47577]=190300;c[47580]=190308;c[47579]=190308;c[47582]=190316;c[47581]=190316;c[47584]=190324;c[47583]=190324;c[47586]=190332;c[47585]=190332;c[47588]=190340;c[47587]=190340;c[47590]=190348;c[47589]=190348;c[47592]=190356;c[47591]=190356;c[47594]=190364;c[47593]=190364;w=h+-40|0;u=g+8|0;u=(u&7|0)==0?0:0-u&7;v=g+u|0;u=w-u|0;c[47525]=v;c[47522]=u;c[v+4>>2]=u|1;c[g+w+4>>2]=40;c[47526]=c[47641]}while(0);b=c[47522]|0;if(b>>>0>n>>>0){u=b-n|0;c[47522]=u;w=c[47525]|0;v=w+n|0;c[47525]=v;c[v+4>>2]=u|1;c[w+4>>2]=n|3;w=w+8|0;l=x;return w|0}}c[(d2()|0)>>2]=12;w=0;l=x;return w|0}function U1(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;if(!a)return;d=a+-8|0;f=c[47523]|0;a=c[a+-4>>2]|0;b=a&-8;j=d+b|0;do if(!(a&1)){e=c[d>>2]|0;if(!(a&3))return;h=d+(0-e)|0;g=e+b|0;if(h>>>0>>0)return;if((c[47524]|0)==(h|0)){a=j+4|0;b=c[a>>2]|0;if((b&3|0)!=3){i=h;b=g;break}c[47521]=g;c[a>>2]=b&-2;c[h+4>>2]=g|1;c[h+g>>2]=g;return}d=e>>>3;if(e>>>0<256){a=c[h+8>>2]|0;b=c[h+12>>2]|0;if((b|0)==(a|0)){c[47519]=c[47519]&~(1<>2]=b;c[b+8>>2]=a;i=h;b=g;break}}f=c[h+24>>2]|0;a=c[h+12>>2]|0;do if((a|0)==(h|0)){d=h+16|0;b=d+4|0;a=c[b>>2]|0;if(!a){a=c[d>>2]|0;if(!a){a=0;break}else b=d}while(1){d=a+20|0;e=c[d>>2]|0;if(e|0){a=e;b=d;continue}d=a+16|0;e=c[d>>2]|0;if(!e)break;else{a=e;b=d}}c[b>>2]=0}else{i=c[h+8>>2]|0;c[i+12>>2]=a;c[a+8>>2]=i}while(0);if(f){b=c[h+28>>2]|0;d=190380+(b<<2)|0;if((c[d>>2]|0)==(h|0)){c[d>>2]=a;if(!a){c[47520]=c[47520]&~(1<>2]|0)!=(h|0)&1)<<2)>>2]=a;if(!a){i=h;b=g;break}}c[a+24>>2]=f;b=h+16|0;d=c[b>>2]|0;if(d|0){c[a+16>>2]=d;c[d+24>>2]=a}b=c[b+4>>2]|0;if(b){c[a+20>>2]=b;c[b+24>>2]=a;i=h;b=g}else{i=h;b=g}}else{i=h;b=g}}else{i=d;h=d}while(0);if(h>>>0>=j>>>0)return;a=j+4|0;e=c[a>>2]|0;if(!(e&1))return;if(!(e&2)){if((c[47525]|0)==(j|0)){j=(c[47522]|0)+b|0;c[47522]=j;c[47525]=i;c[i+4>>2]=j|1;if((i|0)!=(c[47524]|0))return;c[47524]=0;c[47521]=0;return}if((c[47524]|0)==(j|0)){j=(c[47521]|0)+b|0;c[47521]=j;c[47524]=h;c[i+4>>2]=j|1;c[h+j>>2]=j;return}f=(e&-8)+b|0;d=e>>>3;do if(e>>>0<256){b=c[j+8>>2]|0;a=c[j+12>>2]|0;if((a|0)==(b|0)){c[47519]=c[47519]&~(1<>2]=a;c[a+8>>2]=b;break}}else{g=c[j+24>>2]|0;a=c[j+12>>2]|0;do if((a|0)==(j|0)){d=j+16|0;b=d+4|0;a=c[b>>2]|0;if(!a){a=c[d>>2]|0;if(!a){d=0;break}else b=d}while(1){d=a+20|0;e=c[d>>2]|0;if(e|0){a=e;b=d;continue}d=a+16|0;e=c[d>>2]|0;if(!e)break;else{a=e;b=d}}c[b>>2]=0;d=a}else{d=c[j+8>>2]|0;c[d+12>>2]=a;c[a+8>>2]=d;d=a}while(0);if(g|0){a=c[j+28>>2]|0;b=190380+(a<<2)|0;if((c[b>>2]|0)==(j|0)){c[b>>2]=d;if(!d){c[47520]=c[47520]&~(1<>2]|0)!=(j|0)&1)<<2)>>2]=d;if(!d)break}c[d+24>>2]=g;a=j+16|0;b=c[a>>2]|0;if(b|0){c[d+16>>2]=b;c[b+24>>2]=d}a=c[a+4>>2]|0;if(a|0){c[d+20>>2]=a;c[a+24>>2]=d}}}while(0);c[i+4>>2]=f|1;c[h+f>>2]=f;if((i|0)==(c[47524]|0)){c[47521]=f;return}}else{c[a>>2]=e&-2;c[i+4>>2]=b|1;c[h+b>>2]=b;f=b}a=f>>>3;if(f>>>0<256){d=190116+(a<<1<<2)|0;b=c[47519]|0;a=1<>2]|0}c[b>>2]=i;c[a+12>>2]=i;c[i+8>>2]=a;c[i+12>>2]=d;return}a=f>>>8;if(a)if(f>>>0>16777215)a=31;else{h=(a+1048320|0)>>>16&8;j=a<>>16&4;j=j<>>16&2;a=14-(g|h|a)+(j<>>15)|0;a=f>>>(a+7|0)&1|a<<1}else a=0;e=190380+(a<<2)|0;c[i+28>>2]=a;c[i+20>>2]=0;c[i+16>>2]=0;b=c[47520]|0;d=1<>>1)|0);d=c[e>>2]|0;while(1){if((c[d+4>>2]&-8|0)==(f|0)){a=73;break}e=d+16+(b>>>31<<2)|0;a=c[e>>2]|0;if(!a){a=72;break}else{b=b<<1;d=a}}if((a|0)==72){c[e>>2]=i;c[i+24>>2]=d;c[i+12>>2]=i;c[i+8>>2]=i;break}else if((a|0)==73){h=d+8|0;j=c[h>>2]|0;c[j+12>>2]=i;c[h>>2]=i;c[i+8>>2]=j;c[i+12>>2]=d;c[i+24>>2]=0;break}}else{c[47520]=b|d;c[e>>2]=i;c[i+24>>2]=e;c[i+12>>2]=i;c[i+8>>2]=i}while(0);j=(c[47527]|0)+-1|0;c[47527]=j;if(!j)a=190532;else return;while(1){a=c[a>>2]|0;if(!a)break;else a=a+8|0}c[47527]=-1;return}function V1(a,b){a=a|0;b=b|0;var d=0;if(a){d=O(b,a)|0;if((b|a)>>>0>65535)d=((d>>>0)/(a>>>0)|0|0)==(b|0)?d:-1}else d=0;a=T1(d)|0;if(!a)return a|0;if(!(c[a+-4>>2]&3))return a|0;Y6(a|0,0,d|0)|0;return a|0}function W1(a,b){a=a|0;b=b|0;var d=0,e=0;if(!a){b=T1(b)|0;return b|0}if(b>>>0>4294967231){c[(d2()|0)>>2]=12;b=0;return b|0}d=X1(a+-8|0,b>>>0<11?16:b+11&-8)|0;if(d|0){b=d+8|0;return b|0}d=T1(b)|0;if(!d){b=0;return b|0}e=c[a+-4>>2]|0;e=(e&-8)-((e&3|0)==0?8:4)|0;W6(d|0,a|0,(e>>>0>>0?e:b)|0)|0;U1(a);b=d;return b|0}function X1(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;l=a+4|0;m=c[l>>2]|0;d=m&-8;i=a+d|0;if(!(m&3)){if(b>>>0<256){a=0;return a|0}if(d>>>0>=(b+4|0)>>>0?(d-b|0)>>>0<=c[47639]<<1>>>0:0)return a|0;a=0;return a|0}if(d>>>0>=b>>>0){d=d-b|0;if(d>>>0<=15)return a|0;k=a+b|0;c[l>>2]=m&1|b|2;c[k+4>>2]=d|3;m=i+4|0;c[m>>2]=c[m>>2]|1;Y1(k,d);return a|0}if((c[47525]|0)==(i|0)){k=(c[47522]|0)+d|0;d=k-b|0;e=a+b|0;if(k>>>0<=b>>>0){a=0;return a|0}c[l>>2]=m&1|b|2;c[e+4>>2]=d|1;c[47525]=e;c[47522]=d;return a|0}if((c[47524]|0)==(i|0)){e=(c[47521]|0)+d|0;if(e>>>0>>0){a=0;return a|0}d=e-b|0;if(d>>>0>15){k=a+b|0;e=a+e|0;c[l>>2]=m&1|b|2;c[k+4>>2]=d|1;c[e>>2]=d;e=e+4|0;c[e>>2]=c[e>>2]&-2;e=k}else{c[l>>2]=m&1|e|2;e=a+e+4|0;c[e>>2]=c[e>>2]|1;e=0;d=0}c[47521]=d;c[47524]=e;return a|0}e=c[i+4>>2]|0;if(e&2|0){a=0;return a|0}j=(e&-8)+d|0;if(j>>>0>>0){a=0;return a|0}k=j-b|0;f=e>>>3;do if(e>>>0<256){e=c[i+8>>2]|0;d=c[i+12>>2]|0;if((d|0)==(e|0)){c[47519]=c[47519]&~(1<>2]=d;c[d+8>>2]=e;break}}else{h=c[i+24>>2]|0;d=c[i+12>>2]|0;do if((d|0)==(i|0)){f=i+16|0;e=f+4|0;d=c[e>>2]|0;if(!d){d=c[f>>2]|0;if(!d){f=0;break}else g=f}else g=e;while(1){f=d+20|0;e=c[f>>2]|0;if(e|0){d=e;g=f;continue}e=d+16|0;f=c[e>>2]|0;if(!f)break;else{d=f;g=e}}c[g>>2]=0;f=d}else{f=c[i+8>>2]|0;c[f+12>>2]=d;c[d+8>>2]=f;f=d}while(0);if(h|0){d=c[i+28>>2]|0;e=190380+(d<<2)|0;if((c[e>>2]|0)==(i|0)){c[e>>2]=f;if(!f){c[47520]=c[47520]&~(1<>2]|0)!=(i|0)&1)<<2)>>2]=f;if(!f)break}c[f+24>>2]=h;d=i+16|0;e=c[d>>2]|0;if(e|0){c[f+16>>2]=e;c[e+24>>2]=f}d=c[d+4>>2]|0;if(d|0){c[f+20>>2]=d;c[d+24>>2]=f}}}while(0);if(k>>>0<16){c[l>>2]=j|m&1|2;m=a+j+4|0;c[m>>2]=c[m>>2]|1;return a|0}else{i=a+b|0;c[l>>2]=m&1|b|2;c[i+4>>2]=k|3;m=a+j+4|0;c[m>>2]=c[m>>2]|1;Y1(i,k);return a|0}return 0}function Y1(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=a+b|0;d=c[a+4>>2]|0;do if(!(d&1)){f=c[a>>2]|0;if(!(d&3))return;h=a+(0-f)|0;b=f+b|0;if((c[47524]|0)==(h|0)){a=i+4|0;d=c[a>>2]|0;if((d&3|0)!=3)break;c[47521]=b;c[a>>2]=d&-2;c[h+4>>2]=b|1;c[i>>2]=b;return}e=f>>>3;if(f>>>0<256){a=c[h+8>>2]|0;d=c[h+12>>2]|0;if((d|0)==(a|0)){c[47519]=c[47519]&~(1<>2]=d;c[d+8>>2]=a;break}}g=c[h+24>>2]|0;a=c[h+12>>2]|0;do if((a|0)==(h|0)){e=h+16|0;d=e+4|0;a=c[d>>2]|0;if(!a){a=c[e>>2]|0;if(!a){a=0;break}else d=e}while(1){e=a+20|0;f=c[e>>2]|0;if(f|0){a=f;d=e;continue}e=a+16|0;f=c[e>>2]|0;if(!f)break;else{a=f;d=e}}c[d>>2]=0}else{f=c[h+8>>2]|0;c[f+12>>2]=a;c[a+8>>2]=f}while(0);if(g){d=c[h+28>>2]|0;e=190380+(d<<2)|0;if((c[e>>2]|0)==(h|0)){c[e>>2]=a;if(!a){c[47520]=c[47520]&~(1<>2]|0)!=(h|0)&1)<<2)>>2]=a;if(!a)break}c[a+24>>2]=g;d=h+16|0;e=c[d>>2]|0;if(e|0){c[a+16>>2]=e;c[e+24>>2]=a}d=c[d+4>>2]|0;if(d){c[a+20>>2]=d;c[d+24>>2]=a}}}else h=a;while(0);a=i+4|0;e=c[a>>2]|0;if(!(e&2)){if((c[47525]|0)==(i|0)){i=(c[47522]|0)+b|0;c[47522]=i;c[47525]=h;c[h+4>>2]=i|1;if((h|0)!=(c[47524]|0))return;c[47524]=0;c[47521]=0;return}if((c[47524]|0)==(i|0)){i=(c[47521]|0)+b|0;c[47521]=i;c[47524]=h;c[h+4>>2]=i|1;c[h+i>>2]=i;return}f=(e&-8)+b|0;d=e>>>3;do if(e>>>0<256){a=c[i+8>>2]|0;b=c[i+12>>2]|0;if((b|0)==(a|0)){c[47519]=c[47519]&~(1<>2]=b;c[b+8>>2]=a;break}}else{g=c[i+24>>2]|0;b=c[i+12>>2]|0;do if((b|0)==(i|0)){d=i+16|0;a=d+4|0;b=c[a>>2]|0;if(!b){b=c[d>>2]|0;if(!b){d=0;break}else a=d}while(1){d=b+20|0;e=c[d>>2]|0;if(e|0){b=e;a=d;continue}d=b+16|0;e=c[d>>2]|0;if(!e)break;else{b=e;a=d}}c[a>>2]=0;d=b}else{d=c[i+8>>2]|0;c[d+12>>2]=b;c[b+8>>2]=d;d=b}while(0);if(g|0){b=c[i+28>>2]|0;a=190380+(b<<2)|0;if((c[a>>2]|0)==(i|0)){c[a>>2]=d;if(!d){c[47520]=c[47520]&~(1<>2]|0)!=(i|0)&1)<<2)>>2]=d;if(!d)break}c[d+24>>2]=g;b=i+16|0;a=c[b>>2]|0;if(a|0){c[d+16>>2]=a;c[a+24>>2]=d}b=c[b+4>>2]|0;if(b|0){c[d+20>>2]=b;c[b+24>>2]=d}}}while(0);c[h+4>>2]=f|1;c[h+f>>2]=f;if((h|0)==(c[47524]|0)){c[47521]=f;return}}else{c[a>>2]=e&-2;c[h+4>>2]=b|1;c[h+b>>2]=b;f=b}b=f>>>3;if(f>>>0<256){d=190116+(b<<1<<2)|0;a=c[47519]|0;b=1<>2]|0}c[a>>2]=h;c[b+12>>2]=h;c[h+8>>2]=b;c[h+12>>2]=d;return}b=f>>>8;if(b)if(f>>>0>16777215)b=31;else{g=(b+1048320|0)>>>16&8;i=b<>>16&4;i=i<>>16&2;b=14-(e|g|b)+(i<>>15)|0;b=f>>>(b+7|0)&1|b<<1}else b=0;e=190380+(b<<2)|0;c[h+28>>2]=b;c[h+20>>2]=0;c[h+16>>2]=0;a=c[47520]|0;d=1<>2]=h;c[h+24>>2]=e;c[h+12>>2]=h;c[h+8>>2]=h;return}a=f<<((b|0)==31?0:25-(b>>>1)|0);d=c[e>>2]|0;while(1){if((c[d+4>>2]&-8|0)==(f|0)){b=69;break}e=d+16+(a>>>31<<2)|0;b=c[e>>2]|0;if(!b){b=68;break}else{a=a<<1;d=b}}if((b|0)==68){c[e>>2]=h;c[h+24>>2]=d;c[h+12>>2]=h;c[h+8>>2]=h;return}else if((b|0)==69){g=d+8|0;i=c[g>>2]|0;c[i+12>>2]=h;c[g>>2]=h;c[h+8>>2]=i;c[h+12>>2]=d;c[h+24>>2]=0;return}}function Z1(a,b){a=a|0;b=b|0;if(a>>>0<9){b=T1(b)|0;return b|0}else{b=_1(a,b)|0;return b|0}return 0}function _1(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;a=a>>>0>16?a:16;if(a+-1&a){d=16;while(1)if(d>>>0>>0)d=d<<1;else{a=d;break}}if((-64-a|0)>>>0<=b>>>0){c[(d2()|0)>>2]=12;h=0;return h|0}g=b>>>0<11?16:b+11&-8;d=T1(g+12+a|0)|0;if(!d){h=0;return h|0}f=d+-8|0;do if(a+-1&d){e=(d+a+-1&0-a)+-8|0;b=f;e=(e-b|0)>>>0>15?e:e+a|0;b=e-b|0;a=d+-4|0;i=c[a>>2]|0;d=(i&-8)-b|0;if(!(i&3)){c[e>>2]=(c[f>>2]|0)+b;c[e+4>>2]=d;a=e;b=e;break}else{i=e+4|0;c[i>>2]=d|c[i>>2]&1|2;d=e+d+4|0;c[d>>2]=c[d>>2]|1;c[a>>2]=b|c[a>>2]&1|2;c[i>>2]=c[i>>2]|1;Y1(f,b);a=e;b=e;break}}else{a=f;b=f}while(0);a=a+4|0;d=c[a>>2]|0;if(d&3|0?(h=d&-8,h>>>0>(g+16|0)>>>0):0){i=h-g|0;f=b+g|0;c[a>>2]=g|d&1|2;c[f+4>>2]=i|3;h=b+h+4|0;c[h>>2]=c[h>>2]|1;Y1(f,i)}i=b+8|0;return i|0}function $1(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=e2(c[a+60>>2]|0)|0;a=c2(Ja(6,d|0)|0)|0;l=b;return a|0}function a2(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0;k=l;l=l+32|0;f=k;i=k+16|0;c[i>>2]=d;g=i+4|0;j=b+48|0;m=c[j>>2]|0;c[g>>2]=e-((m|0)!=0&1);h=b+44|0;c[i+8>>2]=c[h>>2];c[i+12>>2]=m;c[f>>2]=c[b+60>>2];c[f+4>>2]=i;c[f+8>>2]=2;f=c2(ya(145,f|0)|0)|0;if((f|0)>=1){i=c[g>>2]|0;if(f>>>0>i>>>0){g=c[h>>2]|0;h=b+4|0;c[h>>2]=g;c[b+8>>2]=g+(f-i);if(!(c[j>>2]|0))f=e;else{c[h>>2]=g+1;a[d+(e+-1)>>0]=a[g>>0]|0;f=e}}}else c[b>>2]=c[b>>2]|f&48^16;l=k;return f|0}function b2(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;f=l;l=l+32|0;g=f;e=f+20|0;c[g>>2]=c[a+60>>2];c[g+4>>2]=0;c[g+8>>2]=b;c[g+12>>2]=e;c[g+16>>2]=d;if((c2(xa(140,g|0)|0)|0)<0){c[e>>2]=-1;a=-1}else a=c[e>>2]|0;l=f;return a|0}function c2(a){a=a|0;if(a>>>0>4294963200){c[(d2()|0)>>2]=0-a;a=-1}return a|0}function d2(){return 190572}function e2(a){a=a|0;return a|0}function f2(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;g=l;l=l+32|0;f=g;c[b+36>>2]=18;if((c[b>>2]&64|0)==0?(c[f>>2]=c[b+60>>2],c[f+4>>2]=21523,c[f+8>>2]=g+16,Ia(54,f|0)|0):0)a[b+75>>0]=-1;f=g2(b,d,e)|0;l=g;return f|0}function g2(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;n=l;l=l+48|0;k=n+16|0;g=n;f=n+32|0;i=a+28|0;e=c[i>>2]|0;c[f>>2]=e;j=a+20|0;e=(c[j>>2]|0)-e|0;c[f+4>>2]=e;c[f+8>>2]=b;c[f+12>>2]=d;e=e+d|0;h=a+60|0;c[g>>2]=c[h>>2];c[g+4>>2]=f;c[g+8>>2]=2;g=c2(za(146,g|0)|0)|0;a:do if((e|0)!=(g|0)){b=2;while(1){if((g|0)<0)break;e=e-g|0;p=c[f+4>>2]|0;o=g>>>0>p>>>0;f=o?f+8|0:f;b=b+(o<<31>>31)|0;p=g-(o?p:0)|0;c[f>>2]=(c[f>>2]|0)+p;o=f+4|0;c[o>>2]=(c[o>>2]|0)-p;c[k>>2]=c[h>>2];c[k+4>>2]=f;c[k+8>>2]=b;g=c2(za(146,k|0)|0)|0;if((e|0)==(g|0)){m=3;break a}}c[a+16>>2]=0;c[i>>2]=0;c[j>>2]=0;c[a>>2]=c[a>>2]|32;if((b|0)==2)d=0;else d=d-(c[f+4>>2]|0)|0}else m=3;while(0);if((m|0)==3){p=c[a+44>>2]|0;c[a+16>>2]=p+(c[a+48>>2]|0);c[i>>2]=p;c[j>>2]=p}l=n;return d|0}function h2(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;c[e+4>>2]=b;b=c2(Ka(91,e|0)|0)|0;l=d;return b|0}function i2(){return}function j2(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0;i=l;l=l+32|0;h=i;do if((g&4095|0)==0&(((g|0)<0)<<31>>31&-4096|0)==0){if(b>>>0>2147483646){c[(d2()|0)>>2]=12;a=-1;break}c[h>>2]=a;c[h+4>>2]=b;c[h+8>>2]=d;c[h+12>>2]=e;c[h+16>>2]=f;c[h+20>>2]=g>>12;a=c2(Aa(192,h|0)|0)|0}else{c[(d2()|0)>>2]=22;a=-1}while(0);l=i;return a|0}function k2(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;f=d&255;a:do if(!f)b=b+(l2(b)|0)|0;else{if(b&3){e=d&255;do{g=a[b>>0]|0;if(g<<24>>24==0?1:g<<24>>24==e<<24>>24)break a;b=b+1|0}while((b&3|0)!=0)}f=O(f,16843009)|0;e=c[b>>2]|0;b:do if(!((e&-2139062144^-2139062144)&e+-16843009))do{g=e^f;if((g&-2139062144^-2139062144)&g+-16843009|0)break b;b=b+4|0;e=c[b>>2]|0}while(!((e&-2139062144^-2139062144)&e+-16843009|0));while(0);e=d&255;while(1){g=a[b>>0]|0;if(g<<24>>24==0?1:g<<24>>24==e<<24>>24)break;else b=b+1|0}}while(0);return b|0}function l2(b){b=b|0;var d=0,e=0,f=0;f=b;a:do if(!(f&3))e=4;else{d=f;while(1){if(!(a[b>>0]|0)){b=d;break a}b=b+1|0;d=b;if(!(d&3)){e=4;break}}}while(0);if((e|0)==4){while(1){d=c[b>>2]|0;if(!((d&-2139062144^-2139062144)&d+-16843009))b=b+4|0;else break}if((d&255)<<24>>24)do b=b+1|0;while((a[b>>0]|0)!=0)}return b-f|0}function m2(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;h=l;l=l+48|0;g=h+16|0;f=h;e=h+32|0;if(!(b&4194368))e=0;else{c[e>>2]=d;i=(c[e>>2]|0)+(4-1)&~(4-1);d=c[i>>2]|0;c[e>>2]=i+4;e=d}c[f>>2]=a;c[f+4>>2]=b|32768;c[f+8>>2]=e;e=Ha(5,f|0)|0;if(!((b&524288|0)==0|(e|0)<0)){c[g>>2]=e;c[g+4>>2]=2;c[g+8>>2]=1;Ea(221,g|0)|0}i=c2(e)|0;l=h;return i|0}function n2(b,e){b=b|0;e=e|0;var f=0,g=0;g=0;while(1){if((d[144531+g>>0]|0)==(b|0)){b=2;break}f=g+1|0;if((f|0)==87){f=144619;g=87;b=5;break}else g=f}if((b|0)==2)if(!g)f=144619;else{f=144619;b=5}if((b|0)==5)while(1){do{b=f;f=f+1|0}while((a[b>>0]|0)!=0);g=g+-1|0;if(!g)break;else b=5}return o2(f,c[e+20>>2]|0)|0}function o2(a,b){a=a|0;b=b|0;return p2(a,b)|0}function p2(a,b){a=a|0;b=b|0;if(!b)b=0;else b=q2(c[b>>2]|0,c[b+4>>2]|0,a)|0;return (b|0?b:a)|0}function q2(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;o=(c[b>>2]|0)+1794895138|0;h=r2(c[b+8>>2]|0,o)|0;f=r2(c[b+12>>2]|0,o)|0;g=r2(c[b+16>>2]|0,o)|0;a:do if((h>>>0>>2>>>0?(n=d-(h<<2)|0,f>>>0>>0&g>>>0>>0):0)?((g|f)&3|0)==0:0){n=f>>>2;m=g>>>2;l=0;while(1){j=h>>>1;k=l+j|0;i=k<<1;g=i+n|0;f=r2(c[b+(g<<2)>>2]|0,o)|0;g=r2(c[b+(g+1<<2)>>2]|0,o)|0;if(!(g>>>0>>0&f>>>0<(d-g|0)>>>0)){f=0;break a}if(a[b+(g+f)>>0]|0){f=0;break a}f=s2(e,b+g|0)|0;if(!f)break;f=(f|0)<0;if((h|0)==1){f=0;break a}else{l=f?l:k;h=f?j:h-j|0}}f=i+m|0;g=r2(c[b+(f<<2)>>2]|0,o)|0;f=r2(c[b+(f+1<<2)>>2]|0,o)|0;if(f>>>0>>0&g>>>0<(d-f|0)>>>0)f=(a[b+(f+g)>>0]|0)==0?b+f|0:0;else f=0}else f=0;while(0);return f|0}function r2(a,b){a=a|0;b=b|0;var c=0;c=T6(a|0)|0;return ((b|0)==0?a:c)|0}function s2(b,c){b=b|0;c=c|0;var d=0,e=0;d=a[b>>0]|0;e=a[c>>0]|0;if(d<<24>>24==0?1:d<<24>>24!=e<<24>>24)b=e;else{do{b=b+1|0;c=c+1|0;d=a[b>>0]|0;e=a[c>>0]|0}while(!(d<<24>>24==0?1:d<<24>>24!=e<<24>>24));b=e}return (d&255)-(b&255)|0}function t2(a){a=a|0;return n2(a,c[(u2()|0)+188>>2]|0)|0}function u2(){return v2()|0}function v2(){return 62976}function w2(a,b,c){a=+a;b=+b;c=c|0;var d=0.0,e=0.0,f=0.0;f=a*a;d=f*(f*f)*(f*1.58969099521155e-10+-2.5050760253406863e-08)+(f*(f*2.7557313707070068e-06+-1.984126982985795e-04)+.00833333333332249);e=f*a;if(!c)a=e*(f*d+-.16666666666666632)+a;else a=a-(e*.16666666666666632+(f*(b*.5-e*d)-b));return +a}function x2(a){a=+a;var b=0,d=0,e=0,f=0,g=0.0,i=0.0,k=0.0,l=0.0,m=0.0;h[j>>3]=a;b=c[j>>2]|0;d=c[j+4>>2]|0;e=(d|0)<0;do if(e|d>>>0<1048576){if((b|0)==0&(d&2147483647|0)==0){a=-1.0/(a*a);break}if(e){a=(a-a)/0.0;break}else{h[j>>3]=a*18014398509481984.0;d=c[j+4>>2]|0;e=-1077;b=c[j>>2]|0;f=9;break}}else if(d>>>0<=2146435071)if((b|0)==0&0==0&(d|0)==1072693248)a=0.0;else{e=-1023;f=9}while(0);if((f|0)==9){f=d+614242|0;c[j>>2]=b;c[j+4>>2]=(f&1048575)+1072079006;m=+h[j>>3]+-1.0;k=m*(m*.5);i=m/(m+2.0);l=i*i;g=l*l;h[j>>3]=m-k;d=c[j+4>>2]|0;c[j>>2]=0;c[j+4>>2]=d;a=+h[j>>3];g=m-a-k+i*(k+(g*(g*(g*.15313837699209373+.22222198432149784)+.3999999999940942)+l*(g*(g*(g*.14798198605116586+.1818357216161805)+.2857142874366239)+.6666666666666735)));l=a*1.4426950407214463;k=+(e+(f>>>20)|0);i=l+k;a=i+(l+(k-i)+(g*1.4426950407214463+(g+a)*1.6751713164886512e-10))}return +a}function y2(a,b){a=+a;b=b|0;var d=0,e=0,f=0;h[j>>3]=a;d=c[j>>2]|0;e=c[j+4>>2]|0;f=Q6(d|0,e|0,52)|0;switch(f&2047){case 0:{if(a!=0.0){a=+y2(a*18446744073709551616.0,b);d=(c[b>>2]|0)+-64|0}else d=0;c[b>>2]=d;break}case 2047:break;default:{c[b>>2]=(f&2047)+-1022;c[j>>2]=d;c[j+4>>2]=e&-2146435073|1071644672;a=+h[j>>3]}}return +a}function z2(a,b){a=+a;b=+b;var c=0.0,d=0.0,e=0.0,f=0.0;c=a*a;d=c*c;e=c*.5;f=1.0-e;return +(f+(1.0-f-e+(c*(c*(c*(c*2.480158728947673e-05+-.001388888888887411)+.0416666666666666)+d*d*(c*(2.087572321298175e-09-c*1.1359647557788195e-11)+-2.7557314351390663e-07))-a*b)))}function A2(a){a=+a;var b=0,d=0,e=0,f=0,g=0.0,i=0.0,k=0.0,l=0.0,m=0.0;h[j>>3]=a;b=c[j>>2]|0;d=c[j+4>>2]|0;e=(d|0)<0;do if(e|d>>>0<1048576){if((b|0)==0&(d&2147483647|0)==0){a=-1.0/(a*a);break}if(e){a=(a-a)/0.0;break}else{h[j>>3]=a*18014398509481984.0;d=c[j+4>>2]|0;e=-1077;b=c[j>>2]|0;f=9;break}}else if(d>>>0<=2146435071)if((b|0)==0&0==0&(d|0)==1072693248)a=0.0;else{e=-1023;f=9}while(0);if((f|0)==9){f=d+614242|0;c[j>>2]=b;c[j+4>>2]=(f&1048575)+1072079006;k=+h[j>>3]+-1.0;i=k*(k*.5);l=k/(k+2.0);m=l*l;g=m*m;h[j>>3]=k-i;d=c[j+4>>2]|0;c[j>>2]=0;c[j+4>>2]=d;a=+h[j>>3];g=k-a-i+l*(i+(g*(g*(g*.15313837699209373+.22222198432149784)+.3999999999940942)+m*(g*(g*(g*.14798198605116586+.1818357216161805)+.2857142874366239)+.6666666666666735)));m=a*.4342944818781689;i=+(e+(f>>>20)|0);l=i*.30102999566361177;k=l+m;a=k+(m+(l-k)+(g*.4342944818781689+(i*3.694239077158931e-13+(g+a)*2.5082946711645275e-11)))}return +a}function B2(a,b){a=+a;b=b|0;var d=0,e=0.0,f=0.0,g=0.0,i=0,k=0.0,m=0,n=0,o=0,p=0,q=0,r=0,s=0.0;r=l;l=l+48|0;m=r+16|0;n=r;h[j>>3]=a;d=c[j>>2]|0;i=c[j+4>>2]|0;o=Q6(d|0,i|0,63)|0;q=i&2147483647;do if(q>>>0<1074752123)if((i&1048575|0)!=598523){d=(o|0)!=0;if(q>>>0<1073928573)if(d){g=a+1.5707963267341256;k=g+6.077100506506192e-11;h[b>>3]=k;h[b+8>>3]=g-k+6.077100506506192e-11;d=-1;break}else{g=a+-1.5707963267341256;k=g+-6.077100506506192e-11;h[b>>3]=k;h[b+8>>3]=g-k+-6.077100506506192e-11;d=1;break}else if(d){g=a+3.1415926534682512;k=g+1.2154201013012384e-10;h[b>>3]=k;h[b+8>>3]=g-k+1.2154201013012384e-10;d=-2;break}else{g=a+-3.1415926534682512;k=g+-1.2154201013012384e-10;h[b>>3]=k;h[b+8>>3]=g-k+-1.2154201013012384e-10;d=2;break}}else p=21;else{if(q>>>0<1075594812)if(q>>>0<1075183037){if((q|0)==1074977148){p=21;break}if(!o){g=a+-4.712388980202377;k=g+-1.8231301519518578e-10;h[b>>3]=k;h[b+8>>3]=g-k+-1.8231301519518578e-10;d=3;break}else{g=a+4.712388980202377;k=g+1.8231301519518578e-10;h[b>>3]=k;h[b+8>>3]=g-k+1.8231301519518578e-10;d=-3;break}}else{if((q|0)==1075388923){p=21;break}if(!o){g=a+-6.2831853069365025;k=g+-2.430840202602477e-10;h[b>>3]=k;h[b+8>>3]=g-k+-2.430840202602477e-10;d=4;break}else{g=a+6.2831853069365025;k=g+2.430840202602477e-10;h[b>>3]=k;h[b+8>>3]=g-k+2.430840202602477e-10;d=-4;break}}if(q>>>0>=1094263291){if(q>>>0>2146435071){k=a-a;h[b+8>>3]=k;h[b>>3]=k;d=0;break}c[j>>2]=d;c[j+4>>2]=i&1048575|1096810496;a=+h[j>>3];d=0;do{k=+(~~a|0);h[m+(d<<3)>>3]=k;a=(a-k)*134217728.0;d=d+1|0}while((d|0)!=2);h[m+16>>3]=a;if(a==0.0){d=1;while(1)if(+h[m+(d<<3)>>3]==0.0)d=d+-1|0;else break}else d=2;d=C2(m,n,(q>>>20)+-1046|0,d+1|0,1)|0;a=+h[n>>3];if(!o){h[b>>3]=a;h[b+8>>3]=+h[n+8>>3];break}else{h[b>>3]=-a;h[b+8>>3]=-+h[n+8>>3];d=0-d|0;break}}else p=21}while(0);if((p|0)==21){g=a*.6366197723675814+6755399441055744.0+-6755399441055744.0;d=~~g;e=a-g*1.5707963267341256;f=g*6.077100506506192e-11;a=e-f;h[b>>3]=a;h[j>>3]=a;p=Q6(c[j>>2]|0,c[j+4>>2]|0,52)|0;i=q>>>20;if((i-(p&2047)|0)>16){f=g*6.077100506303966e-11;k=e-f;f=g*2.0222662487959506e-21-(e-k-f);a=k-f;h[b>>3]=a;h[j>>3]=a;q=Q6(c[j>>2]|0,c[j+4>>2]|0,52)|0;s=g*2.0222662487111665e-21;e=k-s;g=g*8.4784276603689e-32-(k-e-s);if((i-(q&2047)|0)>49){a=e-g;h[b>>3]=a;f=g}else e=k}h[b+8>>3]=e-a-f}l=r;return d|0}function C2(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0.0,i=0.0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0.0;H=l;l=l+560|0;C=H+480|0;z=H+320|0;G=H+160|0;E=H;D=c[63220+(f<<2)>>2]|0;p=e+-1|0;y=(d+-3|0)/24|0;y=(y|0)>0?y:0;B=O(y,-24)|0;j=d+-24+B|0;if((D+p|0)>=0){n=D+e|0;k=y-p|0;m=0;while(1){if((k|0)<0)g=0.0;else g=+(c[63236+(k<<2)>>2]|0);h[z+(m<<3)>>3]=g;m=m+1|0;if((m|0)==(n|0))break;else k=k+1|0}}o=(e|0)>0;n=0;while(1){if(o){m=n+p|0;g=0.0;k=0;do{g=g+ +h[a+(k<<3)>>3]*+h[z+(m-k<<3)>>3];k=k+1|0}while((k|0)!=(e|0))}else g=0.0;h[E+(n<<3)>>3]=g;if((n|0)<(D|0))n=n+1|0;else break}t=(j|0)>0;u=24-j|0;v=23-j|0;w=(e|0)>0;x=(j|0)==0;k=D;a:while(1){g=+h[E+(k<<3)>>3];o=(k|0)>0;if(o){m=k;n=0;while(1){i=+(~~(g*5.9604644775390625e-08)|0);c[C+(n<<2)>>2]=~~(g-i*134217728.0);s=m;m=m+-1|0;g=+h[E+(m<<3)>>3]+i;if((s|0)<=1)break;else n=n+1|0}}g=+D2(g,j);g=g-+A(+(g*.125))*8.0;m=~~g;g=g-+(m|0);do if(!t)if(!x)if(!(g>=.5)){p=0;s=m;break}else{n=2;F=20;break}else{n=c[C+(k+-1<<2)>>2]>>23;F=19;break}else{s=C+(k+-1<<2)|0;n=c[s>>2]|0;F=n>>u;n=n-(F<>2]=n;n=n>>v;m=F+m|0;F=19}while(0);if((F|0)==19){F=0;if((n|0)>0)F=20;else{p=n;s=m}}if((F|0)==20){F=0;s=m+1|0;if(o){m=0;r=0;do{p=C+(r<<2)|0;q=c[p>>2]|0;if(!m)if(!q)m=0;else{m=1;o=134217728;F=23}else{o=16777215;F=23}if((F|0)==23){F=0;c[p>>2]=o-q}r=r+1|0}while((r|0)!=(k|0))}else m=0;b:do if(t){switch(j|0){case 1:{o=8388607;break}case 2:{o=4194303;break}default:break b}r=C+(k+-1<<2)|0;c[r>>2]=c[r>>2]&o}while(0);if((n|0)==2){g=1.0-g;if(!m)p=2;else{p=2;g=g-+D2(1.0,j)}}else p=n}if(!(g==0.0)){F=42;break}if((k|0)>(D|0)){m=0;n=k;do{n=n+-1|0;m=c[C+(n<<2)>>2]|m}while((n|0)>(D|0));if(m){F=41;break}else m=1}else m=1;while(1)if(!(c[C+(D-m<<2)>>2]|0))m=m+1|0;else break;o=m+k|0;if((m|0)<=0){k=o;continue}while(1){n=k+1|0;m=k+e|0;h[z+(m<<3)>>3]=+(c[63236+(n+y<<2)>>2]|0);if(w){g=0.0;k=0;do{g=g+ +h[a+(k<<3)>>3]*+h[z+(m-k<<3)>>3];k=k+1|0}while((k|0)!=(e|0))}else g=0.0;h[E+(n<<3)>>3]=g;if((n|0)<(o|0))k=n;else{k=o;continue a}}}if((F|0)==41)while(1){F=0;j=j+-24|0;k=k+-1|0;if(!(c[C+(k<<2)>>2]|0))F=41;else{o=k;break}}else if((F|0)==42){g=+D2(g,0-j|0);if(g>=134217728.0){i=+(~~(g*5.9604644775390625e-08)|0);c[C+(k<<2)>>2]=~~(g-i*134217728.0);j=B+d|0;k=k+1|0;g=i}c[C+(k<<2)>>2]=~~g;o=k}n=(o|0)>-1;if(n){g=+D2(1.0,j);j=o;while(1){h[E+(j<<3)>>3]=g*+(c[C+(j<<2)>>2]|0);if((j|0)>0){g=g*5.9604644775390625e-08;j=j+-1|0}else break}if(n){k=o;while(1){m=o-k|0;j=0;g=0.0;while(1){g=g+ +h[10904+(j<<3)>>3]*+h[E+(j+k<<3)>>3];if((j|0)>=(D|0)|(j|0)>=(m|0))break;else j=j+1|0}h[G+(m<<3)>>3]=g;if((k|0)>0)k=k+-1|0;else break}}}switch(f|0){case 0:{if(n){g=0.0;j=o;while(1){g=g+ +h[G+(j<<3)>>3];if((j|0)>0)j=j+-1|0;else break}}else g=0.0;i=(p|0)==0?g:-g;F=73;break}case 2:case 1:{if(n){g=0.0;j=o;while(1){g=g+ +h[G+(j<<3)>>3];if((j|0)>0)j=j+-1|0;else break}}else g=0.0;k=(p|0)==0;h[b>>3]=k?g:-g;g=+h[G>>3]-g;if((o|0)>=1){j=1;while(1){g=g+ +h[G+(j<<3)>>3];if((j|0)==(o|0))break;else j=j+1|0}}i=k?g:-g;b=b+8|0;F=73;break}case 3:{if((o|0)>0){j=o;g=+h[G+(o<<3)>>3];do{F=j;j=j+-1|0;E=G+(j<<3)|0;i=+h[E>>3];I=g;g=i+g;h[G+(F<<3)>>3]=I+(i-g);h[E>>3]=g}while((F|0)>1);k=(o|0)>1;if(k){j=o;g=+h[G+(o<<3)>>3];do{F=j;j=j+-1|0;E=G+(j<<3)|0;I=+h[E>>3];i=g;g=I+g;h[G+(F<<3)>>3]=i+(I-g);h[E>>3]=g}while((F|0)>2);if(k){j=o;i=0.0;while(1){i=i+ +h[G+(j<<3)>>3];if((j|0)>2)j=j+-1|0;else break}}else i=0.0}else i=0.0}else i=0.0;g=+h[G>>3];if(!p){h[b>>3]=g;g=+h[G+8>>3]}else{h[b>>3]=-g;i=-i;g=-+h[G+8>>3]}h[b+8>>3]=g;b=b+16|0;F=73;break}default:{}}if((F|0)==73)h[b>>3]=i;l=H;return s&7|0}function D2(a,b){a=+a;b=b|0;var d=0,e=0;if((b|0)<=1023){if((b|0)<-1022){a=a*2.2250738585072014e-308;e=(b|0)<-2044;d=b+2044|0;a=e?a*2.2250738585072014e-308:a;b=e?((d|0)>-1022?d:-1022):b+1022|0}}else{a=a*8988465674311579538646525.0e283;d=(b|0)>2046;e=b+-2046|0;a=d?a*8988465674311579538646525.0e283:a;b=d?((e|0)<1023?e:1023):b+-1023|0}d=R6(b+1023|0,0,52)|0;e=z;c[j>>2]=d;c[j+4>>2]=e;return +(a*+h[j>>3])}function E2(a){a=+a;var b=0,d=0,e=0,f=0.0,g=0.0;h[j>>3]=a;d=c[j+4>>2]|0;b=d&2147483647;do if(b>>>0>2146435071)a=a+a;else{if(b>>>0<1048576){h[j>>3]=a*18014398509481984.0;d=c[j+4>>2]|0;b=d&2147483647;if(!b)break;else e=696219795}else e=715094163;c[j>>2]=0;c[j+4>>2]=((b>>>0)/3|0)+e|d&-2147483648;f=+h[j>>3];g=f*f*(f/a);h[j>>3]=(g*(g*g)*(g*.14599619288661245+-.758397934778766)+(g*(g*1.6214297201053545+-1.8849797954337717)+1.87595182427177))*f;d=J6(c[j>>2]|0,c[j+4>>2]|0,-2147483648,0)|0;e=z;c[j>>2]=d&-1073741824;c[j+4>>2]=e;f=+h[j>>3];a=a/(f*f);a=(a-f)/(f+f+a)*f+f}while(0);return +a}function F2(a,b){a=+a;b=+b;var d=0,e=0;h[j>>3]=a;e=c[j>>2]|0;d=c[j+4>>2]|0;h[j>>3]=b;d=c[j+4>>2]&-2147483648|d&2147483647;c[j>>2]=e;c[j+4>>2]=d;return +(+h[j>>3])}function G2(a,b){a=+a;b=+b;return +(+F2(a,b))}function H2(a,b){a=+a;b=b|0;return +(+D2(a,b))}function I2(a,b){a=+a;b=+b;return +(+J2(a,b))}function J2(a,b){a=+a;b=+b;var d=0,e=0,f=0,g=0,i=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;h[j>>3]=a;i=c[j>>2]|0;l=c[j+4>>2]|0;h[j>>3]=b;n=c[j>>2]|0;o=c[j+4>>2]|0;e=Q6(i|0,l|0,52)|0;e=e&2047;m=Q6(n|0,o|0,52)|0;m=m&2047;p=l&-2147483648;g=R6(n|0,o|0,1)|0;k=z;a:do if(!((g|0)==0&(k|0)==0)?(f=K2(b)|0,d=z&2147483647,!((e|0)==2047|(d>>>0>2146435072|(d|0)==2146435072&f>>>0>0))):0){d=R6(i|0,l|0,1)|0;f=z;if(!(f>>>0>k>>>0|(f|0)==(k|0)&d>>>0>g>>>0))return +((d|0)==(g|0)&(f|0)==(k|0)?a*0.0:a);if(!e){d=R6(i|0,l|0,12)|0;f=z;if((f|0)>-1|(f|0)==-1&d>>>0>4294967295){e=0;do{e=e+-1|0;d=R6(d|0,f|0,1)|0;f=z}while((f|0)>-1|(f|0)==-1&d>>>0>4294967295)}else e=0;i=R6(i|0,l|0,1-e|0)|0;g=z}else g=l&1048575|1048576;if(!m){f=R6(n|0,o|0,12)|0;k=z;if((k|0)>-1|(k|0)==-1&f>>>0>4294967295){d=0;do{d=d+-1|0;f=R6(f|0,k|0,1)|0;k=z}while((k|0)>-1|(k|0)==-1&f>>>0>4294967295)}else d=0;n=R6(n|0,o|0,1-d|0)|0;m=d;l=z}else l=o&1048575|1048576;f=K6(i|0,g|0,n|0,l|0)|0;d=z;k=(d|0)>-1|(d|0)==-1&f>>>0>4294967295;b:do if((e|0)>(m|0)){while(1){if(k){if((f|0)==0&(d|0)==0)break}else{f=i;d=g}i=R6(f|0,d|0,1)|0;g=z;e=e+-1|0;f=K6(i|0,g|0,n|0,l|0)|0;d=z;k=(d|0)>-1|(d|0)==-1&f>>>0>4294967295;if((e|0)<=(m|0))break b}b=a*0.0;break a}while(0);if(k){if((f|0)==0&(d|0)==0){b=a*0.0;break}}else{d=g;f=i}if(d>>>0<1048576|(d|0)==1048576&f>>>0<0)do{f=R6(f|0,d|0,1)|0;d=z;e=e+-1|0}while(d>>>0<1048576|(d|0)==1048576&f>>>0<0);if((e|0)>0){o=J6(f|0,d|0,0,-1048576)|0;d=z;e=R6(e|0,0,52)|0;d=d|z;e=o|e}else{e=Q6(f|0,d|0,1-e|0)|0;d=z}c[j>>2]=e;c[j+4>>2]=d|p;b=+h[j>>3]}else q=3;while(0);if((q|0)==3){b=a*b;b=b/b}return +b}function K2(a){a=+a;var b=0;h[j>>3]=a;b=c[j>>2]|0;z=c[j+4>>2]|0;return b|0}function L2(a,b){a=+a;b=+b;var d=0.0,e=0,f=0,g=0,i=0,k=0.0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;q=l;l=l+32|0;m=q+24|0;n=q+16|0;o=q+8|0;p=q;h[j>>3]=a;t=c[j>>2]|0;g=c[j+4>>2]|0;h[j>>3]=b;e=c[j>>2]|0;g=g&2147483647;f=c[j+4>>2]&2147483647;i=g>>>0>>0|(g|0)==(f|0)&t>>>0>>0;s=i?e:t;r=i?f:g;e=i?t:e;f=i?g:f;g=Q6(s|0,r|0,52)|0;i=Q6(e|0,f|0,52)|0;c[j>>2]=s;c[j+4>>2]=r;a=+h[j>>3];c[j>>2]=e;c[j+4>>2]=f;k=+h[j>>3];do if((i|0)!=2047){if(!((e|0)==0&(f|0)==0|(g|0)==2047)){if((g-i|0)>64){a=a+k;break}if((g|0)>1533){d=5260135901548373507240989.0e186;b=a*1.90109156629516e-211;a=k*1.90109156629516e-211}else{t=(i|0)<573;d=t?1.90109156629516e-211:1.0;b=t?a*5260135901548373507240989.0e186:a;a=t?k*5260135901548373507240989.0e186:k}M2(m,n,b);M2(o,p,a);a=d*+C(+(+h[p>>3]+ +h[n>>3]+ +h[o>>3]+ +h[m>>3]))}}else a=k;while(0);l=q;return +a}function M2(a,b,c){a=a|0;b=b|0;c=+c;var d=0.0,e=0.0;e=c*134217729.0;e=e+(c-e);d=c-e;c=c*c;h[a>>3]=c;h[b>>3]=d*d+(e*e-c+e*2.0*d);return}function N2(a,b,d){a=+a;b=b|0;d=d|0;var e=0.0,f=0,g=0,i=0.0,k=0,m=0;k=l;l=l+16|0;g=k;h[j>>3]=a;f=c[j+4>>2]&2147483647;do if(f>>>0<1072243196)if(f>>>0<1044816030){h[b>>3]=a;h[d>>3]=1.0;break}else{h[b>>3]=+w2(a,0.0,0);h[d>>3]=+z2(a,0.0);break}else{if(f>>>0>2146435071){i=a-a;h[d>>3]=i;h[b>>3]=i;break}f=B2(a,g)|0;m=g+8|0;e=+w2(+h[g>>3],+h[m>>3],1);a=+z2(+h[g>>3],+h[m>>3]);switch(f&3){case 0:{h[b>>3]=e;i=a;break}case 1:{h[b>>3]=a;i=-e;break}case 2:{h[b>>3]=-e;i=-a;break}case 3:{h[b>>3]=-a;i=e;break}default:{}}h[d>>3]=i}while(0);l=k;return}function O2(a,b){a=+a;b=b|0;return +(+y2(a,b))}function P2(a){a=a|0;if(a>>>0<131072)a=(d[146423+((d[146423+(a>>>8)>>0]|0)<<5|a>>>3&31)>>0]|0)>>>(a&7)&1;else a=0;return a|0}function Q2(b,c,e){b=b|0;c=c|0;e=e|0;var f=0,g=0;if(!e)f=0;else{f=a[b>>0]|0;a:do if(!(f<<24>>24))f=0;else while(1){e=e+-1|0;g=a[c>>0]|0;if(!(f<<24>>24==g<<24>>24&((e|0)!=0&g<<24>>24!=0)))break a;b=b+1|0;c=c+1|0;f=a[b>>0]|0;if(!(f<<24>>24)){f=0;break}}while(0);f=(f&255)-(d[c>>0]|0)|0}return f|0}function R2(b,c){b=b|0;c=c|0;b=k2(b,c)|0;return ((a[b>>0]|0)==(c&255)<<24>>24?b:0)|0}function S2(a){a=a|0;return ((a|0)==32|(a+-9|0)>>>0<5)&1|0}function T2(a,b,c){a=a|0;b=b|0;c=c|0;c=V2(a,b,c,-1,0)|0;return c|0}function U2(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;h=d&255;f=(e|0)!=0;a:do if(f&(b&3|0)!=0){g=d&255;while(1){if((a[b>>0]|0)==g<<24>>24){i=6;break a}b=b+1|0;e=e+-1|0;f=(e|0)!=0;if(!(f&(b&3|0)!=0)){i=5;break}}}else i=5;while(0);if((i|0)==5)if(f)i=6;else e=0;b:do if((i|0)==6){g=d&255;if((a[b>>0]|0)!=g<<24>>24){f=O(h,16843009)|0;c:do if(e>>>0>3)while(1){h=c[b>>2]^f;if((h&-2139062144^-2139062144)&h+-16843009|0)break;b=b+4|0;e=e+-4|0;if(e>>>0<=3){i=11;break c}}else i=11;while(0);if((i|0)==11)if(!e){e=0;break}while(1){if((a[b>>0]|0)==g<<24>>24)break b;b=b+1|0;e=e+-1|0;if(!e){e=0;break}}}}while(0);return (e|0?b:0)|0}function V2(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0;j=l;l=l+128|0;h=j;c[h>>2]=0;i=h+4|0;c[i>>2]=a;c[h+44>>2]=a;g=h+8|0;c[g>>2]=(a|0)<0?-1:a+2147483647|0;c[h+76>>2]=-1;W2(h,0);d=X2(h,d,1,e,f)|0;if(b|0)c[b>>2]=a+((c[i>>2]|0)+(c[h+108>>2]|0)-(c[g>>2]|0));l=j;return d|0}function W2(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;c[a+104>>2]=b;d=c[a+8>>2]|0;e=c[a+4>>2]|0;f=d-e|0;c[a+108>>2]=f;c[a+100>>2]=(b|0)!=0&(f|0)>(b|0)?e+b|0:d;return}function X2(b,e,f,g,h){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;a:do if(e>>>0>36){c[(d2()|0)>>2]=22;h=0;g=0}else{r=b+4|0;q=b+100|0;do{i=c[r>>2]|0;if(i>>>0<(c[q>>2]|0)>>>0){c[r>>2]=i+1;i=d[i>>0]|0}else i=Y2(b)|0}while((S2(i)|0)!=0);b:do switch(i|0){case 43:case 45:{i=((i|0)==45)<<31>>31;j=c[r>>2]|0;if(j>>>0<(c[q>>2]|0)>>>0){c[r>>2]=j+1;p=i;i=d[j>>0]|0;break b}else{p=i;i=Y2(b)|0;break b}}default:p=0}while(0);j=(e|0)==0;do if((e|16|0)==16&(i|0)==48){i=c[r>>2]|0;if(i>>>0<(c[q>>2]|0)>>>0){c[r>>2]=i+1;i=d[i>>0]|0}else i=Y2(b)|0;if((i|32|0)!=120)if(j){e=8;n=46;break}else{n=32;break}i=c[r>>2]|0;if(i>>>0<(c[q>>2]|0)>>>0){c[r>>2]=i+1;i=d[i>>0]|0}else i=Y2(b)|0;if((d[149592+i>>0]|0)>15){g=(c[q>>2]|0)==0;if(!g)c[r>>2]=(c[r>>2]|0)+-1;if(!f){W2(b,0);h=0;g=0;break a}if(g){h=0;g=0;break a}c[r>>2]=(c[r>>2]|0)+-1;h=0;g=0;break a}else{e=16;n=46}}else{e=j?10:e;if(e>>>0>(d[149592+i>>0]|0)>>>0)n=32;else{if(c[q>>2]|0)c[r>>2]=(c[r>>2]|0)+-1;W2(b,0);c[(d2()|0)>>2]=22;h=0;g=0;break a}}while(0);c:do if((n|0)==32)if((e|0)==10){e=i+-48|0;if(e>>>0<10){i=0;j=e;do{i=(i*10|0)+j|0;e=c[r>>2]|0;if(e>>>0<(c[q>>2]|0)>>>0){c[r>>2]=e+1;e=d[e>>0]|0}else e=Y2(b)|0;j=e+-48|0}while(j>>>0<10&i>>>0<429496729);f=0}else{e=i;i=0;f=0}k=e+-48|0;if(k>>>0<10){j=e;do{e=I6(i|0,f|0,10,0)|0;l=z;m=((k|0)<0)<<31>>31;o=~m;if(l>>>0>o>>>0|(l|0)==(o|0)&e>>>0>~k>>>0){e=10;n=72;break c}i=J6(e|0,l|0,k|0,m|0)|0;f=z;e=c[r>>2]|0;if(e>>>0<(c[q>>2]|0)>>>0){c[r>>2]=e+1;j=d[e>>0]|0}else j=Y2(b)|0;k=j+-48|0}while(k>>>0<10&(f>>>0<429496729|(f|0)==429496729&i>>>0<2576980378));if(k>>>0>9){j=p;e=f}else{e=10;n=72}}else{j=p;e=f}}else n=46;while(0);d:do if((n|0)==46){if(!(e+-1&e)){n=a[149848+((e*23|0)>>>5&7)>>0]|0;f=a[149592+i>>0]|0;j=f&255;if(e>>>0>j>>>0){i=0;k=j;do{i=k|i<>2]|0;if(j>>>0<(c[q>>2]|0)>>>0){c[r>>2]=j+1;j=d[j>>0]|0}else j=Y2(b)|0;f=a[149592+j>>0]|0;k=f&255}while(i>>>0<134217728&e>>>0>k>>>0);k=0}else{j=i;k=0;i=0}l=Q6(-1,-1,n|0)|0;m=z;if(e>>>0<=(f&255)>>>0|(m>>>0>>0|(m|0)==(k|0)&l>>>0>>0)){f=k;n=72;break}else j=k;while(1){i=R6(i|0,j|0,n|0)|0;k=z;i=i|f&255;j=c[r>>2]|0;if(j>>>0<(c[q>>2]|0)>>>0){c[r>>2]=j+1;j=d[j>>0]|0}else j=Y2(b)|0;f=a[149592+j>>0]|0;if(e>>>0<=(f&255)>>>0|(k>>>0>m>>>0|(k|0)==(m|0)&i>>>0>l>>>0)){f=k;n=72;break d}else j=k}}f=a[149592+i>>0]|0;j=f&255;if(e>>>0>j>>>0){i=0;k=j;do{i=k+(O(i,e)|0)|0;j=c[r>>2]|0;if(j>>>0<(c[q>>2]|0)>>>0){c[r>>2]=j+1;j=d[j>>0]|0}else j=Y2(b)|0;f=a[149592+j>>0]|0;k=f&255}while(i>>>0<119304647&e>>>0>k>>>0);k=0}else{j=i;i=0;k=0}if(e>>>0>(f&255)>>>0){n=N6(-1,-1,e|0,0)|0;o=z;m=k;while(1){if(m>>>0>o>>>0|(m|0)==(o|0)&i>>>0>n>>>0){f=m;n=72;break d}k=I6(i|0,m|0,e|0,0)|0;l=z;f=f&255;if(l>>>0>4294967295|(l|0)==-1&k>>>0>~f>>>0){f=m;n=72;break d}i=J6(k|0,l|0,f|0,0)|0;k=z;j=c[r>>2]|0;if(j>>>0<(c[q>>2]|0)>>>0){c[r>>2]=j+1;j=d[j>>0]|0}else j=Y2(b)|0;f=a[149592+j>>0]|0;if(e>>>0<=(f&255)>>>0){f=k;n=72;break}else m=k}}else{f=k;n=72}}while(0);if((n|0)==72)if(e>>>0>(d[149592+j>>0]|0)>>>0){do{i=c[r>>2]|0;if(i>>>0<(c[q>>2]|0)>>>0){c[r>>2]=i+1;i=d[i>>0]|0}else i=Y2(b)|0}while(e>>>0>(d[149592+i>>0]|0)>>>0);c[(d2()|0)>>2]=34;j=(g&1|0)==0&0==0?p:0;e=h;i=g}else{j=p;e=f}if(c[q>>2]|0)c[r>>2]=(c[r>>2]|0)+-1;if(!(e>>>0>>0|(e|0)==(h|0)&i>>>0>>0)){if(!((g&1|0)!=0|0!=0|(j|0)!=0)){c[(d2()|0)>>2]=34;g=J6(g|0,h|0,-1,-1)|0;h=z;break}if(e>>>0>h>>>0|(e|0)==(h|0)&i>>>0>g>>>0){c[(d2()|0)>>2]=34;break}}g=((j|0)<0)<<31>>31;g=K6(i^j|0,e^g|0,j|0,g|0)|0;h=z}while(0);z=h;return g|0}function Y2(b){b=b|0;var e=0,f=0,g=0,h=0,i=0,j=0;f=b+104|0;h=c[f>>2]|0;if((h|0)!=0?(c[b+108>>2]|0)>=(h|0):0)i=4;else{e=Z2(b)|0;if((e|0)>=0){g=c[f>>2]|0;f=b+8|0;if(g){j=c[f>>2]|0;h=c[b+4>>2]|0;f=g-(c[b+108>>2]|0)|0;g=j;if((j-h|0)<(f|0))f=g;else f=h+(f+-1)|0}else{g=c[f>>2]|0;f=g}c[b+100>>2]=f;f=b+4|0;if(!g)f=c[f>>2]|0;else{f=c[f>>2]|0;j=b+108|0;c[j>>2]=g+1-f+(c[j>>2]|0)}f=f+-1|0;if((e|0)!=(d[f>>0]|0|0))a[f>>0]=e}else i=4}if((i|0)==4){c[b+100>>2]=0;e=-1}return e|0}function Z2(a){a=a|0;var b=0,e=0;e=l;l=l+16|0;b=e;if((_2(a)|0)==0?(nb[c[a+32>>2]&63](a,b,1)|0)==1:0)a=d[b>>0]|0;else a=-1;l=e;return a|0}function _2(b){b=b|0;var d=0,e=0;d=b+74|0;e=a[d>>0]|0;a[d>>0]=e+255|e;d=b+20|0;e=b+28|0;if((c[d>>2]|0)>>>0>(c[e>>2]|0)>>>0)nb[c[b+36>>2]&63](b,0,0)|0;c[b+16>>2]=0;c[e>>2]=0;c[d>>2]=0;d=c[b>>2]|0;if(!(d&4)){e=(c[b+44>>2]|0)+(c[b+48>>2]|0)|0;c[b+8>>2]=e;c[b+4>>2]=e;d=d<<27>>31}else{c[b>>2]=d|32;d=-1}return d|0}function $2(a){a=a|0;return (a+-48|0)>>>0<10|0}function a3(a){a=a|0;return ((a+-48|0)>>>0<10|(b3(a)|0)!=0)&1|0}function b3(a){a=a|0;return ((a|32)+-97|0)>>>0<26|0}function c3(b,c){b=b|0;c=c|0;var e=0,f=0,g=0;e=a[b>>0]|0;a:do if(!(e<<24>>24))e=0;else{g=e&255;while(1){f=a[c>>0]|0;if(!(f<<24>>24))break a;if(e<<24>>24!=f<<24>>24?(g=d3(g)|0,(g|0)!=(d3(f&255)|0)):0)break a;b=b+1|0;c=c+1|0;e=a[b>>0]|0;if(!(e<<24>>24)){e=0;break}else g=e&255}}while(0);g=d3(e&255)|0;return g-(d3(d[c>>0]|0)|0)|0}function d3(a){a=a|0;var b=0;b=(e3(a)|0)==0;return (b?a:a|32)|0}function e3(a){a=a|0;return (a+-65|0)>>>0<26|0}function f3(a){a=a|0;return g3(a,0)|0}function g3(c,f){c=c|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0;k=(f<<1)+-1|0;l=f+-1|0;a:do if(!((c+-43008|0)>>>0<22272|((c+-11776|0)>>>0<30784|((c+-1536|0)>>>0<2560|(h3(c)|0)==0)))){g=(f|0)!=0;if(g&(c+-4256|0)>>>0<46){if((c|0)>4293)switch(c|0){case 4295:case 4301:break;default:break a}c=c+7264|0;break}if((c+-11520|0)>>>0<38&(g^1)){c=c+-7264|0;break}else g=0;do{i=a[66346+(g<<2)+2>>0]|0;j=i<<24>>24;h=c-(e[66346+(g<<2)>>1]|0)|0;if((h-(l&j)|0)>>>0<(d[66346+(g<<2)+3>>0]|0)>>>0){m=11;break}g=g+1|0}while((g|0)!=61);if((m|0)==11)if(i<<24>>24==1){c=f+c-(h&1)|0;break}else{c=(O(k,j)|0)+c|0;break}i=1-f|0;g=b[65858+(i<<1)>>1]|0;b:do if(g<<16>>16){h=0;while(1){if((g&65535|0)==(c|0))break;h=h+1|0;g=b[65858+(h<<2)+(i<<1)>>1]|0;if(!(g<<16>>16))break b}c=e[65858+(h<<2)+(f<<1)>>1]|0;break a}while(0);return ((c+-66600+(f*40|0)|0)>>>0<40?c+-40+(f*80|0)|0:c)|0}while(0);return c|0}function h3(a){a=a|0;if(a>>>0<131072)a=(d[149857+((d[149857+(a>>>8)>>0]|0)<<5|a>>>3&31)>>0]|0)>>>(a&7)&1;else a=a>>>0<196606&1;return a|0}function i3(a){a=a|0;var b=0;b=a;while(1)if(!(c[b>>2]|0))break;else b=b+4|0;return b-a>>2|0}function j3(b,c,e){b=b|0;c=c|0;e=e|0;var f=0,g=0,h=0;if(!e)b=0;else{f=a[b>>0]|0;a:do if(!(f<<24>>24))b=0;else{h=b;b=f;f=f&255;while(1){e=e+-1|0;g=a[c>>0]|0;if(!((e|0)!=0&g<<24>>24!=0))break a;if(b<<24>>24!=g<<24>>24?(f=d3(f)|0,(f|0)!=(d3(g&255)|0)):0)break a;h=h+1|0;c=c+1|0;f=a[h>>0]|0;if(!(f<<24>>24)){b=0;break}else{b=f;f=f&255}}}while(0);b=d3(b&255)|0;b=b-(d3(d[c>>0]|0)|0)|0}return b|0}function k3(a){a=a|0;if(a>>>0>=255)if((a+-57344|0)>>>0<8185|(a>>>0<8232|(a+-8234|0)>>>0<47062))a=1;else return (a&65534|0)!=65534&(a+-65532|0)>>>0<1048580&1|0;else a=(a+1&127)>>>0>32&1;return a|0}function l3(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0;k=l;l=l+16|0;g=k;i=(f|0)==0?190640:f;f=c[i>>2]|0;a:do if(!d)if(!f)f=0;else j=17;else{h=(b|0)==0?g:b;if(!e)f=-2;else{if(!f){f=a[d>>0]|0;if(f<<24>>24>-1){c[h>>2]=f&255;f=f<<24>>24!=0&1;break}g=(c[c[(p3()|0)+188>>2]>>2]|0)==0;f=a[d>>0]|0;if(g){c[h>>2]=f<<24>>24&57343;f=1;break}f=(f&255)+-194|0;if(f>>>0>50){j=17;break}f=c[62384+(f<<2)>>2]|0;g=e+-1|0;if(g){d=d+1|0;j=11}}else{g=e;j=11}b:do if((j|0)==11){b=a[d>>0]|0;m=(b&255)>>>3;if((m+-16|m+(f>>26))>>>0>7){j=17;break a}while(1){d=d+1|0;f=(b&255)+-128|f<<6;g=g+-1|0;if((f|0)>=0)break;if(!g)break b;b=a[d>>0]|0;if((b&-64)<<24>>24!=-128){j=17;break a}}c[i>>2]=0;c[h>>2]=f;f=e-g|0;break a}while(0);c[i>>2]=f;f=-2}}while(0);if((j|0)==17){c[i>>2]=0;c[(d2()|0)>>2]=84;f=-1}l=k;return f|0}function m3(a,b){a=a|0;b=b|0;if(!a)a=0;else a=n3(a,b,0)|0;return a|0}function n3(b,d,e){b=b|0;d=d|0;e=e|0;do if(b){if(d>>>0<128){a[b>>0]=d;b=1;break}if(!(c[c[(o3()|0)+188>>2]>>2]|0))if((d&-128|0)==57216){a[b>>0]=d;b=1;break}else{c[(d2()|0)>>2]=84;b=-1;break}if(d>>>0<2048){a[b>>0]=d>>>6|192;a[b+1>>0]=d&63|128;b=2;break}if(d>>>0<55296|(d&-8192|0)==57344){a[b>>0]=d>>>12|224;a[b+1>>0]=d>>>6&63|128;a[b+2>>0]=d&63|128;b=3;break}if((d+-65536|0)>>>0<1048576){a[b>>0]=d>>>18|240;a[b+1>>0]=d>>>12&63|128;a[b+2>>0]=d>>>6&63|128;a[b+3>>0]=d&63|128;b=4;break}else{c[(d2()|0)>>2]=84;b=-1;break}}else b=1;while(0);return b|0}function o3(){return v2()|0}function p3(){return v2()|0}function q3(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;p=l;l=l+272|0;n=p+8|0;o=p;do if(!(a[d>>0]|0)){d=Ta(152833)|0;if(d|0?a[d>>0]|0:0)break;d=Ta(152840+(b*12|0)|0)|0;if(d|0?a[d>>0]|0:0)break;d=Ta(152912)|0;if(d|0?a[d>>0]|0:0)break;d=152917}while(0);e=0;a:do{switch(a[d+e>>0]|0){case 47:case 0:break a;default:{}}e=e+1|0}while(e>>>0<15);f=a[d>>0]|0;if(f<<24>>24!=46?(a[d+e>>0]|0)==0:0)if(f<<24>>24==67)m=15;else{k=d;m=16}else{d=152917;m=15}if((m|0)==15)if(!(a[d+1>>0]|0))m=18;else{k=d;m=16}b:do if((m|0)==16)if((s2(k,152917)|0)!=0?(s2(k,152925)|0)!=0:0){d=c[47661]|0;if(d|0)do{if(!(s2(k,d+8|0)|0))break b;d=c[d+24>>2]|0}while((d|0)!=0);ta(190648);d=c[47661]|0;c:do if(d|0){while(1){if(!(s2(k,d+8|0)|0))break;d=c[d+24>>2]|0;if(!d)break c}La(190648);break b}while(0);d:do if(((c[47646]|0)==0?(g=Ta(152931)|0,(g|0)!=0):0)?(a[g>>0]|0)!=0:0){i=254-e|0;j=e+1|0;f=g;while(1){h=k2(f,58)|0;d=a[h>>0]|0;g=h-f+((d<<24>>24!=0)<<31>>31)|0;if(g>>>0>>0){W6(n|0,f|0,g|0)|0;f=n+g|0;a[f>>0]=47;W6(f+1|0,k|0,e|0)|0;a[n+(j+g)>>0]=0;f=ua(n|0,o|0)|0;if(f|0)break;d=a[h>>0]|0}f=h+(d<<24>>24!=0&1)|0;if(!(a[f>>0]|0)){m=41;break d}}d=T1(28)|0;if(!d){h2(f,c[o>>2]|0)|0;m=41;break}else{c[d>>2]=f;c[d+4>>2]=c[o>>2];o=d+8|0;W6(o|0,k|0,e|0)|0;a[o+e>>0]=0;c[d+24>>2]=c[47661];c[47661]=d;break}}else m=41;while(0);if((m|0)==41){d=T1(28)|0;if(d){c[d>>2]=c[15584];c[d+4>>2]=c[15585];o=d+8|0;W6(o|0,k|0,e|0)|0;a[o+e>>0]=0;c[d+24>>2]=c[47661];c[47661]=d}}La(190648);d=(b|0)==0&(d|0)==0?62336:d}else{d=k;m=18}while(0);do if((m|0)==18){if((b|0)==0?(a[d+1>>0]|0)==46:0){d=62336;break}d=0}while(0);l=p;return d|0}function r3(a,b){a=a|0;b=b|0;s3(a,b)|0;return a|0}function s3(b,d){b=b|0;d=d|0;var e=0,f=0;e=d;a:do if(!((e^b)&3)){if(e&3)do{e=a[d>>0]|0;a[b>>0]=e;if(!(e<<24>>24))break a;d=d+1|0;b=b+1|0}while((d&3|0)!=0);e=c[d>>2]|0;if(!((e&-2139062144^-2139062144)&e+-16843009)){f=b;while(1){d=d+4|0;b=f+4|0;c[f>>2]=e;e=c[d>>2]|0;if((e&-2139062144^-2139062144)&e+-16843009|0)break;else f=b}}f=8}else f=8;while(0);if((f|0)==8){f=a[d>>0]|0;a[b>>0]=f;if(f<<24>>24)do{d=d+1|0;b=b+1|0;f=a[d>>0]|0;a[b>>0]=f}while(f<<24>>24!=0)}return b|0}function t3(a){a=a|0;return ((a|0)==32|(a|0)==9)&1|0}function u3(a){a=a|0;if(!a)a=0;else a=(v3(63500,a)|0)!=0&1;return a|0}function v3(a,b){a=a|0;b=b|0;var d=0;if(!b)a=a+((i3(a)|0)<<2)|0;else{while(1){d=c[a>>2]|0;if((d|0)==0|(d|0)==(b|0))break;else a=a+4|0}a=d|0?a:0}return a|0}function w3(a,b){a=a|0;b=b|0;do switch(b|0){case 1:{a=x3(a)|0;break}case 2:{a=h3(a)|0;break}case 3:{a=y3(a)|0;break}case 4:{a=z3(a)|0;break}case 5:{a=$2(a)|0;break}case 6:{a=A3(a)|0;break}case 7:{a=B3(a)|0;break}case 8:{a=k3(a)|0;break}case 9:{a=P2(a)|0;break}case 10:{a=u3(a)|0;break}case 11:{a=C3(a)|0;break}case 12:{a=D3(a)|0;break}default:a=0}while(0);return a|0}function x3(a){a=a|0;if(!($2(a)|0))a=(h3(a)|0)!=0&1;else a=1;return a|0}function y3(a){a=a|0;return t3(a)|0}function z3(a){a=a|0;return ((a+-65529|0)>>>0<3|((a&-2|0)==8232|(a>>>0<32|(a+-127|0)>>>0<33)))&1|0}function A3(a){a=a|0;if(!(u3(a)|0))a=(k3(a)|0)!=0&1;else a=0;return a|0}function B3(a){a=a|0;return (f3(a)|0)!=(a|0)|0}function C3(a){a=a|0;return (E3(a)|0)!=(a|0)|0}function D3(a){a=a|0;return ((a+-48|0)>>>0<10|((a|32)+-97|0)>>>0<6)&1|0}function E3(a){a=a|0;return g3(a,1)|0}function F3(a){a=a|0;return (a+-97|0)>>>0<26|0}function G3(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+128|0;g=n+124|0;m=n;h=m;i=63588;j=h+124|0;do{c[h>>2]=c[i>>2];h=h+4|0;i=i+4|0}while((h|0)<(j|0));if((d+-1|0)>>>0>2147483646)if(!d){b=g;d=1;k=4}else{c[(d2()|0)>>2]=75;d=-1}else k=4;if((k|0)==4){k=-2-b|0;k=d>>>0>k>>>0?k:d;c[m+48>>2]=k;g=m+20|0;c[g>>2]=b;c[m+44>>2]=b;d=b+k|0;b=m+16|0;c[b>>2]=d;c[m+28>>2]=d;d=H3(m,e,f)|0;if(k){m=c[g>>2]|0;a[m+(((m|0)==(c[b>>2]|0))<<31>>31)>>0]=0}}l=n;return d|0}function H3(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=l;l=l+224|0;n=s+120|0;p=s+80|0;q=s;r=s+136|0;f=p;g=f+40|0;do{c[f>>2]=0;f=f+4|0}while((f|0)<(g|0));c[n>>2]=c[e>>2];if((I3(0,d,n,q,p)|0)<0)e=-1;else{if((c[b+76>>2]|0)>-1)o=J3(b)|0;else o=0;e=c[b>>2]|0;m=e&32;if((a[b+74>>0]|0)<1)c[b>>2]=e&-33;f=b+48|0;if(!(c[f>>2]|0)){g=b+44|0;h=c[g>>2]|0;c[g>>2]=r;i=b+28|0;c[i>>2]=r;j=b+20|0;c[j>>2]=r;c[f>>2]=80;k=b+16|0;c[k>>2]=r+80;e=I3(b,d,n,q,p)|0;if(h){nb[c[b+36>>2]&63](b,0,0)|0;e=(c[j>>2]|0)==0?-1:e;c[g>>2]=h;c[f>>2]=0;c[k>>2]=0;c[i>>2]=0;c[j>>2]=0}}else e=I3(b,d,n,q,p)|0;f=c[b>>2]|0;c[b>>2]=f|m;if(o|0)K3(b);e=(f&32|0)==0?e:-1}l=s;return e|0}function I3(d,e,f,g,i){d=d|0;e=e|0;f=f|0;g=g|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0;H=l;l=l+64|0;D=H+16|0;E=H;B=H+24|0;F=H+8|0;G=H+20|0;c[D>>2]=e;x=(d|0)!=0;y=B+40|0;A=y;B=B+39|0;C=F+4|0;k=0;j=0;p=0;a:while(1){do if((j|0)>-1)if((k|0)>(2147483647-j|0)){c[(d2()|0)>>2]=75;j=-1;break}else{j=k+j|0;break}while(0);k=a[e>>0]|0;if(!(k<<24>>24)){w=86;break}else m=e;b:while(1){switch(k<<24>>24){case 37:{k=m;w=9;break b}case 0:{k=m;break b}default:{}}v=m+1|0;c[D>>2]=v;k=a[v>>0]|0;m=v}c:do if((w|0)==9)while(1){w=0;if((a[m+1>>0]|0)!=37)break c;k=k+1|0;m=m+2|0;c[D>>2]=m;if((a[m>>0]|0)==37)w=9;else break}while(0);k=k-e|0;if(x)L3(d,e,k);if(k|0){e=m;continue}n=m+1|0;k=(a[n>>0]|0)+-48|0;if(k>>>0<10){v=(a[m+2>>0]|0)==36;t=v?k:-1;p=v?1:p;n=v?m+3|0:n}else t=-1;c[D>>2]=n;k=a[n>>0]|0;v=(k<<24>>24)+-32|0;if(v>>>0>31|(1<>24)+-32|m;n=n+1|0;c[D>>2]=n;k=a[n>>0]|0;v=(k<<24>>24)+-32|0}while(!(v>>>0>31|(1<>24==42){o=n+1|0;k=(a[o>>0]|0)+-48|0;if(k>>>0<10?(a[n+2>>0]|0)==36:0){c[i+(k<<2)>>2]=10;k=c[g+((a[o>>0]|0)+-48<<3)>>2]|0;p=1;n=n+3|0}else{if(p|0){j=-1;break}if(x){p=(c[f>>2]|0)+(4-1)&~(4-1);k=c[p>>2]|0;c[f>>2]=p+4;p=0;n=o}else{k=0;p=0;n=o}}c[D>>2]=n;u=(k|0)<0;k=u?0-k|0:k;u=u?m|8192:m}else{k=M3(D)|0;if((k|0)<0){j=-1;break}u=m;n=c[D>>2]|0}do if((a[n>>0]|0)==46){if((a[n+1>>0]|0)!=42){c[D>>2]=n+1;m=M3(D)|0;n=c[D>>2]|0;break}o=n+2|0;m=(a[o>>0]|0)+-48|0;if(m>>>0<10?(a[n+3>>0]|0)==36:0){c[i+(m<<2)>>2]=10;m=c[g+((a[o>>0]|0)+-48<<3)>>2]|0;n=n+4|0;c[D>>2]=n;break}if(p|0){j=-1;break a}if(x){v=(c[f>>2]|0)+(4-1)&~(4-1);m=c[v>>2]|0;c[f>>2]=v+4}else m=0;c[D>>2]=o;n=o}else m=-1;while(0);s=0;while(1){if(((a[n>>0]|0)+-65|0)>>>0>57){j=-1;break a}v=n+1|0;c[D>>2]=v;o=a[(a[n>>0]|0)+-65+(152944+(s*58|0))>>0]|0;q=o&255;if((q+-1|0)>>>0<8){s=q;n=v}else break}if(!(o<<24>>24)){j=-1;break}r=(t|0)>-1;do if(o<<24>>24==19)if(r){j=-1;break a}else w=48;else{if(r){c[i+(t<<2)>>2]=q;r=g+(t<<3)|0;t=c[r+4>>2]|0;w=E;c[w>>2]=c[r>>2];c[w+4>>2]=t;w=48;break}if(!x){j=0;break a}N3(E,q,f)}while(0);if((w|0)==48?(w=0,!x):0){k=0;e=v;continue}n=a[n>>0]|0;n=(s|0)!=0&(n&15|0)==3?n&-33:n;t=u&-65537;u=(u&8192|0)==0?u:t;d:do switch(n|0){case 110:switch((s&255)<<24>>24){case 0:{c[c[E>>2]>>2]=j;k=0;e=v;continue a}case 1:{c[c[E>>2]>>2]=j;k=0;e=v;continue a}case 2:{k=c[E>>2]|0;c[k>>2]=j;c[k+4>>2]=((j|0)<0)<<31>>31;k=0;e=v;continue a}case 3:{b[c[E>>2]>>1]=j;k=0;e=v;continue a}case 4:{a[c[E>>2]>>0]=j;k=0;e=v;continue a}case 6:{c[c[E>>2]>>2]=j;k=0;e=v;continue a}case 7:{k=c[E>>2]|0;c[k>>2]=j;c[k+4>>2]=((j|0)<0)<<31>>31;k=0;e=v;continue a}default:{k=0;e=v;continue a}}case 112:{n=120;m=m>>>0>8?m:8;e=u|8;w=60;break}case 88:case 120:{e=u;w=60;break}case 111:{n=E;e=c[n>>2]|0;n=c[n+4>>2]|0;r=P3(e,n,y)|0;s=A-r|0;o=0;q=153408;m=(u&8|0)==0|(m|0)>(s|0)?m:s+1|0;s=u;w=66;break}case 105:case 100:{n=E;e=c[n>>2]|0;n=c[n+4>>2]|0;if((n|0)<0){e=K6(0,0,e|0,n|0)|0;n=z;o=E;c[o>>2]=e;c[o+4>>2]=n;o=1;q=153408;w=65;break d}else{o=(u&2049|0)!=0&1;q=(u&2048|0)==0?((u&1|0)==0?153408:153410):153409;w=65;break d}}case 117:{n=E;o=0;q=153408;e=c[n>>2]|0;n=c[n+4>>2]|0;w=65;break}case 99:{a[B>>0]=c[E>>2];e=B;o=0;q=153408;r=y;n=1;m=t;break}case 109:{n=t2(c[(d2()|0)>>2]|0)|0;w=70;break}case 115:{n=c[E>>2]|0;n=n|0?n:153418;w=70;break}case 67:{c[F>>2]=c[E>>2];c[C>>2]=0;c[E>>2]=F;r=-1;n=F;w=74;break}case 83:{e=c[E>>2]|0;if(!m){R3(d,32,k,0,u);e=0;w=83}else{r=m;n=e;w=74}break}case 65:case 71:case 70:case 69:case 97:case 103:case 102:case 101:{k=S3(d,+h[E>>3],k,m,u,n)|0;e=v;continue a}default:{o=0;q=153408;r=y;n=m;m=u}}while(0);e:do if((w|0)==60){u=E;t=c[u>>2]|0;u=c[u+4>>2]|0;r=O3(t,u,y,n&32)|0;q=(e&8|0)==0|(t|0)==0&(u|0)==0;o=q?0:2;q=q?153408:153408+(n>>4)|0;s=e;e=t;n=u;w=66}else if((w|0)==65){r=Q3(e,n,y)|0;s=u;w=66}else if((w|0)==70){w=0;u=U2(n,0,m)|0;s=(u|0)==0;e=n;o=0;q=153408;r=s?n+m|0:u;n=s?m:u-n|0;m=t}else if((w|0)==74){w=0;q=n;e=0;m=0;while(1){o=c[q>>2]|0;if(!o)break;m=m3(G,o)|0;if((m|0)<0|m>>>0>(r-e|0)>>>0)break;e=m+e|0;if(r>>>0>e>>>0)q=q+4|0;else break}if((m|0)<0){j=-1;break a}R3(d,32,k,e,u);if(!e){e=0;w=83}else{o=0;while(1){m=c[n>>2]|0;if(!m){w=83;break e}m=m3(G,m)|0;o=m+o|0;if((o|0)>(e|0)){w=83;break e}L3(d,G,m);if(o>>>0>=e>>>0){w=83;break}else n=n+4|0}}}while(0);if((w|0)==66){w=0;n=(e|0)!=0|(n|0)!=0;u=(m|0)!=0|n;n=A-r+((n^1)&1)|0;e=u?r:y;r=y;n=u?((m|0)>(n|0)?m:n):m;m=(m|0)>-1?s&-65537:s}else if((w|0)==83){w=0;R3(d,32,k,e,u^8192);k=(k|0)>(e|0)?k:e;e=v;continue}t=r-e|0;s=(n|0)<(t|0)?t:n;u=s+o|0;k=(k|0)<(u|0)?u:k;R3(d,32,k,u,m);L3(d,q,o);R3(d,48,k,u,m^65536);R3(d,48,s,t,0);L3(d,e,t);R3(d,32,k,u,m^8192);e=v}f:do if((w|0)==86)if(!d)if(p){j=1;while(1){e=c[i+(j<<2)>>2]|0;if(!e)break;N3(g+(j<<3)|0,e,f);e=j+1|0;if((j|0)<9)j=e;else{j=e;break}}if((j|0)<10)while(1){if(c[i+(j<<2)>>2]|0){j=-1;break f}if((j|0)<9)j=j+1|0;else{j=1;break}}else j=1}else j=0;while(0);l=H;return j|0}function J3(a){a=a|0;return 0}function K3(a){a=a|0;return}function L3(a,b,d){a=a|0;b=b|0;d=d|0;if(!(c[a>>2]&32))U3(b,d,a)|0;return}function M3(b){b=b|0;var d=0,e=0,f=0;e=c[b>>2]|0;f=(a[e>>0]|0)+-48|0;if(f>>>0<10){d=0;do{d=f+(d*10|0)|0;e=e+1|0;c[b>>2]=e;f=(a[e>>0]|0)+-48|0}while(f>>>0<10)}else d=0;return d|0}function N3(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0.0;a:do if(b>>>0<=20)do switch(b|0){case 9:{e=(c[d>>2]|0)+(4-1)&~(4-1);b=c[e>>2]|0;c[d>>2]=e+4;c[a>>2]=b;break a}case 10:{e=(c[d>>2]|0)+(4-1)&~(4-1);b=c[e>>2]|0;c[d>>2]=e+4;e=a;c[e>>2]=b;c[e+4>>2]=((b|0)<0)<<31>>31;break a}case 11:{e=(c[d>>2]|0)+(4-1)&~(4-1);b=c[e>>2]|0;c[d>>2]=e+4;e=a;c[e>>2]=b;c[e+4>>2]=0;break a}case 12:{e=(c[d>>2]|0)+(8-1)&~(8-1);b=e;f=c[b>>2]|0;b=c[b+4>>2]|0;c[d>>2]=e+8;e=a;c[e>>2]=f;c[e+4>>2]=b;break a}case 13:{f=(c[d>>2]|0)+(4-1)&~(4-1);e=c[f>>2]|0;c[d>>2]=f+4;e=(e&65535)<<16>>16;f=a;c[f>>2]=e;c[f+4>>2]=((e|0)<0)<<31>>31;break a}case 14:{f=(c[d>>2]|0)+(4-1)&~(4-1);e=c[f>>2]|0;c[d>>2]=f+4;f=a;c[f>>2]=e&65535;c[f+4>>2]=0;break a}case 15:{f=(c[d>>2]|0)+(4-1)&~(4-1);e=c[f>>2]|0;c[d>>2]=f+4;e=(e&255)<<24>>24;f=a;c[f>>2]=e;c[f+4>>2]=((e|0)<0)<<31>>31;break a}case 16:{f=(c[d>>2]|0)+(4-1)&~(4-1);e=c[f>>2]|0;c[d>>2]=f+4;f=a;c[f>>2]=e&255;c[f+4>>2]=0;break a}case 17:{f=(c[d>>2]|0)+(8-1)&~(8-1);g=+h[f>>3];c[d>>2]=f+8;h[a>>3]=g;break a}case 18:{f=(c[d>>2]|0)+(8-1)&~(8-1);g=+h[f>>3];c[d>>2]=f+8;h[a>>3]=g;break a}default:break a}while(0);while(0);return}function O3(b,c,e,f){b=b|0;c=c|0;e=e|0;f=f|0;if(!((b|0)==0&(c|0)==0))do{e=e+-1|0;a[e>>0]=d[153456+(b&15)>>0]|0|f;b=Q6(b|0,c|0,4)|0;c=z}while(!((b|0)==0&(c|0)==0));return e|0}function P3(b,c,d){b=b|0;c=c|0;d=d|0;if(!((b|0)==0&(c|0)==0))do{d=d+-1|0;a[d>>0]=b&7|48;b=Q6(b|0,c|0,3)|0;c=z}while(!((b|0)==0&(c|0)==0));return d|0}function Q3(b,c,d){b=b|0;c=c|0;d=d|0;var e=0;if(c>>>0>0|(c|0)==0&b>>>0>4294967295){while(1){e=O6(b|0,c|0,10,0)|0;d=d+-1|0;a[d>>0]=e&255|48;e=b;b=N6(b|0,c|0,10,0)|0;if(!(c>>>0>9|(c|0)==9&e>>>0>4294967295))break;else c=z}c=b}else c=b;if(c)while(1){d=d+-1|0;a[d>>0]=(c>>>0)%10|0|48;if(c>>>0<10)break;else c=(c>>>0)/10|0}return d|0}function R3(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0;g=l;l=l+256|0;f=g;if((c|0)>(d|0)&(e&73728|0)==0){e=c-d|0;Y6(f|0,b|0,(e>>>0<256?e:256)|0)|0;if(e>>>0>255){b=c-d|0;do{L3(a,f,256);e=e+-256|0}while(e>>>0>255);e=b&255}L3(a,f,e)}l=g;return}function S3(b,e,f,g,h,i){b=b|0;e=+e;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0.0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0;H=l;l=l+560|0;m=H+8|0;u=H;G=H+524|0;F=G;n=H+512|0;c[u>>2]=0;E=n+12|0;T3(e)|0;if((z|0)<0){e=-e;C=1;B=153425}else{C=(h&2049|0)!=0&1;B=(h&2048|0)==0?((h&1|0)==0?153426:153431):153428}T3(e)|0;do if(0==0&(z&2146435072|0)==2146435072){G=(i&32|0)!=0;j=C+3|0;R3(b,32,f,j,h&-65537);L3(b,B,C);L3(b,e!=e|0.0!=0.0?(G?153593:153452):G?153444:153448,3);R3(b,32,f,j,h^8192)}else{r=+O2(e,u)*2.0;j=r!=0.0;if(j)c[u>>2]=(c[u>>2]|0)+-1;w=i|32;if((w|0)==97){p=i&32;s=(p|0)==0?B:B+9|0;q=C|2;j=12-g|0;do if(!(g>>>0>11|(j|0)==0)){e=8.0;do{j=j+-1|0;e=e*16.0}while((j|0)!=0);if((a[s>>0]|0)==45){e=-(e+(-r-e));break}else{e=r+e-e;break}}else e=r;while(0);k=c[u>>2]|0;j=(k|0)<0?0-k|0:k;j=Q3(j,((j|0)<0)<<31>>31,E)|0;if((j|0)==(E|0)){j=n+11|0;a[j>>0]=48}a[j+-1>>0]=(k>>31&2)+43;o=j+-2|0;a[o>>0]=i+15;m=(g|0)<1;n=(h&8|0)==0;j=G;do{D=~~e;k=j+1|0;a[j>>0]=p|d[153456+D>>0];e=(e-+(D|0))*16.0;if((k-F|0)==1?!(n&(m&e==0.0)):0){a[k>>0]=46;j=j+2|0}else j=k}while(e!=0.0);if((g|0)!=0?(-2-F+j|0)<(g|0):0){k=j-F|0;j=g+2|0}else{j=j-F|0;k=j}E=E-o|0;F=E+q+j|0;R3(b,32,f,F,h);L3(b,s,q);R3(b,48,f,F,h^65536);L3(b,G,k);R3(b,48,j-k|0,0,0);L3(b,o,E);R3(b,32,f,F,h^8192);j=F;break}k=(g|0)<0?6:g;if(j){j=(c[u>>2]|0)+-28|0;c[u>>2]=j;e=r*268435456.0}else{e=r;j=c[u>>2]|0}D=(j|0)<0?m:m+288|0;m=D;do{y=~~e>>>0;c[m>>2]=y;m=m+4|0;e=(e-+(y>>>0))*1.0e9}while(e!=0.0);if((j|0)>0){n=D;p=m;while(1){o=(j|0)<29?j:29;j=p+-4|0;if(j>>>0>=n>>>0){m=0;do{x=R6(c[j>>2]|0,0,o|0)|0;x=J6(x|0,z|0,m|0,0)|0;y=z;v=O6(x|0,y|0,1e9,0)|0;c[j>>2]=v;m=N6(x|0,y|0,1e9,0)|0;j=j+-4|0}while(j>>>0>=n>>>0);if(m){n=n+-4|0;c[n>>2]=m}}m=p;while(1){if(m>>>0<=n>>>0)break;j=m+-4|0;if(!(c[j>>2]|0))m=j;else break}j=(c[u>>2]|0)-o|0;c[u>>2]=j;if((j|0)>0)p=m;else break}}else n=D;if((j|0)<0){g=((k+25|0)/9|0)+1|0;t=(w|0)==102;do{s=0-j|0;s=(s|0)<9?s:9;if(n>>>0>>0){o=(1<>>s;q=0;j=n;do{y=c[j>>2]|0;c[j>>2]=(y>>>s)+q;q=O(y&o,p)|0;j=j+4|0}while(j>>>0>>0);j=(c[n>>2]|0)==0?n+4|0:n;if(!q){n=j;j=m}else{c[m>>2]=q;n=j;j=m+4|0}}else{n=(c[n>>2]|0)==0?n+4|0:n;j=m}m=t?D:n;m=(j-m>>2|0)>(g|0)?m+(g<<2)|0:j;j=(c[u>>2]|0)+s|0;c[u>>2]=j}while((j|0)<0);j=n;g=m}else{j=n;g=m}y=D;if(j>>>0>>0){m=(y-j>>2)*9|0;o=c[j>>2]|0;if(o>>>0>=10){n=10;do{n=n*10|0;m=m+1|0}while(o>>>0>=n>>>0)}}else m=0;t=(w|0)==103;v=(k|0)!=0;n=k-((w|0)!=102?m:0)+((v&t)<<31>>31)|0;if((n|0)<(((g-y>>2)*9|0)+-9|0)){n=n+9216|0;s=D+4+(((n|0)/9|0)+-1024<<2)|0;n=(n|0)%9|0;if((n|0)<8){o=10;while(1){o=o*10|0;if((n|0)<7)n=n+1|0;else break}}else o=10;p=c[s>>2]|0;q=(p>>>0)%(o>>>0)|0;n=(s+4|0)==(g|0);if(!(n&(q|0)==0)){r=(((p>>>0)/(o>>>0)|0)&1|0)==0?9007199254740992.0:9007199254740994.0;x=(o|0)/2|0;e=q>>>0>>0?.5:n&(q|0)==(x|0)?1.0:1.5;if(C){x=(a[B>>0]|0)==45;e=x?-e:e;r=x?-r:r}n=p-q|0;c[s>>2]=n;if(r+e!=r){x=n+o|0;c[s>>2]=x;if(x>>>0>999999999){m=s;while(1){n=m+-4|0;c[m>>2]=0;if(n>>>0>>0){j=j+-4|0;c[j>>2]=0}x=(c[n>>2]|0)+1|0;c[n>>2]=x;if(x>>>0>999999999)m=n;else break}}else n=s;m=(y-j>>2)*9|0;p=c[j>>2]|0;if(p>>>0>=10){o=10;do{o=o*10|0;m=m+1|0}while(p>>>0>=o>>>0)}}else n=s}else n=s;n=n+4|0;n=g>>>0>n>>>0?n:g;x=j}else{n=g;x=j}w=n;while(1){if(w>>>0<=x>>>0){u=0;break}j=w+-4|0;if(!(c[j>>2]|0))w=j;else{u=1;break}}g=0-m|0;do if(t){j=k+((v^1)&1)|0;if((j|0)>(m|0)&(m|0)>-5){o=i+-1|0;k=j+-1-m|0}else{o=i+-2|0;k=j+-1|0}j=h&8;if(!j){if(u?(A=c[w+-4>>2]|0,(A|0)!=0):0)if(!((A>>>0)%10|0)){n=0;j=10;do{j=j*10|0;n=n+1|0}while(!((A>>>0)%(j>>>0)|0|0))}else n=0;else n=9;j=((w-y>>2)*9|0)+-9|0;if((o|32|0)==102){s=j-n|0;s=(s|0)>0?s:0;k=(k|0)<(s|0)?k:s;s=0;break}else{s=j+m-n|0;s=(s|0)>0?s:0;k=(k|0)<(s|0)?k:s;s=0;break}}else s=j}else{o=i;s=h&8}while(0);t=k|s;p=(t|0)!=0&1;q=(o|32|0)==102;if(q){v=0;j=(m|0)>0?m:0}else{j=(m|0)<0?g:m;j=Q3(j,((j|0)<0)<<31>>31,E)|0;n=E;if((n-j|0)<2)do{j=j+-1|0;a[j>>0]=48}while((n-j|0)<2);a[j+-1>>0]=(m>>31&2)+43;j=j+-2|0;a[j>>0]=o;v=j;j=n-j|0}j=C+1+k+p+j|0;R3(b,32,f,j,h);L3(b,B,C);R3(b,48,f,j,h^65536);if(q){o=x>>>0>D>>>0?D:x;s=G+9|0;p=s;q=G+8|0;n=o;do{m=Q3(c[n>>2]|0,0,s)|0;if((n|0)==(o|0)){if((m|0)==(s|0)){a[q>>0]=48;m=q}}else if(m>>>0>G>>>0){Y6(G|0,48,m-F|0)|0;do m=m+-1|0;while(m>>>0>G>>>0)}L3(b,m,p-m|0);n=n+4|0}while(n>>>0<=D>>>0);if(t|0)L3(b,153472,1);if(n>>>0>>0&(k|0)>0)while(1){m=Q3(c[n>>2]|0,0,s)|0;if(m>>>0>G>>>0){Y6(G|0,48,m-F|0)|0;do m=m+-1|0;while(m>>>0>G>>>0)}L3(b,m,(k|0)<9?k:9);n=n+4|0;m=k+-9|0;if(!(n>>>0>>0&(k|0)>9)){k=m;break}else k=m}R3(b,48,k+9|0,9,0)}else{t=u?w:x+4|0;if((k|0)>-1){u=G+9|0;s=(s|0)==0;g=u;p=0-F|0;q=G+8|0;o=x;do{m=Q3(c[o>>2]|0,0,u)|0;if((m|0)==(u|0)){a[q>>0]=48;m=q}do if((o|0)==(x|0)){n=m+1|0;L3(b,m,1);if(s&(k|0)<1){m=n;break}L3(b,153472,1);m=n}else{if(m>>>0<=G>>>0)break;Y6(G|0,48,m+p|0)|0;do m=m+-1|0;while(m>>>0>G>>>0)}while(0);F=g-m|0;L3(b,m,(k|0)>(F|0)?F:k);k=k-F|0;o=o+4|0}while(o>>>0>>0&(k|0)>-1)}R3(b,48,k+18|0,18,0);L3(b,v,E-v|0)}R3(b,32,f,j,h^8192)}while(0);l=H;return ((j|0)<(f|0)?f:j)|0}function T3(a){a=+a;var b=0;h[j>>3]=a;b=c[j>>2]|0;z=c[j+4>>2]|0;return b|0}function U3(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;f=e+16|0;g=c[f>>2]|0;if(!g)if(!(V3(e)|0)){g=c[f>>2]|0;h=5}else f=0;else h=5;a:do if((h|0)==5){j=e+20|0;i=c[j>>2]|0;f=i;if((g-i|0)>>>0>>0){f=nb[c[e+36>>2]&63](e,b,d)|0;break}b:do if((a[e+75>>0]|0)>-1){i=d;while(1){if(!i){h=0;g=b;break b}g=i+-1|0;if((a[b+g>>0]|0)==10)break;else i=g}f=nb[c[e+36>>2]&63](e,b,i)|0;if(f>>>0>>0)break a;h=i;g=b+i|0;d=d-i|0;f=c[j>>2]|0}else{h=0;g=b}while(0);W6(f|0,g|0,d|0)|0;c[j>>2]=(c[j>>2]|0)+d;f=h+d|0}while(0);return f|0}function V3(b){b=b|0;var d=0,e=0;d=b+74|0;e=a[d>>0]|0;a[d>>0]=e+255|e;d=c[b>>2]|0;if(!(d&8)){c[b+8>>2]=0;c[b+4>>2]=0;e=c[b+44>>2]|0;c[b+28>>2]=e;c[b+20>>2]=e;c[b+16>>2]=e+(c[b+48>>2]|0);b=0}else{c[b>>2]=d|32;b=-1}return b|0}function W3(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=a+20|0;f=c[e>>2]|0;a=(c[a+16>>2]|0)-f|0;a=a>>>0>d>>>0?d:a;W6(f|0,b|0,a|0)|0;c[e>>2]=(c[e>>2]|0)+a;return d|0}function X3(b){b=b|0;var c=0,d=0,e=0,f=0;e=a[b>>0]|0;c=1;d=153474;f=97;while(1){if(e<<24>>24==f<<24>>24?(s2(b,d)|0)==0:0)break;d=d+6|0;f=a[d>>0]|0;if(!(f<<24>>24)){c=0;break}else c=c+1|0}return c|0}function Y3(a){a=a|0;var b=0;b=(F3(a)|0)==0;return (b?a:a&95)|0}function Z3(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=l;l=l+16|0;g=h;do if(b>>>0>6)d=0;else{ta(190656);if((b|0)!=6){d=_3(b,d)|0;La(190656);break}if(!d){d=197132;b=0}else{b=g;e=153547;f=b+16|0;do{a[b>>0]=a[e>>0]|0;b=b+1|0;e=e+1|0}while((b|0)<(f|0));f=0;do{b=k2(d,59)|0;e=b-d|0;if((e|0)<16){W6(g|0,d|0,e|0)|0;a[g+e>>0]=0;d=(a[b>>0]|0)==0?d:b+1|0}_3(f,g)|0;f=f+1|0}while((f|0)!=6);d=197132;b=0}while(1){f=c[190616+(b<<2)>>2]|0;f=f|0?f+8|0:153563;e=l2(f)|0;W6(d|0,f|0,e|0)|0;f=d+e|0;a[f>>0]=59;b=b+1|0;if((b|0)==6)break;else d=d+(e+1)|0}a[f>>0]=0;La(190656);d=197132}while(0);l=h;return d|0}function _3(a,b){a=a|0;b=b|0;if(!b)a=c[190616+(a<<2)>>2]|0;else{b=q3(a,b)|0;c[190616+(a<<2)>>2]=b;a=b}return (a|0?a+8|0:153563)|0}function $3(b,c,d){b=b|0;c=c|0;d=d|0;var e=0,f=0;a:do if(!d)b=0;else{while(1){e=a[b>>0]|0;f=a[c>>0]|0;if(e<<24>>24!=f<<24>>24)break;d=d+-1|0;if(!d){b=0;break a}else{b=b+1|0;c=c+1|0}}b=(e&255)-(f&255)|0}while(0);return b|0}function a4(a){a=a|0;return b4(a)|0}function b4(a){a=a|0;return S6(a|0)|0}function c4(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;if((c[f+76>>2]|0)>-1)m=J3(f)|0;else m=0;g=e+-1|0;if((e|0)<2){n=f+74|0;l=a[n>>0]|0;a[n>>0]=l+255|l;if(m|0)K3(f);if(!g)a[b>>0]=0;else b=0}else{a:do if(g){k=f+4|0;l=f+8|0;e=b;while(1){h=c[k>>2]|0;o=h;p=(c[l>>2]|0)-o|0;i=U2(h,10,p)|0;j=(i|0)==0;i=j?p:1-o+i|0;i=i>>>0>>0?i:g;W6(e|0,h|0,i|0)|0;h=(c[k>>2]|0)+i|0;c[k>>2]=h;e=e+i|0;i=g-i|0;if(!(j&(i|0)!=0)){n=17;break a}if(h>>>0>=(c[l>>2]|0)>>>0){g=Z2(f)|0;if((g|0)<0)break;else j=g}else{c[k>>2]=h+1;j=d[h>>0]|0}g=i+-1|0;h=e+1|0;a[e>>0]=j;if(!((g|0)!=0&(j&255|0)!=10)){e=h;n=17;break a}else e=h}if((e|0)!=(b|0)?(c[f>>2]&16|0)!=0:0)n=17;else b=0}else{e=b;n=17}while(0);if((n|0)==17)if(!b)b=0;else a[e>>0]=0;if(m)K3(f)}return b|0}function d4(b,c){b=b|0;c=c|0;var d=0;d=a[c>>0]|0;do if(d<<24>>24){b=R2(b,d<<24>>24)|0;if(b){if(a[c+1>>0]|0)if(a[b+1>>0]|0){if(!(a[c+2>>0]|0)){b=e4(b,c)|0;break}if(a[b+2>>0]|0){if(!(a[c+3>>0]|0)){b=f4(b,c)|0;break}if(a[b+3>>0]|0)if(!(a[c+4>>0]|0)){b=g4(b,c)|0;break}else{b=h4(b,c)|0;break}else b=0}else b=0}else b=0}else b=0}while(0);return b|0}function e4(b,c){b=b|0;c=c|0;var e=0,f=0,g=0;g=(d[c>>0]|0)<<8|(d[c+1>>0]|0);f=d[b>>0]|0;while(1){c=b+1|0;e=a[c>>0]|0;if(!(e<<24>>24))break;f=f<<8&65280|e&255;if((f|0)==(g|0))break;else b=c}return (e<<24>>24?b:0)|0}function f4(b,c){b=b|0;c=c|0;var e=0,f=0;f=(d[c+1>>0]|0)<<16|(d[c>>0]|0)<<24|(d[c+2>>0]|0)<<8;e=b+2|0;c=a[e>>0]|0;b=(d[b+1>>0]|0)<<16|(d[b>>0]|0)<<24|(c&255)<<8;if(!((b|0)==(f|0)|c<<24>>24==0))do{e=e+1|0;c=a[e>>0]|0;b=(b|c&255)<<8}while(!((b|0)==(f|0)|c<<24>>24==0));return (c<<24>>24?e+-2|0:0)|0}function g4(b,c){b=b|0;c=c|0;var e=0,f=0;f=(d[c+1>>0]|0)<<16|(d[c>>0]|0)<<24|(d[c+2>>0]|0)<<8|(d[c+3>>0]|0);c=b+3|0;e=a[c>>0]|0;b=(d[b+1>>0]|0)<<16|(d[b>>0]|0)<<24|(d[b+2>>0]|0)<<8|e&255;if(!(e<<24>>24==0|(b|0)==(f|0)))do{c=c+1|0;e=a[c>>0]|0;b=b<<8|e&255}while(!(e<<24>>24==0|(b|0)==(f|0)));return (e<<24>>24?c+-3|0:0)|0}function h4(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;v=l;l=l+1056|0;t=v+1024|0;u=v;c[t>>2]=0;c[t+4>>2]=0;c[t+8>>2]=0;c[t+12>>2]=0;c[t+16>>2]=0;c[t+20>>2]=0;c[t+24>>2]=0;c[t+28>>2]=0;e=a[d>>0]|0;a:do if(e<<24>>24){s=0;do{if(!(a[b+s>>0]|0)){e=0;break a}r=t+(((e&255)>>>5&255)<<2)|0;c[r>>2]=c[r>>2]|1<<(e&31);s=s+1|0;c[u+((e&255)<<2)>>2]=s;e=a[d+s>>0]|0}while(e<<24>>24!=0);m=s>>>0>1;if(m){f=0;k=-1;g=1;b:while(1){h=1;e=f;while(1){f=g;c:while(1){j=1;while(1){g=a[d+(j+k)>>0]|0;i=a[d+f>>0]|0;if(g<<24>>24!=i<<24>>24)break c;if((j|0)==(h|0))break;j=j+1|0;f=j+e|0;if(f>>>0>=s>>>0){n=h;e=k;break b}}e=h+e|0;f=e+1|0;if(f>>>0>=s>>>0){n=h;e=k;break b}}h=f-k|0;if((g&255)<=(i&255))break;g=f+1|0;if(g>>>0>=s>>>0){n=h;e=k;break b}else e=f}g=e+2|0;if(g>>>0>=s>>>0){n=1;break}else{f=e+1|0;k=e}}if(m){h=0;m=-1;i=1;while(1){f=1;g=h;while(1){h=i;d:while(1){k=1;while(1){i=a[d+(k+m)>>0]|0;j=a[d+h>>0]|0;if(i<<24>>24!=j<<24>>24)break d;if((k|0)==(f|0))break;k=k+1|0;h=k+g|0;if(h>>>0>=s>>>0){i=n;g=m;h=26;break a}}g=f+g|0;h=g+1|0;if(h>>>0>=s>>>0){i=n;g=m;h=26;break a}}f=h-m|0;if((i&255)>=(j&255))break;i=h+1|0;if(i>>>0>=s>>>0){i=n;g=m;h=26;break a}else g=h}i=g+2|0;if(i>>>0>=s>>>0){i=n;f=1;h=26;break}else{h=g+1|0;m=g}}}else{i=n;f=1;g=-1;h=26}}else{i=1;e=-1;f=1;g=-1;h=26}}else{i=1;e=-1;s=0;f=1;g=-1;h=26}while(0);e:do if((h|0)==26){q=(g+1|0)>>>0>(e+1|0)>>>0;f=q?f:i;q=q?g:e;r=q+1|0;if(!($3(d,d+f|0,r)|0))p=s-f|0;else{f=s-q+-1|0;p=0;f=(q>>>0>f>>>0?q:f)+1|0}k=s|63;m=s+-1|0;n=(p|0)!=0;o=s-f|0;e=b;j=0;g=b;while(1){h=e;do if((g-h|0)>>>0>>0){i=U2(g,0,k)|0;if(i)if((i-h|0)>>>0>>0){e=0;break e}else break;else{i=g+k|0;break}}else i=g;while(0);g=a[e+m>>0]|0;f:do if(!(1<<(g&31)&c[t+(((g&255)>>>5&255)<<2)>>2])){h=0;g=s}else{g=s-(c[u+((g&255)<<2)>>2]|0)|0;if(g|0){h=0;g=n&(j|0)!=0&g>>>0>>0?o:g;break}g=r>>>0>j>>>0?r:j;h=a[d+g>>0]|0;g:do if(!(h<<24>>24))g=r;else{while(1){if(h<<24>>24!=(a[e+g>>0]|0))break;g=g+1|0;h=a[d+g>>0]|0;if(!(h<<24>>24)){g=r;break g}}h=0;g=g-q|0;break f}while(0);while(1){if(g>>>0<=j>>>0)break e;g=g+-1|0;if((a[d+g>>0]|0)!=(a[e+g>>0]|0)){h=p;g=f;break}}}while(0);e=e+g|0;j=h;g=i}}while(0);l=v;return e|0}function i4(a,b,c){a=a|0;b=b|0;c=c|0;j4(a,b,c)|0;return a|0}function j4(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;g=d;a:do if(!((g^b)&3)){f=(e|0)!=0;if(f&(g&3|0)!=0)do{g=a[d>>0]|0;a[b>>0]=g;if(!(g<<24>>24))break a;e=e+-1|0;d=d+1|0;b=b+1|0;f=(e|0)!=0}while(f&(d&3|0)!=0);if(f){if(a[d>>0]|0){b:do if(e>>>0>3){f=d;while(1){d=c[f>>2]|0;if((d&-2139062144^-2139062144)&d+-16843009|0){d=f;break b}c[b>>2]=d;e=e+-4|0;d=f+4|0;b=b+4|0;if(e>>>0>3)f=d;else break}}while(0);h=11}}else e=0}else h=11;while(0);c:do if((h|0)==11)if(!e)e=0;else while(1){h=a[d>>0]|0;a[b>>0]=h;if(!(h<<24>>24))break c;e=e+-1|0;b=b+1|0;if(!e){e=0;break}else d=d+1|0}while(0);Y6(b|0,0,e|0)|0;return b|0}function k4(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;g=l;l=l+32|0;f=g;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;c[f+20>>2]=0;c[f+24>>2]=0;c[f+28>>2]=0;e=a[d>>0]|0;do if(!(e<<24>>24))d=0;else{if(!(a[d+1>>0]|0)){d=b;while(1)if((a[d>>0]|0)==e<<24>>24)d=d+1|0;else break;d=d-b|0;break}do{h=f+(((e&255)>>>5&255)<<2)|0;c[h>>2]=c[h>>2]|1<<(e&31);d=d+1|0;e=a[d>>0]|0}while(e<<24>>24!=0);e=a[b>>0]|0;a:do if(!(e<<24>>24))d=b;else{d=b;do{if(!(c[f+(((e&255)>>>5&255)<<2)>>2]&1<<(e&31)))break a;d=d+1|0;e=a[d>>0]|0}while(e<<24>>24!=0)}while(0);d=d-b|0}while(0);l=g;return d|0}function l4(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=e2(a)|0;a=Ja(6,d|0)|0;a=c2((a|0)==-4?0:a)|0;l=b;return a|0}function m4(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=d;d=n4(a,b,f)|0;l=e;return d|0}function n4(a,b,c){a=a|0;b=b|0;c=c|0;return G3(a,2147483647,b,c)|0}function o4(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;m=l;l=l+208|0;j=m+8|0;k=m;h=O(d,b)|0;i=k;c[i>>2]=1;c[i+4>>2]=0;a:do if(h|0){i=0-d|0;c[j+4>>2]=d;c[j>>2]=d;f=2;b=d;g=d;while(1){b=b+d+g|0;c[j+(f<<2)>>2]=b;if(b>>>0>>0){n=g;f=f+1|0;g=b;b=n}else break}g=a+h+i|0;if(g>>>0>a>>>0){h=g;f=1;b=1;do{do if((b&3|0)!=3){b=f+-1|0;if((c[j+(b<<2)>>2]|0)>>>0<(h-a|0)>>>0)p4(a,d,e,f,j);else r4(a,d,e,k,f,0,j);if((f|0)==1){s4(k,1);f=0;break}else{s4(k,b);f=1;break}}else{p4(a,d,e,f,j);q4(k,2);f=f+2|0}while(0);b=c[k>>2]|1;c[k>>2]=b;a=a+d|0}while(a>>>0>>0)}else{f=1;b=1}r4(a,d,e,k,f,0,j);g=k+4|0;while(1){if((f|0)==1&(b|0)==1){if(!(c[g>>2]|0))break a}else if((f|0)>=2){s4(k,2);n=f+-2|0;c[k>>2]=c[k>>2]^7;q4(k,1);r4(a+(0-(c[j+(n<<2)>>2]|0))+i|0,d,e,k,f+-1|0,1,j);s4(k,1);b=c[k>>2]|1;c[k>>2]=b;h=a+i|0;r4(h,d,e,k,n,1,j);a=h;f=n;continue}b=t4(k)|0;q4(k,b);a=a+i|0;f=b+f|0;b=c[k>>2]|0}}while(0);l=m;return}function p4(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+240|0;m=n;c[m>>2]=a;a:do if((e|0)>1){k=0-b|0;g=a;j=e;e=1;while(1){h=g+k|0;i=j+-2|0;g=h+(0-(c[f+(i<<2)>>2]|0))|0;if((lb[d&127](a,g)|0)>-1?(lb[d&127](a,h)|0)>-1:0)break a;a=e+1|0;e=m+(e<<2)|0;if((lb[d&127](g,h)|0)>-1){c[e>>2]=g;e=j+-1|0}else{c[e>>2]=h;g=h;e=i}if((e|0)<=1){e=a;break a}j=e;e=a;a=c[m>>2]|0}}else e=1;while(0);v4(b,m,e);l=n;return}function q4(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=a+4|0;if(b>>>0>31){e=c[f>>2]|0;c[a>>2]=e;c[f>>2]=0;b=b+-32|0;d=0}else{d=c[f>>2]|0;e=c[a>>2]|0}c[a>>2]=d<<32-b|e>>>b;c[f>>2]=d>>>b;return}function r4(a,b,d,e,f,g,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;p=l;l=l+240|0;n=p+232|0;o=p;q=c[e>>2]|0;c[n>>2]=q;j=c[e+4>>2]|0;k=n+4|0;c[k>>2]=j;c[o>>2]=a;a:do if((q|0)!=1|(j|0)!=0?(m=0-b|0,i=a+(0-(c[h+(f<<2)>>2]|0))|0,(lb[d&127](i,a)|0)>=1):0){e=1;g=(g|0)==0;j=i;while(1){if(g&(f|0)>1){g=a+m|0;i=c[h+(f+-2<<2)>>2]|0;if((lb[d&127](g,j)|0)>-1){i=10;break a}if((lb[d&127](g+(0-i)|0,j)|0)>-1){i=10;break a}}g=e+1|0;c[o+(e<<2)>>2]=j;q=t4(n)|0;q4(n,q);f=q+f|0;if(!((c[n>>2]|0)!=1|(c[k>>2]|0)!=0)){e=g;a=j;i=10;break a}a=j+(0-(c[h+(f<<2)>>2]|0))|0;if((lb[d&127](a,c[o>>2]|0)|0)<1){a=j;e=g;g=0;i=9;break}else{q=j;e=g;g=1;j=a;a=q}}}else{e=1;i=9}while(0);if((i|0)==9?(g|0)==0:0)i=10;if((i|0)==10){v4(b,o,e);p4(a,b,d,f,h)}l=p;return}function s4(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=a+4|0;if(b>>>0>31){e=c[a>>2]|0;c[f>>2]=e;c[a>>2]=0;b=b+-32|0;d=0}else{d=c[a>>2]|0;e=c[f>>2]|0}c[f>>2]=d>>>(32-b|0)|e<>2]=d<>2]|0)+-1|0)|0;if(!b){b=u4(c[a+4>>2]|0)|0;return ((b|0)==0?0:b+32|0)|0}else return b|0;return 0}function u4(a){a=a|0;var b=0;if(a)if(!(a&1)){b=a;a=0;do{a=a+1|0;b=b>>>1}while(!(b&1|0))}else a=0;else a=32;return a|0}function v4(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;h=l;l=l+256|0;e=h;a:do if((d|0)>=2?(g=b+(d<<2)|0,c[g>>2]=e,a|0):0)while(1){f=a>>>0<256?a:256;W6(e|0,c[b>>2]|0,f|0)|0;e=0;do{i=b+(e<<2)|0;e=e+1|0;W6(c[i>>2]|0,c[b+(e<<2)>>2]|0,f|0)|0;c[i>>2]=(c[i>>2]|0)+f}while((e|0)!=(d|0));a=a-f|0;if(!a)break a;e=c[g>>2]|0}while(0);l=h;return}function w4(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=d;d=H3(a,b,f)|0;l=e;return d|0}function x4(b){b=b|0;var d=0,e=0,f=0;f=l;l=l+16|0;e=f;sa(0,e|0)|0;d=0;e=(c[e+4>>2]|0)*65537^(e>>>4)+b;while(1){a[b+d>>0]=(e&15)+65|e<<1&32;d=d+1|0;if((d|0)==6)break;else e=e>>>5}l=f;return b|0}function y4(a,b,c){a=a|0;b=b|0;c=c|0;c=V2(a,b,c,-2147483648,0)|0;return c|0}function z4(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;h=l;l=l+32|0;f=h;e=a[d>>0]|0;a:do if(e<<24>>24!=0?(a[d+1>>0]|0)!=0:0){c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;c[f+20>>2]=0;c[f+24>>2]=0;c[f+28>>2]=0;do{i=f+(((e&255)>>>5&255)<<2)|0;c[i>>2]=c[i>>2]|1<<(e&31);d=d+1|0;e=a[d>>0]|0}while(e<<24>>24!=0);e=a[b>>0]|0;if(!(e<<24>>24))d=b;else{d=b;do{if(c[f+(((e&255)>>>5&255)<<2)>>2]&1<<(e&31)|0)break a;d=d+1|0;e=a[d>>0]|0}while(e<<24>>24!=0)}}else g=3;while(0);if((g|0)==3)d=k2(b,e<<24>>24)|0;l=h;return d-b|0}function A4(b,d){b=b|0;d=d|0;var e=0;if(!b){b=c[47666]|0;if(!b)b=0;else e=3}else e=3;do if((e|0)==3){b=b+(k4(b,d)|0)|0;if(!(a[b>>0]|0)){c[47666]=0;b=0;break}d=b+(z4(b,d)|0)|0;c[47666]=d;if(!(a[d>>0]|0)){c[47666]=0;break}else{c[47666]=d+1;a[d>>0]=0;break}}while(0);return b|0}function B4(b,c,d){b=b|0;c=c|0;d=d|0;var e=0;e=c&255;do{if(!d){c=0;break}d=d+-1|0;c=b+d|0}while((a[c>>0]|0)!=e<<24>>24);return c|0}function C4(b,d,e){b=b|0;d=d|0;e=e|0;var f=0;if(!b){b=c[e>>2]|0;if(!b)b=0;else f=3}else f=3;do if((f|0)==3){b=b+(k4(b,d)|0)|0;if(!(a[b>>0]|0)){c[e>>2]=0;b=0;break}d=b+(z4(b,d)|0)|0;c[e>>2]=d;if(!(a[d>>0]|0)){c[e>>2]=0;break}else{c[e>>2]=d+1;a[d>>0]=0;break}}while(0);return b|0}function D4(a){a=a|0;var b=0,c=0;c=(l2(a)|0)+1|0;b=T1(c)|0;if(!b)b=0;else W6(b|0,a|0,c|0)|0;return b|0}function E4(a,b){a=a|0;b=b|0;return B4(a,b,(l2(a)|0)+1|0)|0}function F4(a,b){a=a|0;b=b|0;r3(a+(l2(a)|0)|0,b)|0;return a|0}function G4(b,c){b=b|0;c=c|0;c=b+(z4(b,c)|0)|0;return (a[c>>0]|0?c:0)|0}function H4(a){a=a|0;var b=0;if((c[a+76>>2]|0)>-1){b=(J3(a)|0)==0;a=(c[a>>2]|0)>>>4&1}else a=(c[a>>2]|0)>>>4&1;return a|0}function I4(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;if((c[a+76>>2]|0)>-1)f=J3(a)|0;else f=0;J4(a);g=(c[a>>2]&1|0)!=0;if(!g){e=K4()|0;d=c[a+52>>2]|0;b=a+56|0;if(d|0)c[d+56>>2]=c[b>>2];b=c[b>>2]|0;if(b|0)c[b+52>>2]=d;if((c[e>>2]|0)==(a|0))c[e>>2]=b;L4()}b=M4(a)|0;b=kb[c[a+12>>2]&63](a)|0|b;d=c[a+92>>2]|0;if(d|0)U1(d);if(g){if(f|0)K3(a)}else U1(a);return b|0}function J4(a){a=a|0;var b=0;if(c[a+68>>2]|0){b=c[a+116>>2]|0;a=a+112|0;if(b|0)c[b+112>>2]=c[a>>2];a=c[a>>2]|0;if(!a)a=(O4()|0)+232|0;else a=a+116|0;c[a>>2]=b}return}function K4(){ta(190668);return 190676}function L4(){La(190668);return}function M4(a){a=a|0;var b=0,d=0;do if(a){if((c[a+76>>2]|0)<=-1){b=N4(a)|0;break}d=(J3(a)|0)==0;b=N4(a)|0;if(!d)K3(a)}else{if(!(c[15711]|0))b=0;else b=M4(c[15711]|0)|0;a=c[(K4()|0)>>2]|0;if(a)do{if((c[a+76>>2]|0)>-1)d=J3(a)|0;else d=0;if((c[a+20>>2]|0)>>>0>(c[a+28>>2]|0)>>>0)b=N4(a)|0|b;if(d|0)K3(a);a=c[a+56>>2]|0}while((a|0)!=0);L4()}while(0);return b|0}function N4(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;b=a+20|0;h=a+28|0;if((c[b>>2]|0)>>>0>(c[h>>2]|0)>>>0?(nb[c[a+36>>2]&63](a,0,0)|0,(c[b>>2]|0)==0):0)a=-1;else{d=a+4|0;e=c[d>>2]|0;f=a+8|0;g=c[f>>2]|0;if(e>>>0>>0)nb[c[a+40>>2]&63](a,e-g|0,1)|0;c[a+16>>2]=0;c[h>>2]=0;c[b>>2]=0;c[f>>2]=0;c[d>>2]=0;a=0}return a|0}function O4(){return v2()|0}function P4(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;o=l;l=l+64|0;n=o+40|0;k=o+24|0;j=o+16|0;g=o;m=o+56|0;f=a[d>>0]|0;if(U2(153580,f<<24>>24,4)|0){e=T1(1156)|0;if(!e)e=0;else{h=e;i=h+124|0;do{c[h>>2]=0;h=h+4|0}while((h|0)<(i|0));if(!(R2(d,43)|0))c[e>>2]=f<<24>>24==114?8:4;if(R2(d,101)|0){c[g>>2]=b;c[g+4>>2]=2;c[g+8>>2]=1;Ea(221,g|0)|0;f=a[d>>0]|0}if(f<<24>>24==97){c[j>>2]=b;c[j+4>>2]=3;f=Ea(221,j|0)|0;if(!(f&1024)){c[k>>2]=b;c[k+4>>2]=4;c[k+8>>2]=f|1024;Ea(221,k|0)|0}d=c[e>>2]|128;c[e>>2]=d}else d=c[e>>2]|0;c[e+60>>2]=b;c[e+44>>2]=e+132;c[e+48>>2]=1024;f=e+75|0;a[f>>0]=-1;if((d&8|0)==0?(c[n>>2]=b,c[n+4>>2]=21523,c[n+8>>2]=m,(Ia(54,n|0)|0)==0):0)a[f>>0]=10;c[e+32>>2]=15;c[e+36>>2]=18;c[e+40>>2]=16;c[e+12>>2]=17;if(!(c[47645]|0))c[e+76>>2]=-1;Q4(e)|0}}else{c[(d2()|0)>>2]=22;e=0}l=o;return e|0}function Q4(a){a=a|0;var b=0,d=0;b=K4()|0;c[a+56>>2]=c[b>>2];d=c[b>>2]|0;if(d|0)c[d+52>>2]=a;c[b>>2]=a;L4();return a|0}function R4(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0;j=l;l=l+16|0;g=j;a:do if(!e)b=0;else{do if(f|0){i=(b|0)==0?g:b;b=a[e>>0]|0;if(b<<24>>24>-1){c[i>>2]=b&255;b=b<<24>>24!=0&1;break a}h=(c[c[(S4()|0)+188>>2]>>2]|0)==0;b=a[e>>0]|0;if(h){c[i>>2]=b<<24>>24&57343;b=1;break a}b=(b&255)+-194|0;if(b>>>0<=50){g=e+1|0;h=c[62384+(b<<2)>>2]|0;if(f>>>0<4?h&-2147483648>>>((f*6|0)+-6|0)|0:0)break;b=d[g>>0]|0;f=b>>>3;if((f+-16|f+(h>>26))>>>0<=7){b=b+-128|h<<6;if((b|0)>=0){c[i>>2]=b;b=2;break a}g=(d[e+2>>0]|0)+-128|0;if(g>>>0<=63){g=g|b<<6;if((g|0)>=0){c[i>>2]=g;b=3;break a}b=(d[e+3>>0]|0)+-128|0;if(b>>>0<=63){c[i>>2]=b|g<<6;b=4;break a}}}}}while(0);c[(d2()|0)>>2]=84;b=-1}while(0);l=j;return b|0}function S4(){return v2()|0}function T4(a,b){a=a|0;b=b|0;var c=0;c=l2(a)|0;return ((U4(a,1,c,b)|0)!=(c|0))<<31>>31|0}function U4(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;f=O(d,b)|0;d=(b|0)==0?0:d;if((c[e+76>>2]|0)>-1){g=(J3(e)|0)==0;a=U3(a,f,e)|0;if(!g)K3(e)}else a=U3(a,f,e)|0;if((a|0)!=(f|0))d=(a>>>0)/(b>>>0)|0;return d|0}function V4(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0;m=l;l=l+16|0;j=m;k=e&255;a[j>>0]=k;g=b+16|0;h=c[g>>2]|0;if(!h)if(!(V3(b)|0)){h=c[g>>2]|0;i=4}else f=-1;else i=4;do if((i|0)==4){i=b+20|0;g=c[i>>2]|0;if(g>>>0>>0?(f=e&255,(f|0)!=(a[b+75>>0]|0)):0){c[i>>2]=g+1;a[g>>0]=k;break}if((nb[c[b+36>>2]&63](b,j,1)|0)==1)f=d[j>>0]|0;else f=-1}while(0);l=m;return f|0}function W4(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=a;c[f+4>>2]=b;c[f+8>>2]=d;d=c2(Fa(3,f|0)|0)|0;l=e;return d|0}function X4(){var a=0,b=0;b=l;l=l+16|0;a=Da(20,b|0)|0;l=b;return a|0}function Y4(b,c){b=b|0;c=c|0;var d=0,e=0,f=0;d=b;e=153565;f=d+15|0;do{a[d>>0]=a[e>>0]|0;d=d+1|0;e=e+1|0}while((d|0)<(f|0));if(!c){a[b+14>>0]=48;a[b+15>>0]=0}else{e=c;d=14;while(1){d=d+1|0;if(e>>>0<10)break;else e=(e>>>0)/10|0}a[b+d>>0]=0;while(1){d=d+-1|0;a[b+d>>0]=(c>>>0)%10|0|48;if(c>>>0<10)break;else c=(c>>>0)/10|0}}return}function Z4(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;g=l;l=l+48|0;f=g+40|0;e=g+8|0;d=g;c[d>>2]=a;c[d+4>>2]=b;d=Ca(197,d|0)|0;if((d|0)==-9?(c[e>>2]=a,c[e+4>>2]=1,(Ea(221,e|0)|0)>=0):0){Y4(e,a);c[f>>2]=e;c[f+4>>2]=b;b=c2(Ba(195,f|0)|0)|0}else b=c2(d)|0;l=g;return b|0}function _4(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;c[e+4>>2]=b;b=c2(Ga(33,e|0)|0)|0;l=d;return b|0}function $4(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;i=l;l=l+48|0;h=i+32|0;g=i+16|0;e=i;if(U2(153580,a[d>>0]|0,4)|0){f=a5(d)|0;c[e>>2]=b;c[e+4>>2]=f|32768;c[e+8>>2]=438;e=c2(Ha(5,e|0)|0)|0;if((e|0)>=0){if(f&524288|0){c[g>>2]=e;c[g+4>>2]=2;c[g+8>>2]=1;Ea(221,g|0)|0}b=P4(e,d)|0;if(!b){c[h>>2]=e;Ja(6,h|0)|0;b=0}}else b=0}else{c[(d2()|0)>>2]=22;b=0}l=i;return b|0}function a5(b){b=b|0;var c=0,d=0,e=0;d=(R2(b,43)|0)==0;c=a[b>>0]|0;d=d?c<<24>>24!=114&1:2;e=(R2(b,120)|0)==0;d=e?d:d|128;b=(R2(b,101)|0)==0;b=b?d:d|524288;b=c<<24>>24==114?b:b|64;b=c<<24>>24==119?b|512:b;return (c<<24>>24==97?b|1024:b)|0}function b5(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=d;d=c5(a,b,f)|0;l=e;return d|0}function c5(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;g=l;l=l+128|0;e=g;f=e;h=f+124|0;do{c[f>>2]=0;f=f+4|0}while((f|0)<(h|0));c[e+32>>2]=41;c[e+44>>2]=a;c[e+76>>2]=-1;c[e+84>>2]=a;h=e5(e,b,d)|0;l=g;return h|0}function d5(a,b,c){a=a|0;b=b|0;c=c|0;return m5(a,b,c)|0}function e5(b,e,f){b=b|0;e=e|0;f=f|0;var i=0,j=0,k=0,m=0,n=0,o=0.0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0;P=l;l=l+288|0;J=P+8|0;K=P+17|0;L=P;M=P+16|0;if((c[b+76>>2]|0)>-1)O=J3(b)|0;else O=0;i=a[e>>0]|0;a:do if(i<<24>>24){B=b+4|0;C=b+100|0;D=b+108|0;E=b+8|0;F=K+10|0;G=K+33|0;A=J+4|0;H=K+1|0;I=K+1|0;m=e;t=0;e=0;k=0;j=0;b:while(1){c:do if(!(S2(i&255)|0)){i=i<<24>>24==37;d:do if(i){p=m+1|0;n=a[p>>0]|0;e:do switch(n<<24>>24){case 37:break d;case 42:{y=0;m=m+2|0;break}default:{i=(n&255)+-48|0;if(i>>>0<10?(a[m+2>>0]|0)==36:0){y=f5(f,i)|0;m=m+3|0;break e}m=(c[f>>2]|0)+(4-1)&~(4-1);y=c[m>>2]|0;c[f>>2]=m+4;m=p}}while(0);i=a[m>>0]|0;n=i&255;if((n+-48|0)>>>0<10){p=0;do{p=(p*10|0)+-48+n|0;m=m+1|0;i=a[m>>0]|0;n=i&255}while((n+-48|0)>>>0<10)}else p=0;i=i<<24>>24==109;x=(y|0)!=0;k=i?0:k;j=i?0:j;m=i?m+1|0:m;i=x&i;n=m+1|0;switch(a[m>>0]|0){case 104:{w=(a[n>>0]|0)==104;q=w?-2:-1;m=w?m+2|0:n;break}case 108:{w=(a[n>>0]|0)==108;q=w?3:1;m=w?m+2|0:n;break}case 106:{q=3;m=n;break}case 116:case 122:{q=1;m=n;break}case 76:{q=2;m=n;break}case 110:case 112:case 67:case 83:case 91:case 99:case 115:case 88:case 71:case 70:case 69:case 65:case 103:case 102:case 101:case 97:case 120:case 117:case 111:case 105:case 100:{q=0;break}default:{N=135;break b}}s=d[m>>0]|0;u=(s&47|0)==3;s=u?s|32:s;u=u?1:q;r=s&255;switch(r<<24>>24){case 99:{p=(p|0)>1?p:1;w=t;break}case 91:{w=t;break}case 110:{g5(y,u,t,((t|0)<0)<<31>>31);n=t;break c}default:{W2(b,0);do{n=c[B>>2]|0;if(n>>>0<(c[C>>2]|0)>>>0){c[B>>2]=n+1;n=d[n>>0]|0}else n=Y2(b)|0}while((S2(n)|0)!=0);if(!(c[C>>2]|0))n=c[B>>2]|0;else{n=(c[B>>2]|0)+-1|0;c[B>>2]=n}w=(c[D>>2]|0)+t+n-(c[E>>2]|0)|0}}W2(b,p);n=c[B>>2]|0;q=c[C>>2]|0;if(n>>>0>>0)c[B>>2]=n+1;else{if((Y2(b)|0)<0){N=135;break b}q=c[C>>2]|0}if(q|0)c[B>>2]=(c[B>>2]|0)+-1;f:do switch(r<<24>>24){case 91:case 99:case 115:{v=(s|0)==99;g:do if((s|16|0)==115){Y6(H|0,-1,256)|0;a[K>>0]=0;if((s|0)==115){a[G>>0]=0;a[F>>0]=0;a[F+1>>0]=0;a[F+2>>0]=0;a[F+3>>0]=0;a[F+4>>0]=0}}else{s=m+1|0;n=(a[s>>0]|0)==94;t=n&1;m=n?m+2|0:s;Y6(I|0,n&1|0,256)|0;a[K>>0]=0;n=a[m>>0]|0;switch(n<<24>>24){case 45:{n=46;N=63;break}case 93:{n=94;N=63;break}default:{}}while(1){if((N|0)==63){N=0;a[K+n>>0]=t^1;n=m+1|0;m=n;n=a[n>>0]|0}h:do switch(n<<24>>24){case 0:{N=135;break b}case 93:break g;case 45:{s=m+1|0;n=a[s>>0]|0;switch(n<<24>>24){case 93:case 0:{n=45;break h}default:{}}m=a[m+-1>>0]|0;if((m&255)<(n&255)){r=(t^1)&255;m=m&255;do{m=m+1|0;a[K+m>>0]=r;n=a[s>>0]|0}while((m|0)<(n&255|0));m=s}else m=s;break}default:{}}while(0);n=(n&255)+1|0;N=63}}while(0);n=v?p+1|0:31;s=(u|0)==1;i:do if(s){if(i){j=T1(n<<2)|0;if(!j){k=0;j=0;i=1;N=135;break b}}else j=y;c[J>>2]=0;c[A>>2]=0;r=n;k=0;j:while(1){q=(j|0)==0;do{k:while(1){n=c[B>>2]|0;if(n>>>0<(c[C>>2]|0)>>>0){c[B>>2]=n+1;n=d[n>>0]|0}else n=Y2(b)|0;if(!(a[K+(n+1)>>0]|0))break j;a[M>>0]=n;switch(l3(L,M,1,J)|0){case -1:{k=0;N=135;break b}case -2:break;default:break k}}if(!q){c[j+(k<<2)>>2]=c[L>>2];k=k+1|0}}while(!(i&(k|0)==(r|0)));k=r<<1|1;n=W1(j,k<<2)|0;if(!n){k=0;i=1;N=135;break b}else{u=r;r=k;j=n;k=u}}if(!(h5(J)|0)){k=0;N=135;break b}else{n=k;k=0;r=j}}else{if(i){k=T1(n)|0;if(!k){k=0;j=0;i=1;N=135;break b}else{q=n;j=0}while(1){do{n=c[B>>2]|0;if(n>>>0<(c[C>>2]|0)>>>0){c[B>>2]=n+1;n=d[n>>0]|0}else n=Y2(b)|0;if(!(a[K+(n+1)>>0]|0)){n=j;r=0;j=0;break i}a[k+j>>0]=n;j=j+1|0}while((j|0)!=(q|0));j=q<<1|1;n=W1(k,j)|0;if(!n){j=0;i=1;N=135;break b}else{u=q;q=j;k=n;j=u}}}if(!y){k=q;while(1){j=c[B>>2]|0;if(j>>>0>>0){c[B>>2]=j+1;j=d[j>>0]|0}else j=Y2(b)|0;if(!(a[K+(j+1)>>0]|0)){n=0;k=0;r=0;j=0;break i}k=c[C>>2]|0}}else{n=0;k=q;while(1){j=c[B>>2]|0;if(j>>>0>>0){c[B>>2]=j+1;j=d[j>>0]|0}else j=Y2(b)|0;if(!(a[K+(j+1)>>0]|0)){k=y;r=0;j=0;break i}a[y+n>>0]=j;n=n+1|0;k=c[C>>2]|0}}}while(0);if(!(c[C>>2]|0))q=c[B>>2]|0;else{q=(c[B>>2]|0)+-1|0;c[B>>2]=q}q=q-(c[E>>2]|0)+(c[D>>2]|0)|0;if(!q){N=137;break b}if(!((q|0)==(p|0)|v^1)){N=137;break b}do if(i)if(s){c[y>>2]=r;break}else{c[y>>2]=k;break}while(0);if(!v){if(r|0)c[r+(n<<2)>>2]=0;if(!k){k=0;break f}a[k+n>>0]=0}break}case 120:case 88:case 112:{n=16;N=123;break}case 111:{n=8;N=123;break}case 117:case 100:{n=10;N=123;break}case 105:{n=0;N=123;break}case 71:case 103:case 70:case 102:case 69:case 101:case 65:case 97:{o=+i5(b,u,0);if((c[D>>2]|0)==((c[E>>2]|0)-(c[B>>2]|0)|0)){N=137;break b}if(y)switch(u|0){case 0:{g[y>>2]=o;break f}case 1:{h[y>>3]=o;break f}case 2:{h[y>>3]=o;break f}default:break f}break}default:{}}while(0);do if((N|0)==123){N=0;n=X2(b,n,0,-1,-1)|0;if((c[D>>2]|0)==((c[E>>2]|0)-(c[B>>2]|0)|0)){N=137;break b}if(x&(s|0)==112){c[y>>2]=n;break}else{g5(y,u,n,z);break}}while(0);e=e+(x&1)|0;n=(c[D>>2]|0)+w+(c[B>>2]|0)-(c[E>>2]|0)|0;break c}while(0);m=m+(i&1)|0;W2(b,0);i=c[B>>2]|0;if(i>>>0<(c[C>>2]|0)>>>0){c[B>>2]=i+1;i=d[i>>0]|0}else i=Y2(b)|0;if((i|0)!=(d[m>>0]|0)){N=22;break b}n=t+1|0}else{while(1){i=m+1|0;if(!(S2(d[i>>0]|0)|0))break;else m=i}W2(b,0);do{i=c[B>>2]|0;if(i>>>0<(c[C>>2]|0)>>>0){c[B>>2]=i+1;i=d[i>>0]|0}else i=Y2(b)|0}while((S2(i)|0)!=0);if(!(c[C>>2]|0))i=c[B>>2]|0;else{i=(c[B>>2]|0)+-1|0;c[B>>2]=i}n=(c[D>>2]|0)+t+i-(c[E>>2]|0)|0}while(0);m=m+1|0;i=a[m>>0]|0;if(!(i<<24>>24))break a;else t=n}if((N|0)==22){if(c[C>>2]|0)c[B>>2]=(c[B>>2]|0)+-1;if((e|0)!=0|(i|0)>-1)break;else{i=0;N=136}}else if((N|0)==135){i=i&1;if(!e)N=136}else if((N|0)==137)i=i&1;if((N|0)==136)e=-1;if(i){U1(k);U1(j)}}else e=0;while(0);if(O|0)K3(b);l=P;return e|0}function f5(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;e=l;l=l+16|0;d=e;c[d>>2]=c[a>>2];while(1){f=(c[d>>2]|0)+(4-1)&~(4-1);a=c[f>>2]|0;c[d>>2]=f+4;if(b>>>0>1)b=b+-1|0;else break}l=e;return a|0}function g5(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;a:do if(d|0)switch(e|0){case -2:{a[d>>0]=f;break a}case -1:{b[d>>1]=f;break a}case 0:{c[d>>2]=f;break a}case 1:{c[d>>2]=f;break a}case 3:{e=d;c[e>>2]=f;c[e+4>>2]=g;break a}default:break a}while(0);return}function h5(a){a=a|0;if(!a)a=1;else a=(c[a>>2]|0)==0&1;return a|0}function i5(b,e,f){b=b|0;e=e|0;f=f|0;var g=0.0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;switch(e|0){case 0:{l=-149;m=24;j=4;break}case 1:{l=-1074;m=53;j=4;break}case 2:{l=-1074;m=53;j=4;break}default:g=0.0}a:do if((j|0)==4){o=b+4|0;n=b+100|0;do{e=c[o>>2]|0;if(e>>>0<(c[n>>2]|0)>>>0){c[o>>2]=e+1;e=d[e>>0]|0}else e=Y2(b)|0}while((S2(e)|0)!=0);b:do switch(e|0){case 43:case 45:{i=1-(((e|0)==45&1)<<1)|0;e=c[o>>2]|0;if(e>>>0<(c[n>>2]|0)>>>0){c[o>>2]=e+1;h=d[e>>0]|0;break b}else{h=Y2(b)|0;break b}}default:{h=e;i=1}}while(0);e=0;do{if((h|32|0)!=(a[153584+e>>0]|0))break;do if(e>>>0<7){h=c[o>>2]|0;if(h>>>0<(c[n>>2]|0)>>>0){c[o>>2]=h+1;h=d[h>>0]|0;break}else{h=Y2(b)|0;break}}while(0);e=e+1|0}while(e>>>0<8);c:do switch(e|0){case 8:break;case 3:{j=23;break}default:{k=(f|0)!=0;if(k&e>>>0>3)if((e|0)==8)break c;else{j=23;break c}d:do if(!e){e=0;do{if((h|32|0)!=(a[153593+e>>0]|0))break d;do if(e>>>0<2){h=c[o>>2]|0;if(h>>>0<(c[n>>2]|0)>>>0){c[o>>2]=h+1;h=d[h>>0]|0;break}else{h=Y2(b)|0;break}}while(0);e=e+1|0}while(e>>>0<3)}while(0);switch(e|0){case 3:{e=c[o>>2]|0;if(e>>>0<(c[n>>2]|0)>>>0){c[o>>2]=e+1;e=d[e>>0]|0}else e=Y2(b)|0;if((e|0)==40)e=1;else{if(!(c[n>>2]|0)){g=s;break a}c[o>>2]=(c[o>>2]|0)+-1;g=s;break a}while(1){h=c[o>>2]|0;if(h>>>0<(c[n>>2]|0)>>>0){c[o>>2]=h+1;h=d[h>>0]|0}else h=Y2(b)|0;if(!((h+-48|0)>>>0<10|(h+-65|0)>>>0<26)?!((h|0)==95|(h+-97|0)>>>0<26):0)break;e=e+1|0}if((h|0)==41){g=s;break a}h=(c[n>>2]|0)==0;if(!h)c[o>>2]=(c[o>>2]|0)+-1;if(!k){c[(d2()|0)>>2]=22;W2(b,0);g=0.0;break a}if(!e){g=s;break a}while(1){e=e+-1|0;if(!h)c[o>>2]=(c[o>>2]|0)+-1;if(!e){g=s;break a}}}case 0:{if((h|0)==48){e=c[o>>2]|0;if(e>>>0<(c[n>>2]|0)>>>0){c[o>>2]=e+1;e=d[e>>0]|0}else e=Y2(b)|0;if((e|32|0)==120){g=+j5(b,m,l,i,f);break a}if(!(c[n>>2]|0))e=48;else{c[o>>2]=(c[o>>2]|0)+-1;e=48}}else e=h;g=+k5(b,e,m,l,i,f);break a}default:{if(c[n>>2]|0)c[o>>2]=(c[o>>2]|0)+-1;c[(d2()|0)>>2]=22;W2(b,0);g=0.0;break a}}}}while(0);if((j|0)==23){h=(c[n>>2]|0)==0;if(!h)c[o>>2]=(c[o>>2]|0)+-1;if((f|0)!=0&e>>>0>3)do{if(!h)c[o>>2]=(c[o>>2]|0)+-1;e=e+-1|0}while(e>>>0>3)}g=+(i|0)*t}while(0);return +g}function j5(a,b,e,f,g){a=a|0;b=b|0;e=e|0;f=f|0;g=g|0;var h=0.0,i=0,j=0,k=0.0,l=0,m=0,n=0,o=0.0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;y=a+4|0;i=c[y>>2]|0;x=a+100|0;if(i>>>0<(c[x>>2]|0)>>>0){c[y>>2]=i+1;j=d[i>>0]|0;l=0}else{j=Y2(a)|0;l=0}a:while(1){switch(j|0){case 46:{w=8;break a}case 48:break;default:{s=0;n=0;o=1.0;h=0.0;i=0;m=j;t=l;v=0;u=0;l=0;j=0;break a}}i=c[y>>2]|0;if(i>>>0<(c[x>>2]|0)>>>0){c[y>>2]=i+1;j=d[i>>0]|0;l=1;continue}else{j=Y2(a)|0;l=1;continue}}if((w|0)==8){i=c[y>>2]|0;if(i>>>0<(c[x>>2]|0)>>>0){c[y>>2]=i+1;j=d[i>>0]|0}else j=Y2(a)|0;if((j|0)==48){l=0;j=0;do{i=c[y>>2]|0;if(i>>>0<(c[x>>2]|0)>>>0){c[y>>2]=i+1;m=d[i>>0]|0}else m=Y2(a)|0;l=J6(l|0,j|0,-1,-1)|0;j=z}while((m|0)==48);s=1;n=0;o=1.0;h=0.0;i=0;t=1;v=0;u=0}else{s=1;n=0;o=1.0;h=0.0;i=0;m=j;t=l;v=0;u=0;l=0;j=0}}while(1){q=m+-48|0;p=m|32;if(q>>>0>=10){r=(m|0)==46;if(!(r|(p+-97|0)>>>0<6))break;if(r)if(!s){s=1;k=o;r=t;l=u;j=v;q=u;p=v}else{m=46;break}else w=20}else w=20;if((w|0)==20){w=0;m=(m|0)>57?p+-87|0:q;do if(!((v|0)<0|(v|0)==0&u>>>0<8))if((v|0)<0|(v|0)==0&u>>>0<14){o=o*.0625;k=o;h=h+o*+(m|0);break}else{t=(n|0)!=0|(m|0)==0;n=t?n:1;k=o;h=t?h:h+o*.5;break}else{k=o;i=m+(i<<4)|0}while(0);q=J6(u|0,v|0,1,0)|0;r=1;p=z}m=c[y>>2]|0;if(m>>>0<(c[x>>2]|0)>>>0){c[y>>2]=m+1;o=k;m=d[m>>0]|0;t=r;v=p;u=q;continue}else{o=k;m=Y2(a)|0;t=r;v=p;u=q;continue}}do if(!t){i=(c[x>>2]|0)==0;if(!i)c[y>>2]=(c[y>>2]|0)+-1;if(g){if(!i)c[y>>2]=(c[y>>2]|0)+-1;if(!((s|0)==0|i))c[y>>2]=(c[y>>2]|0)+-1}else W2(a,0);h=+(f|0)*0.0}else{p=(s|0)==0;q=p?u:l;p=p?v:j;if((v|0)<0|(v|0)==0&u>>>0<8){l=u;j=v;while(1){i=i<<4;w=l;l=J6(l|0,j|0,1,0)|0;if(!((j|0)<0|(j|0)==0&w>>>0<7)){n=i;break}else j=z}}else n=i;if((m|32|0)==112){j=l5(a,g)|0;i=z;if((j|0)==0&(i|0)==-2147483648){if(!g){W2(a,0);h=0.0;break}if(!(c[x>>2]|0)){j=0;i=0}else{c[y>>2]=(c[y>>2]|0)+-1;j=0;i=0}}}else if(!(c[x>>2]|0)){j=0;i=0}else{c[y>>2]=(c[y>>2]|0)+-1;j=0;i=0}l=R6(q|0,p|0,2)|0;l=J6(l|0,z|0,-32,-1)|0;l=J6(l|0,z|0,j|0,i|0)|0;i=z;if(!n){h=+(f|0)*0.0;break}y=0-e|0;g=((y|0)<0)<<31>>31;if((i|0)>(g|0)|(i|0)==(g|0)&l>>>0>y>>>0){c[(d2()|0)>>2]=34;h=+(f|0)*1797693134862315708145274.0e284*1797693134862315708145274.0e284;break}y=e+-106|0;g=((y|0)<0)<<31>>31;if((i|0)<(g|0)|(i|0)==(g|0)&l>>>0>>0){c[(d2()|0)>>2]=34;h=+(f|0)*2.2250738585072014e-308*2.2250738585072014e-308;break}if((n|0)>-1){j=n;do{y=!(h>=.5);j=j<<1|(y^1)&1;h=h+(y?h:h+-1.0);l=J6(l|0,i|0,-1,-1)|0;i=z}while((j|0)>-1);o=h;m=j}else{o=h;m=n}y=((b|0)<0)<<31>>31;e=K6(32,0,e|0,((e|0)<0)<<31>>31|0)|0;i=J6(e|0,z|0,l|0,i|0)|0;e=z;if((e|0)<(y|0)|(e|0)==(y|0)&i>>>0>>0)if((i|0)>0)w=59;else{j=0;i=84;w=61}else{i=b;w=59}if((w|0)==59)if((i|0)<53){j=i;i=84-i|0;w=61}else{k=0.0;h=+(f|0)}if((w|0)==61){h=+(f|0);k=+G2(+D2(1.0,i),h);i=j}f=(m&1|0)==0&(o!=0.0&(i|0)<32);h=(f?0.0:o)*h+(k+h*+((m+(f&1)|0)>>>0))-k;if(!(h!=0.0))c[(d2()|0)>>2]=34;h=+H2(h,l)}while(0);return +h}function k5(a,b,e,f,g,h){a=a|0;b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0.0,j=0.0,k=0,m=0,n=0,o=0,p=0,q=0,r=0.0,s=0.0,t=0.0,u=0,v=0,w=0,x=0,y=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0.0;J=l;l=l+512|0;G=J;H=f+e|0;I=0-H|0;D=a+4|0;E=a+100|0;k=0;a:while(1){switch(b|0){case 46:{A=6;break a}case 48:break;default:{v=0;p=k;q=0;o=0;break a}}b=c[D>>2]|0;if(b>>>0<(c[E>>2]|0)>>>0){c[D>>2]=b+1;b=d[b>>0]|0;k=1;continue}else{b=Y2(a)|0;k=1;continue}}if((A|0)==6){b=c[D>>2]|0;if(b>>>0<(c[E>>2]|0)>>>0){c[D>>2]=b+1;b=d[b>>0]|0}else b=Y2(a)|0;if((b|0)==48){k=0;b=0;while(1){k=J6(k|0,b|0,-1,-1)|0;o=z;b=c[D>>2]|0;if(b>>>0<(c[E>>2]|0)>>>0){c[D>>2]=b+1;b=d[b>>0]|0}else b=Y2(a)|0;if((b|0)==48)b=o;else{v=1;p=1;q=k;break}}}else{v=1;p=k;q=0;o=0}}c[G>>2]=0;n=b+-48|0;m=(b|0)==46;b:do if(m|n>>>0<10){C=G+496|0;w=0;k=0;u=0;x=v;y=p;A=n;p=0;n=0;c:while(1){do if(m)if(!x){x=1;q=p;o=n}else break c;else{p=J6(p|0,n|0,1,0)|0;n=z;v=(b|0)!=48;if((k|0)>=125){if(!v)break;c[C>>2]=c[C>>2]|1;break}m=G+(k<<2)|0;if(!w)b=A;else b=b+-48+((c[m>>2]|0)*10|0)|0;c[m>>2]=b;w=w+1|0;y=(w|0)==9;w=y?0:w;k=k+(y&1)|0;u=v?p:u;y=1}while(0);b=c[D>>2]|0;if(b>>>0<(c[E>>2]|0)>>>0){c[D>>2]=b+1;b=d[b>>0]|0}else b=Y2(a)|0;A=b+-48|0;m=(b|0)==46;if(!(m|A>>>0<10)){v=x;m=y;A=29;break b}}b=w;m=(y|0)!=0;A=37}else{w=0;k=0;u=0;m=p;p=0;n=0;A=29}while(0);do if((A|0)==29){C=(v|0)==0;q=C?p:q;o=C?n:o;m=(m|0)!=0;if(!(m&(b|32|0)==101))if((b|0)>-1){b=w;A=37;break}else{b=w;A=39;break}m=l5(a,h)|0;b=z;if((m|0)==0&(b|0)==-2147483648){if(!h){W2(a,0);i=0.0;break}if(!(c[E>>2]|0)){m=0;b=0}else{c[D>>2]=(c[D>>2]|0)+-1;m=0;b=0}}y=J6(m|0,b|0,q|0,o|0)|0;b=w;o=z;A=41}while(0);if((A|0)==37)if(c[E>>2]|0){c[D>>2]=(c[D>>2]|0)+-1;if(m){y=q;A=41}else A=40}else A=39;if((A|0)==39)if(m){y=q;A=41}else A=40;do if((A|0)==40){c[(d2()|0)>>2]=22;W2(a,0);i=0.0}else if((A|0)==41){m=c[G>>2]|0;if(!m){i=+(g|0)*0.0;break}if(((n|0)<0|(n|0)==0&p>>>0<10)&((y|0)==(p|0)&(o|0)==(n|0))?(e|0)>30|(m>>>e|0)==0:0){i=+(g|0)*+(m>>>0);break}a=(f|0)/-2|0;E=((a|0)<0)<<31>>31;if((o|0)>(E|0)|(o|0)==(E|0)&y>>>0>a>>>0){c[(d2()|0)>>2]=34;i=+(g|0)*1797693134862315708145274.0e284*1797693134862315708145274.0e284;break}a=f+-106|0;E=((a|0)<0)<<31>>31;if((o|0)<(E|0)|(o|0)==(E|0)&y>>>0>>0){c[(d2()|0)>>2]=34;i=+(g|0)*2.2250738585072014e-308*2.2250738585072014e-308;break}if(b){if((b|0)<9){n=G+(k<<2)|0;m=c[n>>2]|0;while(1){m=m*10|0;if((b|0)>=8)break;else b=b+1|0}c[n>>2]=m}k=k+1|0}if((u|0)<9?(u|0)<=(y|0)&(y|0)<18:0){if((y|0)==9){i=+(g|0)*+((c[G>>2]|0)>>>0);break}if((y|0)<9){i=+(g|0)*+((c[G>>2]|0)>>>0)/+(c[63712+(8-y<<2)>>2]|0);break}a=e+27+(O(y,-3)|0)|0;b=c[G>>2]|0;if((a|0)>30|(b>>>a|0)==0){i=+(g|0)*+(b>>>0)*+(c[63712+(y+-10<<2)>>2]|0);break}}b=(y|0)%9|0;if(!b){b=0;n=0}else{u=(y|0)>-1?b:b+9|0;p=c[63712+(8-u<<2)>>2]|0;if(k){q=1e9/(p|0)|0;n=0;o=0;m=y;b=0;do{D=G+(b<<2)|0;E=c[D>>2]|0;a=((E>>>0)/(p>>>0)|0)+n|0;c[D>>2]=a;n=O(q,(E>>>0)%(p>>>0)|0)|0;a=(b|0)==(o|0)&(a|0)==0;m=a?m+-9|0:m;o=a?o+1&127:o;b=b+1|0}while((b|0)!=(k|0));if(!n)n=o;else{c[G+(k<<2)>>2]=n;n=o;k=k+1|0}}else{n=0;k=0;m=y}b=0;y=9-u+m|0}d:while(1){u=(y|0)<18;v=(y|0)==18;w=G+(n<<2)|0;while(1){if(!u){if(!v){m=y;break d}if((c[w>>2]|0)>>>0>=9007199){m=18;break d}}m=0;x=k;k=k+127|0;while(1){o=k&127;p=G+(o<<2)|0;k=R6(c[p>>2]|0,0,29)|0;k=J6(k|0,z|0,m|0,0)|0;m=z;if(m>>>0>0|(m|0)==0&k>>>0>1e9){q=N6(k|0,m|0,1e9,0)|0;k=O6(k|0,m|0,1e9,0)|0}else q=0;c[p>>2]=k;a=(o|0)==(n|0);x=(k|0)==0&(((o|0)!=(x+127&127|0)|a)^1)?o:x;if(a)break;else{m=q;k=o+-1|0}}b=b+-29|0;if(q|0)break;else k=x}n=n+127&127;k=x+127&127;m=G+((x+126&127)<<2)|0;if((n|0)==(x|0))c[m>>2]=c[m>>2]|c[G+(k<<2)>>2];else k=x;c[G+(n<<2)>>2]=q;y=y+9|0}e:while(1){w=k+1&127;x=G+((k+127&127)<<2)|0;while(1){q=(m|0)==18;v=(m|0)>27?9:1;y=n;while(1){p=0;while(1){n=p+y&127;if((n|0)==(k|0)){F=2;A=88;break}n=c[G+(n<<2)>>2]|0;o=c[63744+(p<<2)>>2]|0;if(n>>>0>>0){F=2;A=88;break}if(n>>>0>o>>>0)break;n=p+1|0;if((p|0)<1)p=n;else{F=n;A=88;break}}if((A|0)==88?(A=0,q&(F|0)==2):0){i=0.0;o=0;break e}b=v+b|0;if((y|0)==(k|0))y=k;else break}q=(1<>>v;p=0;n=y;o=y;do{D=G+(o<<2)|0;E=c[D>>2]|0;a=(E>>>v)+p|0;c[D>>2]=a;p=O(E&q,u)|0;a=(o|0)==(n|0)&(a|0)==0;m=a?m+-9|0:m;n=a?n+1&127:n;o=o+1&127}while((o|0)!=(k|0));if(!p)continue;if((w|0)!=(n|0))break;c[x>>2]=c[x>>2]|1}c[G+(k<<2)>>2]=p;k=w}do{n=o+y&127;m=k+1&127;if((n|0)==(k|0)){c[G+(m+-1<<2)>>2]=0;k=m}i=i*1.0e9+ +((c[G+(n<<2)>>2]|0)>>>0);o=o+1|0}while((o|0)!=2);t=+(g|0);j=i*t;o=b+53|0;p=o-f|0;q=(p|0)<(e|0);n=q?((p|0)>0?p:0):e;if((n|0)<53){K=+G2(+D2(1.0,105-n|0),j);r=+I2(j,+D2(1.0,53-n|0));s=K;i=r;r=K+(j-r)}else{s=0.0;i=0.0;r=j}m=y+2&127;if((m|0)!=(k|0)){m=c[G+(m<<2)>>2]|0;do if(m>>>0>=5e8){if((m|0)!=5e8){i=t*.75+i;break}if((y+3&127|0)==(k|0)){i=t*.5+i;break}else{i=t*.75+i;break}}else{if((m|0)==0?(y+3&127|0)==(k|0):0)break;i=t*.25+i}while(0);if((53-n|0)>1?!(+I2(i,1.0)!=0.0):0)j=i+1.0;else j=i}else j=i;i=r+j-s;do if((o&2147483647|0)>(-2-H|0)){H=!(+B(+i)>=9007199254740992.0);b=b+((H^1)&1)|0;i=H?i:i*.5;if((b+50|0)<=(I|0)?!(j!=0.0&(q&((n|0)!=(p|0)|H))):0)break;c[(d2()|0)>>2]=34}while(0);i=+H2(i,b)}while(0);l=J;return +i}function l5(a,b){a=a|0;b=b|0;var e=0,f=0,g=0,h=0,i=0;h=a+4|0;e=c[h>>2]|0;i=a+100|0;if(e>>>0<(c[i>>2]|0)>>>0){c[h>>2]=e+1;e=d[e>>0]|0}else e=Y2(a)|0;switch(e|0){case 43:case 45:{f=(e|0)==45&1;e=c[h>>2]|0;if(e>>>0<(c[i>>2]|0)>>>0){c[h>>2]=e+1;e=d[e>>0]|0}else e=Y2(a)|0;if((b|0)!=0&(e+-48|0)>>>0>9?(c[i>>2]|0)!=0:0)c[h>>2]=(c[h>>2]|0)+-1;break}default:f=0}if((e+-48|0)>>>0>9)if(!(c[i>>2]|0)){f=-2147483648;e=0}else{c[h>>2]=(c[h>>2]|0)+-1;f=-2147483648;e=0}else{g=0;do{g=e+-48+(g*10|0)|0;e=c[h>>2]|0;if(e>>>0<(c[i>>2]|0)>>>0){c[h>>2]=e+1;e=d[e>>0]|0}else e=Y2(a)|0}while((e+-48|0)>>>0<10&(g|0)<214748364);b=((g|0)<0)<<31>>31;if((e+-48|0)>>>0<10)do{b=I6(g|0,b|0,10,0)|0;g=z;e=J6(e|0,((e|0)<0)<<31>>31|0,-48,-1)|0;g=J6(e|0,z|0,b|0,g|0)|0;b=z;e=c[h>>2]|0;if(e>>>0<(c[i>>2]|0)>>>0){c[h>>2]=e+1;e=d[e>>0]|0}else e=Y2(a)|0}while((e+-48|0)>>>0<10&((b|0)<21474836|(b|0)==21474836&g>>>0<2061584302));if((e+-48|0)>>>0<10)do{e=c[h>>2]|0;if(e>>>0<(c[i>>2]|0)>>>0){c[h>>2]=e+1;e=d[e>>0]|0}else e=Y2(a)|0}while((e+-48|0)>>>0<10);if(c[i>>2]|0)c[h>>2]=(c[h>>2]|0)+-1;i=(f|0)!=0;e=K6(0,0,g|0,b|0)|0;f=i?z:b;e=i?e:g}z=f;return e|0}function m5(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=a+84|0;g=c[e>>2]|0;h=d+256|0;f=U2(g,0,h)|0;f=(f|0)==0?h:f-g|0;d=f>>>0>>0?f:d;W6(b|0,g|0,d|0)|0;c[a+4>>2]=g+d;b=g+f|0;c[a+8>>2]=b;c[e>>2]=b;return d|0}function n5(a,b,c){a=a|0;b=b|0;c=c|0;return o5(a,b,c)|0}function o5(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;if((c[a+76>>2]|0)>-1){e=(J3(a)|0)==0;b=p5(a,b,d)|0;if(!e)K3(a)}else b=p5(a,b,d)|0;return b|0}function p5(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;if((d|0)==1)b=b-(c[a+8>>2]|0)+(c[a+4>>2]|0)|0;e=a+20|0;f=a+28|0;if((c[e>>2]|0)>>>0>(c[f>>2]|0)>>>0?(nb[c[a+36>>2]&63](a,0,0)|0,(c[e>>2]|0)==0):0)b=-1;else{c[a+16>>2]=0;c[f>>2]=0;c[e>>2]=0;if((nb[c[a+40>>2]&63](a,b,d)|0)<0)b=-1;else{c[a+8>>2]=0;c[a+4>>2]=0;c[a>>2]=c[a>>2]&-17;b=0}}return b|0}function q5(b){b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0;while(1){e=a[b>>0]|0;c=e<<24>>24;f=b+1|0;if(!(S2(c)|0))break;else b=f}switch(c|0){case 45:{b=1;g=5;break}case 43:{b=0;g=5;break}default:{h=0;d=b;b=e}}if((g|0)==5){h=b;d=f;b=a[f>>0]|0}c=(b<<24>>24)+-48|0;if(c>>>0<10){b=0;do{d=d+1|0;b=(b*10|0)-c|0;c=(a[d>>0]|0)+-48|0}while(c>>>0<10)}else b=0;return (h|0?b:0-b|0)|0}function r5(a){a=a|0;return +(+s5(a,0))}function s5(a,b){a=a|0;b=b|0;return +(+t5(a,b,1))}function t5(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0,g=0,h=0,i=0;i=l;l=l+128|0;h=i;f=h;g=f+124|0;do{c[f>>2]=0;f=f+4|0}while((f|0)<(g|0));f=h+4|0;c[f>>2]=a;g=h+8|0;c[g>>2]=-1;c[h+44>>2]=a;c[h+76>>2]=-1;W2(h,0);e=+i5(h,d,1);d=(c[f>>2]|0)-(c[g>>2]|0)+(c[h+108>>2]|0)|0;if(b|0)c[b>>2]=d|0?a+d|0:a;l=i;return +e}function u5(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0;a:do if(!c)b=0;else{h=b;while(1){g=c>>>1;b=h+(O(g,d)|0)|0;f=lb[e&127](a,b)|0;if(!f)break a;if((c|0)==1){b=0;break a}f=(f|0)<0;c=f?g:c-g|0;if(!c){b=0;break}else h=f?h:b}}while(0);return b|0}function v5(a,c){a=a|0;c=c|0;var d=0,f=0,g=0;g=a+2|0;f=a+4|0;d=I6((e[c+2>>1]|0)<<16|(e[c>>1]|0)|0,e[c+4>>1]|0|0,(e[g>>1]|0)<<16|(e[a>>1]|0)|0,e[f>>1]|0|0)|0;c=J6(d|0,z|0,e[c+6>>1]|0|0,0)|0;d=z;b[a>>1]=c;a=Q6(c|0,d|0,16)|0;b[g>>1]=a;b[f>>1]=d;z=d&65535;return c|0}function w5(a){a=a|0;var b=0;b=186608;c[b>>2]=a+-1;c[b+4>>2]=0;return}function x5(){var a=0,b=0,d=0;b=186608;b=I6(c[b>>2]|0,c[b+4>>2]|0,1284865837,1481765933)|0;b=J6(b|0,z|0,1,0)|0;a=z;d=186608;c[d>>2]=b;c[d+4>>2]=a;a=Q6(b|0,a|0,33)|0;return a|0}function y5(a){a=a|0;b[96876]=b[32922]|0;b[96877]=b[32923]|0;b[96878]=b[32924]|0;b[32922]=b[a>>1]|0;b[32923]=b[a+2>>1]|0;b[32924]=b[a+4>>1]|0;return 193752}function z5(a){a=a|0;var c=0,d=0;c=l;l=l+16|0;d=c;b[d>>1]=13070;b[d+2>>1]=a;b[d+4>>1]=a>>>16;y5(d)|0;l=c;return}function A5(a){a=a|0;var b=0;b=v5(a,65850)|0;b=R6(b|0,z|0,4)|0;a=z|1072693248;c[j>>2]=b;c[j+4>>2]=a;return +(+h[j>>3]+-1.0)}function B5(){return +(+A5(65844))}function C5(a,b){a=a|0;b=b|0;if(!a)b=V1(1,24)|0;else{c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;c[b+12>>2]=0;c[b+16>>2]=0;c[b+20>>2]=0}return b|0}function D5(a){a=a|0;var b=0,d=0;b=c[a>>2]|0;if(b|0)do{U1(c[b>>2]|0);d=b;b=c[b+4>>2]|0;U1(d)}while((b|0)!=0);U1(a);return}function E5(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0;h=a+16|0;a:do if(!(c[h>>2]|0)){k=a+12|0;g=c[k>>2]|0;if(g>>>0>>0){do if(b)if(!d){c[h>>2]=1;b=0;break a}else{h=a+8|0;c[h>>2]=d;g=1024;b=d;break}else{g=f<<3;g=g>>>0>1024?g:1024;j=T1(8)|0;if(!j){c[h>>2]=1;b=0;break a}b=T1(g)|0;c[j>>2]=b;d=b;if(!b){U1(j);c[h>>2]=1;b=0;break a}c[j+4>>2]=0;h=a+4|0;i=c[h>>2]|0;if(i|0)c[i+4>>2]=j;if(!(c[a>>2]|0))c[a>>2]=j;c[h>>2]=j;h=a+8|0;c[h>>2]=d}while(0);c[k>>2]=g}else{h=a+8|0;b=c[h>>2]|0;d=b}d=d+f&3;d=((d|0)==0?0:4-d|0)+f|0;c[h>>2]=b+d;c[k>>2]=g-d;if(e)Y6(b|0,0,d|0)|0}else b=0;while(0);return b|0}function F5(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;v=l;l=l+48|0;i=v;t=G5()|0;a:do if(!t)b=12;else{u=C5(0,0)|0;if(!u){H5(t);b=12;break}e=i+8|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;c[e+16>>2]=0;c[i>>2]=u;c[i+4>>2]=t;c[i+16>>2]=b;c[i+32>>2]=d;e=i+28|0;c[e>>2]=-1;b=I5(i)|0;b:do if(!b){h=i+20|0;f=c[h>>2]|0;c[a>>2]=f+-1;j=c[i+8>>2]|0;b=c[e>>2]|0;if((b|0)<(f|0)){g=V1(1,68)|0;if(g){r=b>>>31^1;c[g+60>>2]=r;c[g+28>>2]=f;if((d&8|0)==0|(r|0)!=0){b=J5(0,t,j,g)|0;if(b|0){h=0;i=0;f=0;e=0;break}f=c[g+40>>2]|0;if((f|0)>0){b=(f<<2)+4|0;e=T1(b)|0;if(!e){h=0;i=0;b=12;f=0;e=0;break}c[g+32>>2]=e;Y6(e|0,-1,b|0)|0}else e=0;r=V1(f<<1|1,4)|0;c[g+36>>2]=r;if(!r){h=0;i=0;b=12;f=0;e=0;break}b=V1(c[h>>2]|0,12)|0;if(!b){h=0;i=0;b=12;f=0;e=0;break}c[g+16>>2]=b;b=J5(u,t,j,g)|0;if(!b)b=e;else{h=0;i=0;f=0;e=0;break}}else b=0;r=i+24|0;b=K5(u,t,j,r,b)|0;if(!b){b=c[r>>2]|0;c[r>>2]=b+1;b=L5(u,0,0,b)|0;if((b|0)!=0?(s=M5(u,j,b)|0,(s|0)!=0):0){b=N5(u,t,s)|0;if(!b){e=c[r>>2]|0;b=e<<2;p=T1(b)|0;if(p){q=T1(b)|0;if(q){if((e|0)>0)Y6(p|0,0,e<<2|0)|0;O5(s,0,p,0)|0;f=c[r>>2]|0;if((f|0)>0){b=0;e=0;do{c[q+(e<<2)>>2]=b;o=p+(e<<2)|0;b=b+1+(c[o>>2]|0)|0;c[o>>2]=0;e=e+1|0}while((e|0)<(f|0));m=b}else m=0;n=V1(m+1|0,32)|0;if(n){c[g>>2]=n;o=g+4|0;c[o>>2]=m;b=O5(s,n,p,q)|0;if(!b){c[g+20>>2]=0;f=s+24|0;b=c[f>>2]|0;e=0;while(1){e=e+1|0;if((c[b>>2]|0)<=-1)break;else b=b+32|0}k=V1(e,32)|0;if(!k){h=p;i=q;b=12;f=p;e=q}else{c[g+8>>2]=k;e=c[f>>2]|0;f=c[e>>2]|0;if((f|0)>-1){b=0;do{c[k+(b<<5)+8>>2]=n+(c[q+(f<<2)>>2]<<5);c[k+(b<<5)+12>>2]=f;i=k+(b<<5)+16|0;c[i>>2]=0;j=e+12|0;h=c[j>>2]|0;if(h|0){f=0;do{w=f;f=f+1|0}while((c[h+(w<<2)>>2]|0)>-1);f=f<<2;h=T1(f)|0;c[i>>2]=h;if(!h){h=p;i=q;b=12;f=p;e=q;break b}W6(h|0,c[j>>2]|0,f|0)|0}c[k+(b<<5)+20>>2]=c[e+16>>2];b=b+1|0;e=e+32|0;f=c[e>>2]|0}while((f|0)>-1)}else b=0;c[k+(b<<5)+8>>2]=0;c[o>>2]=m;c[g+12>>2]=n+(c[q+(c[c[s+28>>2]>>2]<<2)>>2]<<5);c[g+52>>2]=c[r>>2];c[g+56>>2]=d;D5(u);H5(t);U1(p);U1(q);c[a+4>>2]=g;b=0;break a}}else{h=p;i=q;f=p;e=q}}else{h=p;i=q;b=12;f=p;e=q}}else{h=p;i=q;b=12;f=p;e=0}}else{h=p;i=0;b=12;f=0;e=0}}else{h=0;i=0;f=0;e=0}}else{h=0;i=0;b=12;f=0;e=0}}else{h=0;i=0;f=0;e=0}}else{h=0;i=0;b=12;f=0;e=0}}else{g=0;h=0;i=0;b=6;f=0;e=0}}else{g=0;h=0;i=0;f=0;e=0}while(0);D5(u);H5(t);if(h|0)U1(f);if(i|0)U1(e);c[a+4>>2]=g;P5(a)}while(0);l=v;return b|0}function G5(){var a=0,b=0;a=T1(20)|0;do if(a){b=T1(2048)|0;c[a+16>>2]=b;if(!b){U1(a);a=0;break}else{c[a>>2]=512;c[a+4>>2]=1024e3;c[a+8>>2]=128;c[a+12>>2]=0;break}}while(0);return a|0}function H5(a){a=a|0;U1(c[a+16>>2]|0);U1(a);return}function I5(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;u=l;l=l+16|0;p=u+4|0;q=u;r=c[b+32>>2]&1;s=b+16|0;e=c[s>>2]|0;t=c[b+4>>2]|0;d=T5(t,0)|0;a:do if(!d){m=(r|0)!=0;n=b+8|0;o=b+12|0;d=0;k=1;b:while(1){g=0;h=d;f=0;c:while(1){d=a[e>>0]|0;if(m){if(d<<24>>24==40)break;if((h|0)!=0&d<<24>>24==41)j=13;else j=14}else if(d<<24>>24==92)switch(a[e+1>>0]|0){case 40:break c;case 41:{j=13;break}default:j=14}else j=14;if((j|0)==13){j=0;i=L5(c[b>>2]|0,-1,-1,-1)|0;c[n>>2]=i;if(!i){d=12;break a}else i=f}else if((j|0)==14){j=0;d=g6(b,e)|0;if(d|0)break a;i=f;e=c[o>>2]|0}d:while(1){e:while(1){d=a[e>>0]|0;switch(d<<24>>24){case 42:case 92:break;default:{if(!m)break e;switch(d<<24>>24){case 123:case 63:case 43:break;default:break e}}}d=d<<24>>24==92;if(m&d)break;f=e+1|0;if(d)switch(a[f>>0]|0){case 123:case 63:case 43:break;default:break e}e=d?f:e;if((!m?(e|0)==((c[s>>2]|0)+1|0):0)?(a[e+-1>>0]|0)==94:0)break;if((a[e>>0]|0)==123){e=h6(e+1|0,r,p,q)|0;if(!e){j=28;break b}d=c[q>>2]|0;f=c[b>>2]|0;if(!d)d=L5(f,-1,-1,-1)|0;else j=36}else{c[p>>2]=0;c[q>>2]=-1;d=a[e>>0]|0;if(d<<24>>24==43){c[p>>2]=1;d=a[e>>0]|0}if(d<<24>>24==63){c[q>>2]=1;d=1}else d=-1;e=e+1|0;f=c[b>>2]|0;j=36}if((j|0)==36){j=0;d=b6(f,c[n>>2]|0,c[p>>2]|0,d,0)|0}c[n>>2]=d;if(!d){d=12;break a}}d=M5(c[b>>2]|0,g,c[n>>2]|0)|0;f=a[e>>0]|0;f:do if(m){if(f<<24>>24==124){j=40;break d}if((h|0)!=0&f<<24>>24==41|f<<24>>24==0)j=47;else{g=d;f=i;continue c}}else{switch(f<<24>>24){case 0:{j=47;break f}case 92:break;default:{g=d;f=i;continue c}}switch(a[e+1>>0]|0){case 124:case 41:break;default:{g=d;f=i;continue c}}d=c6(c[b>>2]|0,i,d)|0;if((a[e+1>>0]|0)==124){f=2;break d}if(!h){d=8;break a}e=e+2|0;f=92}while(0);if((j|0)==47){j=0;d=c6(c[b>>2]|0,i,d)|0;e=f<<24>>24==41?e+1|0:e}d=i6(b,d,U5(t)|0)|0;if(d|0)break a;d=f<<24>>24==0;f=(h|0)<1;if(f&d){j=50;break b}if(f|d){d=8;break a}g=V5(t)|0;h=h+-1|0;i=V5(t)|0}if((j|0)==40){f=1;d=c6(c[b>>2]|0,i,d)|0}g=0;e=e+f|0;f=d}d=S5(t,f)|0;if(d|0)break a;d=S5(t,g)|0;if(d|0)break a;d=T5(t,k)|0;if(d|0)break a;d=h+1|0;k=k+1|0;e=m?e+1|0:e+2|0}if((j|0)==28){d=10;break}else if((j|0)==50){c[b+20>>2]=k;d=0;break}}while(0);l=u;return d|0}function J5(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;x=R5(d)|0;y=(b|0)==0|(f|0)==0;if(!y){c[f+48>>2]=0;c[c[f+36>>2]>>2]=-1}h=c[f+28>>2]|0;z=T1((h<<3)+8|0)|0;do if(!z)g=12;else{c[z>>2]=-1;A=T1((h<<2)+4|0)|0;if(!A){U1(z);g=12;break}c[A>>2]=-1;g=0;while(1)if(g>>>0>h>>>0)break;else g=g+1|0;S5(d,e)|0;g=T5(d,0)|0;a:do if((g|0)!=0|(R5(d)|0)<=(x|0)){e=z;n=0;h=0;m=0;l=-1}else{u=f+32|0;v=f+36|0;w=f+16|0;e=z;n=0;h=0;m=0;t=1;l=-1;s=0;while(1){b:do switch(U5(d)|0){case 6:{i=U5(d)|0;g=0;do{j=e+(g<<2)|0;g=g+1|0}while((c[j>>2]|0)>-1);c[j>>2]=i<<1|1;c[e+(g<<2)>>2]=-1;g=0;while(1)if((c[A+(g<<2)>>2]|0)>-1)g=g+1|0;else break;c[A+(g+-1<<2)>>2]=-1;g=0;j=t;i=s;break}case 0:{q=V5(d)|0;r=q+12|0;j=c[r>>2]|0;if((j|0)>-1){g=0;do{i=e+(g<<2)|0;g=g+1|0}while((c[i>>2]|0)>-1);c[i>>2]=j<<1;c[e+(g<<2)>>2]=-1;if(!y){g=0;while(1)if((c[A+(g<<2)>>2]|0)>-1)g=g+1|0;else break;i=(c[w>>2]|0)+(j*12|0)+8|0;c[i>>2]=0;if((g|0)>0){g=T1((g<<2)+4|0)|0;if(!g){g=12;j=t;i=s;break b}c[i>>2]=g;i=c[A>>2]|0;if((i|0)>-1){k=0;j=g;do{c[j>>2]=i;k=k+1|0;i=c[A+(k<<2)>>2]|0;j=g+(k<<2)|0}while((i|0)>-1);g=j}c[g>>2]=-1}}g=T5(d,c[r>>2]|0)|0;if(g|0){j=t;i=s;break b}g=T5(d,6)|0;if(g|0){j=t;i=s;break b}}c:do switch(c[q>>2]|0){case 0:{p=c[c[q+4>>2]>>2]|0;if((p|0)>-1|(p|0)==-4?(c[e>>2]|0)>-1:0){if(y){c[q+20>>2]=1;g=0}else{g=d6(b,q,m)|0;c[(c[u>>2]|0)+(m<<2)>>2]=s;if((l|0)>-1){j=c[v>>2]|0;i=0;while(1){k=j+(i<<2)|0;o=i+1|0;if((c[k>>2]|0)>-1)i=o;else break}c[k>>2]=m;c[j+(o<<2)>>2]=l;c[j+(i+2<<2)>>2]=-1;h=h+1|0;l=-1}e6(e,f,m)}c[e>>2]=-1;p=t+1|0;o=s;n=n+1|0;m=t}else{p=t;g=0;o=s}break}case 1:{j=c[q+4>>2]|0;k=c[j>>2]|0;j=c[j+4>>2]|0;g=S5(d,q)|0;if(!g){g=T5(d,5)|0;if(!g){g=S5(d,j)|0;if(!g){g=T5(d,0)|0;if(!g){i=k+20|0;g=T5(d,(c[i>>2]|0)+t|0)|0;if(!g){if((c[i>>2]|0)>0){i=(c[j+20>>2]|0)>0;g=i?t:-1;i=t+(i&1)|0}else{g=-1;i=t}g=T5(d,g)|0;if(!g){g=T5(d,4)|0;if(!g){g=S5(d,k)|0;if(!g){p=i;g=T5(d,0)|0;o=s}else{p=i;o=s}}else{p=i;o=s}}else{p=i;o=s}}else{p=t;o=s}}else{p=t;o=s}}else{p=t;o=s}}else{p=t;o=s}}else{p=t;o=s}break}case 2:{i=c[q+4>>2]|0;if(y){if((c[e>>2]|0)>-1)g=1;else g=(a[i+12>>0]&1)!=0;g=T5(d,g&1)|0;if(g|0){p=t;o=s;break c}}else{g=T5(d,m)|0;if(g|0){p=t;o=s;break c}g=T5(d,a[i+12>>0]&1)|0;if(g|0){p=t;o=s;break c}}g=S5(d,q)|0;if(!g){g=T5(d,1)|0;if(!g){g=S5(d,c[i>>2]|0)|0;if(!g){g=T5(d,0)|0;if(!g){if((c[e>>2]|0)<=-1?(a[i+12>>0]&1)==0:0){p=t;g=0;o=0;break c}if(y)g=0;else{g=d6(b,q,m)|0;c[(c[u>>2]|0)+(m<<2)>>2]=(a[i+12>>0]&1)==0?s:1;if((l|0)>-1){j=c[v>>2]|0;i=0;while(1){k=j+(i<<2)|0;o=i+1|0;if((c[k>>2]|0)>-1)i=o;else break}c[k>>2]=m;c[j+(o<<2)>>2]=l;c[j+(i+2<<2)>>2]=-1;h=h+1|0;l=-1}e6(e,f,m)}c[e>>2]=-1;p=t+1|0;o=0;n=n+1|0;m=t}else{p=t;o=s}}else{p=t;o=s}}else{p=t;o=s}}else{p=t;o=s}break}case 3:{j=c[q+4>>2]|0;k=c[j>>2]|0;j=c[j+4>>2]|0;i=(c[e>>2]|0)>-1;p=t+1|0;g=T5(d,i?p:t)|0;if(!g){g=T5(d,i?t:m)|0;if(!g){g=S5(d,e)|0;if(!g){g=T5(d,(c[e>>2]|0)>>>31^1)|0;if(!g){g=S5(d,q)|0;if(!g){g=S5(d,j)|0;if(!g){g=S5(d,k)|0;if(!g){g=T5(d,3)|0;if(!g){g=S5(d,j)|0;if(!g){g=T5(d,0)|0;if(!g){g=T5(d,2)|0;if(g|0){p=t;o=s;break c}g=S5(d,k)|0;if(g|0){p=t;o=s;break c}g=T5(d,0)|0;if(g|0){p=t;o=s;break c}if((c[e>>2]|0)>-1){if(y)g=0;else{g=d6(b,q,m)|0;c[(c[u>>2]|0)+(m<<2)>>2]=s;if((l|0)>-1){j=c[v>>2]|0;i=0;while(1){k=j+(i<<2)|0;o=i+1|0;if((c[k>>2]|0)>-1)i=o;else break}c[k>>2]=m;c[j+(o<<2)>>2]=l;c[j+(i+2<<2)>>2]=-1;h=h+1|0;l=-1}e6(e,f,m)}c[e>>2]=-1;n=n+1|0;m=t;i=p}else{g=0;i=t}t=(c[q+16>>2]|0)>0;p=t?i+2|0:i;o=s;m=t?i+1|0:m}else{p=t;o=s}}else{p=t;o=s}}else{p=t;o=s}}else{p=t;o=s}}else{p=t;o=s}}else{p=t;o=s}}else{p=t;o=s}}else{p=t;o=s}}else{p=t;o=s}}else{p=t;o=s}break}default:{p=t;g=0;o=s}}while(0);j=c[r>>2]|0;if((j|0)>-1){i=0;do{k=A+(i<<2)|0;i=i+1|0}while((c[k>>2]|0)>-1);c[k>>2]=j;c[A+(i<<2)>>2]=-1;j=p;i=o}else{j=p;i=o}break}case 1:{g=V5(d)|0;if(y){i=c[(c[c[g+4>>2]>>2]|0)+20>>2]|0;c[g+20>>2]=(U5(d)|0)+i;i=0;l=-1}else{q=U5(d)|0;r=U5(d)|0;i=q;l=(q|0)==0?l:r}g=0;j=t;i=y?s:(i|0)==0&1;break}case 4:{i=U5(d)|0;j=U5(d)|0;g=0;m=(i|0)>-1?i:m;i=s;break}case 5:{g=V5(d)|0;if(y){j=c[g+4>>2]|0;c[g+20>>2]=(c[(c[j+4>>2]|0)+20>>2]|0)+(c[(c[j>>2]|0)+20>>2]|0);g=0;j=t;i=s}else{g=0;j=t;i=s}break}case 2:{while(1)if((c[e>>2]|0)>-1)e=e+4|0;else{g=0;j=t;i=s;break}break}case 3:{j=V5(d)|0;o=V5(d)|0;g=V5(d)|0;e=U5(d)|0;if(y){r=c[g+4>>2]|0;s=g+16|0;c[g+20>>2]=(c[(c[r>>2]|0)+20>>2]|0)+e+(c[(c[r+4>>2]|0)+20>>2]|0)+((c[s>>2]|0)>0?2:0);g=s}else g=g+16|0;e=V5(d)|0;i=U5(d)|0;k=U5(d)|0;if((c[g>>2]|0)>0){if(y)g=0;else{g=f6(b,j,i)|0;c[(c[u>>2]|0)+(i<<2)>>2]=1;if(!g)g=f6(b,o,k)|0;c[(c[u>>2]|0)+(k<<2)>>2]=1}n=n+2|0;j=t;i=1}else{g=0;j=t;i=1}break}default:{g=0;j=t;i=s}}while(0);if((g|0)!=0|(R5(d)|0)<=(x|0))break a;else{t=j;s=i}}}while(0);if(!y?(e6(e,f,m),(l|0)>-1):0){i=c[f+36>>2]|0;e=0;while(1){j=i+(e<<2)|0;k=e+1|0;if((c[j>>2]|0)>-1)e=k;else break}c[j>>2]=m;c[i+(k<<2)>>2]=l;c[i+(e+2<<2)>>2]=-1;h=h+1|0}c[f+48>>2]=n;c[f+40>>2]=n;c[f+44>>2]=h;U1(z);U1(A)}while(0);return g|0}function K5(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;y=l;l=l+16|0;t=y+12|0;x=y+8|0;u=y+4|0;v=y;w=R5(b)|0;c[t>>2]=0;c[x>>2]=0;d=S5(b,d)|0;a:do if(!d){d=T5(b,0)|0;if(!d){b:do if((R5(b)|0)>(w|0)){g=0;i=0;j=0;c:while(1){q=U5(b)|0;r=V5(b)|0;d:do switch(q|0){case 0:{switch(c[r>>2]|0){case 0:{d=c[r+4>>2]|0;r=c[d>>2]|0;if(!((r|0)>-1|(r|0)==-4)){d=j;break d}r=d+8|0;d=(c[r>>2]|0)+j|0;c[r>>2]=d;if((d|0)<=(c[x>>2]|0)){d=j;break d}c[x>>2]=d;d=j;break d}case 3:{h=c[r+4>>2]|0;d=S5(b,c[h+4>>2]|0)|0;if(d|0)break b;d=T5(b,0)|0;if(d|0)break b;d=S5(b,c[h>>2]|0)|0;if(d|0)break b;break}case 1:{h=c[r+4>>2]|0;d=S5(b,c[h+4>>2]|0)|0;if(d|0)break b;d=T5(b,0)|0;if(d|0)break b;d=S5(b,c[h>>2]|0)|0;if(d|0)break b;break}case 2:{h=c[r+4>>2]|0;d=T5(b,j)|0;if(d|0)break b;d=S5(b,r)|0;if(d|0)break b;d=T5(b,1)|0;if(d|0)break b;d=S5(b,c[h>>2]|0)|0;if(d|0)break b;d=T5(b,0)|0;if(d|0)break b;if((c[h+4>>2]|0)<=1?(c[h+8>>2]|0)<=1:0)d=j;else{c[t>>2]=0;d=0}i=i+1|0;break d}default:{d=j;break d}}d=T5(b,0)|0;if(!d)d=j;else break b;break}case 1:{p=r+4|0;o=c[p>>2]|0;q=U5(b)|0;c[t>>2]=q;n=o+4|0;j=c[n>>2]|0;if((j|0)<=1)if((c[o+8>>2]|0)>1){c[u>>2]=0;if((j|0)>0)s=30;else{d=q;h=0;s=37}}else d=q;else{c[u>>2]=0;s=30}e:do if((s|0)==30){d=a6(a,b,c[o>>2]|0,(j|0)>1?1:2,t,f,v,x)|0;if(!d){h=0;k=q;m=1}else{s=34;break c}while(1){d=c[v>>2]|0;if(!h)h=d;else h=M5(a,h,d)|0;if(!h){d=12;s=34;break c}j=c[n>>2]|0;if((m|0)>=(j|0)){d=k;s=37;break e}k=c[t>>2]|0;m=m+1|0;d=a6(a,b,c[o>>2]|0,(m|0)<(j|0)?1:2,t,f,v,x)|0;if(d|0){s=34;break c}}}while(0);if((s|0)==37){s=0;n=o+8|0;k=c[n>>2]|0;if((k|0)==-1){k=c[t>>2]|0;d=a6(a,b,c[o>>2]|0,0,t,0,u,x)|0;if(d|0)break c;j=b6(a,c[u>>2]|0,0,-1,0)|0;c[u>>2]=j;if(!j){d=12;break c}else d=k}else if((j|0)<(k|0)){k=j;j=0;while(1){m=c[t>>2]|0;d=a6(a,b,c[o>>2]|0,0,t,0,v,x)|0;if(d|0){s=49;break c}if(!j){d=c[v>>2]|0;c[u>>2]=d}else{d=M5(a,c[v>>2]|0,j)|0;c[u>>2]=d}if(!d){d=12;s=49;break c}j=L5(a,-1,-1,-1)|0;if(!j){d=12;s=49;break c}j=c6(a,j,d)|0;c[u>>2]=j;if(!j){d=12;s=49;break c}k=k+1|0;if((k|0)>=(c[n>>2]|0)){d=m;break}}}else j=0;c[t>>2]=d;if(h){if(j){h=M5(a,h,j)|0;s=54}}else{h=j;s=54}if((s|0)==54){s=0;if(!h){d=12;break c}}c[p>>2]=c[h+4>>2];c[r>>2]=c[h>>2]}i=i+-1|0;h=d-q+g|0;if(!i){c[t>>2]=h;g=h;i=0;d=h}else g=h;break}default:d=j}while(0);if((R5(b)|0)>(w|0))j=d;else{d=0;break b}}break a}else{d=0;g=0}while(0);w=(c[e>>2]|0)+g|0;x=c[x>>2]|0;c[e>>2]=(x|0)>(w|0)?x:w}}while(0);l=y;return d|0}function L5(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0;f=E5(a,0,0,1,20)|0;a=$5(a,0,f)|0;if(!a)a=0;else{c[f>>2]=b;c[f+4>>2]=d;c[f+8>>2]=e}return a|0}function M5(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;if(b){e=E5(a,0,0,1,8)|0;a=$5(a,1,e)|0;if(!a)d=0;else{c[e>>2]=b;c[e+4>>2]=d;c[a+16>>2]=(c[d+16>>2]|0)+(c[b+16>>2]|0);d=a}}return d|0}function N5(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;o=l;l=l+16|0;j=o+4|0;k=o;m=R5(b)|0;d=S5(b,d)|0;a:do if(!d){d=T5(b,0)|0;if(!d)if((R5(b)|0)>(m|0)){b:while(1){h=U5(b)|0;i=V5(b)|0;c:do switch(h|0){case 0:switch(c[i>>2]|0){case 0:{g=c[i+4>>2]|0;f=c[g>>2]|0;if((f|0)==-4){c[i+8>>2]=0;d=g+8|0;h=W5(a,c[d>>2]|0,0,1114111,0,0,-1)|0;c[i+24>>2]=h;if(!h){d=12;break a}h=W5(a,c[d>>2]|0,0,1114111,0,0,c[g+4>>2]|0)|0;c[i+28>>2]=h;if(!h){d=12;break a}else break c}d=i+8|0;if((f|0)<0){c[d>>2]=1;h=X5(a)|0;c[i+24>>2]=h;if(!h){d=12;break a}h=X5(a)|0;c[i+28>>2]=h;if(!h){d=12;break a}else break c}else{c[d>>2]=0;d=g+8|0;e=g+4|0;h=W5(a,c[d>>2]|0,f,c[e>>2]|0,0,0,-1)|0;c[i+24>>2]=h;if(!h){d=12;break a}h=W5(a,c[d>>2]|0,c[g>>2]|0,c[e>>2]|0,c[g+12>>2]|0,c[g+16>>2]|0,-1)|0;c[i+28>>2]=h;if(!h){d=12;break a}else break c}}case 3:{d=S5(b,i)|0;if(d|0)break a;d=T5(b,1)|0;if(d|0)break a;e=i+4|0;d=S5(b,c[(c[e>>2]|0)+4>>2]|0)|0;if(d|0)break a;d=T5(b,0)|0;if(d|0)break a;d=S5(b,c[c[e>>2]>>2]|0)|0;if(d|0)break a;d=T5(b,0)|0;if(!d)break c;else break a}case 1:{d=S5(b,i)|0;if(d|0)break a;d=T5(b,2)|0;if(d|0)break a;e=i+4|0;d=S5(b,c[(c[e>>2]|0)+4>>2]|0)|0;if(d|0)break a;d=T5(b,0)|0;if(d|0)break a;d=S5(b,c[c[e>>2]>>2]|0)|0;if(d|0)break a;d=T5(b,0)|0;if(!d)break c;else break a}case 2:{d=S5(b,i)|0;if(d|0)break a;d=T5(b,3)|0;if(d|0)break a;d=S5(b,c[c[i+4>>2]>>2]|0)|0;if(d|0)break a;d=T5(b,0)|0;if(!d)break c;else break a}default:break c}case 1:{d=c[i+4>>2]|0;e=c[d>>2]|0;f=d+4|0;g=c[f>>2]|0;if(!(c[e+8>>2]|0))h=(c[g+8>>2]|0)!=0;else h=1;c[i+8>>2]=h&1;h=Y5(a,c[e+24>>2]|0,c[g+24>>2]|0,0,0)|0;c[i+24>>2]=h;if(!h){d=12;break a}h=Y5(a,c[(c[d>>2]|0)+28>>2]|0,c[(c[f>>2]|0)+28>>2]|0,0,0)|0;c[i+28>>2]=h;if(!h){d=12;break a}break}case 3:{h=c[i+4>>2]|0;d=c[h>>2]|0;if(!(c[h+4>>2]|0))e=1;else e=(c[d+8>>2]|0)!=0&1;c[i+8>>2]=e;c[i+24>>2]=c[d+24>>2];c[i+28>>2]=c[d+28>>2];break}case 2:{g=c[i+4>>2]|0;d=c[g>>2]|0;e=d+8|0;if(!(c[e>>2]|0))f=0;else f=(c[(c[g+4>>2]|0)+8>>2]|0)!=0;c[i+8>>2]=f&1;if(c[e>>2]|0){d=Z5(b,d,0,0,j)|0;if(d|0)break b;e=T1((c[j>>2]<<2)+4|0)|0;if(!e){d=12;break b}c[e>>2]=-1;c[k>>2]=0;d=Z5(b,c[g>>2]|0,e,k,0)|0;if(d|0){n=45;break b}d=g+4|0;h=i+24|0;c[h>>2]=Y5(a,c[(c[d>>2]|0)+24>>2]|0,c[(c[g>>2]|0)+24>>2]|0,e,c[k>>2]|0)|0;U1(e);if(!(c[h>>2]|0)){d=12;break b}else f=d}else{c[i+24>>2]=c[d+24>>2];f=g+4|0}d=c[f>>2]|0;if(c[d+8>>2]|0){d=Z5(b,d,0,0,j)|0;if(d|0)break b;e=T1((c[j>>2]<<2)+4|0)|0;if(!e){d=12;break b}c[e>>2]=-1;c[k>>2]=0;d=Z5(b,c[f>>2]|0,e,k,0)|0;if(d|0){n=52;break b}i=i+28|0;c[i>>2]=Y5(a,c[(c[g>>2]|0)+28>>2]|0,c[(c[f>>2]|0)+28>>2]|0,e,c[k>>2]|0)|0;U1(e);if(!(c[i>>2]|0)){d=12;break b}}else c[i+28>>2]=c[d+28>>2];break}default:{}}while(0);if((R5(b)|0)<=(m|0)){d=0;break a}}if((n|0)==45)U1(e);else if((n|0)==52)U1(e)}else d=0}while(0);l=o;return d|0}function O5(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;a:while(1){switch(c[a>>2]|0){case 2:{a=c[a+4>>2]|0;if((c[a+8>>2]|0)==-1?(h=c[a>>2]|0,h=Q5(c[h+28>>2]|0,c[h+24>>2]|0,b,d,e)|0,(h|0)!=0):0){a=h;break a}break}case 3:{f=c[a+4>>2]|0;a=O5(c[f>>2]|0,b,d,e)|0;if(a|0)break a;a=f+4|0;break}case 1:{f=c[a+4>>2]|0;g=f+4|0;a=Q5(c[(c[f>>2]|0)+28>>2]|0,c[(c[g>>2]|0)+24>>2]|0,b,d,e)|0;if(a|0)break a;a=O5(c[f>>2]|0,b,d,e)|0;if(!a)a=g;else break a;break}default:{a=0;break a}}a=c[a>>2]|0}return a|0}function P5(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;h=c[a+4>>2]|0;if(h|0){e=h+4|0;a=c[h>>2]|0;if(c[e>>2]|0){d=0;do{if(c[a+(d<<5)+8>>2]|0){b=c[a+(d<<5)+16>>2]|0;if(b){U1(b);a=c[h>>2]|0}b=c[a+(d<<5)+28>>2]|0;if(b){U1(b);a=c[h>>2]|0}}d=d+1|0}while(d>>>0<(c[e>>2]|0)>>>0)}if(a|0)U1(a);d=h+8|0;a=c[d>>2]|0;if(a|0){if(c[a+8>>2]|0){while(1){b=c[a+16>>2]|0;if(b|0)U1(b);if(!(c[a+40>>2]|0))break;else a=a+32|0}a=c[d>>2]|0}U1(a)}f=h+16|0;a=c[f>>2]|0;if(a|0){g=h+28|0;b=c[g>>2]|0;if(b){e=0;do{d=c[a+(e*12|0)+8>>2]|0;if(d){U1(d);b=c[g>>2]|0;a=c[f>>2]|0}e=e+1|0}while(e>>>0>>0)}U1(a)}a=c[h+32>>2]|0;if(a|0)U1(a);a=c[h+20>>2]|0;if(a|0)U1(a);a=c[h+36>>2]|0;if(a|0)U1(a);U1(h)}return}function Q5(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;g=c[a>>2]|0;h=(g|0)>-1;a:do if(!d)if(h){h=b+32|0;do{if((c[b>>2]|0)>-1?(y=e+(g<<2)|0,c[y>>2]=(c[y>>2]|0)+1,(c[h>>2]|0)>-1):0){g=h;do{y=e+(c[a>>2]<<2)|0;c[y>>2]=(c[y>>2]|0)+1;g=g+32|0}while((c[g>>2]|0)>-1)}a=a+32|0;g=c[a>>2]|0}while((g|0)>-1);g=0}else g=0;else if(h)while(1){h=c[b>>2]|0;b:do if((h|0)>-1){p=a+4|0;q=a+8|0;r=a+16|0;s=a+20|0;t=a+24|0;u=a+28|0;v=a+12|0;e=-1;g=b;while(1){o=h;while(1){if((o|0)!=(e|0))break;g=g+32|0;h=c[g>>2]|0;if((h|0)>-1)o=h;else break b}l=d+(c[f+(c[a>>2]<<2)>>2]<<5)|0;while(1){h=l+8|0;if(!(c[h>>2]|0))break;else l=l+32|0}c[l+40>>2]=0;c[l>>2]=c[p>>2];c[l+4>>2]=c[q>>2];c[h>>2]=d+(c[f+(o<<2)>>2]<<5);c[l+12>>2]=o;h=c[s>>2]|0;e=c[g+16>>2]|c[r>>2]|(h|0?4:0)|(c[t>>2]|0?8:0);i=l+20|0;c[i>>2]=e;j=c[u>>2]|0;if((j|0)>-1){c[i>>2]=e|256;h=j}c[l+24>>2]=h;e=c[t>>2]|0;if(!e)c[l+28>>2]=0;else{h=0;do{n=h;h=h+1|0}while((c[e+(n<<2)>>2]|0)!=0);h=T1(h<<2)|0;c[l+28>>2]=h;if(!h){g=12;break a}k=c[t>>2]|0;e=c[k>>2]|0;if(e){j=0;i=h;do{c[i>>2]=e;j=j+1|0;e=c[k+(j<<2)>>2]|0;i=h+(j<<2)|0}while((e|0)!=0);h=i}c[h>>2]=0}e=c[v>>2]|0;if(!e)h=0;else{h=0;while(1)if((c[e+(h<<2)>>2]|0)>-1)h=h+1|0;else break}k=g+12|0;i=c[k>>2]|0;if(!i)e=0;else{e=0;while(1)if((c[i+(e<<2)>>2]|0)>-1)e=e+1|0;else break}j=l+16|0;i=c[j>>2]|0;if(i|0)U1(i);c[j>>2]=0;h=e+h|0;if((h|0)>0){n=T1((h<<2)+4|0)|0;c[j>>2]=n;if(!n){g=12;break a}e=c[v>>2]|0;if((e|0)!=0?(w=c[e>>2]|0,(w|0)>-1):0){h=0;i=w;do{c[n+(h<<2)>>2]=i;h=h+1|0;i=c[e+(h<<2)>>2]|0}while((i|0)>-1);m=h}else m=0;j=c[k>>2]|0;if((j|0)!=0?(x=c[j>>2]|0,(x|0)>-1):0){k=(m|0)>0;h=m;i=0;l=x;do{c:do if(k){e=0;while(1){if((c[n+(e<<2)>>2]|0)==(l|0))break c;e=e+1|0;if((e|0)>=(m|0)){y=39;break}}}else y=39;while(0);if((y|0)==39){y=0;c[n+(h<<2)>>2]=l;h=h+1|0}i=i+1|0;l=c[j+(i<<2)>>2]|0}while((l|0)>-1)}else h=m;c[n+(h<<2)>>2]=-1}g=g+32|0;h=c[g>>2]|0;if((h|0)<=-1)break;else e=o}}while(0);a=a+32|0;if((c[a>>2]|0)<=-1){g=0;break}}else g=0;while(0);return g|0}function R5(a){a=a|0;return c[a+12>>2]|0}function S5(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+4|0;f=d;c[f>>2]=b;c[e>>2]=c[f>>2];b=_5(a,e)|0;l=d;return b|0}function T5(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+4|0;f=d;c[f>>2]=b;c[e>>2]=c[f>>2];b=_5(a,e)|0;l=d;return b|0}function U5(a){a=a|0;var b=0,d=0;b=c[a+16>>2]|0;d=a+12|0;a=(c[d>>2]|0)+-1|0;c[d>>2]=a;return c[b+(a<<2)>>2]|0}function V5(a){a=a|0;var b=0,d=0;b=c[a+16>>2]|0;d=a+12|0;a=(c[d>>2]|0)+-1|0;c[d>>2]=a;return c[b+(a<<2)>>2]|0}function W5(a,b,d,e,f,g,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;a=E5(a,0,0,1,64)|0;if(!a)a=0;else{c[a>>2]=b;c[a+4>>2]=d;c[a+8>>2]=e;c[a+20>>2]=f;c[a+24>>2]=g;c[a+28>>2]=h;c[a+32>>2]=-1;c[a+36>>2]=-1;c[a+40>>2]=-1}return a|0}function X5(a){a=a|0;a=E5(a,0,0,1,32)|0;if(!a)a=0;else{c[a>>2]=-1;c[a+4>>2]=-1;c[a+8>>2]=-1}return a|0}function Y5(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;o=(e|0)==0;if(o)n=0;else{g=0;while(1)if((c[e+(g<<2)>>2]|0)>-1)g=g+1|0;else{n=g;break}}h=0;while(1)if((c[b+(h<<5)>>2]|0)>-1)h=h+1|0;else{g=0;break}while(1)if((c[d+(g<<5)>>2]|0)>-1)g=g+1|0;else break;g=E5(a,0,0,1,(g+h<<5)+32|0)|0;a:do if(!g)g=0;else{h=c[b>>2]|0;if((h|0)>-1){m=(n|0)>0;i=0;while(1){c[g+(i<<5)>>2]=h;c[g+(i<<5)+4>>2]=c[b+(i<<5)+4>>2];c[g+(i<<5)+8>>2]=c[b+(i<<5)+8>>2];c[g+(i<<5)+16>>2]=c[b+(i<<5)+16>>2]|f;c[g+(i<<5)+20>>2]=c[b+(i<<5)+20>>2];c[g+(i<<5)+24>>2]=c[b+(i<<5)+24>>2];c[g+(i<<5)+28>>2]=c[b+(i<<5)+28>>2];l=b+(i<<5)+12|0;j=c[l>>2]|0;h=(j|0)==0;if(o&h)h=0;else{if(h)k=0;else{h=0;while(1)if((c[j+(h<<2)>>2]|0)>-1)h=h+1|0;else{k=h;break}}h=E5(a,0,0,0,(k+n<<2)+4|0)|0;if(!h){g=0;break a}if((k|0)>0){l=c[l>>2]|0;j=0;do{c[h+(j<<2)>>2]=c[l+(j<<2)>>2];j=j+1|0}while((j|0)!=(k|0))}else k=0;if(m){j=0;do{c[h+(j+k<<2)>>2]=c[e+(j<<2)>>2];j=j+1|0}while((j|0)!=(n|0));j=n}else j=0;c[h+(j+k<<2)>>2]=-1}c[g+(i<<5)+12>>2]=h;i=i+1|0;h=c[b+(i<<5)>>2]|0;if((h|0)<=-1){n=i;break}}}else n=0;i=c[d>>2]|0;h=g+(n<<5)|0;if((i|0)>-1){m=0;l=n;do{c[h>>2]=i;c[g+(l<<5)+4>>2]=c[d+(m<<5)+4>>2];c[g+(l<<5)+8>>2]=c[d+(m<<5)+8>>2];c[g+(l<<5)+16>>2]=c[d+(m<<5)+16>>2];c[g+(l<<5)+20>>2]=c[d+(m<<5)+20>>2];c[g+(l<<5)+24>>2]=c[d+(m<<5)+24>>2];c[g+(l<<5)+28>>2]=c[d+(m<<5)+28>>2];j=d+(m<<5)+12|0;h=c[j>>2]|0;if(!h)h=0;else{i=0;while(1)if((c[h+(i<<2)>>2]|0)>-1)i=i+1|0;else break;h=E5(a,0,0,0,(i<<2)+4|0)|0;if(!h){g=0;break a}if((i|0)>0){k=c[j>>2]|0;j=0;do{c[h+(j<<2)>>2]=c[k+(j<<2)>>2];j=j+1|0}while((j|0)!=(i|0))}else i=0;c[h+(i<<2)>>2]=-1}c[g+(l<<5)+12>>2]=h;m=m+1|0;i=c[d+(m<<5)>>2]|0;l=m+n|0;h=g+(l<<5)|0}while((i|0)>-1)}c[h>>2]=-1}while(0);return g|0}function Z5(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;o=R5(a)|0;p=(f|0)!=0;if(p)c[f>>2]=0;b=S5(a,b)|0;a:do if(!b){m=(d|0)==0;l=(e|0)==0;if((R5(a)|0)>(o|0))while(1){b=V5(a)|0;b:do switch(c[b>>2]|0){case 0:{b=c[b+4>>2]|0;switch(c[b>>2]|0){case -3:break;case -2:{if(l)break b;c[e>>2]=c[e>>2]|c[b+4>>2];break b}default:break b}h=c[b+4>>2]|0;if((h|0)>-1){c:do if(!m){b=0;while(1){i=d+(b<<2)|0;j=c[i>>2]|0;if((j|0)<=-1)break;if((j|0)==(h|0))break c;else b=b+1|0}c[i>>2]=h;c[d+(b+1<<2)>>2]=-1}while(0);if(p)c[f>>2]=(c[f>>2]|0)+1}break}case 3:{b=c[b+4>>2]|0;h=c[b>>2]|0;if(c[h+8>>2]|0){k=h;n=6;break b}b=c[b+4>>2]|0;if(c[b+8>>2]|0){k=b;n=6}break}case 1:{b=c[b+4>>2]|0;h=S5(a,c[b>>2]|0)|0;if(h|0){g=h;break a}k=c[b+4>>2]|0;n=6;break}case 2:{b=c[c[b+4>>2]>>2]|0;if(c[b+8>>2]|0){k=b;n=6}break}default:{}}while(0);if((n|0)==6?(n=0,g=S5(a,k)|0,g|0):0)break a;if((R5(a)|0)<=(o|0)){g=0;break a}}else g=0}else g=b;while(0);return g|0}function _5(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;k=l;l=l+16|0;g=k;d=a+12|0;e=c[d>>2]|0;j=c[a>>2]|0;if((e|0)>=(j|0)){d=c[a+4>>2]|0;if((j|0)<(d|0)?(f=(c[a+8>>2]|0)+j|0,f=(f|0)>(d|0)?d:f,h=a+16|0,i=W1(c[h>>2]|0,f<<2)|0,(i|0)!=0):0){c[a>>2]=f;c[h>>2]=i;c[g>>2]=c[b>>2];_5(a,g)|0;d=0}else d=12}else{c[(c[a+16>>2]|0)+(e<<2)>>2]=c[b>>2];c[d>>2]=(c[d>>2]|0)+1;d=0}l=k;return d|0}function $5(a,b,d){a=a|0;b=b|0;d=d|0;a=E5(a,0,0,1,32)|0;if((d|0)!=0&(a|0)!=0){c[a+4>>2]=d;c[a>>2]=b;c[a+8>>2]=-1;c[a+12>>2]=-1}else a=0;return a|0}function a6(b,d,e,f,g,h,i,j){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;r=R5(d)|0;S5(d,e)|0;e=T5(d,0)|0;a:do if(!e){q=(f&1|0)==0;p=(f&2|0)!=0;o=0;l=1;e=i;while(1){if((R5(d)|0)>(r|0))n=e;else{f=o;e=0;break a}b:while(1){c:while(1){switch(U5(d)|0){case 1:{i=7;break c}case 0:{e=V5(d)|0;switch(c[e>>2]|0){case 0:{i=9;break b}case 3:{i=19;break b}case 1:{i=26;break b}case 2:{i=33;break c}default:{}}break}default:{}}if((R5(d)|0)<=(r|0)){f=o;e=0;break a}}if((i|0)==7)e=V5(d)|0;else if((i|0)==33){f=c[e+4>>2]|0;e=S5(d,c[f>>2]|0)|0;if(e|0){f=o;break a}e=T5(d,0)|0;if(e|0){f=o;break a}e=b6(b,c[f>>2]|0,c[f+4>>2]|0,c[f+8>>2]|0,a[f+12>>0]&1)|0;c[n>>2]=e;if(!e){f=o;e=12;break a}e=c[e+4>>2]|0}if((R5(d)|0)>(r|0))n=e;else{f=o;e=0;break a}}if((i|0)==9){m=c[e+4>>2]|0;i=c[m+8>>2]|0;f=c[m>>2]|0;e=c[m+4>>2]|0;if(!((f|0)>-1|(f|0)==-4))if(q|(f|0)!=-3)if((f|0)==-3)if(p&(l|0)!=0){c[h+(e<<2)>>2]=1;f=-3;k=o;l=0}else{f=-3;k=o}else k=o;else{e=-1;f=-1;i=-1;k=o}else{i=(c[g>>2]|0)+i|0;k=o+1|0}e=L5(b,f,e,i)|0;c[n>>2]=e;if(!e)e=12;else{e=c[e+4>>2]|0;c[e+12>>2]=c[m+12>>2];c[e+16>>2]=c[m+16>>2];e=0}if((i|0)>(c[j>>2]|0)){c[j>>2]=i;f=n}else f=n}else if((i|0)==19){i=c[e+4>>2]|0;f=i+4|0;e=c6(b,c[i>>2]|0,c[f>>2]|0)|0;c[n>>2]=e;if(!e){f=o;e=12;break a}m=c[e+4>>2]|0;e=S5(d,c[f>>2]|0)|0;if(e|0){f=o;break a}e=T5(d,0)|0;if(e|0){f=o;break a}e=S5(d,m+4|0)|0;if(e|0){f=o;break a}e=T5(d,1)|0;if(e|0){f=o;break a}e=S5(d,c[i>>2]|0)|0;if(e|0){f=o;break a}k=o;f=m;e=T5(d,0)|0}else if((i|0)==26){m=c[e+4>>2]|0;i=m+4|0;e=M5(b,c[m>>2]|0,c[i>>2]|0)|0;c[n>>2]=e;if(!e){f=o;e=12;break a}f=c[e+4>>2]|0;c[f>>2]=0;k=f+4|0;c[k>>2]=0;e=S5(d,c[i>>2]|0)|0;if(e|0){f=o;break a}e=T5(d,0)|0;if(e|0){f=o;break a}e=S5(d,k)|0;if(e|0){f=o;break a}e=T5(d,1)|0;if(e|0){f=o;break a}e=S5(d,c[m>>2]|0)|0;if(e|0){f=o;break a}k=o;e=T5(d,0)|0}if(!e){o=k;e=f}else{f=k;break}}}else f=0;while(0);c[g>>2]=(c[g>>2]|0)+f;return e|0}function b6(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0;h=E5(b,0,0,1,16)|0;b=$5(b,2,h)|0;if(!b)b=0;else{c[h>>2]=d;c[h+4>>2]=e;c[h+8>>2]=f;h=h+12|0;a[h>>0]=a[h>>0]&-2|g&1;c[b+16>>2]=c[d+16>>2]}return b|0}function c6(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;if(b){e=E5(a,0,0,1,8)|0;a=$5(a,3,e)|0;if((d|0)!=0&(a|0)!=0){c[e>>2]=b;c[e+4>>2]=d;c[a+16>>2]=(c[d+16>>2]|0)+(c[b+16>>2]|0);d=a}else d=0}return d|0}function d6(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=E5(a,0,0,0,8)|0;if(((e|0)!=0?(d=L5(a,-3,d,-1)|0,c[e>>2]=d,(d|0)!=0):0)?(f=E5(a,0,0,0,32)|0,c[e+4>>2]=f,(f|0)!=0):0){a=b+4|0;c[f+4>>2]=c[a>>2];c[f>>2]=c[b>>2];c[f+8>>2]=-1;c[f+12>>2]=-1;f=f+16|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[a>>2]=e;c[b>>2]=1;a=0}else a=12;return a|0}function e6(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;f=c[a>>2]|0;if((f|0)>-1){g=c[b+16>>2]|0;e=0;b=f;do{f=b>>>1;c[((b&1|0)==0?g+(f*12|0)|0:g+(f*12|0)+4|0)>>2]=d;e=e+1|0;b=c[a+(e<<2)>>2]|0}while((b|0)>-1)}c[a>>2]=-1;return}function f6(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=E5(a,0,0,0,8)|0;if(((e|0)!=0?(d=L5(a,-3,d,-1)|0,c[e+4>>2]=d,(d|0)!=0):0)?(f=E5(a,0,0,0,32)|0,c[e>>2]=f,(f|0)!=0):0){a=b+4|0;c[f+4>>2]=c[a>>2];c[f>>2]=c[b>>2];c[f+8>>2]=-1;c[f+12>>2]=-1;f=f+16|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[a>>2]=e;c[b>>2]=1;a=0}else a=12;return a|0}function g6(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;m=l;l=l+16|0;j=m;i=b+32|0;h=c[i>>2]|0;g=h&1;a:do switch(a[d>>0]|0){case 91:{e=k6(b,d+1|0)|0;break}case 92:{e=d+1|0;f=l6(e)|0;if(f|0){e=g6(b,f)|0;c[b+12>>2]=d+2;break a}f=a[e>>0]|0;switch(f|0){case 0:{e=5;break a}case 98:{f=L5(c[b>>2]|0,-2,64,-1)|0;break}case 66:{f=L5(c[b>>2]|0,-2,128,-1)|0;break}case 60:{f=L5(c[b>>2]|0,-2,16,-1)|0;break}case 62:{f=L5(c[b>>2]|0,-2,32,-1)|0;break}case 120:{h=d+2|0;i=(a[h>>0]|0)==123;g=i?8:2;h=i?d+3|0:h;e=0;f=0;do{d=m6(a[h+e>>0]|0)|0;if((d|0)<0)break;f=d+(f<<4)|0;e=e+1|0}while((f|0)<1114112&(e|0)<(g|0));e=h+e|0;if(i){if((a[e>>0]|0)!=125){e=9;break a}e=e+1|0}j=c[b>>2]|0;i=b+24|0;k=c[i>>2]|0;c[i>>2]=k+1;f=L5(j,f,f,k)|0;e=e+-1|0;break}case 63:case 43:case 123:if(!g){e=13;break a}else{k=37;break a}case 124:{if(g|0){k=37;break a}e=L5(c[b>>2]|0,-1,-1,-1)|0;k=45;break a}default:{if(!((g|0)==0&(f+-49|0)>>>0<9)){k=37;break a}j=f+-48|0;k=c[b>>2]|0;i=b+24|0;f=c[i>>2]|0;c[i>>2]=f+1;f=L5(k,-4,j,f)|0;k=b+28|0;i=c[k>>2]|0;c[k>>2]=(j|0)<(i|0)?i:j}}d=e+1|0;e=f;k=45;break}case 46:{e=c[b>>2]|0;g=b+24|0;f=c[g>>2]|0;c[g>>2]=f+1;if(h&4){f=L5(e,0,9,f)|0;k=c[b>>2]|0;e=c[g>>2]|0;c[g>>2]=e+1;e=L5(k,11,1114111,e)|0;if((f|0)!=0&(e|0)!=0)e=c6(c[b>>2]|0,f,e)|0;else e=0}else e=L5(e,0,1114111,f)|0;d=d+1|0;k=45;break}case 94:{if((g|0)==0?(c[b+16>>2]|0)!=(d|0):0){e=d;k=37;break a}d=d+1|0;e=L5(c[b>>2]|0,-2,1,-1)|0;k=45;break}case 36:{e=d+1|0;if((g|0)==0?a[e>>0]|0:0){e=d;k=37;break a}d=e;e=L5(c[b>>2]|0,-2,2,-1)|0;k=45;break}case 63:case 43:case 123:case 42:{if(!g){e=d;k=37}else e=13;break}case 124:{if(!g){e=d;k=37}else k=36;break}case 0:{k=36;break}default:{e=d;k=37}}while(0);if((k|0)==36){e=L5(c[b>>2]|0,-1,-1,-1)|0;k=45}else if((k|0)==37){h=R4(j,e,-1)|0;if((h|0)<0)e=2;else{do if(c[i>>2]&2){if((C3(c[j>>2]|0)|0)==0?(B3(c[j>>2]|0)|0)==0:0){k=43;break}i=c[b>>2]|0;n=f3(c[j>>2]|0)|0;g=f3(c[j>>2]|0)|0;f=b+24|0;g=L5(i,n,g,c[f>>2]|0)|0;n=c[b>>2]|0;i=E3(c[j>>2]|0)|0;d=E3(c[j>>2]|0)|0;d=L5(n,i,d,c[f>>2]|0)|0;if((g|0)!=0&(d|0)!=0)g=c6(c[b>>2]|0,g,d)|0;else g=0}else k=43;while(0);if((k|0)==43){g=c[j>>2]|0;f=b+24|0;g=L5(c[b>>2]|0,g,g,c[f>>2]|0)|0}c[f>>2]=(c[f>>2]|0)+1;d=e+h|0;e=g;k=45}}if((k|0)==45)if(!e)e=12;else{c[b+8>>2]=e;c[b+12>>2]=d;e=0}l=m;return e|0}function h6(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0;j=l;l=l+16|0;i=j+4|0;g=j;b=j6(b,i)|0;if((a[b>>0]|0)==44){b=j6(b+1|0,g)|0;h=c[g>>2]|0;g=c[i>>2]|0}else{i=c[i>>2]|0;c[g>>2]=i;h=i;g=i}do if(!(g>>>0>255|((h|0)>255|(h|0)>-1&(h|0)<(g|0)))){if(!d)if((a[b>>0]|0)==92)b=b+1|0;else{b=0;break}if((a[b>>0]|0)==125){c[e>>2]=g;c[f>>2]=h;b=b+1|0}else b=0}else b=0;while(0);l=j;return b|0}function i6(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;if((c[b+12>>2]|0)>-1){e=L5(c[a>>2]|0,-1,-1,-1)|0;if((e|0)!=0?(f=M5(c[a>>2]|0,e,b)|0,(f|0)!=0):0){e=c[b+16>>2]|0;c[f+16>>2]=e;g=6}else e=12}else{f=b;e=c[b+16>>2]|0;g=6}if((g|0)==6){c[f+12>>2]=d;c[f+16>>2]=e+1;c[a+8>>2]=f;e=0}return e|0}function j6(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;c[d>>2]=-1;if(((a[b>>0]|0)+-48|0)>>>0<10){c[d>>2]=0;e=b;g=0;f=a[b>>0]|0;while(1){g=(g*10|0)+-48+(f<<24>>24)|0;c[d>>2]=g;b=e+1|0;f=a[b>>0]|0;if((g|0)>255|((f<<24>>24)+-48|0)>>>0>9)break;else e=b}}return b|0}function k6(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=l;l=l+288|0;e=s+264|0;g=s;c[e>>2]=c[b>>2];h=e+8|0;c[h>>2]=0;c[e+12>>2]=32;p=T1(128)|0;r=e+4|0;c[r>>2]=p;if(!p)d=12;else{f=g+4|0;c[f>>2]=0;p=(a[d>>0]|0)==94;c[g>>2]=p&1;d=n6(b,p?d+1|0:d,e,g)|0;a:do if(!d){p=(c[g>>2]|0)==0;if(!p){o4(c[r>>2]|0,c[h>>2]|0,4,111);d=p6(e)|0;if(!d){d=12;e=0;break}c[d>>2]=1114112;c[d+4>>2]=1114112;c[d+8>>2]=-1;d=c[f>>2]|0;if(d){e=d<<2;f=E5(c[b>>2]|0,0,0,0,e+4|0)|0;if(!f){d=12;e=0;break}W6(f|0,g+8|0,e|0)|0;c[f+(d<<2)>>2]=0}else f=0}else f=0;m=c[h>>2]|0;if((m|0)>0){n=c[r>>2]|0;o=b+24|0;e=0;d=0;k=0;while(1){j=c[n+(k<<2)>>2]|0;g=c[j>>2]|0;h=j+4|0;i=c[h>>2]|0;do if(!p)if((g|0)>(d|0)){c[j>>2]=d;c[h>>2]=g+-1;d=i+1|0;q=14;break}else{j=i+1|0;d=(j|0)>=(d|0)?j:d;break}else q=14;while(0);if((q|0)==14){q=0;c[j+8>>2]=c[o>>2];c[j+16>>2]=f;j=$5(c[b>>2]|0,0,j)|0;e=c6(c[b>>2]|0,e,j)|0;if(!e){d=12;e=0;break a}}k=k+1|0;if((k|0)>=(m|0)){d=0;break}}}else{d=0;e=0}}else e=0;while(0);U1(c[r>>2]|0);r=b+24|0;c[r>>2]=(c[r>>2]|0)+1;c[b+8>>2]=e}l=s;return d|0}function l6(b){b=b|0;var d=0;d=a[b>>0]|0;b=0;while(1){if((a[63752+(b<<3)>>0]|0)==d<<24>>24)break;b=b+1|0;if((b|0)==12){b=12;break}}return c[63752+(b<<3)+4>>2]|0}function m6(a){a=a|0;var b=0;b=a+-48|0;if(b>>>0<10)return b|0;else{b=a|32;return ((b+-97|0)>>>0<6?b+-87|0:-1)|0}return 0}function n6(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;t=l;l=l+32|0;o=t;q=t+4|0;i=R4(o,d,-1)|0;g=a[d>>0]|0;a:do if((i|0)>=1){r=f+4|0;n=b+32|0;h=d;j=i;b:while(1){i=(h|0)==(d|0);if(!(i|g<<24>>24!=93)){s=5;break}c:do if(!(i|g<<24>>24!=45)){switch(a[h+1>>0]|0){case 93:break c;case 45:break;default:{g=11;break a}}if((a[h+2>>0]|0)==93){g=11;break a}}while(0);d:do if(g<<24>>24==91){switch(a[h+1>>0]|0){case 61:case 46:{g=3;break a}case 58:break;default:{s=17;break d}}i=h+2|0;g=0;e:while(1){switch(a[i+g>>0]|0){case 0:{s=16;break b}case 58:break e;default:{}}if((g|0)<13)g=g+1|0;else{s=16;break b}}W6(q|0,i|0,g|0)|0;a[q+g>>0]=0;j=X3(q)|0;if(!j){s=16;break b}h=i+(g+2)|0;if((a[i+(g+1)>>0]|0)!=93){s=16;break b}if(!(c[f>>2]|0)){g=1114111;m=0;k=1;s=25}else{g=c[r>>2]|0;if((g|0)>63){g=12;break a}c[r>>2]=g+1;c[f+8+(g<<2)>>2]=j}}else s=17;while(0);if((s|0)==17){s=0;i=c[o>>2]|0;h=h+j|0;if((a[h>>0]|0)==45?(p=h+1|0,(a[p>>0]|0)!=93):0){h=R4(o,p,-1)|0;g=c[o>>2]|0;if((h|0)<1|(i|0)>(g|0)){g=11;break a}j=0;m=i;h=p+h|0;k=0;s=25}else{j=0;g=i;m=i;k=0;s=25}}if((s|0)==25){s=0;i=p6(e)|0;if(!i){g=12;break a}c[i>>2]=m;c[i+4>>2]=g;c[i+12>>2]=j;c[i+8>>2]=-1;if(!(k|(c[n>>2]&2|0)==0)?(q6(e,m,g)|0)!=0:0){g=12;break a}}j=R4(o,h,-1)|0;g=a[h>>0]|0;if((j|0)<1){s=3;break a}}if((s|0)==5){c[b+12>>2]=h+1;g=0;break}else if((s|0)==16){g=4;break}}else s=3;while(0);if((s|0)==3)g=g<<24>>24?2:7;l=t;return g|0}function o6(a,b){a=a|0;b=b|0;return (c[c[a>>2]>>2]|0)-(c[c[b>>2]>>2]|0)|0}function p6(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0;h=a+8|0;d=c[h>>2]|0;e=a+12|0;f=c[e>>2]|0;if((d|0)>=(f|0))if((f|0)<=32767?(c[e>>2]=f<<1,g=a+4|0,b=W1(c[g>>2]|0,f<<3)|0,(b|0)!=0):0){c[g>>2]=b;d=c[h>>2]|0;i=6}else b=0;else{b=c[a+4>>2]|0;i=6}if((i|0)==6){c[h>>2]=d+1;i=E5(c[a>>2]|0,0,0,1,20)|0;c[b+(d<<2)>>2]=i;b=i}return b|0}function q6(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;a:do if((b|0)>(d|0))b=0;else while(1){b:do if(!(B3(b)|0)){if(!(C3(b)|0)){b=b+1|0;break}f=E3(b)|0;e=f;while(1){g=b+1|0;e=e+1|0;if((b|0)>=(d|0)){h=f;b=g;g=12;break b}if((E3(g)|0)==(e|0))b=g;else{h=f;b=g;g=12;break}}}else{f=f3(b)|0;e=f;while(1){g=b+1|0;e=e+1|0;if((b|0)>=(d|0)){h=f;b=g;g=12;break b}if((f3(g)|0)==(e|0))b=g;else{h=f;b=g;g=12;break}}}while(0);if((g|0)==12){g=0;f=p6(a)|0;if(!f){b=-1;break a}c[f>>2]=h;c[f+4>>2]=e+-1;c[f+8>>2]=-1}if((b|0)>(d|0)){b=0;break}}while(0);return b|0}function r6(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+16|0;k=n;i=c[a+4>>2]|0;j=i+56|0;h=(c[j>>2]&8|0)==0?d:0;a=c[i+40>>2]|0;if((a|0)>0&(h|0)!=0){a=T1(a<<2)|0;if(!a)a=12;else{g=a;d=a;m=3}}else{g=0;d=0;m=3}if((m|0)==3){if(!(c[i+60>>2]|0))a=t6(i,b,g,f,k)|0;else a=s6(i,b,g,f,k)|0;if(!a)u6(h,e,c[j>>2]|0,i,g,c[k>>2]|0);if(g)U1(d)}l=n;return a|0}function s6(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0;V=l;l=l+16|0;T=V;c[T>>2]=0;o=e&1;R=e&2;S=a+56|0;n=c[S>>2]&4;U=C5(0,0)|0;a:do if(U){p=E5(U,0,0,0,32)|0;if(!p){D5(U);e=12;break}c[p+24>>2]=0;c[p+28>>2]=0;Q=a+40|0;q=c[Q>>2]|0;if(q){e=T1(q<<2)|0;if(!e){m=0;k=0;j=e;e=12;i=0;h=0;g=0}else{j=e;i=e;C=6}}else{j=0;i=0;C=6}b:do if((C|0)==6){e=c[a+28>>2]|0;if(e){e=T1(e<<3)|0;if(!e){m=e;k=0;e=12;h=0;g=0;break}else{m=e;h=e}}else{m=0;h=0}P=a+52|0;e=c[P>>2]|0;if(e){e=T1(e<<2)|0;if(!e){k=e;e=12;g=0;break}else{k=e;g=e}}else{k=0;g=0}K=a+8|0;L=a+12|0;M=(d|0)==0;N=(d|0)!=0;O=a+32|0;J=(n|0)!=0;I=(o|0)==0;s=b;e=1;r=-1;v=-1;n=q;B=0;c:while(1){if((n|0)>0){o=0;do{c[j+(o<<2)>>2]=-1;if(!M){c[d+(o<<2)>>2]=-1;n=c[Q>>2]|0}o=o+1|0}while((o|0)<(n|0))}n=c[P>>2]|0;if((n|0)>0)Y6(g|0,0,n<<2|0)|0;G=e+r|0;e=R4(T,s,4)|0;if((e|0)<1)if((e|0)<0){e=1;break b}else e=1;F=s+e|0;H=c[T>>2]|0;n=c[K>>2]|0;o=n+8|0;if(c[o>>2]|0){w=(G|0)!=0;x=(B|0)==95;y=(G|0)==0;A=J&(B|0)==10;z=(G|0)<1&I;u=n;n=0;t=0;s=o;while(1){r=u+20|0;o=c[r>>2]|0;d:do if(o)if((o&1|0)==0|z|A){if(o&2|0?(E=c[T>>2]|0,!((E|R|0)==0|J&(E|0)==10)):0){q=t;break}do if(o&16|0){if(x){q=t;break d}if(x3(B)|0){q=t;break d}o=c[T>>2]|0;if((o|0)==95)break;if(!(x3(o)|0)){q=t;break d}}while(0);o=c[r>>2]|0;if(o&32){if(x){o=c[T>>2]|0;if((o|0)==95){q=t;break}}else{E=(x3(B)|0)==0;o=c[T>>2]|0;if(E|(o|0)==95){q=t;break}}if(x3(o)|0){q=t;break}o=c[r>>2]|0}q=c[T>>2]|0;do if((q|0)!=0&(w&(o&64|0)!=0)){if(x)o=1;else{o=(x3(B)|0)!=0;q=c[T>>2]|0}if((q|0)==95)if(o){q=t;break d}else break;else if(o^(x3(q)|0)!=0)break;else{q=t;break d}}while(0);if(!(c[r>>2]&128)){C=49;break}o=c[T>>2]|0;if(y|(o|0)==0){q=t;break}if(x)q=1;else{q=(x3(B)|0)!=0;o=c[T>>2]|0}if((o|0)==95)if(q){C=49;break}else{q=t;break}else if(q^(x3(o)|0)!=0){q=t;break}else{C=49;break}}else q=t;else C=49;while(0);do if((C|0)==49){C=0;if(!t){n=c[u+16>>2]|0;q=c[s>>2]|0;break}q=p+28|0;o=c[q>>2]|0;if(!o){o=E5(U,0,0,0,32)|0;if(!o){C=53;break c}c[o+24>>2]=p;c[o+28>>2]=0;E=E5(U,0,0,0,c[Q>>2]<<2)|0;c[o+20>>2]=E;if(!E){C=60;break c}c[q>>2]=o;p=o}else p=o;c[p>>2]=G;c[p+4>>2]=F;c[p+8>>2]=c[s>>2];c[p+12>>2]=c[u+12>>2];c[p+16>>2]=c[T>>2];if((c[Q>>2]|0)>0){q=c[p+20>>2]|0;o=0;do{c[q+(o<<2)>>2]=c[j+(o<<2)>>2];o=o+1|0}while((o|0)<(c[Q>>2]|0))}o=c[u+16>>2]|0;if(!o)q=t;else{q=c[o>>2]|0;if((q|0)<=-1){q=t;break}r=c[p+20>>2]|0;do{o=o+4|0;c[r+(q<<2)>>2]=G;q=c[o>>2]|0}while((q|0)>-1);q=t}}while(0);s=u+40|0;if(!(c[s>>2]|0))break;else{u=u+32|0;t=q}}if(n){o=c[n>>2]|0;if((o|0)>-1)do{c[j+(o<<2)>>2]=G;n=n+4|0;o=c[n>>2]|0}while((o|0)>-1)}else n=0;if(!q)C=171;else{s=G;r=F;w=q;x=n;C=79}}else{n=0;C=171}e:while(1){if((C|0)==79){if((w|0)==(c[L>>2]|0)){if((v|0)>=(s|0)){if(!(N&(v|0)==(s|0))){n=x;C=171;continue}n=c[Q>>2]|0;if(!(w6(n,c[O>>2]|0,j,d)|0)){n=x;C=171;continue}}else{if(M){v=s;n=x;C=171;continue}n=c[Q>>2]|0}if((n|0)>0)n=0;else{v=s;n=x;C=171;continue}while(1){c[d+(n<<2)>>2]=c[j+(n<<2)>>2];n=n+1|0;if((n|0)>=(c[Q>>2]|0)){v=s;n=x;C=171;continue e}}}u=w+8|0;if((c[u>>2]|0)!=0?(c[w+20>>2]&256|0)!=0:0){o=c[w+24>>2]|0;u6(o+1|0,m,c[S>>2]&-9,a,j,s);E=c[m+(o<<3)>>2]|0;o=(c[m+(o<<3)+4>>2]|0)-E|0;if(Q2(b+E|0,r+-1|0,o)|0){n=x;C=171;continue}E=(o|0)==0;n=E&1;q=c[w+12>>2]|0;if(E?c[k+(q<<2)>>2]|0:0){n=x;C=171;continue}c[k+(q<<2)>>2]=n;o=o+-1|0;r=r+o|0;o=o+s|0;q=c[T>>2]|0;n=R4(T,r,4)|0;if((n|0)<1)if((n|0)<0){e=1;break b}else n=1;D=r+n|0;E=n}else{q=c[T>>2]|0;if(!q){n=x;C=171;continue}n=R4(T,r,4)|0;if((n|0)<1)if((n|0)<0){e=1;break b}else n=1;o=s;D=r+n|0;E=n}s=o+e|0;if(!(c[u>>2]|0)){e=E;n=x;C=171;continue}y=(s|0)!=0;z=(q|0)==95;A=(s|0)==0;C=J&(q|0)==10;B=(s|0)<1&I;t=0;n=x;while(1){f:do if((c[w>>2]|0)>>>0<=q>>>0){if((c[w+4>>2]|0)>>>0>>0)break;r=w+20|0;e=c[r>>2]|0;do if(e|0){if(!((e&1|0)==0|B|C))break f;if(e&2|0?(x=c[T>>2]|0,!((x|R|0)==0|J&(x|0)==10)):0)break f;do if(e&16|0){if(z)break f;if(x3(q)|0)break f;e=c[T>>2]|0;if((e|0)==95)break;if(!(x3(e)|0))break f}while(0);e=c[r>>2]|0;if(e&32){if(z){e=c[T>>2]|0;if((e|0)==95)break f}else{x=(x3(q)|0)==0;e=c[T>>2]|0;if(x|(e|0)==95)break f}if(x3(e)|0)break f;e=c[r>>2]|0}o=c[T>>2]|0;do if((o|0)!=0&(y&(e&64|0)!=0)){if(z)e=1;else{e=(x3(q)|0)!=0;o=c[T>>2]|0}if((o|0)==95)if(e)break f;else break;else if(e^(x3(o)|0)!=0)break;else break f}while(0);do if(c[r>>2]&128|0){e=c[T>>2]|0;if(A|(e|0)==0)break f;if(z)o=1;else{o=(x3(q)|0)!=0;e=c[T>>2]|0}if((e|0)==95)if(o)break;else break f;else if(o^(x3(e)|0)!=0)break f;else break}while(0);e=c[r>>2]|0;do if(e&4){if(c[S>>2]&2|0)break;if(!(w3(q,c[w+24>>2]|0)|0))break f;e=c[r>>2]|0}while(0);do if(e&4|0){if(!(c[S>>2]&2))break;x=E3(q)|0;e=w+24|0;if(w3(x,c[e>>2]|0)|0)break;x=f3(q)|0;if(!(w3(x,c[e>>2]|0)|0))break f}while(0);if(!(c[r>>2]&8))break;if(v6(c[w+28>>2]|0,q,c[S>>2]&2)|0)break f}while(0);if(!t){t=c[u>>2]|0;n=c[w+16>>2]|0;break}o=p+28|0;e=c[o>>2]|0;if(!e){e=E5(U,0,0,0,32)|0;if(!e){C=145;break c}c[e+24>>2]=p;c[e+28>>2]=0;x=E5(U,0,0,0,c[Q>>2]<<2)|0;c[e+20>>2]=x;if(!x){C=152;break c}c[o>>2]=e;p=e}else p=e;c[p>>2]=s;c[p+4>>2]=D;c[p+8>>2]=c[u>>2];c[p+12>>2]=c[w+12>>2];c[p+16>>2]=c[T>>2];if((c[Q>>2]|0)>0){o=c[p+20>>2]|0;e=0;do{c[o+(e<<2)>>2]=c[j+(e<<2)>>2];e=e+1|0}while((e|0)<(c[Q>>2]|0))}e=c[w+16>>2]|0;if(!e)break;o=c[e>>2]|0;if((o|0)<=-1)break;r=c[p+20>>2]|0;do{c[r+(o<<2)>>2]=s;e=e+4|0;o=c[e>>2]|0}while((o|0)>-1)}while(0);u=w+40|0;if(!(c[u>>2]|0))break;else w=w+32|0}if(!t){e=E;C=171;continue}if(n){e=c[n>>2]|0;if((e|0)>-1){do{n=n+4|0;c[j+(e<<2)>>2]=s;e=c[n>>2]|0}while((e|0)>-1);q=v;o=D;e=E}else{q=v;o=D;e=E}}else{q=v;o=D;e=E;n=0}}else if((C|0)==171){C=0;r=c[p+24>>2]|0;if(!r)break;t=c[p+8>>2]|0;if(c[t+20>>2]&256|0)c[k+(c[p+12>>2]<<2)>>2]=0;s=c[p>>2]|0;u=c[p+4>>2]|0;c[T>>2]=c[p+16>>2];q=c[Q>>2]|0;if((q|0)>0){p=c[p+20>>2]|0;o=0;do{c[j+(o<<2)>>2]=c[p+(o<<2)>>2];o=o+1|0}while((o|0)<(q|0));p=r;q=v;o=u}else{p=r;q=v;o=u}}r=o;v=q;w=t;x=n;C=79}n=(v|0)>-1;if(n|(c[T>>2]|0)==0){C=180;break}c[T>>2]=H;s=F;r=G;n=c[Q>>2]|0;B=H}if((C|0)==53){D5(U);if(j|0)U1(i);if(m|0)U1(h);if(!k){e=12;break a}U1(g);e=12;break a}else if((C|0)==60){D5(U);if(j|0)U1(i);if(m|0)U1(h);if(!k){e=12;break a}U1(g);e=12;break a}else if((C|0)==145){D5(U);if(j|0)U1(i);if(m|0)U1(h);if(!k){e=12;break a}U1(g);e=12;break a}else if((C|0)==152){D5(U);if(j|0)U1(i);if(m|0)U1(h);if(!k){e=12;break a}U1(g);e=12;break a}else if((C|0)==180){c[f>>2]=v;e=(n^1)&1;break}}while(0);D5(U);if(j|0)U1(i);if(m|0)U1(h);if(k)U1(g)}else e=12;while(0);l=V;return e|0}function t6(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0;W=l;l=l+16|0;T=W;c[T>>2]=0;k=e&1;Q=e&2;R=a+56|0;j=c[R>>2]&4;if(!d)N=0;else N=c[a+40>>2]|0;P=N<<2;i=c[a+52>>2]|0;h=i<<3;g=h+8|0;e=P+12+h+(g+(O(P,i)|0)<<1)|0;U=T1(e)|0;if(!U)e=12;else{Y6(U|0,0,e|0)|0;e=U+P|0;m=e&3;m=e+((m|0)==0?0:4-m|0)|0;e=m+g|0;n=e&3;n=e+((n|0)==0?0:4-n|0)|0;e=n+g|0;M=e&3;M=e+((M|0)==0?0:4-M|0)|0;e=M+h|0;g=e&3;h=(i|0)>0;if(h){e=e+((g|0)==0?0:4-g|0)|0;g=0;while(1){c[n+(g<<3)+4>>2]=e;e=e+P|0;c[m+(g<<3)+4>>2]=e;g=g+1|0;if((g|0)>=(i|0))break;else e=e+P|0}if(h){e=0;do{c[M+(e<<3)>>2]=-1;e=e+1|0}while((e|0)<(i|0))}}e=R4(T,b,4)|0;if((e|0)<1)if((e|0)<0)e=1;else{i=1;V=11}else{i=e;V=11}a:do if((V|0)==11){L=a+8|0;K=(j|0)!=0;E=(k|0)==0;F=(N|0)>0;G=a+12|0;H=(N|0)<1;I=a+44|0;J=a+32|0;C=a+36|0;D=(N|0)==0;h=0;v=b+i|0;u=0;j=0;e=-1;g=m;A=U;x=m;w=n;while(1){if((e|0)<0){a=c[L>>2]|0;k=a+8|0;b:do if(c[k>>2]|0){p=(u|0)!=0;q=(h|0)==95;r=(u|0)==0;t=K&(h|0)==10;s=(u|0)<1&E;while(1){c:while(1){o=a+12|0;if((c[M+(c[o>>2]<<3)>>2]|0)>=(u|0))break;n=a+20|0;b=c[n>>2]|0;if(!b){V=46;break}d:do if((b&1|0)==0|s|t){if(b&2|0?(B=c[T>>2]|0,!((B|Q|0)==0|K&(B|0)==10)):0)break;do if(b&16|0){if(q)break d;if(x3(h)|0)break d;b=c[T>>2]|0;if((b|0)==95)break;if(!(x3(b)|0))break d}while(0);b=c[n>>2]|0;if(b&32){if(q){b=c[T>>2]|0;if((b|0)==95)break}else{B=(x3(h)|0)==0;b=c[T>>2]|0;if(B|(b|0)==95)break}if(x3(b)|0)break;b=c[n>>2]|0}m=c[T>>2]|0;do if((m|0)!=0&(p&(b&64|0)!=0)){if(q)b=1;else{b=(x3(h)|0)!=0;m=c[T>>2]|0}if((m|0)==95)if(b)break d;else break;else if(b^(x3(m)|0)!=0)break;else break d}while(0);if(!(c[n>>2]&128)){V=46;break c}b=c[T>>2]|0;if(r|(b|0)==0)break;if(q)m=1;else{m=(x3(h)|0)!=0;b=c[T>>2]|0}if((b|0)==95)if(m){V=46;break c}else break;else if(m^(x3(b)|0)!=0)break;else{V=46;break c}}while(0);k=a+40|0;if(!(c[k>>2]|0))break b;else a=a+32|0}if((V|0)==46){V=0;c[g>>2]=c[k>>2];if(F)Y6(c[g+4>>2]|0,-1,P|0)|0;k=c[a+16>>2]|0;if(k|0?(S=c[k>>2]|0,(S|0)>-1):0){m=g+4|0;b=S;do{if((b|0)<(N|0))c[(c[m>>2]|0)+(b<<2)>>2]=u;k=k+4|0;b=c[k>>2]|0}while((b|0)>-1)}k=(c[g>>2]|0)!=(c[G>>2]|0);if(k|H){j=k?j:1;e=k?e:u;k=g+4|0}else{k=g+4|0;j=c[k>>2]|0;e=0;do{c[d+(e<<2)>>2]=c[j+(e<<2)>>2];e=e+1|0}while((e|0)!=(N|0));j=1;e=u}B=c[o>>2]|0;c[M+(B<<3)>>2]=u;c[M+(B<<3)+4>>2]=k;g=g+8|0}k=a+40|0;if(!(c[k>>2]|0))break;else a=a+32|0}}while(0);c[g>>2]=0;g=c[T>>2]|0;if(!g)break;else h=g}else{if(D)break;h=c[T>>2]|0;if(!((g|0)!=(x|0)&(h|0)!=0))break}B=u+i|0;g=R4(T,v,4)|0;if((g|0)<1)if((g|0)<0){e=1;break a}else i=1;else i=g;z=v+i|0;if((j|0)!=0&(c[I>>2]|0)!=0){if(!(c[x>>2]|0))g=w;else{o=c[C>>2]|0;p=c[o>>2]|0;q=(p|0)>-1;n=x;g=w;do{m=n+4|0;e:do if(q){k=0;b=p;do{a=c[o+((k|1)<<2)>>2]|0;if((b|0)>=(N|0))break e;j=c[m>>2]|0;if((c[j+(a<<2)>>2]|0)==(c[d+(a<<2)>>2]|0)?(c[j+(b<<2)>>2]|0)<(c[d+(b<<2)>>2]|0):0)break e;k=k+2|0;b=c[o+(k<<2)>>2]|0}while((b|0)>-1);k=m;V=75}else{k=m;j=c[m>>2]|0;V=75}while(0);if((V|0)==75){V=0;c[g>>2]=c[n>>2];v=g+4|0;y=c[v>>2]|0;c[v>>2]=j;c[k>>2]=y;g=g+8|0}n=n+8|0}while((c[n>>2]|0)!=0)}c[g>>2]=0;y=x;j=0}else{y=w;w=x}k=c[w>>2]|0;if(!k){k=A;g=y}else{r=(B|0)!=0;s=(h|0)==95;t=(B|0)==0;v=K&(h|0)==10;u=(B|0)<1&E;q=w;a=A;g=y;while(1){b=k+8|0;if(c[b>>2]|0){p=q+4|0;o=a;n=b;while(1){f:do if((c[k>>2]|0)>>>0<=h>>>0?(c[k+4>>2]|0)>>>0>=h>>>0:0){m=k+20|0;a=c[m>>2]|0;do if(a|0){if(!((a&1|0)==0|u|v)){a=o;break f}if(a&2|0?(A=c[T>>2]|0,!((A|Q|0)==0|K&(A|0)==10)):0){a=o;break f}do if(a&16|0){if(s){a=o;break f}if(x3(h)|0){a=o;break f}a=c[T>>2]|0;if((a|0)==95)break;if(!(x3(a)|0)){a=o;break f}}while(0);a=c[m>>2]|0;if(a&32){if(s){a=c[T>>2]|0;if((a|0)==95){a=o;break f}}else{A=(x3(h)|0)==0;a=c[T>>2]|0;if(A|(a|0)==95){a=o;break f}}if(x3(a)|0){a=o;break f}a=c[m>>2]|0}b=c[T>>2]|0;do if((b|0)!=0&(r&(a&64|0)!=0)){if(s)a=1;else{a=(x3(h)|0)!=0;b=c[T>>2]|0}if((b|0)==95)if(a){a=o;break f}else break;else if(a^(x3(b)|0)!=0)break;else{a=o;break f}}while(0);do if(c[m>>2]&128|0){a=c[T>>2]|0;if(t|(a|0)==0){a=o;break f}if(s)b=1;else{b=(x3(h)|0)!=0;a=c[T>>2]|0}if((a|0)==95)if(b)break;else{a=o;break f}else if(b^(x3(a)|0)!=0){a=o;break f}else break}while(0);a=c[m>>2]|0;do if(a&4){if(c[R>>2]&2|0)break;if(!(w3(h,c[k+24>>2]|0)|0)){a=o;break f}a=c[m>>2]|0}while(0);do if(a&4|0){if(!(c[R>>2]&2))break;A=E3(h)|0;a=k+24|0;if(w3(A,c[a>>2]|0)|0)break;A=f3(h)|0;if(!(w3(A,c[a>>2]|0)|0)){a=o;break f}}while(0);if(!(c[m>>2]&8))break;if(v6(c[k+28>>2]|0,h,c[R>>2]&2)|0){a=o;break f}}while(0);if(F){b=c[p>>2]|0;a=0;do{c[o+(a<<2)>>2]=c[b+(a<<2)>>2];a=a+1|0}while((a|0)!=(N|0))}a=c[k+16>>2]|0;do if(a|0){b=c[a>>2]|0;if((b|0)<=-1)break;do{if((b|0)<(N|0))c[o+(b<<2)>>2]=B;a=a+4|0;b=c[a>>2]|0}while((b|0)>-1)}while(0);a=c[k+12>>2]|0;b=M+(a<<3)|0;if((c[b>>2]|0)>=(B|0)){a=c[M+(a<<3)+4>>2]|0;b=c[a>>2]|0;if(!(w6(N,c[J>>2]|0,o,b)|0)){a=o;break}c[a>>2]=o;if((c[n>>2]|0)!=(c[G>>2]|0)){a=b;break}if(F)e=0;else{j=1;a=b;e=B;break}while(1){c[d+(e<<2)>>2]=c[o+(e<<2)>>2];e=e+1|0;if((e|0)==(N|0)){j=1;a=b;e=B;break f}}}A=c[n>>2]|0;c[g>>2]=A;x=g+4|0;m=c[x>>2]|0;c[x>>2]=o;c[b>>2]=B;c[M+(a<<3)+4>>2]=x;do if((c[G>>2]|0)==(A|0)){if((e|0)==-1)if(F)e=0;else{e=B;j=1;break}else{if(!F)break;if((c[o>>2]|0)>(c[d>>2]|0))break;else e=0}do{c[d+(e<<2)>>2]=c[o+(e<<2)>>2];e=e+1|0}while((e|0)<(N|0));e=B;j=1}while(0);a=m;g=g+8|0}else a=o;while(0);n=k+40|0;if(!(c[n>>2]|0))break;else{k=k+32|0;o=a}}}q=q+8|0;k=c[q>>2]|0;if(!k){k=a;break}}}c[g>>2]=0;v=z;u=B;A=k;x=y}c[f>>2]=e;e=e>>>31}while(0);U1(U)}l=W;return e|0}function u6(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;if((d&8|0)==0&(g|0)>-1?(m=c[e+16>>2]|0,n=c[e+28>>2]|0,l=(a|0)!=0&(n|0)!=0,l):0){k=c[e+48>>2]|0;j=0;do{d=c[m+(j*12|0)>>2]|0;if((d|0)==(k|0))i=g;else i=c[f+(d<<2)>>2]|0;h=b+(j<<3)|0;c[h>>2]=i;d=c[m+(j*12|0)+4>>2]|0;if((d|0)==(k|0))d=g;else d=c[f+(d<<2)>>2]|0;e=b+(j<<3)+4|0;c[e>>2]=d;if((d|0)==-1|(i|0)==-1){c[e>>2]=-1;c[h>>2]=-1}j=j+1|0}while(j>>>0>>0&j>>>0>>0);if(l){d=0;do{i=b+(d<<3)+4|0;j=c[m+(d*12|0)+8>>2]|0;if(j|0?(o=c[j>>2]|0,(o|0)>-1):0){k=b+(d<<3)|0;h=0;f=o;e=c[k>>2]|0;do{if(!((e|0)>=(c[b+(f<<3)>>2]|0)?(c[i>>2]|0)<=(c[b+(f<<3)+4>>2]|0):0)){c[i>>2]=-1;c[k>>2]=-1;e=-1}h=h+1|0;f=c[j+(h<<2)>>2]|0}while((f|0)>-1)}d=d+1|0}while(d>>>0>>0&d>>>0>>0)}else d=0}else d=0;if(d>>>0>>0)Y6(b+(d<<3)|0,-1,a-d<<3|0)|0;return}function v6(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=c[a>>2]|0;a:do if(!e)d=0;else{f=(d|0)==0;d=e;while(1){if(f){if(w3(b,d)|0){d=1;break a}}else{e=f3(b)|0;if(w3(e,c[a>>2]|0)|0){d=1;break a}e=E3(b)|0;if(w3(e,c[a>>2]|0)|0){d=1;break a}}a=a+4|0;d=c[a>>2]|0;if(!d){d=0;break}}}while(0);return d|0}function w6(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;a:do if((a|0)>0){f=0;while(1){h=c[d+(f<<2)>>2]|0;g=c[e+(f<<2)>>2]|0;if(!(c[b+(f<<2)>>2]|0)){if((h|0)<(g|0)){f=1;break a}if((h|0)>(g|0)){f=0;break a}}else{if((h|0)>(g|0)){f=1;break a}if((h|0)<(g|0)){f=0;break a}}f=f+1|0;if((f|0)>=(a|0)){f=0;break}}}else f=0;while(0);return f|0}function x6(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0;k=O(e,d)|0;e=(d|0)==0?0:e;if((c[f+76>>2]|0)>-1)j=J3(f)|0;else j=0;g=f+74|0;h=a[g>>0]|0;a[g>>0]=h+255|h;g=f+4|0;h=c[g>>2]|0;m=(c[f+8>>2]|0)-h|0;i=m>>>0>>0?m:k;if((m|0)>0){W6(b|0,h|0,i|0)|0;c[g>>2]=h+i;g=k-i|0;b=b+i|0}else g=k;a:do if(!g)l=13;else{i=f+32|0;while(1){if(_2(f)|0)break;h=nb[c[i>>2]&63](f,b,g)|0;if((h+1|0)>>>0<2)break;g=g-h|0;if(!g){l=13;break a}else b=b+h|0}if(j|0)K3(f);e=((k-g|0)>>>0)/(d>>>0)|0}while(0);if((l|0)==13)if(j)K3(f);return e|0}function y6(a){a=a|0;var b=0;if((c[a+76>>2]|0)>-1){b=(J3(a)|0)==0;a=z6(a)|0}else a=z6(a)|0;return a|0}function z6(a){a=a|0;var b=0;if(!(c[a>>2]&128))b=1;else b=(c[a+20>>2]|0)>>>0>(c[a+28>>2]|0)>>>0?2:1;b=nb[c[a+40>>2]&63](a,0,b)|0;if((b|0)>=0)b=b-(c[a+8>>2]|0)+(c[a+4>>2]|0)+(c[a+20>>2]|0)-(c[a+28>>2]|0)|0;return b|0}function A6(a){a=a|0;(c[a+76>>2]|0)>-1?J3(a)|0:0;return c[a+60>>2]|0}function B6(b){b=b|0;var d=0,e=0,f=0,g=0;f=c[15679]|0;if((c[f+76>>2]|0)>-1)g=J3(f)|0;else g=0;do if((T4(b,f)|0)<0)b=-1;else{if((a[f+75>>0]|0)!=10?(d=f+20|0,e=c[d>>2]|0,e>>>0<(c[f+16>>2]|0)>>>0):0){c[d>>2]=e+1;a[e>>0]=10;b=0;break}b=(V4(f,10)|0)>>31}while(0);if(g|0)K3(f);return b|0}function C6(){var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;k=l;l=l+48|0;i=k+24|0;h=k+16|0;g=k;d=k+28|0;b=d;e=153686;f=b+20|0;do{a[b>>0]=a[e>>0]|0;b=b+1|0;e=e+1|0}while((b|0)<(f|0));e=d+13|0;b=0;while(1){x4(e)|0;c[g>>2]=d;c[g+4>>2]=32962;c[g+8>>2]=384;f=c2(Ha(5,g|0)|0)|0;if((f|0)>-1){j=4;break}if((b|0)<99)b=b+1|0;else{b=0;break}}if((j|0)==4){c[h>>2]=d;wa(10,h|0)|0;b=P4(f,153706)|0;if(!b){c[i>>2]=f;Ja(6,i|0)|0;b=0}}l=k;return b|0}function D6(a){a=a|0;var b=0,e=0,f=0;if((c[a+76>>2]|0)>=0?(J3(a)|0)!=0:0){b=a+4|0;e=c[b>>2]|0;if(e>>>0<(c[a+8>>2]|0)>>>0){c[b>>2]=e+1;b=d[e>>0]|0}else b=Z2(a)|0}else f=3;do if((f|0)==3){b=a+4|0;e=c[b>>2]|0;if(e>>>0<(c[a+8>>2]|0)>>>0){c[b>>2]=e+1;b=d[e>>0]|0;break}else{b=Z2(a)|0;break}}while(0);return b|0}function E6(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;if((c[d+76>>2]|0)>=0?(J3(d)|0)!=0:0){f=b&255;e=b&255;if((e|0)!=(a[d+75>>0]|0)?(i=d+20|0,j=c[i>>2]|0,j>>>0<(c[d+16>>2]|0)>>>0):0){c[i>>2]=j+1;a[j>>0]=f}else e=V4(d,b)|0;K3(d)}else k=3;do if((k|0)==3){f=b&255;e=b&255;if((e|0)!=(a[d+75>>0]|0)?(g=d+20|0,h=c[g>>2]|0,h>>>0<(c[d+16>>2]|0)>>>0):0){c[g>>2]=h+1;a[h>>0]=f;break}e=V4(d,b)|0}while(0);return e|0}function F6(a){a=a|0;return y6(a)|0}function G6(){}function H6(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;f=a&65535;e=b&65535;c=O(e,f)|0;d=a>>>16;a=(c>>>16)+(O(e,d)|0)|0;e=b>>>16;b=O(e,f)|0;return (z=(a>>>16)+(O(e,d)|0)+(((a&65535)+b|0)>>>16)|0,a+b<<16|c&65535|0)|0}function I6(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;e=a;f=c;c=H6(e,f)|0;a=z;return (z=(O(b,f)|0)+(O(d,e)|0)+a|a&0,c|0|0)|0}function J6(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;c=a+c>>>0;return (z=b+d+(c>>>0>>0|0)>>>0,c|0)|0}function K6(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;d=b-d-(c>>>0>a>>>0|0)>>>0;return (z=d,a-c>>>0|0)|0}function L6(b){b=b|0;var c=0;c=a[n+(b&255)>>0]|0;if((c|0)<8)return c|0;c=a[n+(b>>8&255)>>0]|0;if((c|0)<8)return c+8|0;c=a[n+(b>>16&255)>>0]|0;if((c|0)<8)return c+16|0;return (a[n+(b>>>24)>>0]|0)+24|0} +function M6(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;l=a;j=b;k=j;h=d;n=e;i=n;if(!k){g=(f|0)!=0;if(!i){if(g){c[f>>2]=(l>>>0)%(h>>>0);c[f+4>>2]=0}n=0;f=(l>>>0)/(h>>>0)>>>0;return (z=n,f)|0}else{if(!g){n=0;f=0;return (z=n,f)|0}c[f>>2]=a|0;c[f+4>>2]=b&0;n=0;f=0;return (z=n,f)|0}}g=(i|0)==0;do if(h){if(!g){g=(R(i|0)|0)-(R(k|0)|0)|0;if(g>>>0<=31){m=g+1|0;i=31-g|0;b=g-31>>31;h=m;a=l>>>(m>>>0)&b|k<>>(m>>>0)&b;g=0;i=l<>2]=a|0;c[f+4>>2]=j|b&0;n=0;f=0;return (z=n,f)|0}g=h-1|0;if(g&h|0){i=(R(h|0)|0)+33-(R(k|0)|0)|0;p=64-i|0;m=32-i|0;j=m>>31;o=i-32|0;b=o>>31;h=i;a=m-1>>31&k>>>(o>>>0)|(k<>>(i>>>0))&b;b=b&k>>>(i>>>0);g=l<>>(o>>>0))&j|l<>31;break}if(f|0){c[f>>2]=g&l;c[f+4>>2]=0}if((h|0)==1){o=j|b&0;p=a|0|0;return (z=o,p)|0}else{p=L6(h|0)|0;o=k>>>(p>>>0)|0;p=k<<32-p|l>>>(p>>>0)|0;return (z=o,p)|0}}else{if(g){if(f|0){c[f>>2]=(k>>>0)%(h>>>0);c[f+4>>2]=0}o=0;p=(k>>>0)/(h>>>0)>>>0;return (z=o,p)|0}if(!l){if(f|0){c[f>>2]=0;c[f+4>>2]=(k>>>0)%(i>>>0)}o=0;p=(k>>>0)/(i>>>0)>>>0;return (z=o,p)|0}g=i-1|0;if(!(g&i)){if(f|0){c[f>>2]=a|0;c[f+4>>2]=g&k|b&0}o=0;p=k>>>((L6(i|0)|0)>>>0);return (z=o,p)|0}g=(R(i|0)|0)-(R(k|0)|0)|0;if(g>>>0<=30){b=g+1|0;i=31-g|0;h=b;a=k<>>(b>>>0);b=k>>>(b>>>0);g=0;i=l<>2]=a|0;c[f+4>>2]=j|b&0;o=0;p=0;return (z=o,p)|0}while(0);if(!h){k=i;j=0;i=0}else{m=d|0|0;l=n|e&0;k=J6(m|0,l|0,-1,-1)|0;d=z;j=i;i=0;do{e=j;j=g>>>31|j<<1;g=i|g<<1;e=a<<1|e>>>31|0;n=a>>>31|b<<1|0;K6(k|0,d|0,e|0,n|0)|0;p=z;o=p>>31|((p|0)<0?-1:0)<<1;i=o&1;a=K6(e|0,n|0,o&m|0,(((p|0)<0?-1:0)>>31|((p|0)<0?-1:0)<<1)&l|0)|0;b=z;h=h-1|0}while((h|0)!=0);k=j;j=0}h=0;if(f|0){c[f>>2]=a;c[f+4>>2]=b}o=(g|0)>>>31|(k|h)<<1|(h<<1|g>>>31)&0|j;p=(g<<1|0>>>31)&-2|i;return (z=o,p)|0}function N6(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return M6(a,b,c,d,0)|0}function O6(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;g=l;l=l+16|0;f=g|0;M6(a,b,d,e,f)|0;l=g;return (z=c[f+4>>2]|0,c[f>>2]|0)|0}function P6(a,b,c){a=a|0;b=b|0;c=c|0;if((c|0)<32){z=b>>c;return a>>>c|(b&(1<>c-32|0}function Q6(a,b,c){a=a|0;b=b|0;c=c|0;if((c|0)<32){z=b>>>c;return a>>>c|(b&(1<>>c-32|0}function R6(a,b,c){a=a|0;b=b|0;c=c|0;if((c|0)<32){z=b<>>32-c;return a<>8&255|0}function T6(a){a=a|0;return (a&255)<<24|(a>>8&255)<<16|(a>>16&255)<<8|a>>>24|0}function U6(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0;q=q+1|0;c[a>>2]=q;while((f|0)<(e|0)){if(!(c[d+(f<<3)>>2]|0)){c[d+(f<<3)>>2]=q;c[d+((f<<3)+4)>>2]=b;c[d+((f<<3)+8)>>2]=0;z=e;return d|0}f=f+1|0}e=e*2|0;d=W1(d|0,8*(e+1|0)|0)|0;d=U6(a|0,b|0,d|0,e|0)|0;z=e;return d|0}function V6(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;while((f|0)<(d|0)){e=c[b+(f<<3)>>2]|0;if(!e)break;if((e|0)==(a|0))return c[b+((f<<3)+4)>>2]|0;f=f+1|0}return 0}function W6(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;if((e|0)>=8192)return Ra(b|0,d|0,e|0)|0;h=b|0;g=b+e|0;if((b&3)==(d&3)){while(b&3){if(!e)return h|0;a[b>>0]=a[d>>0]|0;b=b+1|0;d=d+1|0;e=e-1|0}e=g&-4|0;f=e-64|0;while((b|0)<=(f|0)){c[b>>2]=c[d>>2];c[b+4>>2]=c[d+4>>2];c[b+8>>2]=c[d+8>>2];c[b+12>>2]=c[d+12>>2];c[b+16>>2]=c[d+16>>2];c[b+20>>2]=c[d+20>>2];c[b+24>>2]=c[d+24>>2];c[b+28>>2]=c[d+28>>2];c[b+32>>2]=c[d+32>>2];c[b+36>>2]=c[d+36>>2];c[b+40>>2]=c[d+40>>2];c[b+44>>2]=c[d+44>>2];c[b+48>>2]=c[d+48>>2];c[b+52>>2]=c[d+52>>2];c[b+56>>2]=c[d+56>>2];c[b+60>>2]=c[d+60>>2];b=b+64|0;d=d+64|0}while((b|0)<(e|0)){c[b>>2]=c[d>>2];b=b+4|0;d=d+4|0}}else{e=g-4|0;while((b|0)<(e|0)){a[b>>0]=a[d>>0]|0;a[b+1>>0]=a[d+1>>0]|0;a[b+2>>0]=a[d+2>>0]|0;a[b+3>>0]=a[d+3>>0]|0;b=b+4|0;d=d+4|0}}while((b|0)<(g|0)){a[b>>0]=a[d>>0]|0;b=b+1|0;d=d+1|0}return h|0}function X6(b,c,d){b=b|0;c=c|0;d=d|0;var e=0;if((c|0)<(b|0)&(b|0)<(c+d|0)){e=b;c=c+d|0;b=b+d|0;while((d|0)>0){b=b-1|0;c=c-1|0;d=d-1|0;a[b>>0]=a[c>>0]|0}b=e}else W6(b,c,d)|0;return b|0}function Y6(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;h=b+e|0;d=d&255;if((e|0)>=67){while(b&3){a[b>>0]=d;b=b+1|0}f=h&-4|0;g=f-64|0;i=d|d<<8|d<<16|d<<24;while((b|0)<=(g|0)){c[b>>2]=i;c[b+4>>2]=i;c[b+8>>2]=i;c[b+12>>2]=i;c[b+16>>2]=i;c[b+20>>2]=i;c[b+24>>2]=i;c[b+28>>2]=i;c[b+32>>2]=i;c[b+36>>2]=i;c[b+40>>2]=i;c[b+44>>2]=i;c[b+48>>2]=i;c[b+52>>2]=i;c[b+56>>2]=i;c[b+60>>2]=i;b=b+64|0}while((b|0)<(f|0)){c[b>>2]=i;b=b+4|0}}while((b|0)<(h|0)){a[b>>0]=d;b=b+1|0}return h-e|0}function Z6(a){a=a|0;var b=0,d=0;d=a+15&-16|0;b=c[i>>2]|0;a=b+d|0;if((d|0)>0&(a|0)<(b|0)|(a|0)<0){W()|0;va(12);return -1}c[i>>2]=a;if((a|0)>(V()|0)?(U()|0)==0:0){c[i>>2]=b;va(12);return -1}return b|0}function _6(a){a=a|0;return +gb[a&1]()}function $6(a,b,c,d){a=a|0;b=+b;c=+c;d=+d;return +hb[a&7](+b,+c,+d)}function a7(a,b){a=a|0;b=b|0;return +ib[a&1](b|0)}function b7(a){a=a|0;return jb[a&3]()|0}function c7(a,b){a=a|0;b=b|0;return kb[a&63](b|0)|0}function d7(a,b,c){a=a|0;b=b|0;c=c|0;return lb[a&127](b|0,c|0)|0}function e7(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=+e;return mb[a&3](b|0,c|0,+d,+e)|0}function f7(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return nb[a&63](b|0,c|0,d|0)|0}function g7(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return ob[a&127](b|0,c|0,d|0,e|0)|0}function h7(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return pb[a&127](b|0,c|0,d|0,e|0,f|0)|0}function i7(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;return qb[a&1](b|0,c|0,d|0,e|0,f|0,g|0)|0}function j7(a,b,c,d,e,f,g,h,i,j,k){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;return rb[a&3](b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,j|0,k|0)|0}function k7(a){a=a|0;sb[a&15]()}function l7(a,b){a=a|0;b=b|0;tb[a&127](b|0)}function m7(a,b,c){a=a|0;b=b|0;c=c|0;ub[a&63](b|0,c|0)}function n7(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;vb[a&127](b|0,c|0,d|0)}function o7(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=g|0;wb[a&15](b|0,c|0,d|0,+e,+f,g|0)}function p7(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;xb[a&31](b|0,c|0,d|0,e|0)}function q7(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;yb[a&15](b|0,c|0,d|0,e|0,f|0)}function r7(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;zb[a&15](b|0,c|0,d|0,e|0,f|0,g|0)}function s7(a,b,c,d,e,f,g,h,i,j){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;Ab[a&0](b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,j|0)}function t7(){S(0);return 0.0}function u7(a,b,c){a=+a;b=+b;c=+c;S(1);return 0.0}function v7(a){a=a|0;S(2);return 0.0}function w7(){S(3);return 0}function x7(a){a=a|0;S(4);return 0}function y7(a,b){a=a|0;b=b|0;S(5);return 0}function z7(a,b,c,d){a=a|0;b=b|0;c=+c;d=+d;S(6);return 0}function A7(a,b,c){a=a|0;b=b|0;c=c|0;S(7);return 0}function B7(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;S(8);return 0}function C7(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;S(9);return 0}function D7(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;S(10);return 0}function E7(a,b,c,d,e,f,g,h,i,j){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;S(11);return 0}function F7(){S(12)}function G7(a){a=a|0;S(13)}function H7(a,b){a=a|0;b=b|0;S(14)}function I7(a,b,c){a=a|0;b=b|0;c=c|0;S(15)}function J7(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=f|0;S(16)}function K7(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;S(17)}function L7(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;S(18)}function M7(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;S(19)}function N7(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;S(20)} + +// EMSCRIPTEN_END_FUNCS +var gb=[t7,UO];var hb=[u7,eJ,dJ,fJ,gJ,u7,u7,u7];var ib=[v7,$O];var jb=[w7,$q,TK,KL];var kb=[x7,ch,xg,Lm,Mm,YB,$B,HQ,IQ,zS,AS,BS,CS,DS,ES,FS,GS,$1,Ib,qF,yl,Bl,_m,KK,tB,jC,sB,PK,UK,uB,tQ,JK,yQ,zQ,sY,T1,x7,x7,x7,x7,x7,x7,x7,x7,x7,x7,x7,x7,x7,x7,x7,x7,x7,x7,x7,x7,x7,x7,x7,x7,x7,x7,x7,x7];var lb=[y7,AB,XB,aC,TN,UN,LN,HN,pN,$W,aX,bX,cX,dX,eX,gX,hX,iX,jX,kX,lX,mX,nX,oX,pX,qX,rX,sX,tX,uX,vX,wX,xX,yX,zX,AX,BX,CX,DX,EX,N_,O_,Q_,l$,m$,n$,o$,p$,q$,r$,s$,j0,k0,m0,A$,B$,D$,oF,ng,bh,Eh,gi,yi,Jk,Hk,zl,Cl,Zo,hq,jr,Fr,Hr,Jr,Kr,Mr,Lr,Xr,ht,mt,ot,tv,sx,EE,DE,CE,vG,kC,MK,IG,YG,TG,UG,VH,T4,E6,OO,aQ,QA,eV,XA,ZA,uQ,s2,FT,_W,oY,pY,W1,B_,C_,D_,o6,y7,y7,y7,y7,y7,y7,y7,y7,y7,y7,y7,y7,y7,y7,y7,y7];var mb=[z7,qu,vu,z7];var nb=[A7,Hm,Mv,Dz,Lz,Uz,Zz,WB,_B,WL,PP,QU,R_,n0,E$,a2,b2,f2,g2,W3,gA,Xm,Av,rp,nt,Vx,Xx,_x,$z,tG,m4,ND,w4,QO,SL,HR,lY,Y$,P0,J0,T0,d5,A7,A7,A7,A7,A7,A7,A7,A7,A7,A7,A7,A7,A7,A7,A7,A7,A7,A7,A7,A7,A7,A7];var ob=[B7,Jm,Rr,Nv,Fz,Nz,VA,SD,WA,nB,CB,EB,PB,OB,bC,fC,hC,ML,RP,iR,gR,eT,SU,mV,lV,G_,H_,I_,J_,K_,L_,M_,P_,T_,c0,d0,e0,f0,g0,h0,i0,l0,p0,t$,u$,v$,w$,x$,y$,z$,C$,G$,cA,TC,xG,SO,fZ,iZ,pZ,AZ,JZ,PZ,NZ,QZ,z_,U0,m_,_$,$$,Q0,R0,B7,B7,B7,B7,B7,B7,B7,B7,B7,B7,B7,B7,B7,B7,B7,B7,B7,B7,B7,B7,B7,B7,B7,B7,B7,B7,B7,B7,B7,B7,B7,B7,B7,B7,B7,B7,B7,B7,B7,B7,B7,B7,B7,B7,B7,B7,B7,B7,B7,B7,B7,B7,B7,B7,B7,B7,B7];var pb=[C7,BB,qN,MN,U_,V_,j$,k$,G0,q0,r0,H$,I$,E_,F_,W0,X0,Y0,Z0,$0,a1,b1,c1,d1,f1,g1,h1,i1,j1,e1,J1,K1,A1,t1,k1,l1,m1,o1,n1,p1,q1,r1,s1,u1,v1,w1,x1,y1,z1,B1,C1,D1,E1,I1,G1,F1,H1,P1,L1,M1,N1,O1,Q1,R1,S1,C7,C7,C7,C7,C7,C7,C7,C7,C7,C7,C7,C7,C7,C7,C7,C7,C7,C7,C7,C7,C7,C7,C7,C7,C7,C7,C7,C7,C7,C7,C7,C7,C7,C7,C7,C7,C7,C7,C7,C7,C7,C7,C7,C7,C7,C7,C7,C7,C7,C7,C7,C7,C7,C7,C7,C7,C7,C7,C7,C7,C7,C7,C7];var qb=[D7,RX];var rb=[E7,I0,S0,E7];var sb=[F7,TO,QK,RK,SK,WK,XK,YK,WU,F7,F7,F7,F7,F7,F7,F7];var tb=[G7,Mb,Nb,Rb,Sb,Tb,lc,mc,Kc,Lc,Mc,Nc,Oc,Pc,Qc,ad,bd,ed,fd,gd,hd,id,jd,kd,wd,xd,yd,Ad,Bd,Cd,Dd,Ed,Fd,Gd,Hd,Sd,Td,Ud,Wd,Xd,Yd,Zd,_d,$d,ae,be,ce,ee,re,se,te,ue,Fe,Ge,He,Je,We,Xe,Ye,_e,$e,af,bf,cf,df,ef,ff,gf,qf,rf,sf,tf,Wf,Rf,pm,$l,dp,Eo,Op,Xp,_n,ao,Lp,Mp,Xl,Yl,co,lo,no,yo,FB,XM,nN,ZM,YM,JN,uM,xM,HS,MS,Kf,Dl,Io,Mo,ep,U1,Xv,tA,yG,rI,VU,AR,BQ,NL,nV,QX,jY,kY,qY,G7,G7,G7,G7,G7,G7,G7,G7,G7];var ub=[H7,Sc,Xc,md,rd,Od,ke,Ae,Pe,nf,zf,cC,rN,VN,NN,IN,lN,mN,RN,SN,KS,OS,cM,jA,uG,VK,sQ,RW,PX,mY,nY,rY,tY,H7,H7,H7,H7,H7,H7,H7,H7,H7,H7,H7,H7,H7,H7,H7,H7,H7,H7,H7,H7,H7,H7,H7,H7,H7,H7,H7,H7,H7,H7,H7];var vb=[I7,Ub,Vb,Yb,Jc,Rc,Tc,Wc,ld,nd,qd,Jd,Kd,Nd,fe,ge,je,ve,we,ze,Ke,Le,Oe,hf,jf,mf,uf,vf,yf,ok,pk,qk,Im,Ez,Mz,qA,GB,gC,PC,TD,lG,QJ,LL,XL,wM,QP,TP,hR,fR,IS,JS,LS,NS,PS,RU,EW,DW,JA,jB,uC,XC,_C,OK,RO,QL,wQ,AQ,FW,HW,IW,QW,SW,I7,I7,I7,I7,I7,I7,I7,I7,I7,I7,I7,I7,I7,I7,I7,I7,I7,I7,I7,I7,I7,I7,I7,I7,I7,I7,I7,I7,I7,I7,I7,I7,I7,I7,I7,I7,I7,I7,I7,I7,I7,I7,I7,I7,I7,I7,I7,I7,I7,I7,I7,I7,I7,I7,I7,I7];var wb=[J7,MH,NH,OH,PH,QH,RH,SH,TH,J7,J7,J7,J7,J7,J7,J7];var xb=[K7,Wb,Uc,od,zd,Ld,Vd,he,xe,Me,Ze,kf,wf,Nf,Mf,Lf,Jf,If,Hf,kc,Gf,Ff,DB,oN,KN,S_,o0,F$,o4,vQ,xQ,a0];var yb=[L7,cd,Id,Pd,de,Ie,Al,wG,CQ,L7,L7,L7,L7,L7,L7,L7];var zb=[M7,Xb,Vc,pd,Md,ie,ye,Ne,lf,xf,DQ,M7,M7,M7,M7,M7];var Ab=[N7];return{___errno_location:d2,___muldi3:I6,___udivdi3:N6,___uremdi3:O6,_bitshift64Ashr:P6,_bitshift64Lshr:Q6,_bitshift64Shl:R6,_dtextract:Sz,_free:U1,_htons:a4,_i64Add:J6,_i64Subtract:K6,_llvm_bswap_i16:S6,_llvm_bswap_i32:T6,_malloc:T1,_memalign:Z1,_memcpy:W6,_memmove:X6,_memset:Y6,_realloc:W1,_saveSetjmp:U6,_sbrk:Z6,_testSetjmp:V6,_vizCreateFile:Kb,_vizLastErrorMessage:Jb,_vizRenderFromString:Lb,dynCall_d:_6,dynCall_dddd:$6,dynCall_di:a7,dynCall_i:b7,dynCall_ii:c7,dynCall_iii:d7,dynCall_iiidd:e7,dynCall_iiii:f7,dynCall_iiiii:g7,dynCall_iiiiii:h7,dynCall_iiiiiii:i7,dynCall_iiiiiiiiiii:j7,dynCall_v:k7,dynCall_vi:l7,dynCall_vii:m7,dynCall_viii:n7,dynCall_viiiddi:o7,dynCall_viiii:p7,dynCall_viiiii:q7,dynCall_viiiiii:r7,dynCall_viiiiiiiii:s7,establishStackSpace:Eb,getTempRet0:Hb,runPostSets:G6,setTempRet0:Gb,setThrew:Fb,stackAlloc:Bb,stackRestore:Db,stackSave:Cb}}) + + +// EMSCRIPTEN_END_ASM +(Module.asmGlobalArg,Module.asmLibraryArg,buffer);var ___errno_location=Module["___errno_location"]=asm["___errno_location"];var ___muldi3=Module["___muldi3"]=asm["___muldi3"];var ___udivdi3=Module["___udivdi3"]=asm["___udivdi3"];var ___uremdi3=Module["___uremdi3"]=asm["___uremdi3"];var _bitshift64Ashr=Module["_bitshift64Ashr"]=asm["_bitshift64Ashr"];var _bitshift64Lshr=Module["_bitshift64Lshr"]=asm["_bitshift64Lshr"];var _bitshift64Shl=Module["_bitshift64Shl"]=asm["_bitshift64Shl"];var _dtextract=Module["_dtextract"]=asm["_dtextract"];var _free=Module["_free"]=asm["_free"];var _htons=Module["_htons"]=asm["_htons"];var _i64Add=Module["_i64Add"]=asm["_i64Add"];var _i64Subtract=Module["_i64Subtract"]=asm["_i64Subtract"];var _llvm_bswap_i16=Module["_llvm_bswap_i16"]=asm["_llvm_bswap_i16"];var _llvm_bswap_i32=Module["_llvm_bswap_i32"]=asm["_llvm_bswap_i32"];var _malloc=Module["_malloc"]=asm["_malloc"];var _memalign=Module["_memalign"]=asm["_memalign"];var _memcpy=Module["_memcpy"]=asm["_memcpy"];var _memmove=Module["_memmove"]=asm["_memmove"];var _memset=Module["_memset"]=asm["_memset"];var _realloc=Module["_realloc"]=asm["_realloc"];var _saveSetjmp=Module["_saveSetjmp"]=asm["_saveSetjmp"];var _sbrk=Module["_sbrk"]=asm["_sbrk"];var _testSetjmp=Module["_testSetjmp"]=asm["_testSetjmp"];var _vizCreateFile=Module["_vizCreateFile"]=asm["_vizCreateFile"];var _vizLastErrorMessage=Module["_vizLastErrorMessage"]=asm["_vizLastErrorMessage"];var _vizRenderFromString=Module["_vizRenderFromString"]=asm["_vizRenderFromString"];var establishStackSpace=Module["establishStackSpace"]=asm["establishStackSpace"];var getTempRet0=Module["getTempRet0"]=asm["getTempRet0"];var runPostSets=Module["runPostSets"]=asm["runPostSets"];var setTempRet0=Module["setTempRet0"]=asm["setTempRet0"];var setThrew=Module["setThrew"]=asm["setThrew"];var stackAlloc=Module["stackAlloc"]=asm["stackAlloc"];var stackRestore=Module["stackRestore"]=asm["stackRestore"];var stackSave=Module["stackSave"]=asm["stackSave"];var dynCall_d=Module["dynCall_d"]=asm["dynCall_d"];var dynCall_dddd=Module["dynCall_dddd"]=asm["dynCall_dddd"];var dynCall_di=Module["dynCall_di"]=asm["dynCall_di"];var dynCall_i=Module["dynCall_i"]=asm["dynCall_i"];var dynCall_ii=Module["dynCall_ii"]=asm["dynCall_ii"];var dynCall_iii=Module["dynCall_iii"]=asm["dynCall_iii"];var dynCall_iiidd=Module["dynCall_iiidd"]=asm["dynCall_iiidd"];var dynCall_iiii=Module["dynCall_iiii"]=asm["dynCall_iiii"];var dynCall_iiiii=Module["dynCall_iiiii"]=asm["dynCall_iiiii"];var dynCall_iiiiii=Module["dynCall_iiiiii"]=asm["dynCall_iiiiii"];var dynCall_iiiiiii=Module["dynCall_iiiiiii"]=asm["dynCall_iiiiiii"];var dynCall_iiiiiiiiiii=Module["dynCall_iiiiiiiiiii"]=asm["dynCall_iiiiiiiiiii"];var dynCall_v=Module["dynCall_v"]=asm["dynCall_v"];var dynCall_vi=Module["dynCall_vi"]=asm["dynCall_vi"];var dynCall_vii=Module["dynCall_vii"]=asm["dynCall_vii"];var dynCall_viii=Module["dynCall_viii"]=asm["dynCall_viii"];var dynCall_viiiddi=Module["dynCall_viiiddi"]=asm["dynCall_viiiddi"];var dynCall_viiii=Module["dynCall_viiii"]=asm["dynCall_viiii"];var dynCall_viiiii=Module["dynCall_viiiii"]=asm["dynCall_viiiii"];var dynCall_viiiiii=Module["dynCall_viiiiii"]=asm["dynCall_viiiiii"];var dynCall_viiiiiiiii=Module["dynCall_viiiiiiiii"]=asm["dynCall_viiiiiiiii"];Module["asm"]=asm;Module["ccall"]=ccall;Module["Pointer_stringify"]=Pointer_stringify;Module["UTF8ToString"]=UTF8ToString;if(memoryInitializer){if(!isDataURI(memoryInitializer)){if(typeof Module["locateFile"]==="function"){memoryInitializer=Module["locateFile"](memoryInitializer)}else if(Module["memoryInitializerPrefixURL"]){memoryInitializer=Module["memoryInitializerPrefixURL"]+memoryInitializer}}if(ENVIRONMENT_IS_NODE||ENVIRONMENT_IS_SHELL){var data=Module["readBinary"](memoryInitializer);HEAPU8.set(data,GLOBAL_BASE)}else{addRunDependency("memory initializer");var applyMemoryInitializer=(function(data){if(data.byteLength)data=new Uint8Array(data);HEAPU8.set(data,GLOBAL_BASE);if(Module["memoryInitializerRequest"])delete Module["memoryInitializerRequest"].response;removeRunDependency("memory initializer")});function doBrowserLoad(){Module["readAsync"](memoryInitializer,applyMemoryInitializer,(function(){throw"could not load memory initializer "+memoryInitializer}))}var memoryInitializerBytes=tryParseAsDataURI(memoryInitializer);if(memoryInitializerBytes){applyMemoryInitializer(memoryInitializerBytes.buffer)}else if(Module["memoryInitializerRequest"]){function useRequest(){var request=Module["memoryInitializerRequest"];var response=request.response;if(request.status!==200&&request.status!==0){var data=tryParseAsDataURI(Module["memoryInitializerRequestURL"]);if(data){response=data.buffer}else{console.warn("a problem seems to have happened with Module.memoryInitializerRequest, status: "+request.status+", retrying "+memoryInitializer);doBrowserLoad();return}}applyMemoryInitializer(response)}if(Module["memoryInitializerRequest"].response){setTimeout(useRequest,0)}else{Module["memoryInitializerRequest"].addEventListener("load",useRequest)}}else{doBrowserLoad()}}}function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}ExitStatus.prototype=new Error;ExitStatus.prototype.constructor=ExitStatus;var initialStackTop;dependenciesFulfilled=function runCaller(){if(!Module["calledRun"])run();if(!Module["calledRun"])dependenciesFulfilled=runCaller};function run(args){args=args||Module["arguments"];if(runDependencies>0){return}preRun();if(runDependencies>0)return;if(Module["calledRun"])return;function doRun(){if(Module["calledRun"])return;Module["calledRun"]=true;if(ABORT)return;ensureInitRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout((function(){setTimeout((function(){Module["setStatus"]("")}),1);doRun()}),1)}else{doRun()}}Module["run"]=run;function exit(status,implicit){if(implicit&&Module["noExitRuntime"]&&status===0){return}if(Module["noExitRuntime"]){}else{ABORT=true;EXITSTATUS=status;STACKTOP=initialStackTop;exitRuntime();if(Module["onExit"])Module["onExit"](status)}if(ENVIRONMENT_IS_NODE){process["exit"](status)}Module["quit"](status,new ExitStatus(status))}Module["exit"]=exit;function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}if(what!==undefined){Module.print(what);Module.printErr(what);what=JSON.stringify(what)}else{what=""}ABORT=true;EXITSTATUS=1;throw"abort("+what+"). Build with -s ASSERTIONS=1 for more info."}Module["abort"]=abort;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}Module["noExitRuntime"]=true;run() + + + + + return Module; +}; +function Viz(src) { + var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1]; + var format = options.format === undefined ? "svg" : options.format; + var engine = options.engine === undefined ? "dot" : options.engine; + var scale = options.scale; + var totalMemory = options.totalMemory; + var files = options.files === undefined ? [] : options.files; + var images = options.images === undefined ? [] : options.images; + var i; + + for (i = 0; i < images.length; i++) { + files.push({ path: images[i].path, data: "\n\n" }); + } + + if (format == "png-image-element") { + return Viz.svgXmlToPngImageElement(render(src, "svg", engine, totalMemory, files), scale); + } else { + return render(src, format, engine, totalMemory, files); + } +} + +function render(src, format, engine, totalMemory, files) { + var graphviz = Module({ TOTAL_MEMORY: totalMemory }); + var i; + + for (i = 0; i < files.length; i++) { + graphviz["ccall"]("vizCreateFile", "number", ["string", "string"], [files[i].path, files[i].data]); + } + + var resultPointer = graphviz["ccall"]("vizRenderFromString", "number", ["string", "string", "string"], [src, format, engine]); + var resultString = graphviz["Pointer_stringify"](resultPointer); + + var errorMessagePointer = graphviz["ccall"]("vizLastErrorMessage", "number", [], []); + var errorMessageString = graphviz["Pointer_stringify"](errorMessagePointer); + + if (errorMessageString != "") { + throw new Error(errorMessageString); + } + + return resultString; +} + +// https://developer.mozilla.org/en-US/docs/Web/API/WindowBase64/Base64_encoding_and_decoding +function b64EncodeUnicode(str) { + return btoa(encodeURIComponent(str).replace(/%([0-9A-F]{2})/g, function(match, p1) { + return String.fromCharCode('0x' + p1); + })); +} + +Viz.svgXmlToPngImageElement = function(svgXml, scale, callback) { + if (scale === undefined) { + if ("devicePixelRatio" in window && window.devicePixelRatio > 1) { + scale = window.devicePixelRatio; + } else { + scale = 1; + } + } + + var pngImage = new Image(); + + try { + if (typeof fabric === "object" && fabric.loadSVGFromString) { + fabric.loadSVGFromString(svgXml, function(objects, options) { + // If there's something wrong with the SVG, Fabric may return an empty array of objects. Graphviz appears to give us at least one element back even given an empty graph, so we will assume an error in this case. + if (objects.length == 0) { + if (callback !== undefined) { + callback(new Error("Error loading SVG with Fabric")); + return; + } else { + throw new Error("Error loading SVG with Fabric"); + } + } + + var element = document.createElement("canvas"); + element.width = options.width; + element.height = options.height; + + var canvas = new fabric.Canvas(element, { enableRetinaScaling: false }); + var obj = fabric.util.groupSVGElements(objects, options); + canvas.add(obj).renderAll(); + + pngImage.src = canvas.toDataURL({ multiplier: scale }); + pngImage.width = options.width; + pngImage.height = options.height; + + if (callback !== undefined) { + callback(null, pngImage); + } + }); + } else { + var svgImage = new Image(); + + svgImage.onload = function() { + var canvas = document.createElement("canvas"); + canvas.width = svgImage.width * scale; + canvas.height = svgImage.height * scale; + + var context = canvas.getContext("2d"); + context.drawImage(svgImage, 0, 0, canvas.width, canvas.height); + + pngImage.src = canvas.toDataURL("image/png"); + pngImage.width = svgImage.width; + pngImage.height = svgImage.height; + + if (callback !== undefined) { + callback(null, pngImage); + } + } + + svgImage.onerror = function(e) { + var error; + + if ('error' in e) { + error = e.error; + } else { + error = new Error('Error loading SVG'); + } + + if (callback !== undefined) { + callback(error); + } else { + throw error; + } + } + + svgImage.src = "data:image/svg+xml;base64," + b64EncodeUnicode(svgXml); + } + } catch (e) { + if (callback !== undefined) { + callback(e); + } else { + throw e; + } + } + + if (callback === undefined) { + return pngImage; + } +} + +Viz.svgXmlToPngBase64 = function(svgXml, scale, callback) { + Viz.svgXmlToPngImageElement(svgXml, scale, function(err, image) { + if (err) { + callback(err); + } else { + callback(null, image.src.slice("data:image/png;base64,".length)); + } + }); +} +if (typeof exports === 'object' && typeof module !== 'undefined') { + module.exports = Viz; +} else if (typeof define === 'function' && define.amd) { + define(function() { return Viz; }); +} else { + global.Viz = Viz; +} + +})(this); diff --git a/docs/articles/analyses/election_88_files/figure-html/unnamed-chunk-16-1.png b/docs/articles/analyses/election_88_files/figure-html/unnamed-chunk-16-1.png index abef730b..fc33f4ad 100644 Binary files a/docs/articles/analyses/election_88_files/figure-html/unnamed-chunk-16-1.png and b/docs/articles/analyses/election_88_files/figure-html/unnamed-chunk-16-1.png differ diff --git a/docs/articles/analyses/election_88_files/figure-html/unnamed-chunk-17-1.png b/docs/articles/analyses/election_88_files/figure-html/unnamed-chunk-17-1.png index 06e0ecd2..e3367a61 100644 Binary files a/docs/articles/analyses/election_88_files/figure-html/unnamed-chunk-17-1.png and b/docs/articles/analyses/election_88_files/figure-html/unnamed-chunk-17-1.png differ diff --git a/docs/articles/analyses/election_88_files/figure-html/unnamed-chunk-4-1.png b/docs/articles/analyses/election_88_files/figure-html/unnamed-chunk-4-1.png index 105f24c0..7a9a72e9 100644 Binary files a/docs/articles/analyses/election_88_files/figure-html/unnamed-chunk-4-1.png and b/docs/articles/analyses/election_88_files/figure-html/unnamed-chunk-4-1.png differ diff --git a/docs/articles/analyses/election_88_files/figure-html/unnamed-chunk-5-1.png b/docs/articles/analyses/election_88_files/figure-html/unnamed-chunk-5-1.png index f052eafc..ff201df2 100644 Binary files a/docs/articles/analyses/election_88_files/figure-html/unnamed-chunk-5-1.png and b/docs/articles/analyses/election_88_files/figure-html/unnamed-chunk-5-1.png differ diff --git a/docs/articles/analyses/election_88_files/figure-html/unnamed-chunk-6-1.png b/docs/articles/analyses/election_88_files/figure-html/unnamed-chunk-6-1.png index d76ef074..b14984a9 100644 Binary files a/docs/articles/analyses/election_88_files/figure-html/unnamed-chunk-6-1.png and b/docs/articles/analyses/election_88_files/figure-html/unnamed-chunk-6-1.png differ diff --git a/docs/articles/analyses/election_88_files/figure-html/unnamed-chunk-7-1.png b/docs/articles/analyses/election_88_files/figure-html/unnamed-chunk-7-1.png index 20962c5b..e13e8417 100644 Binary files a/docs/articles/analyses/election_88_files/figure-html/unnamed-chunk-7-1.png and b/docs/articles/analyses/election_88_files/figure-html/unnamed-chunk-7-1.png differ diff --git a/docs/articles/example_models.html b/docs/articles/example_models.html index 5ba79f86..9f7ddf2f 100644 --- a/docs/articles/example_models.html +++ b/docs/articles/example_models.html @@ -91,6 +91,9 @@ contribute to greta + +

  • + FAQ
  • -
    neural_network <- function(x)
    -{
    -  # this can be arbitrarily complex, e.g. multiple hidden layers
    -  x %*% weights
    -}
    -  
    -weights <- normal(0, 1, dim = c(p, 1))
    -sd <- inverse_gamma(1, 1)
    -
    -distribution(y) <- normal(neural_network(X), sd)
    +
    neural_network <- function(x)
    +{
    +  # this can be arbitrarily complex, e.g. multiple hidden layers
    +  x %*% weights
    +}
    +  
    +weights <- normal(0, 1, dim = c(p, 1))
    +sd <- inverse_gamma(1, 1)
    +
    +distribution(y) <- normal(neural_network(X), sd)

    @@ -521,12 +524,12 @@

    data <- generate.data(n = n, p = p, q = q) X <- data$X

    -
    W <- normal(0, 1, dim = c(p, q))
    -Z <- normal(0, 1, dim = c(q, n))
    -psi <- zeros(p, p)
    -diag(psi) <- inverse_gamma(1, 1, dim = p)
    -
    -distribution(X) <- multivariate_normal(t(W %*% Z), psi)
    +
    W <- normal(0, 1, dim = c(p, q))
    +Z <- normal(0, 1, dim = c(q, n))
    +psi <- zeros(p, p)
    +diag(psi) <- inverse_gamma(1, 1, dim = p)
    +
    +distribution(X) <- multivariate_normal(t(W %*% Z), psi)
    @@ -556,11 +559,11 @@

    greta code

    -
    theta <- normal(0, 32, dim = 2)
    -mu <- alpha + beta * Z
    -X <- normal(mu, sigma)
    -p <- ilogit(theta[1] + theta[2] * X)
    -distribution(y) <- binomial(n, p)
    +
    theta <- normal(0, 32, dim = 2)
    +mu <- alpha + beta * Z
    +X <- normal(mu, sigma)
    +p <- ilogit(theta[1] + theta[2] * X)
    +distribution(y) <- binomial(n, p)

    @@ -581,30 +584,27 @@

    Stan code

    data {
    -  real alpha; 
    -  real beta; 
    -  real<lower=0> sigma2; 
    -  int<lower=0> J; 
    -  int y[J]; 
    +  real alpha;
    +  real beta;
    +  real<lower=0> sigma2;
    +  int<lower=0> J;
    +  array[J] int y;
       vector[J] Z;
    -  int n[J]; 
    -} 
    -
    +  array[J] int n;
    +}
     transformed data {
    -  real<lower=0> sigma; 
    -  sigma <- sqrt(sigma2); 
    -} 
    -
    +  real<lower=0> sigma;
    +  sigma = sqrt(sigma2);
    +}
     parameters {
    -   real theta1; 
    -   real theta2; 
    -   vector[J] X; 
    -} 
    -
    +  real theta1;
    +  real theta2;
    +  vector[J] X;
    +}
     model {
    -  real p[J];
    -  theta1 ~ normal(0, 32);   // 32^2 = 1024 
    -  theta2 ~ normal(0, 32); 
    +  array[J] real p;
    +  theta1 ~ normal(0, 32); // 32^2 = 1024 
    +  theta2 ~ normal(0, 32);
       X ~ normal(alpha + beta * Z, sigma);
       y ~ binomial_logit(n, theta1 + theta2 * X);
     }
    @@ -628,13 +628,13 @@

    greta code

    -
    alpha_star <- normal(0, 32)
    -beta <- normal(0, 32)
    -p <- ilogit(alpha_star + beta * (x - mean(x)))
    -distribution(r) <- binomial(n, p)
    -
    -alpha <- alpha_star - beta * mean(x)
    -rhat <- p * n
    +
    alpha_star <- normal(0, 32)
    +beta <- normal(0, 32)
    +p <- ilogit(alpha_star + beta * (x - mean(x)))
    +distribution(r) <- binomial(n, p)
    +
    +alpha <- alpha_star - beta * mean(x)
    +rhat <- p * n

    @@ -656,47 +656,42 @@

    Stan code

    data {
    -    int<lower=0> N;
    -    int<lower=0> n[N];
    -    int<lower=0> r[N];
    -    vector[N] x;
    +  int<lower=0> N;
    +  array[N] int<lower=0> n;
    +  array[N] int<lower=0> r;
    +  vector[N] x;
     }
    -
     transformed data {
    -    vector[N] centered_x;
    -    real mean_x;
    -    mean_x <- mean(x);
    -    centered_x <- x - mean_x;
    +  vector[N] centered_x;
    +  real mean_x;
    +  mean_x = mean(x);
    +  centered_x = x - mean_x;
     }
    -
     parameters {
    -    real alpha_star;
    -    real beta;
    +  real alpha_star;
    +  real beta;
     }
    -
     transformed parameters {
    -    vector[N] m;
    -    m <- alpha_star + beta * centered_x;
    +  vector[N] m;
    +  m = alpha_star + beta * centered_x;
     }
    -
     model {
    -  alpha_star ~ normal(0.0, 1.0E4);  
    +  alpha_star ~ normal(0.0, 1.0E4);
       beta ~ normal(0.0, 1.0E4);
       r ~ binomial_logit(n, m);
     }
    -
     generated quantities {
    -  real alpha; 
    -  real p[N];
    -  real llike[N];
    -  real rhat[N];
    -  for (i in 1:N)  {
    -    p[i] <- inv_logit(m[i]);
    -    llike[i]  <- r[i]*log(p[i]) + (n[i]-r[i])*log(1-p[i]);  
    -    rhat[i] <- p[i]*n[i];  // fitted values
    +  real alpha;
    +  array[N] real p;
    +  array[N] real llike;
    +  array[N] real rhat;
    +  for (i in 1 : N) {
    +    p[i] = inv_logit(m[i]);
    +    llike[i] = r[i] * log(p[i]) + (n[i] - r[i]) * log(1 - p[i]);
    +    rhat[i] = p[i] * n[i]; // fitted values
       }
    -  alpha <- alpha_star - beta*mean_x;              
    -} 
    + alpha = alpha_star - beta * mean_x; +}

    @@ -724,25 +719,25 @@

    greta code

    -
    beta  <- variable()
    -sigma <- variable(lower = 0)
    -
    -distribution(y) <- normal(beta, sigma)
    +
    beta  <- variable()
    +sigma <- variable(lower = 0)
    +
    +distribution(y) <- normal(beta, sigma)

    Stan code

    data {
    -  int<lower=0> N; 
    +  int<lower=0> N;
       vector[N] y;
     }
     parameters {
       vector[1] beta;
       real<lower=0> sigma;
    -} 
    +}
     model {
    -  y ~ normal(beta[1],sigma);
    +  y ~ normal(beta[1], sigma);
     }

    @@ -763,14 +758,14 @@

    greta code

    -
    sigma_eta <- inverse_gamma(1, 1)
    -eta <- normal(0, sigma_eta, dim=N)
    -
    -mu_theta <- normal(0, 100)
    -xi <- normal(0, 5)
    -theta <- mu_theta + xi * eta
    -
    -distribution(y) <- normal(theta, sigma_y)
    +
    sigma_eta <- inverse_gamma(1, 1)
    +eta <- normal(0, sigma_eta, dim=N)
    +
    +mu_theta <- normal(0, 100)
    +xi <- normal(0, 5)
    +theta <- mu_theta + xi * eta
    +
    +distribution(y) <- normal(theta, sigma_y)

    @@ -780,27 +775,27 @@

    int<lower=0> N; vector[N] y; vector[N] sigma_y; -} +} parameters { vector[N] eta; real mu_theta; - real<lower=0,upper=100> sigma_eta; + real<lower=0, upper=100> sigma_eta; real xi; -} +} transformed parameters { real<lower=0> sigma_theta; vector[N] theta; - + theta = mu_theta + xi * eta; sigma_theta = fabs(xi) / sigma_eta; } model { mu_theta ~ normal(0, 100); sigma_eta ~ inv_gamma(1, 1); //prior distribution can be changed to uniform - + eta ~ normal(0, sigma_eta); xi ~ normal(0, 5); - y ~ normal(theta,sigma_y); + y ~ normal(theta, sigma_y); }

    @@ -830,15 +825,15 @@

    greta code

    -
    alpha <- normal(0, 10)
    -beta <- normal(0, 10, dim = n_env)
    -
    -# logit-linear model
    -linear_predictor <- alpha + env %*% beta
    -p <- ilogit(linear_predictor)
    -
    -# distribution (likelihood) over observed values
    -distribution(occupancy) <- bernoulli(p)
    +
    alpha <- normal(0, 10)
    +beta <- normal(0, 10, dim = n_env)
    +
    +# logit-linear model
    +linear_predictor <- alpha + env %*% beta
    +p <- ilogit(linear_predictor)
    +
    +# distribution (likelihood) over observed values
    +distribution(occupancy) <- bernoulli(p)

    @@ -861,11 +856,11 @@

    greta code

    -
    alpha <- normal(0, 10)
    -beta <- normal(0, 10, dim = n_env)
    -linear_predictor <- alpha + env %*% beta
    -lambda <- exp(linear_predictor)
    -distribution(occupancy) <- poisson(lambda)
    +
    alpha <- normal(0, 10)
    +beta <- normal(0, 10, dim = n_env)
    +linear_predictor <- alpha + env %*% beta
    +lambda <- exp(linear_predictor)
    +distribution(occupancy) <- poisson(lambda)

    @@ -889,16 +884,16 @@

    greta code

    -
    alpha <- normal(0, 10)
    -beta <- normal(0, 10, dim = n_env)
    -error <- normal(0, 10, dim = n_sites)
    -
    -# logit-linear model with extra variation
    -linear_predictor <- alpha + env %*% beta + error
    -p <- ilogit(linear_predictor)
    -
    -# distribution (likelihood) over observed values
    -distribution(occupancy) <- binomial(n_obs, p)
    +
    alpha <- normal(0, 10)
    +beta <- normal(0, 10, dim = n_env)
    +error <- normal(0, 10, dim = n_sites)
    +
    +# logit-linear model with extra variation
    +linear_predictor <- alpha + env %*% beta + error
    +p <- ilogit(linear_predictor)
    +
    +# distribution (likelihood) over observed values
    +distribution(occupancy) <- binomial(n_obs, p)

    @@ -922,19 +917,19 @@

    greta code

    -
    alpha <- normal(0, 10, dim = n_species)
    -beta <- normal(0, 10, dim = c(n_env, n_species))
    -
    -env_effect <- env %*% beta
    -
    -# add intercepts for all species
    -linear_predictor <- sweep(env_effect, 2, alpha, FUN = '+')
    -
    -# ilogit of linear predictor
    -p <- ilogit(linear_predictor)
    -
    -# a single observation means our data are bernoulli distributed
    -distribution(occupancy) <- bernoulli(p)
    +
    alpha <- normal(0, 10, dim = n_species)
    +beta <- normal(0, 10, dim = c(n_env, n_species))
    +
    +env_effect <- env %*% beta
    +
    +# add intercepts for all species
    +linear_predictor <- sweep(env_effect, 2, alpha, FUN = '+')
    +
    +# ilogit of linear predictor
    +p <- ilogit(linear_predictor)
    +
    +# a single observation means our data are bernoulli distributed
    +distribution(occupancy) <- bernoulli(p)

    @@ -956,23 +951,23 @@

    greta code

    -
    global_alpha <- normal(0, 10, dim = 1)
    -global_alpha_sd <- uniform(0, 10, dim = 1) 
    -alpha <- normal(global_alpha, global_alpha_sd, dim = n_species)
    -
    -global_betas <- normal(0, 10, dim = n_env)
    -global_betas_sd <- uniform(0, 10, dim = n_env)
    -beta <- normal(global_betas, global_betas_sd, dim = c(n_env, n_species))
    -
    -env_effect <- env %*% beta
    -
    -# add intercepts for all species
    -linear_predictor <- sweep(env_effect, 2, alpha, FUN = '+')
    -
    -# ilogit of linear predictor
    -p <- ilogit(linear_predictor)
    -
    -distribution(occupancy) <- bernoulli(p)
    +
    global_alpha <- normal(0, 10, dim = 1)
    +global_alpha_sd <- uniform(0, 10, dim = 1) 
    +alpha <- normal(global_alpha, global_alpha_sd, dim = n_species)
    +
    +global_betas <- normal(0, 10, dim = n_env)
    +global_betas_sd <- uniform(0, 10, dim = n_env)
    +beta <- normal(global_betas, global_betas_sd, dim = c(n_env, n_species))
    +
    +env_effect <- env %*% beta
    +
    +# add intercepts for all species
    +linear_predictor <- sweep(env_effect, 2, alpha, FUN = '+')
    +
    +# ilogit of linear predictor
    +p <- ilogit(linear_predictor)
    +
    +distribution(occupancy) <- bernoulli(p)

    @@ -1000,27 +995,27 @@

    greta code

    -
    # include a column of 1's for intercept estimation in the sub-model (traits) and base model
    -traits <- cbind(rep(1, n_species), traits)
    -env <- cbind(rep(1, n_sites), env)
    -
    -# redefine n_env and n_traits after adding columns for intercepts
    -n_env <- ncol(env)
    -n_traits <- ncol(traits)
    -
    -# sub-model parameters have normal prior distributions
    -g <- normal(0, 10, dim = c(n_env, n_traits))
    -# parameters of the base model are a function of the parameters of the sub-model
    -beta <-  g %*% t(traits) 
    -
    -# use the coefficients to get the model linear predictor
    -linear_predictor <- env %*% beta 
    -
    -# use the logit link to get probabilities of occupancy
    -p <- ilogit(linear_predictor)
    -
    -# data are bernoulli distributed
    -distribution(occupancy) <- bernoulli(p)
    +
    # include a column of 1's for intercept estimation in the sub-model (traits) and base model
    +traits <- cbind(rep(1, n_species), traits)
    +env <- cbind(rep(1, n_sites), env)
    +
    +# redefine n_env and n_traits after adding columns for intercepts
    +n_env <- ncol(env)
    +n_traits <- ncol(traits)
    +
    +# sub-model parameters have normal prior distributions
    +g <- normal(0, 10, dim = c(n_env, n_traits))
    +# parameters of the base model are a function of the parameters of the sub-model
    +beta <-  g %*% t(traits) 
    +
    +# use the coefficients to get the model linear predictor
    +linear_predictor <- env %*% beta 
    +
    +# use the logit link to get probabilities of occupancy
    +p <- ilogit(linear_predictor)
    +
    +# data are bernoulli distributed
    +distribution(occupancy) <- bernoulli(p)

    @@ -1028,7 +1023,7 @@

    Cormack-Jolly-Seber model

    Cormack-Jolly-Seber (CJS) models estimate probabilities of survival and recapture from mark-recapture data. These models assume that we can only ever see individuals that have been initially marked and released or recaptured following release (i.e. individuals do not exist until first observed). The two key parameters are survival, \(\phi\), and probability of recapture, \(p\). There is an additional derived parameter, \(\chi\), which is the probability that an individual is not recaptured following its final capture. \(\chi\) marginalises over multiple scenarios in which the individual is not observed either because it has died or because it is alive but not detected.

    -

    The introductory book to the program MARK has a lot of information on mark-recapture models, including CJS models (starting in Ch. 1) and the broader class of Jolly-Seber models (Ch. 12). There is also a section on mark-recapture models in the Stan language manual, which goes through the derivation of the parameter \(\chi\).

    +

    The introductory book to the program MARK has a lot of information on mark-recapture models, including CJS models (starting in Ch. 1) and the broader class of Jolly-Seber models (Ch. 12). There is also a section on mark-recapture models in the Stan language manual, which goes through the derivation of the parameter \(\chi\).

    data

    @@ -1042,34 +1037,34 @@

    greta code

    -
    # data summaries
    -first_obs <- apply(y, 1, function(x) min(which(x > 0)))
    -final_obs <- apply(y, 1, function(x) max(which(x > 0)))
    -obs_id <- apply(y, 1, function(x) seq(min(which(x > 0)), max(which(x > 0)), by = 1)[-1])
    -obs_id <- unlist(obs_id)
    -capture_vec <- apply(y, 1, function(x) x[min(which(x > 0)):max(which(x > 0))][-1])
    -capture_vec <- unlist(capture_vec)
    -
    -# priors
    -phi <- beta(1, 1, dim = n_time)
    -p <- beta(1, 1, dim = n_time)
    -
    -# derived parameter
    -chi <- ones(n_time)
    -for (i in seq_len(n_time - 1)) {
    -  tn <- n_time - i
    -  chi[tn] <- (1 - phi[tn]) + phi[tn] * (1 - p[tn + 1]) * chi[tn + 1]
    -}
    -
    -# dummy variables
    -alive_data <- ones(length(obs_id))            # definitely alive
    -not_seen_last <- final_obs != 20              # ignore observations in last timestep
    -final_observation <- ones(sum(not_seen_last)) # final observation
    -
    -# set likelihoods
    -distribution(alive_data) <- bernoulli(phi[obs_id - 1])
    -distribution(capture_vec) <- bernoulli(p[obs_id])
    -distribution(final_observation) <- bernoulli(chi[final_obs[not_seen_last]])
    +
    # data summaries
    +first_obs <- apply(y, 1, function(x) min(which(x > 0)))
    +final_obs <- apply(y, 1, function(x) max(which(x > 0)))
    +obs_id <- apply(y, 1, function(x) seq(min(which(x > 0)), max(which(x > 0)), by = 1)[-1])
    +obs_id <- unlist(obs_id)
    +capture_vec <- apply(y, 1, function(x) x[min(which(x > 0)):max(which(x > 0))][-1])
    +capture_vec <- unlist(capture_vec)
    +
    +# priors
    +phi <- beta(1, 1, dim = n_time)
    +p <- beta(1, 1, dim = n_time)
    +
    +# derived parameter
    +chi <- ones(n_time)
    +for (i in seq_len(n_time - 1)) {
    +  tn <- n_time - i
    +  chi[tn] <- (1 - phi[tn]) + phi[tn] * (1 - p[tn + 1]) * chi[tn + 1]
    +}
    +
    +# dummy variables
    +alive_data <- ones(length(obs_id))            # definitely alive
    +not_seen_last <- final_obs != 20              # ignore observations in last timestep
    +final_observation <- ones(sum(not_seen_last)) # final observation
    +
    +# set likelihoods
    +distribution(alive_data) <- bernoulli(phi[obs_id - 1])
    +distribution(capture_vec) <- bernoulli(p[obs_id])
    +distribution(final_observation) <- bernoulli(chi[final_obs[not_seen_last]])

    @@ -1106,74 +1101,81 @@

    * */ data { - int<lower=2> K; // capture events - int<lower=0> I; // number of individuals - int<lower=0,upper=1> X[I,K]; // X[i,k]: individual i captured at k + int<lower=2> K; // capture events + int<lower=0> I; // number of individuals + array[I, K] int<lower=0, upper=1> X; // X[i,k]: individual i captured at k } transformed data { - int<lower=0,upper=K+1> first[I]; // first[i]: ind i first capture - int<lower=0,upper=K+1> last[I]; // last[i]: ind i last capture - int<lower=0,upper=I> n_captured[K]; // n_capt[k]: num aptured at k - - first <- rep_array(K+1,I); - last <- rep_array(0,I); - for (i in 1:I) { - for (k in 1:K) { - if (X[i,k] == 1) { - if (k < first[i]) - first[i] <- k; - if (k > last[i]) - last[i] <- k; + array[I] int<lower=0, upper=K + 1> first; // first[i]: ind i first capture + array[I] int<lower=0, upper=K + 1> last; // last[i]: ind i last capture + array[K] int<lower=0, upper=I> n_captured; // n_capt[k]: num aptured at k + + first = rep_array(K + 1, I); + last = rep_array(0, I); + for (i in 1 : I) { + for (k in 1 : K) { + if (X[i, k] == 1) { + if (k < first[i]) { + first[i] = k; + } + if (k > last[i]) { + last[i] = k; + } } } } - - n_captured <- rep_array(0,K); - for (i in 1:I) - for (k in 1:K) - n_captured[k] <- n_captured[k] + X[i,k]; + + n_captured = rep_array(0, K); + for (i in 1 : I) { + for (k in 1 : K) { + n_captured[k] = n_captured[k] + X[i, k]; + } + } } parameters { - vector<lower=0,upper=1>[K-1] phi; // phi[k]: Pr[alive at k + 1 | alive at k] - vector<lower=0,upper=1>[K] p; // p[k]: Pr[capture at k] - + vector<lower=0, upper=1>[K - 1] phi; // phi[k]: Pr[alive at k + 1 | alive at k] + vector<lower=0, upper=1>[K] p; // p[k]: Pr[capture at k] + // note: p[1] not used in model and hence not identified } transformed parameters { - vector<lower=0,upper=1>[K] chi; // chi[k]: Pr[no capture > k | alive at k] + vector<lower=0, upper=1>[K] chi; // chi[k]: Pr[no capture > k | alive at k] { int k; - chi[K] <- 1.0; - k <- K - 1; + chi[K] = 1.0; + k = K - 1; while (k > 0) { - chi[k] <- (1 - phi[k]) + phi[k] * (1 - p[k+1]) * chi[k+1]; - k <- k - 1; + chi[k] = (1 - phi[k]) + phi[k] * (1 - p[k + 1]) * chi[k + 1]; + k = k - 1; } } } model { - for (i in 1:I) { + for (i in 1 : I) { if (last[i] > 0) { - for (k in (first[i]+1):last[i]) { - increment_log_prob(log(phi[k-1])); // i survived from k-1 to k - if (X[i,k] == 1) - increment_log_prob(log(p[k])); // i captured at k - else - increment_log_prob(log1m(p[k])); // i not captured at k + for (k in (first[i] + 1) : last[i]) { + target += log(phi[k - 1]); // i survived from k-1 to k + if (X[i, k] == 1) { + target += log(p[k]); + } // i captured at k + else { + target += log1m(p[k]); + } // i not captured at k } - increment_log_prob(log(chi[last[i]])); // i not seen after last[i] + target += log(chi[last[i]]); // i not seen after last[i] } } } generated quantities { // phi[K-1] and p(K) not identified, but product is real beta; - vector<lower=0>[K] pop_hat; // population - - beta <- phi[K-1] * p[K]; - - for (k in 1:K) - pop_hat[k] <- n_captured[k] / p[k]; + vector<lower=0>[K] pop_hat; // population + + beta = phi[K - 1] * p[K]; + + for (k in 1 : K) { + pop_hat[k] = n_captured[k] / p[k]; + } }


    diff --git a/docs/articles/example_models_files/header-attrs-2.11/header-attrs.js b/docs/articles/example_models_files/header-attrs-2.11/header-attrs.js new file mode 100644 index 00000000..dd57d92e --- /dev/null +++ b/docs/articles/example_models_files/header-attrs-2.11/header-attrs.js @@ -0,0 +1,12 @@ +// Pandoc 2.9 adds attributes on both header and div. We remove the former (to +// be compatible with the behavior of Pandoc < 2.8). +document.addEventListener('DOMContentLoaded', function(e) { + var hs = document.querySelectorAll("div.section[class*='level'] > :first-child"); + var i, h, a; + for (i = 0; i < hs.length; i++) { + h = hs[i]; + if (!/^h[1-6]$/i.test(h.tagName)) continue; // it should be a header h1-h6 + a = h.attributes; + while (a.length > 0) h.removeAttribute(a[0].name); + } +}); diff --git a/docs/articles/faq.html b/docs/articles/faq.html new file mode 100644 index 00000000..4a353401 --- /dev/null +++ b/docs/articles/faq.html @@ -0,0 +1,239 @@ + + + + + + + +FAQ • greta + + + + + + + + + + + + + +
    +
    + + + + +

    +
    +
    +
    + + + + +
    +

    +How do I install greta dependencies?

    +

    Before you can fit models with greta, you will also need to have a working installation of Google’s TensorFlow python package (version 1.14.0) and the tensorflow-probability python package (version 0.7.0). In the future we will support different versions of Tensorflow and Tensorflow Probability, but currently we need these exact versions.

    +

    To assist with installing these Python packages, greta provides an installation helper, install_greta_deps(), which installs the exact pythons package versions needed. It also places these inside a “greta-env” conda environment. This isolates these exact python modules from other python installations, so that only greta will see them. This helps avoids installation issues, where previously you might update tensorflow on your computer and overwrite the current version needed by greta. Using this “greta-env” conda environment means installing other python packages should not be impact the Python packages needed by greta.

    +

    If these python modules aren’t yet installed, when greta is used, it provides instructions on how to install them for your system. If in doubt follow those.

    +

    The installation process should look something like so:

    +

    +

    +

    +
    +
    +

    +How do I know if greta has the right versions of Python dependencies installed?

    +

    You can check if greta has the right dependencies installed by first running library(greta), then running some greta code, such as:

    +

    This should look something like the following.

    +

    First, library(greta) gives you a message about which objects are masked from base R (these only apply to greta arrays, so will not impact other use of functions like %*%, rowMeans, etc).

    +

    +

    Then, when you run some greta code like normal(0,1), Python will be initialised, and it will search for the dependencies it needs (tensorflow, and tensorflow probability)

    +

    +

    When that is complete, it will look like so:

    +

    +

    If python is not detected, or there is an issue with identifying the right python packages, you might see this error:

    +

    +

    In which case we recommend restarting R, and re-running install_greta_deps(). If this does not work there is another installation approach below.

    +
    +
    +

    +Is there an alternative way to install Python dependencies?

    +

    If the previous installation helper did not work, you can try the following:

    +
    reticulate::install_miniconda()
    +reticulate::conda_create(
    +        envname = "greta-env",
    +        python_version = "3.7"
    +      )
    +reticulate::conda_install(
    +        envname = "greta-env",
    +        packages = c(
    +          "numpy==1.16.4",
    +          "tensorflow-probability==0.7.0",
    +          "tensorflow==1.14.0"
    +        )
    +      )
    +

    Which will install the python modules into a conda environment named “greta-env”.

    +

    If these instructions do not work for you, please post on the greta forum and we will respond to you as soon as we can.

    +
    +
    +

    +Does greta work on Mac Laptops with an M1 Chip?

    +

    We are still working on getting greta to work on Mac Laptops with an M1 chip. Current progress can be tracked at this issue on github.

    +
    +
    +

    +I get the message: “Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX AVX2”

    +

    Briefly, this is a warning that you can safely ignore. Less briefly, it means that there can be some optimisations made with a special install of tensorflow that mean it will run faster on your machine. For more details, see this stack overflow thread. We have noted this issue in this github issue, and might in the future make it easier to resolve.

    +
    +
    + + + +
    + + +
    +
    + + + + + diff --git a/docs/articles/faq_files/header-attrs-2.11/header-attrs.js b/docs/articles/faq_files/header-attrs-2.11/header-attrs.js new file mode 100644 index 00000000..dd57d92e --- /dev/null +++ b/docs/articles/faq_files/header-attrs-2.11/header-attrs.js @@ -0,0 +1,12 @@ +// Pandoc 2.9 adds attributes on both header and div. We remove the former (to +// be compatible with the behavior of Pandoc < 2.8). +document.addEventListener('DOMContentLoaded', function(e) { + var hs = document.querySelectorAll("div.section[class*='level'] > :first-child"); + var i, h, a; + for (i = 0; i < hs.length; i++) { + h = hs[i]; + if (!/^h[1-6]$/i.test(h.tagName)) continue; // it should be a header h1-h6 + a = h.attributes; + while (a.length > 0) h.removeAttribute(a[0].name); + } +}); diff --git a/docs/articles/figures/coef_graph.png b/docs/articles/figures/coef_graph.png index c1e37ac4..4de7cb9c 100644 Binary files a/docs/articles/figures/coef_graph.png and b/docs/articles/figures/coef_graph.png differ diff --git a/docs/articles/figures/full_graph.png b/docs/articles/figures/full_graph.png index 990e2974..07140ee8 100644 Binary files a/docs/articles/figures/full_graph.png and b/docs/articles/figures/full_graph.png differ diff --git a/docs/articles/figures/likelihood_graph.png b/docs/articles/figures/likelihood_graph.png index 17c6f908..6782c063 100644 Binary files a/docs/articles/figures/likelihood_graph.png and b/docs/articles/figures/likelihood_graph.png differ diff --git a/docs/articles/get_started.html b/docs/articles/get_started.html index 5e4204f7..a0938b6a 100644 --- a/docs/articles/get_started.html +++ b/docs/articles/get_started.html @@ -129,7 +129,7 @@

    -
    +

    +

    Before you can fit models with greta, you will also need to have a working installation of Google’s TensorFlow python package (version 1.14.0) and the tensorflow-probability python package (version 0.7.0). In the future we will support different versions of Tensorflow and Tensorflow Probability, but currently we need these exact versions.

    +

    To assist with installing these Python packages, greta provides an installation helper, install_greta_deps(), which installs the exact pythons package versions needed. It also places these inside a “greta-env” conda environment. This isolates these exact python modules from other python installations, so that only greta will see them. This helps avoids installation issues, where previously you might update tensorflow on your computer and overwrite the current version needed by greta. Using this “greta-env” conda environment means installing other python packages should not be impact the Python packages needed by greta.

    +

    If these python modules aren’t yet installed, when greta is used, it provides instructions on how to install them for your system. If in doubt follow those.

    +

    -standard installation

    -

    If you installed python without Anaconda, you can install the latest versions of both packages with the following command:

    -
    install_tensorflow(extra_packages = "tensorflow-probability")
    -

    You can also use install_tensorflow() to install different versions of TensorFlow, including versions with GPU acceleration. If you’re having trouble with this step, this guide may help.

    +Standard installation +

    If the previous installation helper did not work, you can try the following:

    +
    reticulate::install_miniconda()
    +reticulate::conda_create(
    +        envname = "greta-env",
    +        python_version = "3.7"
    +      )
    +reticulate::conda_install(
    +        envname = "greta-env",
    +        packages = c(
    +          "numpy==1.16.4",
    +          "tensorflow-probability==0.7.0",
    +          "tensorflow==1.14.0"
    +        )
    +      )
    +

    Which will install the python modules into a conda environment named “greta-env”.

    +

    You can also not install these not into a special conda environment “greta-env”, like so:

    +
    reticulate::install_miniconda()
    +reticulate::conda_install(
    +        packages = c(
    +          "numpy==1.16.4",
    +          "tensorflow-probability==0.7.0",
    +          "tensorflow==1.14.0"
    +        )
    +      )
    +

    DiagrammeR

    -

    greta’s plotting functionality depends on the DiagrammeR package. Because DiagrammeR depends on the igraph package, which contains a large amount of code that needs to be compiled, DiagrammeR often takes a long time to install. So, DiagrammeR isn’t installed automatically with greta. If you want to plot greta models, you can install igraph and DiagrammeR from CRAN.

    -
    install.packages("igraph")
    -install.packages("DiagrammeR")
    -

    igraph can be difficult to install on some machines, due to dependencies on the XML R package and libxml2 and gfortran software libraries. There are workarounds to these issues (e.g. here and here) but if you can’t get it to work, you can still use greta for everything except plotting models.

    +

    greta’s plotting functionality depends on the DiagrammeR package. Because DiagrammeR depends on the igraph package, which contains a large amount of code that needs to be compiled, DiagrammeR often takes a long time to install. So, DiagrammeR isn’t installed automatically with greta. If you want to plot greta models, you can install igraph and DiagrammeR from CRAN.

    +
    install.packages("igraph")
    +install.packages("DiagrammeR")
    +

    igraph can be difficult to install on some machines, due to dependencies on the XML R package and libxml2 and gfortran software libraries. There are workarounds to these issues (e.g. here and here) but if you can’t get it to work, you can still use greta for everything except plotting models.


    @@ -187,7 +203,7 @@

    greta lets us build statistical models interactively in R, and then sample from them by MCMC. We build greta models with greta array objects, which behave much like R’s array, matrix and vector objects for numeric data. Like those numeric data objects, greta arrays can be manipulated with functions and mathematical operators to create new greta arrays.

    The key difference between greta arrays and numeric data objects is that when you do something to a greta array, greta doesn’t calculate the values of the new greta array. Instead, it just remembers what operation to do, and works out the size and shape of the result.

    For example, we can create a greta array z representing some data (a 3x3 matrix of 1s):

    -
    (z <- ones(3, 3))
    +
    (z <- ones(3, 3))
    greta array (data)
     
          [,1] [,2] [,3]
    @@ -195,7 +211,7 @@ 

    [2,] 1 1 1 [3,] 1 1 1

    we can then create a new greta array z2 by doing something to z:

    -
    (z2 <- z + z ^ 2)
    +
    (z2 <- z + z ^ 2)
    greta array (operation)
     
          [,1] [,2] [,3]
    @@ -204,14 +220,14 @@ 

    [3,] ? ? ?

    greta knows the result must also be a 3x3 matrix, but it doesn’t try to calculate the results. Instead it treats the new greta array z2 like a placeholder, for which it will calculate the results later.

    Because greta only creates placeholders when we’re building our model, we can construct models using greta arrays that represent unknown variables. For example, if we create a new greta array a representing some unknown values, we can still manipulate it as though it were data:

    -
    (a <- variable(dim = c(3, 3)))
    +
    (a <- variable(dim = c(3, 3)))
    greta array (variable)
     
          [,1] [,2] [,3]
     [1,]  ?    ?    ?  
     [2,]  ?    ?    ?  
     [3,]  ?    ?    ?  
    -
    (a2 <- a + a ^ 2)
    +
    (a2 <- a + a ^ 2)
    greta array (operation)
     
          [,1] [,2] [,3]
    @@ -228,41 +244,41 @@ 

    Building a model

    The rest of the vignette explains step-by-step how to build, visualise and fit a model with greta. We’ll be stepping through a model for linear regression between two of the variables in the iris dataset, which is included with base R. The model is Bayesian (we specify priors over the variables), though it is also possible to do frequentist (no priors) inference in greta, using variable() instead of a probability distribution to create random variables.

    Here’s the whole script to specify and fit the model:

    -
    library(greta)
    -
    -# data
    -x <- as_data(iris$Petal.Length)
    -y <- as_data(iris$Sepal.Length)
    -
    -# variables and priors
    -int <- normal(0, 1)
    -coef <- normal(0, 3)
    -sd <- student(3, 0, 1, truncation = c(0, Inf))
    -
    -# operations
    -mean <- int + coef * x
    -
    -# likelihood
    -distribution(y) <- normal(mean, sd)
    -
    -# defining the model
    -m <- model(int, coef, sd)
    -
    -# plotting
    -plot(m)
    -
    -# sampling
    -draws <- mcmc(m, n_samples = 1000)
    +
    library(greta)
    +
    +# data
    +x <- as_data(iris$Petal.Length)
    +y <- as_data(iris$Sepal.Length)
    +
    +# variables and priors
    +int <- normal(0, 1)
    +coef <- normal(0, 3)
    +sd <- student(3, 0, 1, truncation = c(0, Inf))
    +
    +# operations
    +mean <- int + coef * x
    +
    +# likelihood
    +distribution(y) <- normal(mean, sd)
    +
    +# defining the model
    +m <- model(int, coef, sd)
    +
    +# plotting
    +plot(m)
    +
    +# sampling
    +draws <- mcmc(m, n_samples = 1000)

    Data

    The first section of the script takes the iris data (which is automatically loaded) and converts the two columns we care about into greta arrays:

    -
    x <- as_data(iris$Petal.Length)
    -y <- as_data(iris$Sepal.Length)
    +
    x <- as_data(iris$Petal.Length)
    +y <- as_data(iris$Sepal.Length)

    The greta function as_data() converts other R objects into greta arrays. In this case it’s converting numeric vectors (the two columns of the iris dataframe) into greta arrays. as_data() can also convert matrices and R arrays with numeric, integer or logical (TRUE or FALSE) values into greta arrays. It can also convert dataframes to greta arrays, so long as all elements are either numeric, integer or logical.

    E.g. we can convert the first 5 rows and 4 columns of the iris dataframe, and print the result:

    -
    as_data(iris[1:5, 1:4])
    +
    as_data(iris[1:5, 1:4])
    greta array (data)
     
          [,1] [,2] [,3] [,4]
    @@ -272,9 +288,9 @@ 

    [4,] 4.6 3.1 1.5 0.2 [5,] 5.0 3.6 1.4 0.2

    Whenever as_data() converts logical values to greta arrays, it converts them to 1s (for TRUE) and 0s (for FALSE). E.g. if we first convert the last column of iris from a factor into a logical vector, we can see this:

    -
    (is_setosa <- iris$Species[c(1, 41, 81, 121)] == "setosa")
    +
    (is_setosa <- iris$Species[c(1, 41, 81, 121)] == "setosa")
    [1]  TRUE  TRUE FALSE FALSE
    -
    as_data(is_setosa)
    +
    as_data(is_setosa)
    greta array (data)
     
          [,1]
    @@ -283,7 +299,7 @@ 

    [3,] 0 [4,] 0

    You can also see from this example that greta arrays always consider a vector as either a column vector (the default) or a row vector, and greta arrays always have at least two dimensions:

    -
    dim(as_data(is_setosa))
    +
    dim(as_data(is_setosa))
    [1] 4 1

    @@ -294,25 +310,25 @@

    data structures

    greta also provides some convenience functions to generate fixed numeric values. ones() and zeros() create greta arrays filled with either 1 or zero, and with the specified dimensions:

    -
    ones(1, 3)
    +
    ones(1, 3)
    greta array (data)
     
          [,1] [,2] [,3]
     [1,]    1    1    1
    -
    zeros(2, 2)
    +
    zeros(2, 2)
    greta array (data)
     
          [,1] [,2]
     [1,]    0    0
     [2,]    0    0

    The greta_array() function generalises this to let you create greta arrays with any values, in the same way as R’s array() function:

    -
    greta_array(pi, dim = c(2, 2))
    +
    greta_array(pi, dim = c(2, 2))
    greta array (data)
     
              [,1]     [,2]
     [1,] 3.141593 3.141593
     [2,] 3.141593 3.141593
    -
    greta_array(0:1, dim = c(3, 3))
    +
    greta_array(0:1, dim = c(3, 3))
    greta array (data)
     
          [,1] [,2] [,3]
    @@ -327,28 +343,28 @@ 

    Variables and priors

    The second section of the script creates three greta arrays to represent the parameters in our model:

    -
    int <- normal(0, 1)
    -coef <- normal(0, 3)
    -sd <- student(3, 0, 1, truncation = c(0, Inf))
    +
    int <- normal(0, 1)
    +coef <- normal(0, 3)
    +sd <- student(3, 0, 1, truncation = c(0, Inf))

    Each of these is a variable greta array, and each is assumed a priori (before fitting to data) to follow a different probability distribution. In other words, these are prior distributions over variables, which we need to specify to make this a full Bayesian analysis. Before going through how to specify variables with probability distributions, it will be clearer to first demonstrate the alternative; variables without probability distributions.

    variables without probability distributions

    If we were carrying out a frequentist analysis of this model, we could create variable greta arrays (values we want to learn) without probability distributions using the variable() function. E.g. in a frequentist version of the model we could create int with:

    -
    (int <- variable())
    +
    (int <- variable())
    greta array (variable)
     
          [,1]
     [1,]  ?  

    variable() has three arguments. The first two arguments determine the constraints on this parameter; we left them at their default setting of lower = -Inf, upper = Inf meaning the variables can take any value on the real number line. The third argument gives the dimensions of the greta array to return, in this case we left it at its default value of 1x1 (a scalar).

    We can create a variable constrained between two values by specifying lower and upper. So we could have created the positive variable sd (the standard deviation of the likelihood) with:

    -
    (sd <- variable(lower = 0))
    +
    (sd <- variable(lower = 0))
    greta array (variable)
     
          [,1]
     [1,]  ?  

    If we had instead wanted a 2x3 array of positive variables we could have created it like this:

    -
    variable(lower = 0, dim = c(2, 3))
    +
    variable(lower = 0, dim = c(2, 3))
    greta array (variable)
     
          [,1] [,2] [,3]
    @@ -365,7 +381,7 @@ 

    variables with truncated distributions

    Some of greta’s probability distributions (those that are continuous and univariate) can be specified as truncated distributions. By modifying the truncation argument, we can state that the resulting distribution should be truncated between the two truncation bounds. So to create a standard normal distribution truncated between -1 and 1 we can do:

    -
    (z <- normal(0, 1, truncation = c(-1, 1)))
    +
    (z <- normal(0, 1, truncation = c(-1, 1)))
    greta array (variable following a normal distribution)
     
          [,1]
    @@ -378,11 +394,11 @@ 

    Operations

    The third section of the script uses mathematical operators to combine some of our parameters and data, to calculate the predicted sepal lengths, for a given parameter set:

    -
    mean <- int + coef * x
    +
    mean <- int + coef * x

    Because int and coef are both scalars, the resulting greta array mean has the same dimensions as x; a column vector with 150 elements:

    -
    dim(mean)
    +
    dim(mean)
    [1] 150   1
    -
    head(mean)
    +
    head(mean)
    greta array (operation)
     
          [,1]
    @@ -397,7 +413,7 @@ 

    Extract and replace

    We can use R’s extract and replace syntax (using [) on greta arrays, just like with R’s vectors, matrices and arrays. E.g. to extract elements from mean we can do:

    -
    mean[1:3]
    +
    mean[1:3]
    greta array (operation)
     
          [,1]
    @@ -405,9 +421,9 @@ 

    [2,] ? [3,] ?

    We can assign values from one greta array to another too. For example, if we wanted to create a matrix that has random normal variables in the first column, but zeros everywhere else, we could do:

    -
    z <- zeros(4, 3)
    -z[, 1] <- normal(0, 1, dim = 4)
    -z
    +
    z <- zeros(4, 3)
    +z[, 1] <- normal(0, 1, dim = 4)
    +z
    greta array (operation)
     
          [,1] [,2] [,3]
    @@ -416,24 +432,24 @@ 

    [3,] ? 0 0 [4,] ? 0 0

    R’s subset operator [ has an argument drop, which determines whether to reduce the number of dimensions of a array or matrix when the object has zero elements in that dimension. By default, drop = TRUE for R objects, so matrices are automatically converted into vectors (which have dimension NULL) if you take out a single column:

    -
    z <- matrix(1, nrow = 2, ncol = 2)
    -dim(z[, 1])
    +
    z <- matrix(1, nrow = 2, ncol = 2)
    +dim(z[, 1])
    NULL
    -
    dim(z[, 1, drop = FALSE])
    +
    dim(z[, 1, drop = FALSE])
    [1] 2 1

    greta arrays must always have two dimensions, so greta always acts as though drop = FALSE:

    -
    z_greta <- as_data(z)
    -dim(z_greta[, 1])
    +
    z_greta <- as_data(z)
    +dim(z_greta[, 1])
    [1] 2 1

    Functions

    We can write our own functions for greta arrays, using the existing operators and functions. For example, we could define the inverse hyperbolic tangent function for greta arrays like this:

    -
    atanh <- function (z)
    -  (log(1 + z) - log(1 - z)) / 2
    -
    -atanh(z_greta)
    +
    atanh <- function (z)
    +  (log(1 + z) - log(1 - z)) / 2
    +
    +atanh(z_greta)
    greta array (operation)
     
          [,1] [,2]
    @@ -447,7 +463,7 @@ 

    Likelihood

    So far, we have created greta arrays representing the variables in our model (with prior distributions) and created other greta arrays from them and some fixed, independent data. To perform statistical inference on this model, we also need to link it to some observed dependent data. By comparing the sepal lengths predicted under different parameter values with the observed sepal lengths, we can estimate the most plausible values of those parameters. We do that by defining a likelihood for the observed sepal length data y.

    By defining a likelihood over observed data, we are stating that these observed data are actually a random sample from some probability distribution, and we’re trying to work out the parameters of that distribution. In greta we do that with the distribution() assignment function:

    -
    distribution(y) <- normal(mean, sd)
    +
    distribution(y) <- normal(mean, sd)

    With the syntax distribution(<lhs>) <- <rhs>, we are stating that the data greta array on the left <lhs> has the same distribution as the greta array on the right <rhs>. In this case, we’re temporarily creating a random variable with a normal distribution (with parameters determined by the greta arrays mean and sd), but then stating that values of that distribution have been observed (y). In this case both <lhs> (y) and <rhs> are column vectors with the same dimensions, so each element in y has a normal distribution with the corresponding parameters.


    @@ -455,7 +471,7 @@

    Defining the model

    Now all of the greta arrays making up the model have been created, we need to combine them and set up the model so that we can sample from it, using model():

    -
    m <- model(int, coef, sd)
    +
    m <- model(int, coef, sd)

    model() returns a ‘greta model’ object, which combines all of the greta arrays that make up the model. We can pass greta arrays as arguments to model() to flag them as the parameters we’re interested in. When sampling from the model with mcmc() those will be the greta arrays for which samples will be returned. Alternatively, we can run model() without passing any greta arrays, in which case all of the greta arrays (except for data greta arrays) in the working environment will be set as the targets for sampling instead.


    @@ -463,7 +479,7 @@

    Plotting

    greta provides a plot function for greta models to help you visualise and check the model before sampling from it.

    -
    plot(m)
    +
    plot(m)

    The greta arrays in your workspace that are used in the model are all represented as nodes (shapes) with names. These are either data (squares; x and y), variables (large circles; int, coef, sd) or the results of operations (small circles; mean). The operations used to create the operation greta arrays are printed on the arrows from the arrays they were made from. There are also nodes for greta arrays that were implicitly defined in our model. The data nodes (squares) with numbers are the parameters used to define the prior distributions, and there’s also an intermediate operation node (small circle), which was the result of multiplying coef and x (before adding int to create mean).

    @@ -484,10 +500,10 @@

    Sampling

    When defining the model, greta combines all of the distributions together to define the joint density of the model, a measure of how ‘good’ (or how probable if we’re being Bayesian) are a particular candidate set of values for the variables in the model.

    Now we have a greta model that will give us the joint density for a candidate set of values, so we can use that to carry out inference on the model. We do that using an Markov chain Monte Carlo (MCMC) algorithm to sample values of the parameters we’re interested in, using the mcmc() function:

    -
    draws <- mcmc(m, n_samples = 1000)
    +
    draws <- mcmc(m, n_samples = 1000)

    Here we’re using 1000 steps of the static Hamiltonian Monte Carlo (HMC) algorithm on each of 4 separate chains, giving us 4000 samples. HMC uses the gradients of the joint density to efficiently explore the set of parameters. By default, greta also spends 1000 iterations on each chain ‘warming up’ (tuning the sampler parameters) and ‘burning in’ (moving to the area of highest probability) the sampler.

    draws is a greta_mcmc_list object, which inherits from the coda R package’s mcmc.list object. So we can use functions from coda, or one of the many other MCMC software packages that use this format, to plot and summarise the MCMC samples.

    -
    summary(draws)
    +
    summary(draws)
    
     Iterations = 1:1000
     Thinning interval = 1 
    @@ -498,20 +514,20 @@ 

    plus standard error of the mean: Mean SD Naive SE Time-series SE -int 4.2803 0.07807 0.0012343 0.0014083 -coef 0.4146 0.01884 0.0002979 0.0003364 -sd 0.4103 0.02395 0.0003787 0.0004092 +int 4.2783 0.08021 0.0012683 0.0014340 +coef 0.4150 0.01936 0.0003061 0.0003448 +sd 0.4107 0.02440 0.0003857 0.0004308 2. Quantiles for each variable: 2.5% 25% 50% 75% 97.5% -int 4.1245 4.2286 4.2814 4.3325 4.4310 -coef 0.3774 0.4021 0.4143 0.4272 0.4516 -sd 0.3668 0.3933 0.4090 0.4259 0.4616

    +int 4.1232 4.2227 4.2776 4.3339 4.4329 +coef 0.3782 0.4017 0.4153 0.4279 0.4529 +sd 0.3667 0.3938 0.4093 0.4262 0.4617

    The bayesplot package makes some nice plots of the MCMC chain and the parameter estimates

    -
    library (bayesplot)
    -mcmc_trace(draws, facet_args = list(nrow = 3, ncol = 1))
    -mcmc_intervals(draws)
    +
    library (bayesplot)
    +mcmc_trace(draws, facet_args = list(nrow = 3, ncol = 1))
    +mcmc_intervals(draws)

    If your model is taking a long time whilst in the sampling phase and you want to take a look at the samples. You can stop the sampler (e.g. using the stop button in RStudio) and then retrieve the samples drawn so far, by using stashed_samples(). Note that this won’t return anything if you stop the model during the warmup phase (since those aren’t valid posterior samples) or if the sampler completed successfully.

    diff --git a/docs/articles/get_started_files/figure-html/mcmcvis-1.png b/docs/articles/get_started_files/figure-html/mcmcvis-1.png index d41ca428..aaca8854 100644 Binary files a/docs/articles/get_started_files/figure-html/mcmcvis-1.png and b/docs/articles/get_started_files/figure-html/mcmcvis-1.png differ diff --git a/docs/articles/get_started_files/figure-html/mcmcvis-2.png b/docs/articles/get_started_files/figure-html/mcmcvis-2.png index c2e0c1a7..7659b931 100644 Binary files a/docs/articles/get_started_files/figure-html/mcmcvis-2.png and b/docs/articles/get_started_files/figure-html/mcmcvis-2.png differ diff --git a/docs/articles/get_started_files/header-attrs-2.11/header-attrs.js b/docs/articles/get_started_files/header-attrs-2.11/header-attrs.js new file mode 100644 index 00000000..dd57d92e --- /dev/null +++ b/docs/articles/get_started_files/header-attrs-2.11/header-attrs.js @@ -0,0 +1,12 @@ +// Pandoc 2.9 adds attributes on both header and div. We remove the former (to +// be compatible with the behavior of Pandoc < 2.8). +document.addEventListener('DOMContentLoaded', function(e) { + var hs = document.querySelectorAll("div.section[class*='level'] > :first-child"); + var i, h, a; + for (i = 0; i < hs.length; i++) { + h = hs[i]; + if (!/^h[1-6]$/i.test(h.tagName)) continue; // it should be a header h1-h6 + a = h.attributes; + while (a.length > 0) h.removeAttribute(a[0].name); + } +}); diff --git a/docs/articles/index.html b/docs/articles/index.html index c53490ad..4c683683 100644 --- a/docs/articles/index.html +++ b/docs/articles/index.html @@ -130,6 +130,12 @@ contribute to greta + +
  • + Changelog +
  • +
  • + FAQ
  • + +
  • + FAQ
  • + +
  • + FAQ
  • + +
  • + FAQ
  • + +
  • + FAQ
  • + +
  • + Changelog +
  • +
  • + FAQ
  • + +
  • + Changelog +
  • +
  • + FAQ
  • +
    +

    +greta 0.4.0 (2021-11-26) Unreleased +

    +
    +

    +Fixes:

    +
      +
    • Python is now initialised when a greta_array is created (#468).

    • +
    • head and tail S3 methods for greta_array are now consistent with head and tail methods for R versions 3 and 4 (#384).

    • +
    • greta_mcmc_list objects (returned by mcmc()) are now no longer modified by operations (like code::gelman.diag()).

    • +
    • joint distributions of uniform variables now have the correct constraints when sampling (#377).

    • +
    • array-scalar dispatch with 3D arrays is now less buggy (#298).

    • +
    • greta now provides R versions of all of R’s primitive functions (I think), to prevent them from silently not executing (#317).

    • +
    • Uses Sys.unsetenv("RETICULATE_PYTHON") in .onload on package startup, to prevent an issue introduced with the latest version of RStudio where they do not find the current version of RStudio. See #444 for more details.

    • +
    • Internal change to code to ensure future continues to support parallelisation of chains. See #447 for more details.

    • +
    • greta now depends on future version 1.22.1, tensorflow (the R package) 2.7.0, and parallelly 1.29.0. This should see no changes on the user side.

    • +
    +
    +
    +

    +API changes:

    +
      +
    • Now depends on R >= 3.1.0 (#386)

    • +
    • chol2inv.greta_array() now warns user about LINPACK argument being ignored, and also reminds user it has been deprecated since R 3.1

    • +
    • calculate() now accepts multiple greta arrays for which to calculate values, via the ... argument. As a consequence any other arguments must now be named.

    • +
    • a number of optimiser methods are now deprecated, since they will be unavailable when greta moves to using TensorFlow v2.0: powell(), cg(), newton_cg(), l_bfgs_b(), tnc(), cobyla(), and slsqp().

    • +
    • dirichlet() now returns a variable (rather than an operation) greta array, and the graphs created by lkj_correlation() and wishart() are now simpler as cholesky-shaped variables are now available internally.

    • +
    • Python dependency installation has been overhauled with the new install_greta_deps() function (#417).

    • +
    • Adds helper functions for helping installation get to “clean slate” (#443)

    • +
    +
    +
    +

    +Features:

    +
      +
    • calculate() now enables simulation of greta array values from their priors, optionally conditioned on fixed values or posterior samples. This enables prior and posterior predictive checking of models, and simulation of data.

    • +
    • A simulate() method for greta models is now also provided, to simulate the values of all greta arrays in a model from their priors.

    • +
    • variable() now accepts arrays for upper and lower, enabling users to define variables with different constraints.

    • +
    • There are three new variable constructor functions: cholesky_variable(), simplex_variable(), and ordered_variable(), for variables with these constraints but no probability distribution.

    • +
    • a new function chol2symm() - the inverse of chol().

    • +
    • mcmc(), stashed_samples(), and calculate() now return objects of class greta_mcmc_list which inherit from coda’s mcmc.list class, but enable custom greta methods for manipulating mcmc outputs, including a window() function.

    • +
    • mcmc() and calculate() now have a trace_batch_size argument enabling users to trade-off computation speed versus memory requirements when calculating posterior samples for target greta arrays (#236).

    • +
    • Many message, warning, and error prompts have been replaced internally with the {cli} R package for nicer printing. This is a minor change that should result in a more pleasant user experience (#423 #425).

    • +
    • Internally, where sensible, greta now uses the glue package to create messages/ouputs (#378).

    • +
    • New FAQ page and updated installation instructions for installing Python dependencies (#424)

    • +
    +
    +

    greta 0.3.1 2019-08-09 @@ -189,9 +244,9 @@

    greta 0.3.0 2018-10-30

    This is a very large update which adds a number of features and major speed improvements. We now depend on the TensorFlow Probability Python package, and use functionality in that package wherever possible. Sampling a simple model now takes ~10s, rather than ~2m (>10x speedup).

    -
    +

    -Fixes:

    +Fixes:

    operation bugs

    @@ -254,9 +309,9 @@

    -
    +

    -API changes:

    +API changes:

    inference methods

    @@ -309,9 +364,9 @@

    greta 0.2.4 Unreleased

    -
    +

    -Fixes:

    +Fixes:
    • improved error checking/messages in model(), %*%
    • @@ -336,9 +391,9 @@

      greta 0.2.3 2018-01-23

      -
      +

      -Fixes:

      +Fixes:
      • fixed breaking change in extraDistr API (caused test errors on CRAN builds)
      • added dontrun statements to pass CRAN checks on winbuilder
      • @@ -395,6 +450,7 @@

        Contents

        + +
      • + Changelog +
      • +
      • + FAQ
      diff --git a/docs/reference/calculate.html b/docs/reference/calculate.html index a2873503..27ce1c17 100644 --- a/docs/reference/calculate.html +++ b/docs/reference/calculate.html @@ -42,9 +42,10 @@ +temporary, or simulated values for the greta arrays on which they depend. +This can be used to check the behaviour of your model, make predictions to +new data after model fitting, or simulate datasets from either the prior or +posterior of your model." /> @@ -134,6 +135,12 @@ contribute to greta
    + +
  • + Changelog +
  • +
  • + FAQ
  • + +
    + +
    + +
    +
    + + + + + + + + + diff --git a/docs/reference/distribution.html b/docs/reference/distribution.html index a9e0cd79..610015df 100644 --- a/docs/reference/distribution.html +++ b/docs/reference/distribution.html @@ -42,7 +42,7 @@ +observed data, e.g. to set a model likelihood." /> @@ -132,6 +132,12 @@ contribute to greta + +
  • + Changelog +
  • +
  • + FAQ
  • + +
  • + Changelog +
  • +
  • + FAQ
  • + +
    + +
    + +
    + + + + + + + + + + diff --git a/docs/reference/internals.html b/docs/reference/internals.html index 99680636..ad36a2e6 100644 --- a/docs/reference/internals.html +++ b/docs/reference/internals.html @@ -42,8 +42,8 @@ +develop extensions to greta. Most users will not need to access these +methods, and it is not recommended to use them directly in model code." /> @@ -133,6 +133,12 @@ contribute to greta + +
  • + Changelog +
  • +
  • + FAQ
  • + +
  • + Changelog +
  • +
  • + FAQ
  • + +
  • + Changelog +
  • +
  • + FAQ
  • + +
  • + Changelog +
  • +
  • + FAQ
  • + +
  • + Changelog +
  • +
  • + FAQ
  • + +
  • + Changelog +
  • +
  • + FAQ
  • + +
  • + Changelog +
  • +
  • + FAQ
  • + +
  • + Changelog +
  • +
  • + FAQ